cmd/compile: import/export of alias declarations

This CL completes support for alias declarations in the compiler.

Also:
- increased export format version
- updated various comments

For #16339.
Fixes #17487.

Change-Id: Ic6945fc44c0041771eaf9dcfe973f601d14de069
Reviewed-on: https://go-review.googlesource.com/32090
Run-TryBot: Robert Griesemer <gri@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
This commit is contained in:
Robert Griesemer 2016-10-25 14:09:18 -07:00
parent 81038d2e2b
commit 03d81b5ed9
11 changed files with 291 additions and 61 deletions

View file

@ -86,10 +86,10 @@ func Import(in *bufio.Reader) {
// read version specific flags - extend as necessary
switch p.version {
// case 3:
// case 4:
// ...
// fallthrough
case 2, 1:
case 3, 2, 1:
p.debugFormat = p.rawStringln(p.rawByte()) == "debug"
p.trackAllTypes = p.bool()
p.posInfoFormat = p.bool()
@ -307,26 +307,35 @@ func idealType(typ *Type) *Type {
}
func (p *importer) obj(tag int) {
var alias *Sym
if tag == aliasTag {
p.pos()
alias = importpkg.Lookup(p.string())
alias.Flags |= SymAlias
tag = p.tagOrIndex()
}
var sym *Sym
switch tag {
case constTag:
p.pos()
sym := p.qualifiedName()
sym = p.qualifiedName()
typ := p.typ()
val := p.value(typ)
importconst(sym, idealType(typ), nodlit(val))
case typeTag:
p.typ()
sym = p.typ().Sym
case varTag:
p.pos()
sym := p.qualifiedName()
sym = p.qualifiedName()
typ := p.typ()
importvar(sym, typ)
case funcTag:
p.pos()
sym := p.qualifiedName()
sym = p.qualifiedName()
params := p.paramList()
result := p.paramList()
@ -357,6 +366,11 @@ func (p *importer) obj(tag int) {
default:
formatErrorf("unexpected object (tag = %d)", tag)
}
if alias != nil {
alias.Def = sym.Def
importsym(alias, sym.Def.Op)
}
}
func (p *importer) pos() {