From d35035f84e5dbe4c740d3f338ba89b41a00e270e Mon Sep 17 00:00:00 2001 From: Robert Findley Date: Mon, 16 Aug 2021 14:00:14 -0400 Subject: [PATCH] go/types: use the orig object for Named.Obj 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 Run-TryBot: Robert Findley Reviewed-by: Robert Griesemer TryBot-Result: Go Bot --- src/go/types/named.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/go/types/named.go b/src/go/types/named.go index 1841038fdb..90abd117e2 100644 --- a/src/go/types/named.go +++ b/src/go/types/named.go @@ -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. -- 2.50.0