Merge pull request #716 from aisk/py-tuple-helper
feat(py): Add Python tuple constructor helper
This commit is contained in:
@@ -12,4 +12,8 @@ func main() {
|
||||
list := py.List(3.0, 9.0, 23.0, 100.0)
|
||||
y := std.Max(std.Iter(list))
|
||||
std.Print(y)
|
||||
|
||||
tuple := py.Tuple(1.0, 2.0, 3.0)
|
||||
z := std.Max(std.Iter(tuple))
|
||||
std.Print(z)
|
||||
}
|
||||
|
||||
@@ -58,6 +58,19 @@ _llgo_0:
|
||||
%22 = call ptr (ptr, ...) @PyObject_CallFunctionObjArgs(ptr %21, ptr %20, ptr null)
|
||||
%23 = load ptr, ptr @__llgo_py.builtins.print, align 8
|
||||
%24 = call ptr (ptr, ...) @PyObject_CallFunctionObjArgs(ptr %23, ptr %22, ptr null)
|
||||
%25 = call ptr @PyTuple_New(i64 3)
|
||||
%26 = call ptr @PyFloat_FromDouble(double 1.000000e+00)
|
||||
%27 = call i32 @PyTuple_SetItem(ptr %25, i64 0, ptr %26)
|
||||
%28 = call ptr @PyFloat_FromDouble(double 2.000000e+00)
|
||||
%29 = call i32 @PyTuple_SetItem(ptr %25, i64 1, ptr %28)
|
||||
%30 = call ptr @PyFloat_FromDouble(double 3.000000e+00)
|
||||
%31 = call i32 @PyTuple_SetItem(ptr %25, i64 2, ptr %30)
|
||||
%32 = load ptr, ptr @__llgo_py.builtins.iter, align 8
|
||||
%33 = call ptr @PyObject_CallOneArg(ptr %32, ptr %25)
|
||||
%34 = load ptr, ptr @__llgo_py.builtins.max, align 8
|
||||
%35 = call ptr (ptr, ...) @PyObject_CallFunctionObjArgs(ptr %34, ptr %33, ptr null)
|
||||
%36 = load ptr, ptr @__llgo_py.builtins.print, align 8
|
||||
%37 = call ptr (ptr, ...) @PyObject_CallFunctionObjArgs(ptr %36, ptr %35, ptr null)
|
||||
ret i32 0
|
||||
}
|
||||
|
||||
@@ -75,6 +88,10 @@ declare i32 @PyList_SetItem(ptr, i64, ptr)
|
||||
|
||||
declare ptr @PyObject_CallOneArg(ptr, ptr)
|
||||
|
||||
declare ptr @PyTuple_New(i64)
|
||||
|
||||
declare i32 @PyTuple_SetItem(ptr, i64, ptr)
|
||||
|
||||
declare void @llgoLoadPyModSyms(ptr, ...)
|
||||
|
||||
declare void @Py_Initialize()
|
||||
|
||||
@@ -391,8 +391,9 @@ const (
|
||||
|
||||
llgoFuncAddr = llgoInstrBase + 0xd
|
||||
|
||||
llgoPyList = llgoInstrBase + 0x10
|
||||
llgoPyStr = llgoInstrBase + 0x11
|
||||
llgoPyList = llgoInstrBase + 0x10
|
||||
llgoPyStr = llgoInstrBase + 0x11
|
||||
llgoPyTuple = llgoInstrBase + 0x12
|
||||
|
||||
llgoAtomicLoad = llgoInstrBase + 0x1d
|
||||
llgoAtomicStore = llgoInstrBase + 0x1e
|
||||
|
||||
@@ -216,6 +216,7 @@ var llgoInstrs = map[string]int{
|
||||
"funcAddr": llgoFuncAddr,
|
||||
"pystr": llgoPyStr,
|
||||
"pyList": llgoPyList,
|
||||
"pyTuple": llgoPyTuple,
|
||||
"sigjmpbuf": llgoSigjmpbuf,
|
||||
"sigsetjmp": llgoSigsetjmp,
|
||||
"siglongjmp": llgoSiglongjmp,
|
||||
@@ -354,6 +355,9 @@ func (p *context) call(b llssa.Builder, act llssa.DoAction, call *ssa.CallCommon
|
||||
case llgoPyList:
|
||||
args := p.compileValues(b, args, fnHasVArg)
|
||||
ret = b.PyList(args...)
|
||||
case llgoPyTuple:
|
||||
args := p.compileValues(b, args, fnHasVArg)
|
||||
ret = b.PyTuple(args...)
|
||||
case llgoPyStr:
|
||||
ret = pystr(b, args)
|
||||
case llgoCstr:
|
||||
|
||||
Reference in New Issue
Block a user