diff options
| author | Marc Vertes <mvertes@free.fr> | 2023-11-15 11:59:15 +0100 |
|---|---|---|
| committer | Marc Vertes <mvertes@free.fr> | 2023-11-15 11:59:15 +0100 |
| commit | a4d7fb2da6a8390b818dae8d07391c7d76e365e9 (patch) | |
| tree | 166d1ed4bb07337ead19fd4f7ebc8d79885e2cfd /parser/interpreter_test.go | |
| parent | 2eab5877e1c634db872b595dd2414f4031ae4eb5 (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.go | 15 |
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"}, |
