1
0
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:
Matthew Dempsky 2016-02-19 18:51:24 -08:00
parent 338a891e79
commit 3e40f13cf3
2 changed files with 8 additions and 19 deletions

View File

@ -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

View File

@ -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")