diff options
| author | Marc Vertes <mvertes@free.fr> | 2023-08-29 18:22:13 +0200 |
|---|---|---|
| committer | Marc Vertes <mvertes@free.fr> | 2023-08-29 18:22:13 +0200 |
| commit | 0f4bfe6e70263fbeb580014b62632f403b29b414 (patch) | |
| tree | de750b60a6c0027b36accf9f0596c3e651309cda /codegen/interpreter.go | |
| parent | a3ab9ef5be74cb54a87674aa48abb0c46f9c58f6 (diff) | |
gint: add an interactive REPL
Diffstat (limited to 'codegen/interpreter.go')
| -rw-r--r-- | codegen/interpreter.go | 15 |
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 +} |
