summaryrefslogtreecommitdiff
path: root/cmd/gint/main.go
diff options
context:
space:
mode:
authorMarc Vertes <mvertes@free.fr>2023-08-24 17:16:39 +0200
committerMarc Vertes <mvertes@free.fr>2023-08-24 17:16:39 +0200
commit9fdef50606a2942389189cd61397e17c0a0ccfd7 (patch)
treee89a4aa3a61a6ab41abb4b6533ec9a2d9d7e2ce9 /cmd/gint/main.go
parentec8eb9defc7cd68fcd3afa0058773bcbc33ecd63 (diff)
codegen: add Interpreter struct
This makes the code easier to use.
Diffstat (limited to 'cmd/gint/main.go')
-rw-r--r--cmd/gint/main.go26
1 files changed, 3 insertions, 23 deletions
diff --git a/cmd/gint/main.go b/cmd/gint/main.go
index 85fdba0..15a79b0 100644
--- a/cmd/gint/main.go
+++ b/cmd/gint/main.go
@@ -7,9 +7,7 @@ import (
"github.com/gnolang/parscan/codegen"
"github.com/gnolang/parscan/lang/golang"
- "github.com/gnolang/parscan/parser"
"github.com/gnolang/parscan/vm0"
- "github.com/gnolang/parscan/vm1"
)
func main() {
@@ -50,25 +48,7 @@ func run0(src string) error {
}
func run1(src string) (err error) {
- m := &vm1.Machine{}
- c := codegen.New()
- c.AddSym(fmt.Println, "println", false)
- n := &parser.Node{}
- if n.Child, err = golang.GoParser.Parse(src); err != nil {
- return err
- }
- n.Dot(os.Getenv("DOT"), "")
- if err = c.CodeGen(n); err != nil {
- return err
- }
- c.Emit(n, vm1.Exit)
- log.Println("data:", c.Data)
- log.Println("code:", vm1.Disassemble(c.Code))
- for _, v := range c.Data {
- m.Push(v)
- }
- m.PushCode(c.Code)
- m.SetIP(c.Entry)
- m.Run()
- return
+ i := codegen.NewInterpreter(golang.GoParser)
+ i.AddSym(fmt.Println, "println", false)
+ return i.Eval(src)
}