mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
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:
parent
81038d2e2b
commit
03d81b5ed9
11 changed files with 291 additions and 61 deletions
|
|
@ -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() {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue