llgo/ssa: NewPyFunc fix

This commit is contained in:
xushiwei
2024-05-12 00:24:56 +08:00
parent 6c32fe87e6
commit 64c13fa9ae
6 changed files with 24 additions and 16 deletions

View File

@@ -298,7 +298,10 @@ func (p Package) NewPyFunc(name string, sig *types.Signature) PyFunction {
if v, ok := p.pyfns[name]; ok {
return v
}
obj := p.NewVar(name, p.Prog.PyObjectPtrPtr().RawType(), InC)
prog := p.Prog
obj := p.NewVar(name, prog.PyObjectPtrPtr().RawType(), InC)
obj.Init(prog.Null(obj.Type))
obj.impl.SetLinkage(llvm.LinkOnceAnyLinkage)
ty := &aType{obj.ll, rawType{sig}, vkPyFunc}
expr := Expr{obj.impl, ty}
ret := &aPyFunction{expr, obj}

View File

@@ -137,7 +137,7 @@ type aProgram struct {
pyObjPPtr Type
pyImpTy *types.Signature
callNoArg *types.Signature
callNoArgs *types.Signature
callOneArg *types.Signature
needRuntime bool
@@ -485,14 +485,14 @@ func (p Program) tyImportPyModule() *types.Signature {
return p.pyImpTy
}
func (p Program) tyCallNoArg() *types.Signature {
if p.callNoArg == nil {
func (p Program) tyCallNoArgs() *types.Signature {
if p.callNoArgs == nil {
objPtr := p.PyObjectPtr().raw.Type
paramObjPtr := types.NewParam(token.NoPos, nil, "", objPtr)
params := types.NewTuple(paramObjPtr)
p.callNoArg = types.NewSignatureType(nil, nil, nil, params, params, false)
p.callNoArgs = types.NewSignatureType(nil, nil, nil, params, params, false)
}
return p.callNoArg
return p.callNoArgs
}
func (p Program) tyCallOneArg() *types.Signature {
@@ -531,7 +531,7 @@ func (b Builder) pyCall(fn Expr, args []Expr) (ret Expr) {
n := params.Len()
switch n {
case 0:
call := pkg.pyFunc("PyObject_CallNoArg", prog.tyCallNoArg())
call := pkg.pyFunc("PyObject_CallNoArgs", prog.tyCallNoArgs())
ret = b.Call(call, fn)
case 1:
call := pkg.pyFunc("PyObject_CallOneArg", prog.tyCallOneArg())