aboutsummaryrefslogtreecommitdiff
path: root/src/cmd
diff options
context:
space:
mode:
authorCuong Manh Le <cuong.manhle.vn@gmail.com>2024-06-20 22:58:24 +0700
committerGopher Robot <gobot@golang.org>2024-06-20 16:46:54 +0000
commit477ad7dd5151a2cb54fb68aa84ccbe9bb96ffbee (patch)
treee5819ab28fb9b42024b15b0744085f176a9bbb03 /src/cmd
parent4f77a83589baa5a3038cc6e35615084dc7e5f0c1 (diff)
downloadgo-477ad7dd5151a2cb54fb68aa84ccbe9bb96ffbee.tar.xz
cmd/compile: support generic alias type
Type parameters on aliases are now allowed after #46477 accepted. Updates #46477 Fixes #68054 Change-Id: Ic2e3b6f960a898163f47666e3a6bfe43b8cc22e2 Reviewed-on: https://go-review.googlesource.com/c/go/+/593715 Reviewed-by: Robert Griesemer <gri@google.com> Reviewed-by: Matthew Dempsky <mdempsky@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Auto-Submit: Robert Griesemer <gri@google.com>
Diffstat (limited to 'src/cmd')
-rw-r--r--src/cmd/compile/internal/noder/writer.go13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/cmd/compile/internal/noder/writer.go b/src/cmd/compile/internal/noder/writer.go
index 9b33fb7c6d..fe8f8f2a35 100644
--- a/src/cmd/compile/internal/noder/writer.go
+++ b/src/cmd/compile/internal/noder/writer.go
@@ -543,7 +543,7 @@ func (pw *pkgWriter) typIdx(typ types2.Type, dict *writerDict) typeInfo {
case *types2.Alias:
w.Code(pkgbits.TypeNamed)
- w.namedType(typ.Obj(), nil)
+ w.namedType(splitAlias(typ))
case *types2.TypeParam:
w.derived = true
@@ -2958,6 +2958,9 @@ func objTypeParams(obj types2.Object) *types2.TypeParamList {
if !obj.IsAlias() {
return obj.Type().(*types2.Named).TypeParams()
}
+ if alias, ok := obj.Type().(*types2.Alias); ok {
+ return alias.TypeParams()
+ }
}
return nil
}
@@ -2974,6 +2977,14 @@ func splitNamed(typ *types2.Named) (*types2.TypeName, *types2.TypeList) {
return typ.Obj(), typ.TypeArgs()
}
+// splitAlias is like splitNamed, but for an alias type.
+func splitAlias(typ *types2.Alias) (*types2.TypeName, *types2.TypeList) {
+ orig := typ.Origin()
+ base.Assertf(typ.Obj() == orig.Obj(), "alias type %v has object %v, but %v has object %v", typ, typ.Obj(), orig, orig.Obj())
+
+ return typ.Obj(), typ.TypeArgs()
+}
+
func asPragmaFlag(p syntax.Pragma) ir.PragmaFlag {
if p == nil {
return 0