summaryrefslogtreecommitdiff
path: root/cmd/gint/main.go
diff options
context:
space:
mode:
authorMarc Vertes <mvertes@free.fr>2023-08-25 09:40:52 +0200
committerMarc Vertes <mvertes@free.fr>2023-08-25 09:40:52 +0200
commit706ca65800dfab293a0210b56602e1e9f8076fcc (patch)
tree0b5bdc341800a7556f4b613a0c8c3edcc33f57c0 /cmd/gint/main.go
parent9fdef50606a2942389189cd61397e17c0a0ccfd7 (diff)
gint: simplify
Diffstat (limited to 'cmd/gint/main.go')
-rw-r--r--cmd/gint/main.go41
1 files changed, 9 insertions, 32 deletions
diff --git a/cmd/gint/main.go b/cmd/gint/main.go
index 15a79b0..3ddddc8 100644
--- a/cmd/gint/main.go
+++ b/cmd/gint/main.go
@@ -10,45 +10,22 @@ import (
"github.com/gnolang/parscan/vm0"
)
+type Interpreter interface {
+ Eval(string) error
+}
+
func main() {
log.SetFlags(log.Lshortfile)
buf, err := os.ReadFile("/dev/stdin")
if err != nil {
log.Fatal(err)
}
- run := run0
- if len(os.Args) > 1 {
- v := "vm" + os.Args[1]
- switch v {
- case "vm0":
- case "vm1":
- run = run1
- default:
- log.Fatal("invalid argument", os.Args[1])
- }
+ var interp Interpreter = vm0.New(golang.GoParser)
+ if len(os.Args) > 1 && os.Args[1] == "1" {
+ interp = codegen.NewInterpreter(golang.GoParser)
+ interp.(*codegen.Interpreter).AddSym(fmt.Println, "println", false)
}
- if err := run(string(buf)); err != nil {
+ if err := interp.Eval(string(buf)); err != nil {
log.Fatal(err)
}
}
-
-func run0(src string) error {
- i := vm0.New(golang.GoParser)
- nodes, err := i.Parse(src)
- if err != nil {
- return err
- }
- i.Adot(nodes, os.Getenv("DOT"))
- for _, n := range nodes {
- if _, err := i.Run(n, ""); err != nil {
- return err
- }
- }
- return nil
-}
-
-func run1(src string) (err error) {
- i := codegen.NewInterpreter(golang.GoParser)
- i.AddSym(fmt.Println, "println", false)
- return i.Eval(src)
-}