summaryrefslogtreecommitdiff
path: root/parser/interpreter_test.go
diff options
context:
space:
mode:
authorMarc Vertes <mvertes@free.fr>2023-11-15 11:59:15 +0100
committerMarc Vertes <mvertes@free.fr>2023-11-15 11:59:15 +0100
commita4d7fb2da6a8390b818dae8d07391c7d76e365e9 (patch)
tree166d1ed4bb07337ead19fd4f7ebc8d79885e2cfd /parser/interpreter_test.go
parent2eab5877e1c634db872b595dd2414f4031ae4eb5 (diff)
parser: hande const declarations
Only symbols are produced, no bytecode is emitted. The constant expressions are evaluated at compile time using the stdlib package go/constant. The parser handles implicit repetition of the last non-empty expression list. The iota symbol is reset to 0 and incremented for each line of a const block. To be done in a next commit: type conversions.
Diffstat (limited to 'parser/interpreter_test.go')
-rw-r--r--parser/interpreter_test.go15
1 files changed, 15 insertions, 0 deletions
diff --git a/parser/interpreter_test.go b/parser/interpreter_test.go
index 3a5598e..7ac1212 100644
--- a/parser/interpreter_test.go
+++ b/parser/interpreter_test.go
@@ -164,6 +164,21 @@ func TestSwitch(t *testing.T) {
})
}
+func TestConst(t *testing.T) {
+ src0 := `const (
+ a = iota
+ b
+ c
+)
+`
+ run(t, []etest{
+ {src: "const a = 1+2; a", res: "3"},
+ {src: "const a, b = 1, 2; a+b", res: "3"},
+
+ {src: src0 + "c", res: "2"},
+ })
+}
+
func TestType(t *testing.T) {
run(t, []etest{
{src: "type t int; var a t = 1; a", res: "1"},