on master help sign in
for-in
177d078iko
zod/luau/lib/lua/parser.hoon+23
@@ -302,6 +302,10 @@ apex
302 %+ cook
302 %+ cook
303 |= =for-range [%for-range for-range]
303 |= =for-range [%for-range for-range]
304 parse-for-range
304 parse-for-range
305+ ::
306+ %+ cook
307+ |= =for-in [%for-in for-in]
308+ parse-for-in
305 ==
309 ==
306++ parse-for-range
310++ parse-for-range
307 %^ tnee %for-range for-range
311 %^ tnee %for-range for-range
@@ -335,6 +339,25 @@ apex
335 wss
339 wss
336 (jest 'end')
340 (jest 'end')
337 ==
341 ==
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
338++ parse-if
361++ parse-if
339 %^ tnee %parse-if if
362 %^ tnee %parse-if if
340 %+ cook
363 %+ cook
zod/luau/lib/lua/printer.hoon+28
@@ -206,7 +206,35 @@ print
206 ==
206 ==
207 %if (print-if +.stat)
207 %if (print-if +.stat)
208 %for-range (print-for-range +.stat)
208 %for-range (print-for-range +.stat)
209+ %for-in (print-for-in +.stat)
209 ==
210 ==
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))
210:: for-range
238:: for-range
211::
239::
212++ print-for-range
240++ print-for-range
zod/luau/sur/lua.hoon+4
@@ -1,5 +1,6 @@
1|%
1|%
2+$ name @t
2+$ name @t
3++$ namelist (lest name)
3+$ ast
4+$ ast
4 $%
5 $%
5 [%blok blok]
6 [%blok blok]
@@ -78,9 +79,12 @@
78 [%if if]
79 [%if if]
79 [%break ~]
80 [%break ~]
80 [%for-range for-range]
81 [%for-range for-range]
82+ [%for-in for-in]
81 [%empty ~]
83 [%empty ~]
82 ==
84 ==
85++$ explist (lest expr)
83+$ for-range [var=name from=expr to=expr by=(unit expr) body=blok]
86+$ for-range [var=name from=expr to=expr by=(unit expr) body=blok]
87++$ for-in [vars=namelist src=explist body=blok]
84+$ if [cond=expr body=blok elsa=(list [cond=expr body=blok]) else=(unit blok)]
88+$ if [cond=expr body=blok elsa=(list [cond=expr body=blok]) else=(unit blok)]
85+$ functioncall
89+$ functioncall
86 $%
90 $%
zod/luau/tests/foo.lua+5
@@ -82,3 +82,8 @@ for i = 1, 100 do
82end
82end
83
83
84for j = 100, 1, 1 do fredSum = fredSum + j end
84for 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+