on master help sign in
for-in
commit177d078fbbdc687dd0d5629d32c61f72fb68cfe7 authoriko <mail@iko.soy> dateSat 20 Jul 2024, 23:17 (2 years ago) parent12a6c63
4 files changed+60
zod/luau/lib/lua/parser.hoon+23 zod/luau/lib/lua/printer.hoon+28 zod/luau/sur/lua.hoon+4 zod/luau/tests/foo.lua+5
zod/luau/lib/lua/parser.hoon+23
@@ -302,6 +302,10 @@ apex
302302 %+ cook
303303 |= =for-range [%for-range for-range]
304304 parse-for-range
305+ ::
306+ %+ cook
307+ |= =for-in [%for-in for-in]
308+ parse-for-in
305309 ==
306310++ parse-for-range
307311 %^ tnee %for-range for-range
@@ -335,6 +339,25 @@ apex
335339 wss
336340 (jest 'end')
337341 ==
342+++ parse-for-in
343+ %^ tnee %parse-for-in for-in
344+ %+ cook
345+ |= [* vars=namelist * src=explist * body=blok *] [vars src body]
346+ ;~ (glue wss)
347+ (jest 'for')
348+ parse-namelist
349+ (jest 'in')
350+ parse-explist
351+ (jest 'do')
352+ parse-blok
353+ (jest 'end')
354+ ==
355+++ parse-explist
356+ %^ tnee %parse-explist explist
357+ %+ most (ifix [ws ws] com) parse-expr
358+++ parse-namelist
359+ %^ tnee %parse-namelist namelist
360+ %+ most (ifix [ws ws] com) parse-name
338361++ parse-if
339362 %^ tnee %parse-if if
340363 %+ cook
zod/luau/lib/lua/printer.hoon+28
@@ -206,7 +206,35 @@ print
206206 ==
207207 %if (print-if +.stat)
208208 %for-range (print-for-range +.stat)
209+ %for-in (print-for-in +.stat)
209210 ==
211+:: for-in
212+::
213+++ print-for-in
214+ |= =for-in
215+ ^- tape
216+ %- zing
217+ :~
218+ "for "
219+ (print-namelist vars.for-in)
220+ " in "
221+ (print-explist src.for-in)
222+ "\0ado\0a"
223+ (print-blok body.for-in)
224+ "\0aend"
225+ ==
226+:: explist
227+::
228+++ print-explist
229+ |= =explist
230+ ^- tape
231+ (commaed (turn explist print-expr))
232+:: namelist
233+::
234+++ print-namelist
235+ |= =namelist
236+ ^- tape
237+ (commaed (turn namelist trip))
210238:: for-range
211239::
212240++ print-for-range
zod/luau/sur/lua.hoon+4
@@ -1,5 +1,6 @@
11|%
22+$ name @t
3++$ namelist (lest name)
34+$ ast
45 $%
56 [%blok blok]
@@ -78,9 +79,12 @@
7879 [%if if]
7980 [%break ~]
8081 [%for-range for-range]
82+ [%for-in for-in]
8183 [%empty ~]
8284 ==
85++$ explist (lest expr)
8386+$ for-range [var=name from=expr to=expr by=(unit expr) body=blok]
87++$ for-in [vars=namelist src=explist body=blok]
8488+$ if [cond=expr body=blok elsa=(list [cond=expr body=blok]) else=(unit blok)]
8589+$ functioncall
8690 $%
zod/luau/tests/foo.lua+5
@@ -82,3 +82,8 @@ for i = 1, 100 do
8282end
8383
8484for j = 100, 1, 1 do fredSum = fredSum + j end
85+
86+for key, val in pairs(u) do
87+ print(key, val)
88+end
89+