summaryrefslogtreecommitdiff
path: root/codegen
diff options
context:
space:
mode:
Diffstat (limited to 'codegen')
-rw-r--r--codegen/interpreter.go15
1 files changed, 12 insertions, 3 deletions
diff --git a/codegen/interpreter.go b/codegen/interpreter.go
index 8527631..b26b403 100644
--- a/codegen/interpreter.go
+++ b/codegen/interpreter.go
@@ -27,12 +27,21 @@ func (i *Interpreter) Eval(src string) (err error) {
if debug {
n.Dot(os.Getenv("DOT"), "")
}
+ offset := len(i.Code)
+ i.PopExit() // Remove last exit from previous run.
if err = i.CodeGen(n); err != nil {
return err
}
- i.Emit(n, vm1.Exit)
i.Push(i.Data...)
- i.PushCode(i.Code)
- i.SetIP(i.Entry)
+ i.PushCode(i.Code[offset:]...)
+ i.PushCode([]int64{0, vm1.Exit})
+ i.SetIP(max(offset, i.Entry))
return i.Run()
}
+
+func max(a, b int) int {
+ if a > b {
+ return a
+ }
+ return b
+}