on master help sign in
local-asmnt
commit02b8a532e36bead5558cfd01bee6717a8d6ab637 authoriko <mail@iko.soy> dateMon 22 Jul 2024, 02:17 (2 years ago) parentb54906a
4 files changed+82
zod/luau/lib/lua/parser.hoon+38 zod/luau/lib/lua/printer.hoon+31 zod/luau/sur/lua.hoon+8 zod/luau/tests/foo.lua+5
zod/luau/lib/lua/parser.hoon+38
@@ -314,6 +314,44 @@ apex
314314 %+ cook
315315 |= =local-function [%local-function local-function]
316316 parse-local-function
317+ ::
318+ %+ cook
319+ |= =local-asmnt [%local-asmnt local-asmnt]
320+ parse-local-asmnt
321+ ==
322+++ parse-local-asmnt
323+ %^ tnee %parse-local-asmnt local-asmnt
324+ %+ cook
325+ |= [* * =attnamelist rhs=(unit explist)] [attnamelist rhs]
326+ ;~ plug
327+ (jest 'local')
328+ wss
329+ parse-attnamelist
330+ %- punt
331+ ;~ pfix
332+ ws
333+ (just '=')
334+ ws
335+ parse-explist
336+ ==
337+ ==
338+++ parse-attnamelist
339+ %^ tnee %parse-attnamelist attnamelist
340+ %+ most (ifix [ws ws] com)
341+ ;~ plug
342+ parse-name
343+ ::
344+ %- punt
345+ %+ cook |= [* * =attrib *] attrib
346+ ;~ plug
347+ ws
348+ (just '<')
349+ ;~ pose
350+ %+ cold %const (jest 'const')
351+ %+ cold %close (jest 'close')
352+ ==
353+ (just '>')
354+ ==
317355 ==
318356++ parse-for-range
319357 %^ tnee %for-range for-range
zod/luau/lib/lua/printer.hoon+31
@@ -209,6 +209,37 @@ print
209209 %for-in (print-for-in +.stat)
210210 %function (print-function +.stat)
211211 %local-function (print-local-function +.stat)
212+ %local-asmnt (print-local-asmnt +.stat)
213+ ==
214+:: local-asmnt
215+::
216+++ print-local-asmnt
217+ |= =local-asmnt
218+ ^- tape
219+ %- zing
220+ :~
221+ "local "
222+ (print-attnamelist attnamelist.local-asmnt)
223+ ?~ rhs.local-asmnt "" (print-explist u.rhs.local-asmnt)
224+ ==
225+:: attnamelist
226+::
227+++ print-attnamelist
228+ |= =attnamelist
229+ ^- tape
230+ %- commaed
231+ %+ turn attnamelist
232+ |= [=name attr=(unit attrib)]
233+ %- zing
234+ :~
235+ (trip name)
236+ ?~ attr ""
237+ %- zing
238+ :~
239+ " <"
240+ (trip `@t`u.attr)
241+ ">"
242+ ==
212243 ==
213244:: for-in
214245::
zod/luau/sur/lua.hoon+8
@@ -82,6 +82,7 @@
8282 [%for-in for-in]
8383 [%function function]
8484 [%local-function local-function]
85+ [%local-asmnt local-asmnt]
8586 [%empty ~]
8687 ==
8788+$ explist (lest expr)
@@ -93,6 +94,13 @@
9394+$ funcbody [pars=parlist body=blok]
9495+$ parlist [pars=(list name) wildcard=?]
9596+$ local-function [=name body=funcbody]
97++$ local-asmnt [=attnamelist rhs=(unit exprlist)]
98++$ attnamelist (lest [=name attr=(unit attrib)])
99++$ attrib
100+ $?
101+ %const
102+ %close
103+ ==
96104+$ functioncall
97105 $%
98106 [%call func=prefix-expr =args]
zod/luau/tests/foo.lua+5
@@ -99,3 +99,8 @@ end
9999
100100
101101local function g(x) return math.sin(x) end
102+
103+
104+
105+local a = require('mod2')
106+local b = require('mod2')