From 627f4d85ba4fa71e5af11ee047ba42196cea1f2c Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Wed, 2 Nov 2016 14:54:46 -0700 Subject: [PATCH] go/types: set up correct type with NewAlias Change-Id: I4b035b3539c98e5b1442d1009d457cbc199b42ee Reviewed-on: https://go-review.googlesource.com/32637 Reviewed-by: Matthew Dempsky --- src/go/types/object.go | 11 +++++++++-- src/go/types/resolver.go | 1 + 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/go/types/object.go b/src/go/types/object.go index ede78537be..4ebbd23543 100644 --- a/src/go/types/object.go +++ b/src/go/types/object.go @@ -219,11 +219,18 @@ func (*Func) isDependency() {} // a function may be a dependency of an initi type Alias struct { object orig Object // aliased constant, type, variable, or function; never an alias - kind token.Token // token.CONST, token.TYPE, token.VAR, or token.FUNC (type-checking internal use only) + kind token.Token // token.CONST, token.TYPE, token.VAR, or token.FUNC (only needed during resolve phase) } func NewAlias(pos token.Pos, pkg *Package, name string, orig Object) *Alias { - return &Alias{object{pos: pos, pkg: pkg, name: name}, orig, token.ILLEGAL} + var typ Type = Typ[Invalid] + if orig != nil { + typ = orig.Type() + } + // No need to set a valid Alias.kind - that field is only used during identifier + // resolution (1st type-checker pass). We could store the field outside but it's + // easier to keep it here. + return &Alias{object{nil, pos, pkg, name, typ, 0, token.NoPos}, orig, token.ILLEGAL} } // Orig returns the aliased object, or nil if there was an error. diff --git a/src/go/types/resolver.go b/src/go/types/resolver.go index 12ef4ad779..b630a159e0 100644 --- a/src/go/types/resolver.go +++ b/src/go/types/resolver.go @@ -276,6 +276,7 @@ func (check *Checker) collectObjects() { case *ast.AliasSpec: obj := NewAlias(s.Name.Pos(), pkg, s.Name.Name, nil) + obj.typ = nil // unresolved obj.kind = d.Tok check.declarePkgObj(s.Name, obj, &declInfo{file: fileScope, init: s.Orig}) -- 2.48.1