From e12c8b72c4d6a0e148572ff992d75b4913188353 Mon Sep 17 00:00:00 2001 From: Marc Vertes Date: Sun, 3 May 2020 17:56:04 +0200 Subject: [PATCH] fix: store the result of a bin function call in frame --- _test/bin4.go | 18 ++++++++++++++++++ interp/run.go | 5 ++++- 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 _test/bin4.go diff --git a/_test/bin4.go b/_test/bin4.go new file mode 100644 index 00000000..5d9c4fe5 --- /dev/null +++ b/_test/bin4.go @@ -0,0 +1,18 @@ +package main + +import ( + "fmt" + "strings" +) + +func Bar(s string) bool { + a := strings.HasPrefix("fas", "f") + b := strings.HasPrefix("aaaaa", "a") + a_and_b := strings.HasPrefix("fas", "f") && strings.HasPrefix("aaaaa", "a") + fmt.Println(a, b, a && b, a_and_b) + return a && b +} + +func main() { + println(Bar("kung")) +} diff --git a/interp/run.go b/interp/run.go index 33980228..ef1a0080 100644 --- a/interp/run.go +++ b/interp/run.go @@ -933,13 +933,16 @@ func callBin(n *node) { } case fnext != nil: // Handle branching according to boolean result. + index := n.findex n.exec = func(f *frame) bltn { in := make([]reflect.Value, l) for i, v := range values { in[i] = v(f) } res := value(f).Call(in) - if res[0].Bool() { + b := res[0].Bool() + f.data[index].SetBool(b) + if b { return tnext } return fnext