@@ -66,3 +66,26 @@ func NewMyInt(i int) wrap.Wrap {
|
||||
w := NewMyInt(4)
|
||||
Hi(w)
|
||||
}
|
||||
|
||||
type T struct{}
|
||||
|
||||
func (t T) Bar(s ...string) {}
|
||||
|
||||
func TestCallBinVariadicMethod(t *testing.T) {
|
||||
i := interp.New(interp.Options{})
|
||||
i.Use(interp.Exports{
|
||||
"mypkg/mypkg": {
|
||||
"T": reflect.ValueOf((*T)(nil)),
|
||||
},
|
||||
})
|
||||
eval(t, i, `
|
||||
package p
|
||||
|
||||
import "mypkg"
|
||||
|
||||
func Foo(x mypkg.T) { x.Bar("s") }
|
||||
`)
|
||||
v := eval(t, i, "p.Foo")
|
||||
bar := v.Interface().(func(t T))
|
||||
bar(T{})
|
||||
}
|
||||
|
||||
@@ -1350,7 +1350,7 @@ func callBin(n *node) {
|
||||
|
||||
for i, c := range child {
|
||||
var defType reflect.Type
|
||||
if variadic >= 0 && i >= variadic {
|
||||
if variadic >= 0 && i+rcvrOffset >= variadic {
|
||||
defType = funcType.In(variadic)
|
||||
} else {
|
||||
defType = funcType.In(rcvrOffset + i)
|
||||
@@ -1374,7 +1374,7 @@ func callBin(n *node) {
|
||||
if c.kind == basicLit || c.rval.IsValid() {
|
||||
// Convert literal value (untyped) to function argument type (if not an interface{})
|
||||
var argType reflect.Type
|
||||
if variadic >= 0 && i >= variadic {
|
||||
if variadic >= 0 && i+rcvrOffset >= variadic {
|
||||
argType = funcType.In(variadic).Elem()
|
||||
} else {
|
||||
argType = funcType.In(i + rcvrOffset)
|
||||
|
||||
Reference in New Issue
Block a user