private closureCtx/closureStub
This commit is contained in:
@@ -22,6 +22,10 @@ import (
|
|||||||
"github.com/goplus/llgo/c"
|
"github.com/goplus/llgo/c"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
LLGoPackage = true
|
||||||
|
)
|
||||||
|
|
||||||
//go:linkname Acos C.acos
|
//go:linkname Acos C.acos
|
||||||
func Acos(x float64) float64
|
func Acos(x float64) float64
|
||||||
|
|
||||||
|
|||||||
@@ -26,13 +26,6 @@ import (
|
|||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
const (
|
|
||||||
ClosureCtx = "__llgo_ctx"
|
|
||||||
ClosureStub = "__llgo_stub."
|
|
||||||
)
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
const (
|
const (
|
||||||
NameValist = "__llgo_va_list"
|
NameValist = "__llgo_va_list"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -564,6 +564,11 @@ func (p Package) cFunc(fullName string, sig *types.Signature) Expr {
|
|||||||
return p.NewFunc(fullName, sig, InC).Expr
|
return p.NewFunc(fullName, sig, InC).Expr
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
closureCtx = "__llgo_ctx"
|
||||||
|
closureStub = "__llgo_stub."
|
||||||
|
)
|
||||||
|
|
||||||
func (p Package) closureStub(b Builder, t *types.Struct, v Expr) Expr {
|
func (p Package) closureStub(b Builder, t *types.Struct, v Expr) Expr {
|
||||||
name := v.impl.Name()
|
name := v.impl.Name()
|
||||||
prog := b.Prog
|
prog := b.Prog
|
||||||
@@ -574,9 +579,9 @@ func (p Package) closureStub(b Builder, t *types.Struct, v Expr) Expr {
|
|||||||
sig := v.raw.Type.(*types.Signature)
|
sig := v.raw.Type.(*types.Signature)
|
||||||
n := sig.Params().Len()
|
n := sig.Params().Len()
|
||||||
nret := sig.Results().Len()
|
nret := sig.Results().Len()
|
||||||
ctx := types.NewParam(token.NoPos, nil, ClosureCtx, types.Typ[types.UnsafePointer])
|
ctx := types.NewParam(token.NoPos, nil, closureCtx, types.Typ[types.UnsafePointer])
|
||||||
sig = FuncAddCtx(ctx, sig)
|
sig = FuncAddCtx(ctx, sig)
|
||||||
fn := p.NewFunc(ClosureStub+name, sig, InC)
|
fn := p.NewFunc(closureStub+name, sig, InC)
|
||||||
fn.impl.SetLinkage(llvm.LinkOnceAnyLinkage)
|
fn.impl.SetLinkage(llvm.LinkOnceAnyLinkage)
|
||||||
args := make([]Expr, n)
|
args := make([]Expr, n)
|
||||||
for i := 0; i < n; i++ {
|
for i := 0; i < n; i++ {
|
||||||
|
|||||||
@@ -133,7 +133,7 @@ func (p goTypes) cvtNamed(t *types.Named) (raw *types.Named, cvt bool) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (p goTypes) cvtClosure(sig *types.Signature) *types.Struct {
|
func (p goTypes) cvtClosure(sig *types.Signature) *types.Struct {
|
||||||
ctx := types.NewParam(token.NoPos, nil, ClosureCtx, types.Typ[types.UnsafePointer])
|
ctx := types.NewParam(token.NoPos, nil, closureCtx, types.Typ[types.UnsafePointer])
|
||||||
raw := p.cvtFunc(sig, ctx)
|
raw := p.cvtFunc(sig, ctx)
|
||||||
flds := []*types.Var{
|
flds := []*types.Var{
|
||||||
types.NewField(token.NoPos, nil, "f", raw, false),
|
types.NewField(token.NoPos, nil, "f", raw, false),
|
||||||
|
|||||||
Reference in New Issue
Block a user