]> Cypherpunks repositories - gostls13.git/commitdiff
go/types: use the orig object for Named.Obj
authorRobert Findley <rfindley@google.com>
Mon, 16 Aug 2021 18:00:14 +0000 (14:00 -0400)
committerRobert Findley <rfindley@google.com>
Mon, 16 Aug 2021 18:52:20 +0000 (18:52 +0000)
This is a port of CL 341858 to go/types.

Change-Id: I9fba8941069aaacd641a19e3068de3a769e14e50
Reviewed-on: https://go-review.googlesource.com/c/go/+/342482
Trust: Robert Findley <rfindley@google.com>
Run-TryBot: Robert Findley <rfindley@google.com>
Reviewed-by: Robert Griesemer <gri@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>

src/go/types/named.go

index 1841038fdbcecb85a11c961bd7de1ba8d965df16..90abd117e28914e7ea109cf91151c163520def9b 100644 (file)
@@ -15,7 +15,7 @@ import (
 type Named struct {
        check      *Checker
        info       typeInfo    // for cycle detection
-       obj        *TypeName   // corresponding declared object
+       obj        *TypeName   // corresponding declared object for declared types; placeholder for instantiated types
        orig       *Named      // original, uninstantiated type
        fromRHS    Type        // type (on RHS of declaration) this *Named type is derived of (for cycle reporting)
        underlying Type        // possibly a *Named during setup; never a *Named once set up completely
@@ -108,8 +108,11 @@ func (check *Checker) newNamed(obj *TypeName, orig *Named, underlying Type, tpar
        return typ
 }
 
-// Obj returns the type name for the named type t.
-func (t *Named) Obj() *TypeName { return t.obj }
+// Obj returns the type name for the declaration defining the named type t. For
+// instantiated types, this is the type name of the base type.
+func (t *Named) Obj() *TypeName {
+       return t.orig.obj // for non-instances this is the same as t.obj
+}
 
 // _Orig returns the original generic type an instantiated type is derived from.
 // If t is not an instantiated type, the result is t.