From 0f4bfe6e70263fbeb580014b62632f403b29b414 Mon Sep 17 00:00:00 2001 From: Marc Vertes Date: Tue, 29 Aug 2023 18:22:13 +0200 Subject: gint: add an interactive REPL --- codegen/interpreter.go | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'codegen') 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 +} -- cgit v1.2.3