build: instantiate generics
This commit is contained in:
20
cl/import.go
20
cl/import.go
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user