on master help sign in
local-function
commitb54906aaf7e4426fd65ce51e7ed4229ed410b5a8 authoriko <mail@iko.soy> dateSun 21 Jul 2024, 21:42 (2 years ago) parent9f2556b
4 files changed+44−9
zod/luau/lib/lua/parser.hoon+25−8 zod/luau/lib/lua/printer.hoon+13 zod/luau/sur/lua.hoon+3−1 zod/luau/tests/foo.lua+3
zod/luau/lib/lua/parser.hoon+25−8
@@ -310,6 +310,10 @@ apex
310310 %+ cook
311311 |= =function [%function function]
312312 parse-function
313+ ::
314+ %+ cook
315+ |= =local-function [%local-function local-function]
316+ parse-local-function
313317 ==
314318++ parse-for-range
315319 %^ tnee %for-range for-range
@@ -355,6 +359,20 @@ apex
355359 ws
356360 parse-funcbody
357361 ==
362+++ parse-local-function
363+ %^ tnee %parse-local-function local-function
364+ %+ cook
365+ |= [* * * * =name * body=funcbody]
366+ [name body]
367+ ;~ plug
368+ (jest 'local')
369+ wss
370+ (jest 'function')
371+ wss
372+ parse-name
373+ ws
374+ parse-funcbody
375+ ==
358376++ parse-funcname
359377 %^ tnee %parse-funcname funcname
360378 ;~ plug
@@ -510,14 +528,13 @@ apex
510528 ==
511529++ parse-blok
512530 %^ tnee %parse-blok blok
513− ;~ plug
514− (most ws parse-stat)
515− ::
516− %- punt
517− ;~ pfix
518− wss
519− parse-ret
520− ==
531+ ;< stats=(list stat) bind (more ws parse-stat)
532+ %+ cook
533+ |= ret=(unit ret) [stats ret]
534+ %- punt
535+ ;~ pfix
536+ ?~ stats (easy ~) wss
537+ parse-ret
521538 ==
522539++ parse-ret
523540 %^ tnee %parse-ret ret
zod/luau/lib/lua/printer.hoon+13
@@ -208,6 +208,7 @@ print
208208 %for-range (print-for-range +.stat)
209209 %for-in (print-for-in +.stat)
210210 %function (print-function +.stat)
211+ %local-function (print-local-function +.stat)
211212 ==
212213:: for-in
213214::
@@ -254,6 +255,18 @@ print
254255 (print-blok body.for-range)
255256 "\0aend"
256257 ==
258+:: local-function
259+::
260+++ print-local-function
261+ |= =local-function
262+ ^- tape
263+ %- zing
264+ :~
265+ "local function "
266+ (trip name.local-function)
267+ "\0a"
268+ (print-funcbody body.local-function)
269+ ==
257270:: function
258271::
259272++ print-function
zod/luau/sur/lua.hoon+3−1
@@ -81,6 +81,7 @@
8181 [%for-range for-range]
8282 [%for-in for-in]
8383 [%function function]
84+ [%local-function local-function]
8485 [%empty ~]
8586 ==
8687+$ explist (lest expr)
@@ -91,6 +92,7 @@
9192+$ funcname [nested=(lest name) with-self=(unit name)]
9293+$ funcbody [pars=parlist body=blok]
9394+$ parlist [pars=(list name) wildcard=?]
95++$ local-function [=name body=funcbody]
9496+$ functioncall
9597 $%
9698 [%call func=prefix-expr =args]
@@ -98,6 +100,6 @@
98100 ==
99101+$ args exprlist
100102+$ label name
101−+$ blok [body=(lest stat) ret=(unit ret)]
103++$ blok [body=(list stat) ret=(unit ret)]
102104+$ ret exprlist
103105--
zod/luau/tests/foo.lua+3
@@ -96,3 +96,6 @@ end
9696function Dog:makeSound()
9797 print('I say ' .. self.sound)
9898end
99+
100+
101+local function g(x) return math.sin(x) end