diff options
| author | Marc Vertes <marc.vertes@tendermint.com> | 2023-08-09 11:47:39 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-08-09 11:47:39 +0200 |
| commit | 947873b34aabe46dfb9f8d06214736cb11b5a6b2 (patch) | |
| tree | 9fc4728cf39017ee0275d62a7578881cbb3073bb /cmd | |
| parent | 355750be61fbf4b90d132a9560e01113f22f4c38 (diff) | |
codegen: add a bytecode generator (#5)
* codegen: add a bytecode generator
* cleaning scanner, parser and vm1.
Diffstat (limited to 'cmd')
| -rw-r--r-- | cmd/gint/main.go | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/cmd/gint/main.go b/cmd/gint/main.go index b36eb5d..85fdba0 100644 --- a/cmd/gint/main.go +++ b/cmd/gint/main.go @@ -18,15 +18,20 @@ func main() { if err != nil { log.Fatal(err) } + run := run0 if len(os.Args) > 1 { - if err := run1(string(buf)); err != nil { - log.Fatal(err) - } - } else { - if err := run0(string(buf)); err != nil { - log.Fatal(err) + v := "vm" + os.Args[1] + switch v { + case "vm0": + case "vm1": + run = run1 + default: + log.Fatal("invalid argument", os.Args[1]) } } + if err := run(string(buf)); err != nil { + log.Fatal(err) + } } func run0(src string) error { @@ -46,8 +51,8 @@ func run0(src string) error { func run1(src string) (err error) { m := &vm1.Machine{} - c := &codegen.Compiler{Symbols: map[string]int{}} - c.AddSym(fmt.Println, "println") + c := codegen.New() + c.AddSym(fmt.Println, "println", false) n := &parser.Node{} if n.Child, err = golang.GoParser.Parse(src); err != nil { return err @@ -58,11 +63,12 @@ func run1(src string) (err error) { } c.Emit(n, vm1.Exit) log.Println("data:", c.Data) - log.Println("code:", vm1.Disas(c.Code)) + 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 } |
