aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/types2/typestring.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/compile/internal/types2/typestring.go')
-rw-r--r--src/cmd/compile/internal/types2/typestring.go25
1 files changed, 17 insertions, 8 deletions
diff --git a/src/cmd/compile/internal/types2/typestring.go b/src/cmd/compile/internal/types2/typestring.go
index b7e32c9860..558da50528 100644
--- a/src/cmd/compile/internal/types2/typestring.go
+++ b/src/cmd/compile/internal/types2/typestring.go
@@ -158,9 +158,10 @@ func writeType(buf *bytes.Buffer, typ Type, qf Qualifier, visited []Type) {
writeSignature(buf, t, qf, visited)
case *Union:
- if t.IsEmpty() {
- buf.WriteString("⊥")
- break
+ // Unions only appear as (syntactic) embedded elements
+ // in interfaces and syntactically cannot be empty.
+ if t.NumTerms() == 0 {
+ panic("internal error: empty union")
}
for i, t := range t.terms {
if i > 0 {
@@ -198,13 +199,21 @@ func writeType(buf *bytes.Buffer, typ Type, qf Qualifier, visited []Type) {
writeSignature(buf, m.typ.(*Signature), qf, visited)
empty = false
}
- if !empty && tset.types != nil {
+ if !empty && tset.hasTerms() {
buf.WriteString("; ")
}
- if tset.types != nil {
- buf.WriteString("type ")
- writeType(buf, tset.types, qf, visited)
- }
+ first := true
+ tset.is(func(t *term) bool {
+ if !first {
+ buf.WriteByte('|')
+ }
+ first = false
+ if t.tilde {
+ buf.WriteByte('~')
+ }
+ writeType(buf, t.typ, qf, visited)
+ return true
+ })
} else {
// print explicit interface methods and embedded types
for i, m := range t.methods {