diff --git a/compiler/internal/typeparams/collect_test.go b/compiler/internal/typeparams/collect_test.go index 26791ea59..3960bb04b 100644 --- a/compiler/internal/typeparams/collect_test.go +++ b/compiler/internal/typeparams/collect_test.go @@ -98,7 +98,11 @@ func TestVisitor(t *testing.T) { info, pkg := f.Check("pkg/test", file) lookupObj := func(name string) types.Object { - return srctesting.LookupObj(pkg, name) + obj := srctesting.LookupObj(pkg, name) + if obj == nil { + t.Fatalf("Object %q not found", name) + } + return obj } lookupType := func(name string) types.Type { return lookupObj(name).Type() } lookupDecl := func(name string) ast.Node { diff --git a/compiler/internal/typeparams/instance.go b/compiler/internal/typeparams/instance.go index 10e0df69f..9ccb82abe 100644 --- a/compiler/internal/typeparams/instance.go +++ b/compiler/internal/typeparams/instance.go @@ -3,6 +3,7 @@ package typeparams import ( "fmt" "go/types" + "sort" "strings" "github.com/gopherjs/gopherjs/compiler/internal/symbol" @@ -270,3 +271,23 @@ func (i PackageInstanceSets) Add(instances ...Instance) { func (i PackageInstanceSets) ID(inst Instance) int { return i.Pkg(inst.Object.Pkg()).ID(inst) } + +func (i PackageInstanceSets) String() string { + pkgName := make([]string, 0, len(i)) + for pkg := range i { + pkgName = append(pkgName, pkg) + } + sort.Strings(pkgName) + buf := strings.Builder{} + for _, pkg := range pkgName { + buf.WriteString(pkg) + buf.WriteString(":\n") + iset := i[pkg] + for _, inst := range iset.values { + buf.WriteString("\t") + buf.WriteString(inst.String()) + buf.WriteString("\n") + } + } + return buf.String() +} diff --git a/compiler/internal/typeparams/map.go b/compiler/internal/typeparams/map.go index 7edbdc016..13cf24a30 100644 --- a/compiler/internal/typeparams/map.go +++ b/compiler/internal/typeparams/map.go @@ -174,7 +174,7 @@ func (im *InstanceMap[V]) Keys() []Instance { func (im *InstanceMap[V]) String() string { entries := make([]string, 0, im.Len()) im.Iterate(func(key Instance, value V) { - entries = append(entries, fmt.Sprintf("%v:%v", key, value)) + entries = append(entries, fmt.Sprintf("%v:%v", key.String(), value)) }) sort.Strings(entries) return `{` + strings.Join(entries, `, `) + `}`