Skip to content

Commit

Permalink
fix: do not attempt to copy data in empty frame at func call
Browse files Browse the repository at this point in the history
  • Loading branch information
mvertes committed Apr 18, 2020
1 parent 94d44e7 commit 5e142fd
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 28 deletions.
12 changes: 12 additions & 0 deletions _test/fun12.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package main

func use(interface{}) {}

func main() {
z := map[string]interface{}{"a": 5}
use(z)
println("bye")
}

// Output:
// bye
57 changes: 29 additions & 28 deletions interp/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -762,39 +762,40 @@ func call(n *node) {
}

// Copy input parameters from caller
dest := nf.data[numRet:]
for i, v := range values {
switch {
case method && i == 0:
// compute receiver
var src reflect.Value
if v == nil {
src = def.recv.val
if len(def.recv.index) > 0 {
if src.Kind() == reflect.Ptr {
src = src.Elem().FieldByIndex(def.recv.index)
} else {
src = src.FieldByIndex(def.recv.index)
if dest := nf.data[numRet:]; len(dest) > 0 {
for i, v := range values {
switch {
case method && i == 0:
// compute receiver
var src reflect.Value
if v == nil {
src = def.recv.val
if len(def.recv.index) > 0 {
if src.Kind() == reflect.Ptr {
src = src.Elem().FieldByIndex(def.recv.index)
} else {
src = src.FieldByIndex(def.recv.index)
}
}
} else {
src = v(f)
}
} else {
src = v(f)
}
// Accommodate to receiver type
d := dest[0]
if ks, kd := src.Kind(), d.Kind(); ks != kd {
if kd == reflect.Ptr {
d.Set(src.Addr())
// Accommodate to receiver type
d := dest[0]
if ks, kd := src.Kind(), d.Kind(); ks != kd {
if kd == reflect.Ptr {
d.Set(src.Addr())
} else {
d.Set(src.Elem())
}
} else {
d.Set(src.Elem())
d.Set(src)
}
} else {
d.Set(src)
case variadic >= 0 && i >= variadic:
vararg.Set(reflect.Append(vararg, v(f)))
default:
dest[i].Set(v(f))
}
case variadic >= 0 && i >= variadic:
vararg.Set(reflect.Append(vararg, v(f)))
default:
dest[i].Set(v(f))
}
}

Expand Down

0 comments on commit 5e142fd

Please sign in to comment.