mirror of
https://github.com/golang/go
synced 2024-11-24 21:40:09 -07:00
cmd/compile: eliminate global fileparser
Change-Id: I9b8b13731ccc2ba33d21642b12cc614dde0804b1 Reviewed-on: https://go-review.googlesource.com/19752 Reviewed-by: Robert Griesemer <gri@golang.org> Run-TryBot: Matthew Dempsky <mdempsky@google.com>
This commit is contained in:
parent
338a891e79
commit
3e40f13cf3
@ -661,16 +661,16 @@ func loadsys() {
|
|||||||
incannedimport = 1
|
incannedimport = 1
|
||||||
|
|
||||||
importpkg = Runtimepkg
|
importpkg = Runtimepkg
|
||||||
parse_import(obj.Binitr(strings.NewReader(runtimeimport)))
|
parse_import(obj.Binitr(strings.NewReader(runtimeimport)), nil)
|
||||||
|
|
||||||
importpkg = unsafepkg
|
importpkg = unsafepkg
|
||||||
parse_import(obj.Binitr(strings.NewReader(unsafeimport)))
|
parse_import(obj.Binitr(strings.NewReader(unsafeimport)), nil)
|
||||||
|
|
||||||
importpkg = nil
|
importpkg = nil
|
||||||
incannedimport = 0
|
incannedimport = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func importfile(f *Val) {
|
func importfile(f *Val, indent []byte) {
|
||||||
if importpkg != nil {
|
if importpkg != nil {
|
||||||
Fatalf("importpkg not nil")
|
Fatalf("importpkg not nil")
|
||||||
}
|
}
|
||||||
@ -815,7 +815,7 @@ func importfile(f *Val) {
|
|||||||
switch c {
|
switch c {
|
||||||
case '\n':
|
case '\n':
|
||||||
// old export format
|
// old export format
|
||||||
parse_import(imp)
|
parse_import(imp, indent)
|
||||||
|
|
||||||
case 'B':
|
case 'B':
|
||||||
// new export format
|
// new export format
|
||||||
|
@ -21,22 +21,11 @@ import (
|
|||||||
|
|
||||||
const trace = false // if set, parse tracing can be enabled with -x
|
const trace = false // if set, parse tracing can be enabled with -x
|
||||||
|
|
||||||
// TODO(gri) Once we stop supporting the legacy export data format
|
func parse_import(bin *obj.Biobuf, indent []byte) {
|
||||||
// we can get rid of this (issue 13242).
|
|
||||||
var fileparser parser // the Go source file parser in use
|
|
||||||
|
|
||||||
func parse_import(bin *obj.Biobuf) {
|
|
||||||
pushedio := curio
|
pushedio := curio
|
||||||
curio = Io{bin: bin}
|
curio = Io{bin: bin}
|
||||||
|
|
||||||
// Indentation (for tracing) must be preserved across parsers
|
importparser := parser{indent: indent} // preserve indentation
|
||||||
// since we are changing the lexer source (and parser state)
|
|
||||||
// under foot, in the middle of productions. This won't be
|
|
||||||
// needed anymore once we fix issue 13242, but neither will
|
|
||||||
// be the push/pop_parser functionality.
|
|
||||||
// (Instead we could just use a global variable indent, but
|
|
||||||
// but eventually indent should be parser-specific anyway.)
|
|
||||||
importparser := parser{indent: fileparser.indent} // preserve indentation
|
|
||||||
importparser.next()
|
importparser.next()
|
||||||
importparser.import_package()
|
importparser.import_package()
|
||||||
|
|
||||||
@ -47,7 +36,7 @@ func parse_import(bin *obj.Biobuf) {
|
|||||||
func parse_file(bin *obj.Biobuf) {
|
func parse_file(bin *obj.Biobuf) {
|
||||||
curio = Io{bin: bin}
|
curio = Io{bin: bin}
|
||||||
|
|
||||||
fileparser = parser{}
|
fileparser := parser{}
|
||||||
fileparser.next()
|
fileparser.next()
|
||||||
fileparser.file()
|
fileparser.file()
|
||||||
}
|
}
|
||||||
@ -360,7 +349,7 @@ func (p *parser) importdcl() {
|
|||||||
path := p.val
|
path := p.val
|
||||||
p.next()
|
p.next()
|
||||||
|
|
||||||
importfile(&path)
|
importfile(&path, p.indent)
|
||||||
if importpkg == nil {
|
if importpkg == nil {
|
||||||
if nerrors == 0 {
|
if nerrors == 0 {
|
||||||
Fatalf("phase error in import")
|
Fatalf("phase error in import")
|
||||||
|
Loading…
Reference in New Issue
Block a user