From c922c797204069f42a7abf88500c5708f68a8e43 Mon Sep 17 00:00:00 2001 From: Marc Vertes Date: Wed, 21 Jan 2026 19:26:42 +0100 Subject: feat: add support for range clause and iterators - vm: added Pull, Next and Stop instructions, to implement iterators - lang: add Range, Next and Stop tokens - parser: handle range clause. Still naive and incomplete. - comp: generate iterator instructions from range clause. Work in progress. Only initial support for slices. Many more tests and combinations needed, but the main pattern is there now. --- interp/interpreter_test.go | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'interp/interpreter_test.go') diff --git a/interp/interpreter_test.go b/interp/interpreter_test.go index 7a974d1..f5c347b 100644 --- a/interp/interpreter_test.go +++ b/interp/interpreter_test.go @@ -121,11 +121,13 @@ func TestIf(t *testing.T) { func TestFor(t *testing.T) { run(t, []etest{ - {src: "a := 0; for i := 0; i < 3; i = i+1 {a = a+i}; a", res: "3"}, // #00 - {src: "func f() int {a := 0; for i := 0; i < 3; i = i+1 {a = a+i}; return a}; f()", res: "3"}, // #01 - {src: "a := 0; for {a = a+1; if a == 3 {break}}; a", res: "3"}, // #02 - {src: "func f() int {a := 0; for {a = a+1; if a == 3 {break}}; return a}; f()", res: "3"}, // #03 - {src: "func f() int {a := 0; for {a = a+1; if a < 3 {continue}; break}; return a}; f()", res: "3"}, // #04 + {src: "a := 0; for i := 0; i < 3; i = i+1 {a = a+i}; a", res: "3"}, // #00 + {src: "func f() int {a := 0; for i := 0; i < 3; i = i+1 {a = a+i}; return a}; f()", res: "3"}, // #01 + {src: "a := 0; for {a = a+1; if a == 3 {break}}; a", res: "3"}, // #02 + {src: "func f() int {a := 0; for {a = a+1; if a == 3 {break}}; return a}; f()", res: "3"}, // #03 + {src: "func f() int {a := 0; for {a = a+1; if a < 3 {continue}; break}; return a}; f()", res: "3"}, // #04 + {src: "a := []int{1,2,3,4}; b := 0; for i := range a {b = b+i}; b", res: "6"}, // #05 + {src: "func f() int {a := []int{1,2,3,4}; b := 0; for i := range a {b = b+i}; return b}; f()", res: "6"}, // #06 }) } -- cgit v1.2.3