aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2023-06-22 16:07:29 -0700
committerGopher Robot <gobot@golang.org>2023-06-26 15:43:55 +0000
commitee361ce66ca5c8923e636348aba559a5e5c76c15 (patch)
tree2683862af6fbd20ed4a6472f61c1f78223567a69
parent9f6e87ff749ea66b8ed28724f63bf04d1d4971f7 (diff)
downloadgo-ee361ce66ca5c8923e636348aba559a5e5c76c15.tar.gz
go-ee361ce66ca5c8923e636348aba559a5e5c76c15.zip
go/types, types2: more readable inference trace
Print the unification mode in human-readable form. Use a tab and // instead of ()'s to show unification mode and whether operands where swapped. These changes only affect inference trace output, which is disabled by default. For easier debugging. For #60933. Change-Id: I95299c6e09b90670fc45addc4f9196b6cdd3b59f Reviewed-on: https://go-review.googlesource.com/c/go/+/505395 TryBot-Result: Gopher Robot <gobot@golang.org> Run-TryBot: Robert Griesemer <gri@google.com> Auto-Submit: Robert Griesemer <gri@google.com> Reviewed-by: Robert Findley <rfindley@google.com> Reviewed-by: Robert Griesemer <gri@google.com>
-rw-r--r--src/cmd/compile/internal/types2/unify.go20
-rw-r--r--src/go/types/unify.go20
2 files changed, 34 insertions, 6 deletions
diff --git a/src/cmd/compile/internal/types2/unify.go b/src/cmd/compile/internal/types2/unify.go
index 48adc185c3..3e2b299e49 100644
--- a/src/cmd/compile/internal/types2/unify.go
+++ b/src/cmd/compile/internal/types2/unify.go
@@ -124,6 +124,20 @@ const (
exact
)
+func (m unifyMode) String() string {
+ switch m {
+ case 0:
+ return "inexact"
+ case assign:
+ return "assign"
+ case exact:
+ return "exact"
+ case assign | exact:
+ return "assign, exact"
+ }
+ return fmt.Sprintf("mode %d", m)
+}
+
// unify attempts to unify x and y and reports whether it succeeded.
// As a side-effect, types may be inferred for type parameters.
// The mode parameter controls how types are compared.
@@ -263,7 +277,7 @@ func (u *unifier) inferred(tparams []*TypeParam) []Type {
func (u *unifier) nify(x, y Type, mode unifyMode, p *ifacePair) (result bool) {
u.depth++
if traceInference {
- u.tracef("%s ≡ %s (mode %d)", x, y, mode)
+ u.tracef("%s ≡ %s\t// %s", x, y, mode)
}
defer func() {
if traceInference && !result {
@@ -294,7 +308,7 @@ func (u *unifier) nify(x, y Type, mode unifyMode, p *ifacePair) (result bool) {
// - type parameter recorded with u, make sure one is in x
if _, ok := x.(*Named); ok || u.asTypeParam(y) != nil {
if traceInference {
- u.tracef("%s ≡ %s (swap)", y, x)
+ u.tracef("%s ≡ %s\t// swap", y, x)
}
x, y = y, x
}
@@ -492,7 +506,7 @@ func (u *unifier) nify(x, y Type, mode unifyMode, p *ifacePair) (result bool) {
// TODO(gri) Factor out type parameter handling from the switch.
if isTypeParam(y) {
if traceInference {
- u.tracef("%s ≡ %s (swap)", y, x)
+ u.tracef("%s ≡ %s\t// swap", y, x)
}
x, y = y, x
}
diff --git a/src/go/types/unify.go b/src/go/types/unify.go
index 3ecc80f161..9c40394c59 100644
--- a/src/go/types/unify.go
+++ b/src/go/types/unify.go
@@ -126,6 +126,20 @@ const (
exact
)
+func (m unifyMode) String() string {
+ switch m {
+ case 0:
+ return "inexact"
+ case assign:
+ return "assign"
+ case exact:
+ return "exact"
+ case assign | exact:
+ return "assign, exact"
+ }
+ return fmt.Sprintf("mode %d", m)
+}
+
// unify attempts to unify x and y and reports whether it succeeded.
// As a side-effect, types may be inferred for type parameters.
// The mode parameter controls how types are compared.
@@ -265,7 +279,7 @@ func (u *unifier) inferred(tparams []*TypeParam) []Type {
func (u *unifier) nify(x, y Type, mode unifyMode, p *ifacePair) (result bool) {
u.depth++
if traceInference {
- u.tracef("%s ≡ %s (mode %d)", x, y, mode)
+ u.tracef("%s ≡ %s\t// %s", x, y, mode)
}
defer func() {
if traceInference && !result {
@@ -296,7 +310,7 @@ func (u *unifier) nify(x, y Type, mode unifyMode, p *ifacePair) (result bool) {
// - type parameter recorded with u, make sure one is in x
if _, ok := x.(*Named); ok || u.asTypeParam(y) != nil {
if traceInference {
- u.tracef("%s ≡ %s (swap)", y, x)
+ u.tracef("%s ≡ %s\t// swap", y, x)
}
x, y = y, x
}
@@ -494,7 +508,7 @@ func (u *unifier) nify(x, y Type, mode unifyMode, p *ifacePair) (result bool) {
// TODO(gri) Factor out type parameter handling from the switch.
if isTypeParam(y) {
if traceInference {
- u.tracef("%s ≡ %s (swap)", y, x)
+ u.tracef("%s ≡ %s\t// swap", y, x)
}
x, y = y, x
}