mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
[dev.typeparams] cmd/compile/internal/types2: remove Interface.Complete (cleanup)
Interface.Complete is not needed anymore. We can remove it in types2 (and eventually make it an empty function in go/types, where we must maintain the existing API). Change-Id: I689f0d6f3a83997d8ca5bae773b9af0083d0bf4f Reviewed-on: https://go-review.googlesource.com/c/go/+/340255 Trust: Robert Griesemer <gri@golang.org> Run-TryBot: Robert Griesemer <gri@golang.org> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Robert Findley <rfindley@google.com>
This commit is contained in:
parent
9bd1817e41
commit
9e0ac72d68
4 changed files with 3 additions and 27 deletions
|
|
@ -183,10 +183,6 @@ func ImportData(imports map[string]*types2.Package, data, path string) (pkg *typ
|
||||||
p.doDecl(localpkg, name)
|
p.doDecl(localpkg, name)
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, typ := range p.interfaceList {
|
|
||||||
typ.Complete()
|
|
||||||
}
|
|
||||||
|
|
||||||
// record all referenced packages as imports
|
// record all referenced packages as imports
|
||||||
list := append(([]*types2.Package)(nil), pkgList[1:]...)
|
list := append(([]*types2.Package)(nil), pkgList[1:]...)
|
||||||
sort.Sort(byPath(list))
|
sort.Sort(byPath(list))
|
||||||
|
|
|
||||||
|
|
@ -303,9 +303,7 @@ func (r *reader2) interfaceType() *types2.Interface {
|
||||||
embeddeds[i] = r.typ()
|
embeddeds[i] = r.typ()
|
||||||
}
|
}
|
||||||
|
|
||||||
typ := types2.NewInterfaceType(methods, embeddeds)
|
return types2.NewInterfaceType(methods, embeddeds)
|
||||||
typ.Complete()
|
|
||||||
return typ
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *reader2) signature(recv *types2.Var) *types2.Signature {
|
func (r *reader2) signature(recv *types2.Var) *types2.Signature {
|
||||||
|
|
|
||||||
|
|
@ -100,25 +100,6 @@ func (t *Interface) IsComparable() bool { return t.typeSet().IsComparable() }
|
||||||
// IsConstraint reports whether interface t is not just a method set.
|
// IsConstraint reports whether interface t is not just a method set.
|
||||||
func (t *Interface) IsConstraint() bool { return !t.typeSet().IsMethodSet() }
|
func (t *Interface) IsConstraint() bool { return !t.typeSet().IsMethodSet() }
|
||||||
|
|
||||||
// Complete computes the interface's type set. It must be called by users of
|
|
||||||
// NewInterfaceType and NewInterface after the interface's embedded types are
|
|
||||||
// fully defined and before using the interface type in any way other than to
|
|
||||||
// form other types. The interface must not contain duplicate methods or a
|
|
||||||
// panic occurs. Complete returns the receiver.
|
|
||||||
//
|
|
||||||
// Deprecated: Type sets are now computed lazily, on demand; this function
|
|
||||||
// is only here for backward-compatibility. It does not have to
|
|
||||||
// be called explicitly anymore.
|
|
||||||
func (t *Interface) Complete() *Interface {
|
|
||||||
// Some tests are still depending on the state change
|
|
||||||
// (string representation of an Interface not containing an
|
|
||||||
// /* incomplete */ marker) caused by the explicit Complete
|
|
||||||
// call, so we compute the type set eagerly here.
|
|
||||||
t.complete = true
|
|
||||||
t.typeSet()
|
|
||||||
return t
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t *Interface) Underlying() Type { return t }
|
func (t *Interface) Underlying() Type { return t }
|
||||||
func (t *Interface) String() string { return TypeString(t, nil) }
|
func (t *Interface) String() string { return TypeString(t, nil) }
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -402,8 +402,9 @@ func TestIssue28282(t *testing.T) {
|
||||||
// create type interface { error }
|
// create type interface { error }
|
||||||
et := Universe.Lookup("error").Type()
|
et := Universe.Lookup("error").Type()
|
||||||
it := NewInterfaceType(nil, []Type{et})
|
it := NewInterfaceType(nil, []Type{et})
|
||||||
it.Complete()
|
|
||||||
// verify that after completing the interface, the embedded method remains unchanged
|
// verify that after completing the interface, the embedded method remains unchanged
|
||||||
|
// (interfaces are "completed" lazily now, so the completion happens implicitly when
|
||||||
|
// accessing Method(0))
|
||||||
want := et.Underlying().(*Interface).Method(0)
|
want := et.Underlying().(*Interface).Method(0)
|
||||||
got := it.Method(0)
|
got := it.Method(0)
|
||||||
if got != want {
|
if got != want {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue