From 0dcdbc772e62bf76b4468c288372b255dd18f4d8 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Wed, 2 May 2018 10:12:38 -0700 Subject: [PATCH] go/types: fix internal documentation and strengthen assumptions Imported (incl. dot-imported) objects are always in file scope, never in package scope. Fix misleading comment. Package-scope declared objects must have objMap entry by construction (of that map). Remove unnecessary check and corresponding misleading comment. Found while investigating solutions for @23203. Change-Id: Idadfdd1576681ae56e11daa27bdcee2c73733c41 Reviewed-on: https://go-review.googlesource.com/110916 Run-TryBot: Robert Griesemer TryBot-Result: Gobot Gobot Reviewed-by: Alan Donovan --- src/go/types/resolver.go | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/go/types/resolver.go b/src/go/types/resolver.go index de8ae0bd1a..5cbaba187b 100644 --- a/src/go/types/resolver.go +++ b/src/go/types/resolver.go @@ -479,8 +479,8 @@ func (check *Checker) collectObjects() { func (check *Checker) resolveBaseTypeName(name *ast.Ident) *TypeName { var path []*TypeName for { - // name must denote an object found in the current package - // (it could be explicitly declared or dot-imported) + // name must denote an object found in the current package scope + // (note that dot-imported objects are not in the package scope!) obj := check.pkg.scope.Lookup(name.Name) if obj == nil { return nil @@ -496,15 +496,9 @@ func (check *Checker) resolveBaseTypeName(name *ast.Ident) *TypeName { return nil } - // tname must have been explicitly declared - // (dot-imported objects are not in objMap) - tdecl := check.objMap[tname] - if tdecl == nil { - return nil - } - // we're done if tdecl defined tname as a new type // (rather than an alias) + tdecl := check.objMap[tname] // must exist for objects in package scope if !tdecl.alias { return tname }