summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--interp/interpreter_test.go7
-rw-r--r--parser/README.md1
-rw-r--r--parser/type.go4
3 files changed, 10 insertions, 2 deletions
diff --git a/interp/interpreter_test.go b/interp/interpreter_test.go
index ea4da53..adb550b 100644
--- a/interp/interpreter_test.go
+++ b/interp/interpreter_test.go
@@ -70,6 +70,13 @@ func TestExpr(t *testing.T) {
})
}
+func TestAssign(t *testing.T) {
+ run(t, []etest{
+ {src: "var a int = 1; a", res: "1"}, // #00
+ {src: "var a, b int = 1, 2; b", res: "2"}, // #01
+ })
+}
+
func TestCompare(t *testing.T) {
run(t, []etest{
{src: "a := 1; a < 2", res: "true"},
diff --git a/parser/README.md b/parser/README.md
index dda3f25..c3628a6 100644
--- a/parser/README.md
+++ b/parser/README.md
@@ -50,6 +50,7 @@ Go language support:
- [ ] deterministic maps
- [ ] channel types
- [ ] channel operations
+- [ ] multi-assign expressions
- [x] var defined by assign :=
- [x] var assign =
- [x] var declaration
diff --git a/parser/type.go b/parser/type.go
index b56a332..4412501 100644
--- a/parser/type.go
+++ b/parser/type.go
@@ -172,7 +172,7 @@ func (p *Parser) parseParamTypes(in Tokens, flag typeFlag) (types []*vm.Type, va
// Type was omitted, apply the previous one from the right.
types = append([]*vm.Type{types[0]}, types...)
p.addSymVar(i, param, types[0], flag, local)
- vars = append(vars, param)
+ vars = append([]string{param}, vars...)
continue
}
}
@@ -184,7 +184,7 @@ func (p *Parser) parseParamTypes(in Tokens, flag typeFlag) (types []*vm.Type, va
p.addSymVar(i, param, typ, flag, local)
}
types = append([]*vm.Type{typ}, types...)
- vars = append(vars, param)
+ vars = append([]string{param}, vars...)
}
return types, vars, err
}