on master help sign in
Got prefix-var thing working
commit985f13edd1ddc43782cd6c882ec912cf1fc65e8b authoriko <mail@iko.soy> dateFri 12 Jul 2024, 20:17 (2 years ago) parentfeb5f7c
2 files changed+53−54
zod/luau/lib/lua.hoon+52−53 zod/luau/tests/foo.lua+1−1
zod/luau/lib/lua.hoon+52−53
@@ -379,37 +379,8 @@
379379 ==
380380++ parse-var
381381 %^ tnee %parse-var var
382− =>
383− |%
384− ++ parse-access
385− |= =prefix-expr
386− %+ cook
387− |=([* =expr *] [%indexed prefix-expr expr])
388− ;~ (glue ws)
389− (just '[')
390− parse-expr
391− (just ']')
392− ==
393− ++ parse-dot
394− |= =prefix-expr
395− %+ cook
396− |=([* =name] [%dot prefix-expr name])
397− ;~ plug
398− dot
399− parse-name
400− ==
401− --
402− ;~ pose
403− ;< prefix=prefix-expr bind parse-simple-prefix-expr
404− ;~ pose
405− (parse-access prefix)
406− (parse-dot prefix)
407− ==
408− ::
409− %+ cook
410− |=(=name [%name name])
411− parse-name
412− ==
382+ ;< prefix=prefix-expr bind parse-prefix-expr
383+ ?: ?=(%var -.prefix) (easy +.prefix) fail
413384:: varlist
414385::
415386+$ varlist (lest var)
@@ -428,30 +399,58 @@
428399 [%call functioncall]
429400 [%var var]
430401 ==
431−++ parse-simple-prefix-expr
432− %^ tnee %parse-simple-prefix-expr $%([%expr expr] [%var var])
433− ;~ pose
434− parse-parened-expr
435− ::
436− %+ cook |=([=name] [%var %name name]) parse-name
437− ==
438−++ parse-prefix-expr-without-functioncall
439− %^ tnee %parse-prefix-expr prefix-expr
440− ;~ pose
441− parse-parened-expr
442− ::
443− %+ cook |=(=var [%var var])
444− parse-var
445− ==
446402++ parse-prefix-expr
447403 %^ tnee %parse-prefix-expr prefix-expr
448− ;< prefix=prefix-expr bind parse-prefix-expr-without-functioncall
449− ;~ pose
450− %+ cook |=(=functioncall [%call functioncall])
451− (parse-functioncall-args prefix)
452− ::
453− (easy prefix)
454− ==
404+ =<
405+ ;< prefix=prefix-expr bind
406+ ;~ pose
407+ %+ cook |=(=name [%var %name name])
408+ parse-name
409+ ::
410+ parse-parened-expr
411+ ==
412+ (recurse-prefix-var prefix)
413+ |%
414+ :: Takes a prefix (initially [%var ...]) and applies variable access and function calls.
415+ :: This completely sidesteps calling the var parser.
416+ ::
417+ ++ recurse-prefix-var
418+ |= prefix=prefix-expr
419+ %+ knee *prefix-expr
420+ |.
421+ ;~ pose
422+ ;< =var bind
423+ ;~ pose
424+ (parse-access prefix)
425+ (parse-dot prefix)
426+ ==
427+ (recurse-prefix-var [%var var])
428+ ::
429+ ;< prefix=prefix-expr bind
430+ %+ cook |=(=functioncall [%call functioncall])
431+ (parse-functioncall-args prefix)
432+ (recurse-prefix-var prefix)
433+ ::
434+ (easy prefix)
435+ ==
436+ ++ parse-access
437+ |= =prefix-expr
438+ %+ cook
439+ |=([* =expr *] [%indexed prefix-expr expr])
440+ ;~ (glue ws)
441+ (just '[')
442+ parse-expr
443+ (just ']')
444+ ==
445+ ++ parse-dot
446+ |= =prefix-expr
447+ %+ cook
448+ |=([* =name] [%dot prefix-expr name])
449+ ;~ plug
450+ dot
451+ parse-name
452+ ==
453+ --
455454++ print-prefix-expr
456455 |= [=prefix-expr]
457456 ?- -.prefix-expr
zod/luau/tests/foo.lua+1−1
@@ -1,7 +1,7 @@
11foosjis = nil
22
33baz = bar[nil]
4−baz = bar
4+baz = bar(1).foo
55
66i = 3
77i, a[i] = i + 1, 20 >> 9