aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/types2/universe.go
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2021-07-07 21:38:49 -0700
committerRobert Griesemer <gri@golang.org>2021-07-09 17:36:57 +0000
commit69d945fc6e80475c163f96ba86fe716e77bb0104 (patch)
treef299a8ca8176a672a539979c846d2951e0c1d1ad /src/cmd/compile/internal/types2/universe.go
parent04acb8a7b9fc0212687cc25aa2598d12f6aceb74 (diff)
downloadgo-69d945fc6e80475c163f96ba86fe716e77bb0104.tar.gz
go-69d945fc6e80475c163f96ba86fe716e77bb0104.zip
[dev.typeparams] cmd/compile/internal/types2: use scope numbers to identify local types
Rather than using a local types' position information, use the type name's scope numbers to uniquely identify the type from others with the same name. We use scope numbers rather than indices (with number-1 == index) to preserve the invariant that the zero value for a scope is a ready to use empty scope. Using scope numbers turned out to be fairly simple after all and provides a reasonably stable identification which will make debugging simpler. A scope number series may be a bit longer than a unique ID for each type name but local types should be reasonably rare. Also did a minor cleanup in universe.go to ensure Named.orig is set up correctly (there's still an open TODO but with a work-around). Change-Id: I73935fa9bd960809fd5c95fe8b8a535c313cfc8f Reviewed-on: https://go-review.googlesource.com/c/go/+/333192 Trust: Robert Griesemer <gri@golang.org> Run-TryBot: Robert Griesemer <gri@golang.org> Reviewed-by: Robert Findley <rfindley@google.com> TryBot-Result: Go Bot <gobot@golang.org>
Diffstat (limited to 'src/cmd/compile/internal/types2/universe.go')
-rw-r--r--src/cmd/compile/internal/types2/universe.go12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/cmd/compile/internal/types2/universe.go b/src/cmd/compile/internal/types2/universe.go
index c9b53bac92..d328b13a8e 100644
--- a/src/cmd/compile/internal/types2/universe.go
+++ b/src/cmd/compile/internal/types2/universe.go
@@ -86,21 +86,25 @@ func defPredeclaredTypes() {
// type error interface{ Error() string }
{
+ obj := NewTypeName(nopos, nil, "error", nil)
+ obj.setColor(black)
res := NewVar(nopos, nil, "", Typ[String])
sig := NewSignature(nil, nil, NewTuple(res), false)
err := NewFunc(nopos, nil, "Error", sig)
- typ := &Named{underlying: NewInterfaceType([]*Func{err}, nil)}
+ typ := NewNamed(obj, NewInterfaceType([]*Func{err}, nil), nil)
sig.recv = NewVar(nopos, nil, "", typ)
- def(NewTypeName(nopos, nil, "error", typ))
+ def(obj)
}
// type comparable interface{ ==() }
{
+ obj := NewTypeName(nopos, nil, "comparable", nil)
+ obj.setColor(black)
sig := NewSignature(nil, nil, nil, false)
eql := NewFunc(nopos, nil, "==", sig)
- typ := &Named{underlying: NewInterfaceType([]*Func{eql}, nil)}
+ typ := NewNamed(obj, NewInterfaceType([]*Func{eql}, nil), nil)
sig.recv = NewVar(nopos, nil, "", typ)
- def(NewTypeName(nopos, nil, "comparable", typ))
+ def(obj)
}
}