Skip to content

Commit

Permalink
fix: method search on struct pointer in interface wrapper
Browse files Browse the repository at this point in the history
  • Loading branch information
mvertes committed Apr 7, 2020
1 parent 988f0c9 commit 3e76267
Showing 1 changed file with 7 additions and 2 deletions.
9 changes: 7 additions & 2 deletions interp/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -580,17 +580,22 @@ func genInterfaceWrapper(n *node, typ reflect.Type) func(*frame) reflect.Value {

return func(f *frame) reflect.Value {
v := value(f)
vv := v
switch v.Kind() {
case reflect.Chan, reflect.Func, reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice:
if v.IsNil() {
return reflect.New(typ).Elem()
}
if v.Kind() == reflect.Ptr {
vv = v.Elem()
}
}
w := reflect.New(wrap).Elem()
for i, m := range methods {
if m == nil {
if r := v.FieldByIndex(indexes[i]).MethodByName(names[i]); r.IsValid() {
w.Field(i).Set(v.FieldByIndex(indexes[i]).MethodByName(names[i]))
o := vv.FieldByIndex(indexes[i])
if r := o.MethodByName(names[i]); r.IsValid() {
w.Field(i).Set(o.MethodByName(names[i]))
} else {
log.Println(n.cfgErrorf("genInterfaceWrapper error, no method %s", names[i]))
}
Expand Down

0 comments on commit 3e76267

Please sign in to comment.