aboutsummaryrefslogtreecommitdiff
path: root/src/go
diff options
context:
space:
mode:
authorRobert Findley <rfindley@google.com>2021-08-16 16:03:59 -0400
committerRobert Findley <rfindley@google.com>2021-08-20 18:45:13 +0000
commit30a423eb3934251286bb57954c9d9d4b2385815e (patch)
tree23467eb497982165c65dccdd756da3b799126bde /src/go
parente49775e0579891479888a514c82cf6eea123763f (diff)
downloadgo-30a423eb3934251286bb57954c9d9d4b2385815e.tar.gz
go-30a423eb3934251286bb57954c9d9d4b2385815e.zip
go/types: no need to validate substituted instances
This is a straightforward port of CL 342150 to go/types. Change-Id: I7363e4642ade7ab30ca822a2be71f4d2804cc4a9 Reviewed-on: https://go-review.googlesource.com/c/go/+/342669 Trust: Robert Findley <rfindley@google.com> Run-TryBot: Robert Findley <rfindley@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Robert Griesemer <gri@golang.org>
Diffstat (limited to 'src/go')
-rw-r--r--src/go/types/subst.go11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/go/types/subst.go b/src/go/types/subst.go
index da0578ff5c..e47d20774f 100644
--- a/src/go/types/subst.go
+++ b/src/go/types/subst.go
@@ -228,10 +228,15 @@ func (subst *subster) typ(typ Type) Type {
return named
}
- // create a new named type and populate typMap to avoid endless recursion
+ // Create a new named type and populate typMap to avoid endless recursion.
+ // The position used here is irrelevant because validation only occurs on t
+ // (we don't call validType on named), but we use subst.pos to help with
+ // debugging.
tname := NewTypeName(subst.pos, t.obj.pkg, t.obj.name, nil)
t.load()
- named := subst.check.newNamed(tname, t.orig, t.underlying, t.TParams(), t.methods) // method signatures are updated lazily
+ // It's ok to provide a nil *Checker because the newly created type
+ // doesn't need to be (lazily) expanded; it's expanded below.
+ named := (*Checker)(nil).newNamed(tname, t.orig, nil, t.tparams, t.methods) // t is loaded, so tparams and methods are available
named.targs = newTArgs
subst.typMap[h] = named
t.expand(subst.typMap) // must happen after typMap update to avoid infinite recursion
@@ -241,7 +246,7 @@ func (subst *subster) typ(typ Type) Type {
named.underlying = subst.typOrNil(t.underlying)
dump(">>> underlying: %v", named.underlying)
assert(named.underlying != nil)
- named.fromRHS = named.underlying // for cycle detection (Checker.validType)
+ named.fromRHS = named.underlying // for consistency, though no cycle detection is necessary
return named