summaryrefslogtreecommitdiff
path: root/cmd/gint
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/gint')
-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)
-}