aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/typecheck/iexport.go
diff options
context:
space:
mode:
authorDan Scales <danscales@google.com>2021-05-24 20:36:42 -0700
committerDan Scales <danscales@google.com>2021-05-26 15:33:02 +0000
commitfd54ae8b0c7ed3ef9869112586069f7cac82cf1e (patch)
treef328bab9546644f1ed7c6a947871850952e6f6d8 /src/cmd/compile/internal/typecheck/iexport.go
parent6c9e1c58bc7661638ee084e40a3b6fc907825496 (diff)
downloadgo-fd54ae8b0c7ed3ef9869112586069f7cac82cf1e.tar.gz
go-fd54ae8b0c7ed3ef9869112586069f7cac82cf1e.zip
[dev.typeparams] cmd/compile: adding union support in types1
Add union support in types1, and allow exporting of unions, and importing unions back into types1 and types2. Added new test mincheck.go/mincheck.dir that tests that type lists (type sets) are correctly exported/imported, so that types2 gives correct errors that an instantiation doesn't fit the type list in the type param constraint. Change-Id: I8041c6c79289c870a95ed5a1b10e4c1c16985b12 Reviewed-on: https://go-review.googlesource.com/c/go/+/322609 Trust: Dan Scales <danscales@google.com> Trust: Robert Griesemer <gri@golang.org> Run-TryBot: Dan Scales <danscales@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Robert Griesemer <gri@golang.org>
Diffstat (limited to 'src/cmd/compile/internal/typecheck/iexport.go')
-rw-r--r--src/cmd/compile/internal/typecheck/iexport.go13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/cmd/compile/internal/typecheck/iexport.go b/src/cmd/compile/internal/typecheck/iexport.go
index 292bb2c409..ea8e751852 100644
--- a/src/cmd/compile/internal/typecheck/iexport.go
+++ b/src/cmd/compile/internal/typecheck/iexport.go
@@ -256,6 +256,7 @@ const (
interfaceType
typeParamType
instType
+ unionType
)
const (
@@ -943,6 +944,18 @@ func (w *exportWriter) doTyp(t *types.Type) {
w.signature(f.Type)
}
+ case types.TUNION:
+ // TODO(danscales): possibly put out the tilde bools in more
+ // compact form.
+ w.startType(unionType)
+ nt := t.NumTerms()
+ w.uint64(uint64(nt))
+ for i := 0; i < nt; i++ {
+ t, b := t.Term(i)
+ w.typ(t)
+ w.bool(b)
+ }
+
default:
base.Fatalf("unexpected type: %v", t)
}