From 89e1575f1d7e542b843a53ba7434ac0f034a63fb Mon Sep 17 00:00:00 2001 From: Marc Vertes Date: Mon, 11 Mar 2024 10:03:02 +0100 Subject: fix callX, update readme --- parser/compiler.go | 6 +++--- readme.md | 18 +++--------------- 2 files changed, 6 insertions(+), 18 deletions(-) diff --git a/parser/compiler.go b/parser/compiler.go index 7a60565..82228ed 100644 --- a/parser/compiler.go +++ b/parser/compiler.go @@ -115,10 +115,10 @@ func (c *Compiler) Codegen(tokens Tokens) (err error) { emit(int64(t.Pos), vm.Call) case lang.CallX: - typ := pop().Type + rtyp := pop().value.Data.Type() // TODO: pop input types (careful with variadic function) - for i := 0; i < typ.Rtype.NumOut(); i++ { - push(&symbol{Type: typ.Out(i)}) + for i := 0; i < rtyp.NumOut(); i++ { + push(&symbol{Type: &vm.Type{Rtype: rtyp.Out(i)}}) } emit(int64(t.Pos), vm.CallX, int64(t.Beg)) diff --git a/readme.md b/readme.md index 7c28d83..a149a20 100644 --- a/readme.md +++ b/readme.md @@ -6,23 +6,11 @@ languages and virtual machines. The first language definition is a subset of Go, enough to implement simple benchmarks, as fibonacci numbers. -The first VM is a stack machine, operated by walking directly the AST. - -The next step is to add a byte-code based VM and the corresponding byte code -generator. - -Further steps is to get closer to full Go spec and / or introduce new -languages definitions and new VM implementations. +A byte-code based VM and the corresponding byte code generator are +provided. Note: this is highly experimental and unstable. - ## Usage -`go run ./cmd/gint < ./samples/fib` - -To debug visually the AST, you can set the `DOT` env to a command able -to a display a graphviz dot input, such as `dot -Txlib` or `dotty -` -(for old graphviz versions like mine): - -`DOT="dot -Txlib" go run ./cmd/gint < ./samples/fib` +`go run . ./samples/fib` -- cgit v1.2.3