cmd/compile: move compiler-specific flags into compiler-spec. export data section

Also: Adjust go/importer accordingly.

Change-Id: Ia6669563793e218946af45b9fba1cf986a21c031
Reviewed-on: https://go-review.googlesource.com/21896
Reviewed-by: Alan Donovan <adonovan@google.com>
This commit is contained in:
Robert Griesemer 2016-04-12 11:31:16 -07:00
parent be7c786dd0
commit b1851a3c11
3 changed files with 14 additions and 21 deletions

View file

@ -182,22 +182,12 @@ func export(out *bufio.Writer, trace bool) int {
Fatalf("exporter: local package path not empty: %q", localpkg.Path)
}
p.pkg(localpkg)
// write compiler-specific flags
// TODO(gri) move this into the compiler-specific export data section
{
var flags string
if safemode != 0 {
flags = "safe"
}
p.string(flags)
}
if p.trace {
p.tracef("\n")
}
// export objects
//
// First, export all exported (package-level) objects; i.e., all objects
// in the current exportlist. These objects represent all information
// required to import this package and type-check against it; i.e., this
@ -270,6 +260,12 @@ func export(out *bufio.Writer, trace bool) int {
}
}
// write compiler-specific flags
p.bool(safemode != 0)
if p.trace {
p.tracef("\n")
}
// Phase 2: Export objects added to exportlist during phase 1.
// Don't use range since exportlist may grow during this phase
// and we want to export all remaining objects.

View file

@ -62,9 +62,6 @@ func Import(in *bufio.Reader) {
Fatalf("importer: imported package not found in pkgList[0]")
}
// read compiler-specific flags
importpkg.Safe = p.string() == "safe"
// defer some type-checking until all types are read in completely
// (parser.go:import_package)
tcok := typecheckok
@ -73,7 +70,7 @@ func Import(in *bufio.Reader) {
// read objects
// Phase 1
// phase 1
objcount := 0
for {
tag := p.tagOrIndex()
@ -91,7 +88,10 @@ func Import(in *bufio.Reader) {
// --- compiler-specific export data ---
// Phase 2
// read compiler-specific flags
importpkg.Safe = p.bool()
// phase 2
objcount = 0
for {
tag := p.tagOrIndex()
@ -264,7 +264,7 @@ func (p *importer) obj(tag int) {
}
default:
Fatalf("importer: unexpected object tag")
Fatalf("importer: unexpected object (tag = %d)", tag)
}
}

View file

@ -78,9 +78,6 @@ func BImportData(imports map[string]*types.Package, data []byte, path string) (i
panic("imported packaged not found in pkgList[0]")
}
// read compiler-specific flags
p.string() // discard
// read objects of phase 1 only (see cmd/compiler/internal/gc/bexport.go)
objcount := 0
for {
@ -193,7 +190,7 @@ func (p *importer) obj(tag int) {
p.declare(types.NewFunc(token.NoPos, pkg, name, sig))
default:
panic("unexpected object tag")
panic(fmt.Sprintf("unexpected object tag %d", tag))
}
}