ssa: program.Closure, removeCtx for MakeClosure

This commit is contained in:
visualfc
2024-10-30 10:42:32 +08:00
parent df7e8b2e64
commit 014bdb795f
3 changed files with 6 additions and 9 deletions

View File

@@ -924,19 +924,17 @@ func (b Builder) MakeClosure(fn Expr, bindings []Expr) Expr {
tctx := sig.Params().At(0).Type().Underlying().(*types.Pointer).Elem().(*types.Struct)
flds := llvmFields(bindings, tctx, b)
data := b.aggregateAllocU(prog.rawType(tctx), flds...)
return b.aggregateValue(closureType(prog, sig), fn.impl, data)
return b.aggregateValue(prog.Closure(removeCtx(sig)), fn.impl, data)
}
func closureType(p Program, sig *types.Signature) Type {
func removeCtx(sig *types.Signature) *types.Signature {
params := sig.Params()
n := params.Len()
args := make([]*types.Var, n-1)
for i := 0; i < n-1; i++ {
args[i] = params.At(i + 1)
}
sig = types.NewSignature(sig.Recv(), types.NewTuple(args...), sig.Results(), sig.Variadic())
closure := p.gocvt.cvtClosure(sig)
return p.rawType(closure)
return types.NewSignature(sig.Recv(), types.NewTuple(args...), sig.Results(), sig.Variadic())
}
// -----------------------------------------------------------------------------