summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--codegen/compiler.go2
-rw-r--r--lang/golang/go.go26
-rw-r--r--scanner/scan.go7
-rw-r--r--vm0/func.go4
-rw-r--r--vm1/vm.go1
-rw-r--r--vm1/vm_test.go8
6 files changed, 23 insertions, 25 deletions
diff --git a/codegen/compiler.go b/codegen/compiler.go
index e0e97ab..6f41850 100644
--- a/codegen/compiler.go
+++ b/codegen/compiler.go
@@ -24,7 +24,7 @@ type Compiler struct {
func NewCompiler() *Compiler { return &Compiler{symbols: map[string]symbol{}, Entry: -1} }
type nodedata struct {
- ipstart, ipend, symind, fsp int // CFG and symbol node annotations
+ ipstart, ipend, fsp int // CFG and symbol node annotations
}
func (c *Compiler) CodeGen(node *parser.Node) (err error) {
diff --git a/lang/golang/go.go b/lang/golang/go.go
index 604f24c..2ab1781 100644
--- a/lang/golang/go.go
+++ b/lang/golang/go.go
@@ -48,19 +48,19 @@ var GoScanner = &scanner.Scanner{
var GoParser = &parser.Parser{
Scanner: GoScanner,
Spec: map[string]parser.NodeSpec{
- ".": {parser.DotOp, parser.Call, 3},
- "*": {parser.MulOp, 0, 4},
- "+": {parser.AddOp, 0, 5},
- "-": {parser.SubOp, 0, 5},
- "<": {parser.InfOp, 0, 6},
- ":=": {parser.DefOp, 0, 7},
- "=": {parser.AssignOp, 0, 7},
- "if": {parser.IfStmt, parser.Stmt | parser.ExprSep, 0},
- "func": {parser.FuncDecl, parser.Decl | parser.Call, 0},
- "return": {parser.ReturnStmt, parser.Stmt, 0},
- "{..}": {parser.StmtBloc, parser.ExprSep, 0},
- "(..)": {parser.ParBloc, parser.Call, 0},
- `".."`: {parser.StringLit, 0, 0},
+ ".": {Kind: parser.DotOp, Flags: parser.Call, Order: 3},
+ "*": {Kind: parser.MulOp, Order: 4},
+ "+": {Kind: parser.AddOp, Order: 5},
+ "-": {Kind: parser.SubOp, Order: 5},
+ "<": {Kind: parser.InfOp, Order: 6},
+ ":=": {Kind: parser.DefOp, Order: 7},
+ "=": {Kind: parser.AssignOp, Order: 7},
+ "if": {Kind: parser.IfStmt, Flags: parser.Stmt | parser.ExprSep},
+ "func": {Kind: parser.FuncDecl, Flags: parser.Decl | parser.Call},
+ "return": {Kind: parser.ReturnStmt, Flags: parser.Stmt},
+ "{..}": {Kind: parser.StmtBloc, Flags: parser.ExprSep},
+ "(..)": {Kind: parser.ParBloc, Flags: parser.Call},
+ `".."`: {Kind: parser.StringLit},
},
}
diff --git a/scanner/scan.go b/scanner/scan.go
index 2a4b125..5644932 100644
--- a/scanner/scan.go
+++ b/scanner/scan.go
@@ -273,13 +273,6 @@ func (sc *Scanner) getNum(src string) (s string, v any) {
return s, v
}
-func (sc *Scanner) getGroupSep(src string) (s string) {
- for _, r := range src {
- return string(r)
- }
- return s
-}
-
func (sc *Scanner) getStr(src string, nstart int) (s string, ok bool) {
start := src[:nstart]
end := sc.End[start]
diff --git a/vm0/func.go b/vm0/func.go
index 6c95383..6976530 100644
--- a/vm0/func.go
+++ b/vm0/func.go
@@ -60,7 +60,9 @@ func (i *Interp) declareFunc(r *parser.Node, scope string) {
for _, arg := range args {
i.push(arg.Interface())
}
- i.Run(r.Child[len(r.Child)-1], fscope)
+ if _, err := i.Run(r.Child[len(r.Child)-1], fscope); err != nil {
+ panic(err)
+ }
b := len(i.stack) - len(out)
for j := range out {
res = append(res, reflect.ValueOf(i.stack[b+j]))
diff --git a/vm1/vm.go b/vm1/vm.go
index 0e9c7f7..f7113f2 100644
--- a/vm1/vm.go
+++ b/vm1/vm.go
@@ -153,7 +153,6 @@ func (m *Machine) Run() (err error) {
}
ip++
}
- return
}
func (m *Machine) PushCode(code [][]int64) (p int) {
diff --git a/vm1/vm_test.go b/vm1/vm_test.go
index cea4f29..257ac44 100644
--- a/vm1/vm_test.go
+++ b/vm1/vm_test.go
@@ -14,7 +14,9 @@ func TestVM(t *testing.T) {
m.Push(v)
}
m.PushCode(test.code)
- m.Run()
+ if err := m.Run(); err != nil {
+ t.Errorf("run error: %v", err)
+ }
t.Log(m.mem)
r := fmt.Sprintf("%v", m.mem[test.start:test.end])
if r != test.mem {
@@ -34,7 +36,9 @@ func BenchmarkVM(b *testing.B) {
m.PushCode(test.code)
b.StartTimer()
- m.Run()
+ if err := m.Run(); err != nil {
+ b.Errorf("run error: %v", err)
+ }
}
})
}