FuncDecl bugfix: even in C, we need to add ctx for method
This commit is contained in:
@@ -13,7 +13,7 @@ _llgo_0:
|
||||
br i1 %1, label %_llgo_1, label %_llgo_2
|
||||
|
||||
_llgo_1: ; preds = %_llgo_0
|
||||
%2 = call ptr @sqlite3_errstr()
|
||||
%2 = call ptr @sqlite3_errstr(i32 %0)
|
||||
%3 = call i32 (ptr, ...) @printf(ptr @0, i32 %0, ptr %2)
|
||||
call void @exit(i32 1)
|
||||
br label %_llgo_2
|
||||
@@ -45,11 +45,11 @@ _llgo_0:
|
||||
%3 = extractvalue { ptr, i32 } %2, 0
|
||||
%4 = extractvalue { ptr, i32 } %2, 1
|
||||
call void @main.check(i32 %4)
|
||||
%5 = call i32 @sqlite3_close()
|
||||
%5 = call i32 @sqlite3_close(ptr %3)
|
||||
ret void
|
||||
}
|
||||
|
||||
declare ptr @sqlite3_errstr()
|
||||
declare ptr @sqlite3_errstr(i32)
|
||||
|
||||
declare i32 @printf(ptr, ...)
|
||||
|
||||
@@ -59,4 +59,4 @@ declare void @"github.com/goplus/llgo/internal/runtime.init"()
|
||||
|
||||
declare { ptr, i32 } @"github.com/goplus/llgo/x/sqlite.OpenV2"(ptr, i32, ptr)
|
||||
|
||||
declare i32 @sqlite3_close()
|
||||
declare i32 @sqlite3_close(ptr)
|
||||
|
||||
@@ -4,12 +4,9 @@ import (
|
||||
"github.com/goplus/llgo/c"
|
||||
"github.com/goplus/llgo/py"
|
||||
"github.com/goplus/llgo/py/math"
|
||||
"github.com/goplus/llgo/py/os"
|
||||
)
|
||||
|
||||
func main() {
|
||||
x := math.Sqrt(py.Float(2))
|
||||
wd := os.Getcwd()
|
||||
c.Printf(c.Str("sqrt(2) = %f\n"), x.Float64())
|
||||
c.Printf(c.Str("cwd = %s\n"), wd.CStr())
|
||||
}
|
||||
|
||||
@@ -5,13 +5,9 @@ source_filename = "main"
|
||||
@__llgo_argc = global ptr null
|
||||
@__llgo_argv = global ptr null
|
||||
@__llgo_py.math.sqrt = linkonce global ptr null
|
||||
@__llgo_py.os.getcwd = linkonce global ptr null
|
||||
@0 = private unnamed_addr constant [14 x i8] c"sqrt(2) = %f\0A\00", align 1
|
||||
@1 = private unnamed_addr constant [10 x i8] c"cwd = %s\0A\00", align 1
|
||||
@__llgo_py.math = external global ptr
|
||||
@2 = private unnamed_addr constant [5 x i8] c"sqrt\00", align 1
|
||||
@__llgo_py.os = external global ptr
|
||||
@3 = private unnamed_addr constant [7 x i8] c"getcwd\00", align 1
|
||||
@1 = private unnamed_addr constant [5 x i8] c"sqrt\00", align 1
|
||||
|
||||
define void @main.init() {
|
||||
_llgo_0:
|
||||
@@ -21,11 +17,8 @@ _llgo_0:
|
||||
_llgo_1: ; preds = %_llgo_0
|
||||
store i1 true, ptr @"main.init$guard", align 1
|
||||
call void @"github.com/goplus/llgo/py/math.init"()
|
||||
call void @"github.com/goplus/llgo/py/os.init"()
|
||||
%1 = load ptr, ptr @__llgo_py.math, align 8
|
||||
call void (ptr, ...) @llgoLoadPyModSyms(ptr %1, ptr @2, ptr @__llgo_py.math.sqrt, ptr null)
|
||||
%2 = load ptr, ptr @__llgo_py.os, align 8
|
||||
call void (ptr, ...) @llgoLoadPyModSyms(ptr %2, ptr @3, ptr @__llgo_py.os.getcwd, ptr null)
|
||||
call void (ptr, ...) @llgoLoadPyModSyms(ptr %1, ptr @1, ptr @__llgo_py.math.sqrt, ptr null)
|
||||
br label %_llgo_2
|
||||
|
||||
_llgo_2: ; preds = %_llgo_1, %_llgo_0
|
||||
@@ -42,33 +35,23 @@ _llgo_0:
|
||||
%2 = call ptr @PyFloat_FromDouble(double 2.000000e+00)
|
||||
%3 = load ptr, ptr @__llgo_py.math.sqrt, align 8
|
||||
%4 = call ptr @PyObject_CallOneArg(ptr %3, ptr %2)
|
||||
%5 = load ptr, ptr @__llgo_py.os.getcwd, align 8
|
||||
%6 = call ptr @PyObject_CallNoArgs(ptr %5)
|
||||
%7 = call double @PyFloat_AsDouble()
|
||||
%8 = call i32 (ptr, ...) @printf(ptr @0, double %7)
|
||||
%9 = call ptr @PyBytes_AsString()
|
||||
%10 = call i32 (ptr, ...) @printf(ptr @1, ptr %9)
|
||||
%5 = call double @PyFloat_AsDouble(ptr %4)
|
||||
%6 = call i32 (ptr, ...) @printf(ptr @0, double %5)
|
||||
ret void
|
||||
}
|
||||
|
||||
declare void @"github.com/goplus/llgo/py/math.init"()
|
||||
|
||||
declare void @"github.com/goplus/llgo/py/os.init"()
|
||||
|
||||
declare void @"github.com/goplus/llgo/internal/runtime.init"()
|
||||
|
||||
declare ptr @PyFloat_FromDouble(double)
|
||||
|
||||
declare ptr @PyObject_CallOneArg(ptr, ptr)
|
||||
|
||||
declare ptr @PyObject_CallNoArgs(ptr)
|
||||
|
||||
declare double @PyFloat_AsDouble()
|
||||
declare double @PyFloat_AsDouble(ptr)
|
||||
|
||||
declare i32 @printf(ptr, ...)
|
||||
|
||||
declare ptr @PyBytes_AsString()
|
||||
|
||||
declare void @llgoLoadPyModSyms(ptr, ...)
|
||||
|
||||
declare void @Py_Initialize()
|
||||
|
||||
@@ -57,8 +57,11 @@ func (p Program) Type(typ types.Type, bg Background) Type {
|
||||
|
||||
// FuncDecl converts a Go/C function declaration into raw type.
|
||||
func (p Program) FuncDecl(sig *types.Signature, bg Background) Type {
|
||||
recv := sig.Recv()
|
||||
if bg == InGo {
|
||||
sig = p.gocvt.cvtFunc(sig, sig.Recv())
|
||||
sig = p.gocvt.cvtFunc(sig, recv)
|
||||
} else if recv != nil { // even in C, we need to add ctx for method
|
||||
sig = FuncAddCtx(recv, sig)
|
||||
}
|
||||
return &aType{p.toLLVMFunc(sig), rawType{sig}, vkFuncDecl}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user