summaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
authorMarc Vertes <marc.vertes@tendermint.com>2023-08-09 11:47:39 +0200
committerGitHub <noreply@github.com>2023-08-09 11:47:39 +0200
commit947873b34aabe46dfb9f8d06214736cb11b5a6b2 (patch)
tree9fc4728cf39017ee0275d62a7578881cbb3073bb /cmd
parent355750be61fbf4b90d132a9560e01113f22f4c38 (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.go24
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
}