summaryrefslogtreecommitdiff
path: root/parser/interpreter.go
diff options
context:
space:
mode:
authorMarc Vertes <mvertes@free.fr>2025-11-27 12:40:35 +0100
committerMarc Vertes <mvertes@free.fr>2025-11-27 12:40:35 +0100
commitd99d69391eeae129cad2d5c2c90ce700db01b11c (patch)
tree0286d21e88919b9a9f86081d057b065c19f8ec38 /parser/interpreter.go
parentaed20c1c453e50f716c454c0bd7e4995a0f5d898 (diff)
chore: move compiler and interpreter in their own packages
Diffstat (limited to 'parser/interpreter.go')
-rw-r--r--parser/interpreter.go11
1 files changed, 6 insertions, 5 deletions
diff --git a/parser/interpreter.go b/parser/interpreter.go
index 6f354d9..06a4bc1 100644
--- a/parser/interpreter.go
+++ b/parser/interpreter.go
@@ -1,8 +1,9 @@
-package parser
+package interpreter
import (
"reflect"
+ "github.com/mvertes/parscan/compiler"
"github.com/mvertes/parscan/scanner"
"github.com/mvertes/parscan/vm"
)
@@ -11,13 +12,13 @@ const debug = true
// Interpreter represents the state of an interpreter.
type Interpreter struct {
- *Compiler
+ *compiler.Compiler
*vm.Machine
}
// NewInterpreter returns a new interpreter state.
func NewInterpreter(s *scanner.Scanner) *Interpreter {
- return &Interpreter{NewCompiler(s), &vm.Machine{}}
+ return &Interpreter{compiler.NewCompiler(s), &vm.Machine{}}
}
// Eval interprets a src program and return the last produced value if any, or an error.
@@ -39,8 +40,8 @@ func (i *Interpreter) Eval(src string) (res reflect.Value, err error) {
}
i.Push(i.Data[dataOffset:]...)
i.PushCode(i.Code[codeOffset:]...)
- if s, ok := i.symbols["main"]; ok {
- i.PushCode(vm.Instruction{Op: vm.Calli, Arg: []int{int(i.Data[s.index].Data.Int())}})
+ if s, ok := i.Symbols["main"]; ok {
+ i.PushCode(vm.Instruction{Op: vm.Calli, Arg: []int{int(i.Data[s.Index].Data.Int())}})
}
i.PushCode(vm.Instruction{Op: vm.Exit})
i.SetIP(max(codeOffset, i.Entry))