Skip to content

Commit 04688ca

Browse files
Variadic functions with variable number of struct inputs now working.
1 parent ece09ed commit 04688ca

File tree

4 files changed

+44
-10
lines changed

4 files changed

+44
-10
lines changed

_examples/variadic/test.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,17 @@
33
# license that can be found in the LICENSE file.
44
import variadic, go
55

6+
############### Non Variadic ##############
7+
nonvarResult = variadic.NonVariFunc(1, go.Slice_int([2,3,4]),5)
8+
print("NonVariadic 1+[2+3+4]+5 = %d" % nonvarResult)
9+
10+
############### Variadic Over Int ##############
611
varResult = variadic.VariFunc(1,2,3,4,5)
712
print("Variadic 1+2+3+4+5 = %d" % varResult)
813

9-
nonvarResult = variadic.NonVariFunc(1, go.Slice_int([2,3,4]),5)
10-
print("NonVariadic 1+[2+3+4]+5 = %d" % nonvarResult)
14+
############### Variadic Over Struct ##############
15+
varStructResult = variadic.VariStructFunc(variadic.NewIntStrUct(1), variadic.NewIntStrUct(2), variadic.NewIntStrUct(3))
16+
print("Variadic Struct s(1)+s(2)+s(3) = %d" % varStructResult)
1117

1218
if isinstance(varResult, int):
1319
print("Type OK")

_examples/variadic/variadic.go

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,17 @@
11
package variadic
22

3+
/////////////// Non Variadic //////////////
4+
func NonVariFunc(arg1 int, arg2 []int, arg3 int) int{
5+
total := arg1
6+
for _, num := range arg2 {
7+
total += num
8+
}
9+
total += arg3
10+
11+
return total
12+
}
13+
14+
/////////////// Variadic Over Int //////////////
315
func VariFunc(vargs ...int) int{
416
total := 0
517
for _, num := range vargs {
@@ -8,12 +20,23 @@ func VariFunc(vargs ...int) int{
820
return total
921
}
1022

11-
func NonVariFunc(arg1 int, arg2 []int, arg3 int) int{
12-
total := arg1
13-
for _, num := range arg2 {
14-
total += num
23+
/////////////// Variadic Over Struct //////////////
24+
type IntStrUct struct {
25+
p int
26+
}
27+
28+
func NewIntStrUct(n int) IntStrUct {
29+
return IntStrUct {
30+
p:n,
1531
}
16-
total += arg3
32+
}
1733

34+
func VariStructFunc(vargs ...IntStrUct) int{
35+
total := 0
36+
for _, inst := range vargs {
37+
total += inst.p
38+
}
1839
return total
1940
}
41+
42+
/////////////// Variadic Over Interface //////////////

bind/gen_func.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,11 @@ if __err != nil {
322322

323323
// To support variadic args, we add *args at the end.
324324
if fsym.isVariadic && i == len(args)-1 {
325-
g.pywrap.Printf("%s = go.Slice_int(args)\n", anm)
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)
326330
}
327331
}
328332

main_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -820,8 +820,9 @@ func TestBindVariadic(t *testing.T) {
820820
lang: features[path],
821821
cmd: "build",
822822
extras: nil,
823-
want: []byte(`Variadic 1+2+3+4+5 = 15
824-
NonVariadic 1+[2+3+4]+5 = 15
823+
want: []byte(`NonVariadic 1+[2+3+4]+5 = 15
824+
Variadic 1+2+3+4+5 = 15
825+
Variadic Struct s(1)+s(2)+s(3) = 6
825826
Type OK
826827
`),
827828
})

0 commit comments

Comments
 (0)