diff options
author | Robert Griesemer <gri@golang.org> | 2023-06-22 16:07:29 -0700 |
---|---|---|
committer | Gopher Robot <gobot@golang.org> | 2023-06-26 15:43:55 +0000 |
commit | ee361ce66ca5c8923e636348aba559a5e5c76c15 (patch) | |
tree | 2683862af6fbd20ed4a6472f61c1f78223567a69 | |
parent | 9f6e87ff749ea66b8ed28724f63bf04d1d4971f7 (diff) | |
download | go-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.go | 20 | ||||
-rw-r--r-- | src/go/types/unify.go | 20 |
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 } |