@@ -239,6 +239,13 @@ func isIfaceHandle(gdoc string) (bool, string) {
239
239
return false , gdoc
240
240
}
241
241
242
+ func isPointer (pyfmt string ) bool {
243
+ if (pyfmt == "s" ) {
244
+ return true
245
+ }
246
+ return false
247
+ }
248
+
242
249
func (g * pyGen ) genFuncBody (sym * symbol , fsym * Func ) {
243
250
isMethod := (sym != nil )
244
251
isIface := false
@@ -385,7 +392,7 @@ if __err != nil {
385
392
}
386
393
387
394
// Call upstream method and collect returns.
388
- g .pywrap .Printf (fmt .Sprintf ("%s : = %s\n " , strings .Join (retvars , ", " ), pyFuncCall ))
395
+ g .pywrap .Printf (fmt .Sprintf ("%s = %s\n " , strings .Join (retvars , ", " ), pyFuncCall ))
389
396
390
397
// ReMap handle returns from pyFuncCall.
391
398
for i := 0 ; i < npyres ; i ++ {
@@ -475,7 +482,7 @@ if __err != nil {
475
482
476
483
if buildPyTuple (fsym ) {
477
484
g .gofile .Printf ("\n " )
478
- formatStr := ""
485
+ g . gofile . Printf ( "retTuple := C.PyTuple_New(%d); \n " , npyres )
479
486
for i := 0 ; i < npyres ; i ++ {
480
487
sret := current .symtype (res [i ].GoType ())
481
488
if sret == nil {
@@ -484,16 +491,25 @@ if __err != nil {
484
491
res [i ].Name (),
485
492
))
486
493
}
494
+ formatStr := sret .pyfmt
487
495
if sret .pyfmt == "" {
488
- formatStr += "?"
489
- } else {
490
- formatStr += sret .pyfmt
496
+ formatStr = "?"
497
+ }
498
+
499
+ buildValueFunc := "C.Py_BuildValue1"
500
+ typeCast := "unsafe.Pointer"
501
+ if ! isPointer (formatStr ) {
502
+ buildValueFunc = "C.Py_BuildValue2"
503
+ typeCast = "C.longlong"
491
504
}
505
+ valueCall := fmt .Sprintf ("%s(C.CString(\" %s\" ), %s(%s))" ,
506
+ buildValueFunc ,
507
+ formatStr ,
508
+ typeCast ,
509
+ retvals [i ])
510
+ g .gofile .Printf ("C.PyTuple_SetItem(retTuple, %d, %s);\n " , i , valueCall )
492
511
}
493
- g .gofile .Printf ("return unsafe.Pointer(C.Py_BuildValue%d(\" %s\" , %s))\n " ,
494
- npyres ,
495
- formatStr ,
496
- strings .Join (retvals [0 :npyres ], ", " ))
512
+ g .gofile .Printf ("return unsafe.Pointer(retTuple);" )
497
513
} else {
498
514
g .gofile .Printf ("return %s\n " , strings .Join (retvals [0 :npyres ], ", " ))
499
515
}
0 commit comments