diff --git a/_test/recover2.go b/_test/recover2.go new file mode 100644 index 00000000..15ae6aeb --- /dev/null +++ b/_test/recover2.go @@ -0,0 +1,15 @@ +package main + +func main() { + println("hello") + + var r interface{} = 1 + r = recover() + if r == nil { + println("world") + } +} + +// Output: +// hello +// world diff --git a/interp/run.go b/interp/run.go index ffacb4f6..e28ee35d 100644 --- a/interp/run.go +++ b/interp/run.go @@ -459,13 +459,9 @@ func _println(n *node) { func _recover(n *node) { tnext := getExec(n.tnext) dest := genValue(n) - var err error - nilErr := reflect.ValueOf(valueInterface{n, reflect.ValueOf(&err).Elem()}) n.exec = func(f *frame) bltn { - if f.anc.recovered == nil { - dest(f).Set(nilErr) - } else { + if f.anc.recovered != nil { dest(f).Set(reflect.ValueOf(valueInterface{n, reflect.ValueOf(f.anc.recovered)})) f.anc.recovered = nil }