]> Cypherpunks repositories - gostls13.git/commitdiff
go/types: fix internal documentation and strengthen assumptions
authorRobert Griesemer <gri@golang.org>
Wed, 2 May 2018 17:12:38 +0000 (10:12 -0700)
committerRobert Griesemer <gri@golang.org>
Wed, 2 May 2018 17:36:17 +0000 (17:36 +0000)
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 <gri@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Alan Donovan <adonovan@google.com>
src/go/types/resolver.go

index de8ae0bd1ac8540d3752f7f6f6b66ab0b3daf35a..5cbaba187b964b4b56d6424de63adeaf068ad666 100644 (file)
@@ -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
                }