@@ -87,6 +87,7 @@ func (g *pyGen) genFuncSig(sym *symbol, fsym *Func) bool {
87
87
return false
88
88
}
89
89
anm := pySafeArg (arg .Name (), i )
90
+
90
91
if ifchandle && arg .sym .goname == "interface{}" {
91
92
goArgs = append (goArgs , fmt .Sprintf ("%s %s" , anm , CGoHandle ))
92
93
pyArgs = append (pyArgs , fmt .Sprintf ("param('%s', '%s')" , PyHandle , anm ))
@@ -98,7 +99,10 @@ func (g *pyGen) genFuncSig(sym *symbol, fsym *Func) bool {
98
99
pyArgs = append (pyArgs , fmt .Sprintf ("param('%s', '%s')" , sarg .cpyname , anm ))
99
100
}
100
101
}
101
- wpArgs = append (wpArgs , anm )
102
+
103
+ if i != nargs - 1 || ! fsym .isVariadic {
104
+ wpArgs = append (wpArgs , anm )
105
+ }
102
106
}
103
107
104
108
// support for optional arg to run in a separate go routine -- only if no return val
@@ -108,6 +112,11 @@ func (g *pyGen) genFuncSig(sym *symbol, fsym *Func) bool {
108
112
wpArgs = append (wpArgs , "goRun=False" )
109
113
}
110
114
115
+ // To support variadic args, we add *args at the end.
116
+ if fsym .isVariadic {
117
+ wpArgs = append (wpArgs , "*args" )
118
+ }
119
+
111
120
// When building the pybindgen builder code, we start with
112
121
// a function that adds function calls with exception checking.
113
122
// But given specific return types, we may want to add more
@@ -276,25 +285,6 @@ if __err != nil {
276
285
g .gofile .Printf ("var __err error\n " )
277
286
}
278
287
279
- // pywrap output
280
- mnm := fsym .ID ()
281
- if isMethod {
282
- mnm = sym .id + "_" + fsym .GoName ()
283
- }
284
- rvHasHandle := false
285
- if nres > 0 {
286
- ret := res [0 ]
287
- if ! rvIsErr && ret .sym .hasHandle () {
288
- rvHasHandle = true
289
- cvnm := ret .sym .pyPkgId (g .pkg .pkg )
290
- g .pywrap .Printf ("return %s(handle=_%s.%s(" , cvnm , pkgname , mnm )
291
- } else {
292
- g .pywrap .Printf ("return _%s.%s(" , pkgname , mnm )
293
- }
294
- } else {
295
- g .pywrap .Printf ("_%s.%s(" , pkgname , mnm )
296
- }
297
-
298
288
callArgs := []string {}
299
289
wrapArgs := []string {}
300
290
if isMethod {
@@ -313,6 +303,9 @@ if __err != nil {
313
303
default :
314
304
na = anm
315
305
}
306
+ if i == len (args ) - 1 && fsym .isVariadic {
307
+ na = na + "..."
308
+ }
316
309
callArgs = append (callArgs , na )
317
310
switch {
318
311
case arg .sym .goname == "interface{}" :
@@ -326,6 +319,34 @@ if __err != nil {
326
319
default :
327
320
wrapArgs = append (wrapArgs , anm )
328
321
}
322
+
323
+ // To support variadic args, we add *args at the end.
324
+ if fsym .isVariadic && i == len (args )- 1 {
325
+ packagePrefix := ""
326
+ if arg .sym .gopkg .Name () != fsym .pkg .Name () {
327
+ packagePrefix = arg .sym .gopkg .Name () + "."
328
+ }
329
+ g .pywrap .Printf ("%s = %s%s(args)\n " , anm , packagePrefix , arg .sym .id )
330
+ }
331
+ }
332
+
333
+ // pywrap output
334
+ mnm := fsym .ID ()
335
+ if isMethod {
336
+ mnm = sym .id + "_" + fsym .GoName ()
337
+ }
338
+ rvHasHandle := false
339
+ if nres > 0 {
340
+ ret := res [0 ]
341
+ if ! rvIsErr && ret .sym .hasHandle () {
342
+ rvHasHandle = true
343
+ cvnm := ret .sym .pyPkgId (g .pkg .pkg )
344
+ g .pywrap .Printf ("return %s(handle=_%s.%s(" , cvnm , pkgname , mnm )
345
+ } else {
346
+ g .pywrap .Printf ("return _%s.%s(" , pkgname , mnm )
347
+ }
348
+ } else {
349
+ g .pywrap .Printf ("_%s.%s(" , pkgname , mnm )
329
350
}
330
351
331
352
hasRetCvt := false
0 commit comments