build: instantiate generics

This commit is contained in:
visualfc
2024-06-18 12:20:54 +08:00
parent 2b491179f7
commit d59075e897
13 changed files with 672 additions and 9 deletions

View File

@@ -277,14 +277,18 @@ func (p *context) initLink(line string, prefix int, f func(inPkgName string) (fu
}
}
func recvTypeName(t ast.Expr) string {
switch t := t.(type) {
func recvTypeName(typ ast.Expr) string {
retry:
switch t := typ.(type) {
case *ast.Ident:
return t.Name
case *ast.IndexExpr:
return trecvTypeName(t.X, t.Index)
case *ast.IndexListExpr:
return trecvTypeName(t.X, t.Indices...)
case *ast.ParenExpr:
typ = t.X
goto retry
}
panic("unreachable")
}
@@ -344,7 +348,17 @@ func funcName(pkg *types.Package, fn *ssa.Function) string {
} else {
recv = fn.Signature.Recv()
}
return llssa.FuncName(pkg, fn.Name(), recv)
var fnName string
if org := fn.Origin(); org != nil {
targs := make([]string, len(fn.TypeArgs()))
for i, t := range fn.TypeArgs() {
targs[i] = types.TypeString(t, llssa.PathOf)
}
fnName = org.Name() + "[" + strings.Join(targs, ", ") + "]"
} else {
fnName = fn.Name()
}
return llssa.FuncName(pkg, fnName, recv)
}
func checkCgo(fnName string) bool {