on master help sign in
Got function call working
824add2iko
zod/luau/lib/lua.hoon+75−62
@@ -16,8 +16,7 @@
16 %blok (print-blok +.ast)
16 %blok (print-blok +.ast)
17 ==
17 ==
18++ apex
18++ apex
19− %+ knee *ast
19+ %^ tnee %apex ast
20− |.
21 %+ ifix [ws ws]
20 %+ ifix [ws ws]
22 ;~ pose
21 ;~ pose
23 (cook |=(=blok [%blok blok]) parse-blok)
22 (cook |=(=blok [%blok blok]) parse-blok)
@@ -36,8 +35,7 @@
36 [%nil ~]
35 [%nil ~]
37 ==
36 ==
38++ parse-atomic-expr
37++ parse-atomic-expr
39− %+ knee *expr
38+ %^ tnee %parse-atomic-expr expr
40− |.
41 ;~ pose
39 ;~ pose
42 (cold [%nil ~] (jest 'nil'))
40 (cold [%nil ~] (jest 'nil'))
43 ::
41 ::
@@ -56,14 +54,12 @@
56 %+ cook
54 %+ cook
57 |=(=table [%table table])
55 |=(=table [%table table])
58 parse-table
56 parse-table
59− ::
60 %+ cook
57 %+ cook
61 |=(=string [%string string])
58 |=(=string [%string string])
62 parse-string
59 parse-string
63 ==
60 ==
64++ parse-expr-list
61++ parse-expr-list
65− %+ knee *(interlist binop expr)
62+ %^ tnee %parse-expr-list (interlist binop expr)
66− |.
67 %+ parse-interlist (ifix [ws ws] parse-binop) parse-atomic-expr
63 %+ parse-interlist (ifix [ws ws] parse-binop) parse-atomic-expr
68:: TODO: This is mock and should take operator priority into account.
64:: TODO: This is mock and should take operator priority into account.
69::
65::
@@ -75,9 +71,7 @@
75 %double [%binop val.l sep.l (process-expr-list tail.l)]
71 %double [%binop val.l sep.l (process-expr-list tail.l)]
76 ==
72 ==
77++ parse-expr
73++ parse-expr
78− ~& "parse-exp"
74+ %^ tnee %parse-expr expr
79− %+ knee *expr
80− |.
81 %+ cook process-expr-list parse-expr-list
75 %+ cook process-expr-list parse-expr-list
82++ parse-parened-expr
76++ parse-parened-expr
83 %+ cook
77 %+ cook
@@ -116,8 +110,7 @@
116 "\""
110 "\""
117 ==
111 ==
118++ parse-string
112++ parse-string
119− %+ knee *string
113+ %^ tnee %parse-string string
120− |.
121 =>
114 =>
122 |%
115 |%
123 ++ parse-string
116 ++ parse-string
@@ -148,8 +141,7 @@
148 "}"
141 "}"
149 ==
142 ==
150++ parse-table
143++ parse-table
151− %+ knee *table
144+ %^ tnee %parse-table table
152− |.
153 %+ cook
145 %+ cook
154 |=([* =table *] table)
146 |=([* =table *] table)
155 ;~ (glue ws)
147 ;~ (glue ws)
@@ -166,8 +158,7 @@
166 %- commaed
158 %- commaed
167 %+ turn field-list print-field
159 %+ turn field-list print-field
168++ parse-field-list
160++ parse-field-list
169− %+ knee *field-list
161+ %^ tnee %parse-field-list field-list
170− |.
171 =>
162 =>
172 |%
163 |%
173 ++ field-sep
164 ++ field-sep
@@ -207,6 +198,7 @@
207++ parse-field
198++ parse-field
208 %+ knee *field
199 %+ knee *field
209 |.
200 |.
201+ %^ tnee %parse-field field
210 ;~ pose
202 ;~ pose
211 %+ cook
203 %+ cook
212 |=([* key=expr * * val=expr] [%keyed key val])
204 |=([* key=expr * * val=expr] [%keyed key val])
@@ -282,8 +274,7 @@
282 %concat ".."
274 %concat ".."
283 ==
275 ==
284++ parse-binop
276++ parse-binop
285− %+ knee *binop
277+ %^ tnee %parse-binop binop
286− |.
287 ;~ pose
278 ;~ pose
288 (cold %add (jest '+'))
279 (cold %add (jest '+'))
289 (cold %sub (jest '-'))
280 (cold %sub (jest '-'))
@@ -315,8 +306,7 @@
315 [%float @rd]
306 [%float @rd]
316 ==
307 ==
317++ parse-numeral
308++ parse-numeral
318− %+ knee *numeral
309+ %^ tnee %parse-numeral numeral
319− |.
320 ;~ pose
310 ;~ pose
321 %+ cook
311 %+ cook
322 |= x=@rd [%float x]
312 |= x=@rd [%float x]
@@ -352,9 +342,7 @@
352 %- commaed
342 %- commaed
353 %+ turn exprlist print-expr
343 %+ turn exprlist print-expr
354++ parse-exprlist
344++ parse-exprlist
355− ~& "parse-exprlist"
345+ %^ tnee %parse-exprlist exprlist
356− %+ knee *exprlist
357− |.
358 %+ most (ifix [ws ws] com) parse-expr
346 %+ most (ifix [ws ws] com) parse-expr
359:: Var
347:: Var
360::
348::
@@ -386,8 +374,7 @@
386 ==
374 ==
387 ==
375 ==
388++ parse-var
376++ parse-var
389− %+ knee *var
377+ %^ tnee %parse-var var
390− |.
391 =>
378 =>
392 |%
379 |%
393 ++ parse-access
380 ++ parse-access
@@ -430,8 +417,7 @@
430 %- commaed
417 %- commaed
431 %+ turn varlist print-var
418 %+ turn varlist print-var
432++ parse-varlist
419++ parse-varlist
433− %+ knee *varlist
420+ %^ tnee %parse-varlist varlist
434− |.
435 %+ most (ifix [ws ws] com) parse-var
421 %+ most (ifix [ws ws] com) parse-var
436:: Prefix Expr
422:: Prefix Expr
437::
423::
@@ -442,18 +428,14 @@
442 [%var var]
428 [%var var]
443 ==
429 ==
444++ parse-simple-prefix-expr
430++ parse-simple-prefix-expr
445− ~& "parse-simple-prefix-expr"
431+ %^ tnee %parse-simple-prefix-expr $%([%expr expr] [%var var])
446− %+ knee *$%([%expr expr] [%var var])
447− |.
448 ;~ pose
432 ;~ pose
449 parse-parened-expr
433 parse-parened-expr
450 ::
434 ::
451 %+ cook |=([=var] [%var var]) parse-var
435 %+ cook |=([=var] [%var var]) parse-var
452 ==
436 ==
453++ parse-prefix-expr
437++ parse-prefix-expr
454− ~& "parse-prefix-expr"
438+ %^ tnee %parse-prefix-expr prefix-expr
455− %+ knee *prefix-expr
456− |.
457 ;< prefix=$%([%expr expr] [%var var]) bind parse-simple-prefix-expr
439 ;< prefix=$%([%expr expr] [%var var]) bind parse-simple-prefix-expr
458 ;~ pose
440 ;~ pose
459 %+ cook |=(=functioncall [%call functioncall])
441 %+ cook |=(=functioncall [%call functioncall])
@@ -492,6 +474,7 @@
492++ parse-stat
474++ parse-stat
493 %+ knee *stat
475 %+ knee *stat
494 |.
476 |.
477+ %^ tnee %parse-stat stat
495 ;~ pose
478 ;~ pose
496 (cold [%empty ~] (just ';'))
479 (cold [%empty ~] (just ';'))
497 ::
480 ::
@@ -629,6 +612,7 @@
629++ parse-if
612++ parse-if
630 %+ knee *if
613 %+ knee *if
631 |.
614 |.
615+ %^ tnee %parse-if if
632 %+ cook
616 %+ cook
633 |= [* cond=expr * body=blok elsa=(list [cond=expr body=blok]) else=(unit blok) *]
617 |= [* cond=expr * body=blok elsa=(list [cond=expr body=blok]) else=(unit blok) *]
634 [cond body elsa else]
618 [cond body elsa else]
@@ -684,16 +668,17 @@
684 ==
668 ==
685 ==
669 ==
686++ parse-functioncall
670++ parse-functioncall
687− %+ knee *functioncall
671+ %^ tnee %parse-functioncall functioncall
688− |.
689 ;< prefix=prefix-expr bind parse-prefix-expr
672 ;< prefix=prefix-expr bind parse-prefix-expr
690− ~& > prefix
673+ ;~ pose
691− (parse-functioncall-args prefix)
674+ (parse-functioncall-args prefix)
675+ ::
676+ ?: ?=(%call -.prefix) (easy +.prefix) fail
677+ ==
692++ parse-functioncall-args
678++ parse-functioncall-args
693− ~& "parse-functioncall-args"
694 |= =prefix-expr
679 |= =prefix-expr
695− %+ knee *functioncall
680+ ~& prefix-expr
696− |.
681+ %^ tnee %parse-functioncall-args functioncall
697 ;~ pfix
682 ;~ pfix
698 ws
683 ws
699 ;~ pose
684 ;~ pose
@@ -724,9 +709,7 @@
724 ")"
709 ")"
725 ==
710 ==
726++ parse-args
711++ parse-args
727− ~& "parse-args"
712+ %^ tnee %parse-args args
728− %+ knee *args
729− |.
730 ;~ pose
713 ;~ pose
731 %+ cook
714 %+ cook
732 |= [* =exprlist *] exprlist
715 |= [* =exprlist *] exprlist
@@ -758,8 +741,7 @@
758 "::"
741 "::"
759 ==
742 ==
760++ parse-label
743++ parse-label
761− %+ knee *label
744+ %^ tnee %parse-label label
762− |.
763 %+ cook
745 %+ cook
764 |= [* =label *] label
746 |= [* =label *] label
765 ;~ (glue ws)
747 ;~ (glue ws)
@@ -780,10 +762,9 @@
780 ?~ ret.blok ~
762 ?~ ret.blok ~
781 ~[(print-ret u.ret.blok)]
763 ~[(print-ret u.ret.blok)]
782++ parse-blok
764++ parse-blok
783− %+ knee *blok
765+ %^ tnee %parse-blok blok
784− |.
785 ;~ plug
766 ;~ plug
786− (most wss parse-stat)
767+ (most ws parse-stat)
787 ::
768 ::
788 %- punt
769 %- punt
789 ;~ pfix
770 ;~ pfix
@@ -803,8 +784,7 @@
803 (print-exprlist ret)
784 (print-exprlist ret)
804 ==
785 ==
805++ parse-ret
786++ parse-ret
806− %+ knee *ret
787+ %^ tnee %parse-ret ret
807− |.
808 %+ cook
788 %+ cook
809 |= [[* =exprlist] *] exprlist
789 |= [[* =exprlist] *] exprlist
810 ;~ plug
790 ;~ plug
@@ -822,16 +802,15 @@
822 %- zing
802 %- zing
823 %+ join "," l
803 %+ join "," l
824++ parse-name
804++ parse-name
825− %+ knee *name
805+ :: %^ tnee %parse-name name
826− |.
806+ :: |.
827 =>
807 =>
828 |%
808 |%
829 ++ name-char ;~(pose name-fst-char dit:ab)
809 ++ name-char ;~(pose name-fst-char dit:ab)
830 ++ name-fst-char ;~(pose alf:ab (just '_'))
810 ++ name-fst-char ;~(pose alf:ab (just '_'))
831 --
811 --
832− %+ cook
833− |= =tape (crip tape)
812+ %+ cook |= =tape (crip tape)
834− ;~(plug name-fst-char (star name-char))
813+ ;~(less keyword ;~(plug name-fst-char (star name-char)))
835++ show-s
814++ show-s
836 |=(s=@s `tape`[?:((syn:si s) %$ '-') (slag 2 (scow %ui (abs:si s)))])
815 |=(s=@s `tape`[?:((syn:si s) %$ '-') (slag 2 (scow %ui (abs:si s)))])
837++ show-u
816++ show-u
@@ -855,8 +834,7 @@
855 %+ cold ~
834 %+ cold ~
856 %- plus w
835 %- plus w
857++ parse-float
836++ parse-float
858− %+ knee *@rd
837+ %^ tnee %parse-float @rd
859− |.
860 %+ cook ryld
838 %+ cook ryld
861 %+ cook royl-cell:so
839 %+ cook royl-cell:so
862 %+ sear
840 %+ sear
@@ -888,8 +866,7 @@
888 ==
866 ==
889 ==
867 ==
890++ parse-hex-float
868++ parse-hex-float
891− %+ knee *@rd
869+ %^ tnee %parse-hex-float @rd
892− |.
893 =<
870 =<
894 %+ sear
871 %+ sear
895 |= [* * int=tape frac=(unit tape) exp=(unit [exp-sign=? exp=@])]
872 |= [* * int=tape frac=(unit tape) exp=(unit [exp-sign=? exp=@])]
@@ -925,9 +902,8 @@
925 ==
902 ==
926 |%
903 |%
927 ++ hex-digit
904 ++ hex-digit
928− %+ knee *char
905+ %^ tnee %hex-digit char
929− |.
930− ;~ pose
906+ ;~ pose
931 (shim '0' '9')
907 (shim '0' '9')
932 (shim 'a' 'f')
908 (shim 'a' 'f')
933 (shim 'A' 'F')
909 (shim 'A' 'F')
@@ -939,4 +915,41 @@
939 %- r-co:co
915 %- r-co:co
940 %- rlyd
916 %- rlyd
941 x
917 x
918+++ keyword
919+ %+ cold ~
920+ ;~ pose
921+ (jest 'and')
922+ (jest 'break')
923+ (jest 'do')
924+ (jest 'else')
925+ (jest 'elseif')
926+ (jest 'end')
927+ (jest 'false')
928+ (jest 'for')
929+ (jest 'function')
930+ (jest 'goto')
931+ (jest 'if')
932+ (jest 'in')
933+ (jest 'local')
934+ (jest 'nil')
935+ (jest 'not')
936+ (jest 'or')
937+ (jest 'repeat')
938+ (jest 'return')
939+ (jest 'then')
940+ (jest 'true')
941+ (jest 'until')
942+ (jest 'while')
943+ ==
944+++ tnee
945+ |* [=term gar=mold sef=rule]
946+ |* tub=nail
947+ ^- (like gar)
948+ =/ trace &
949+ =/ foo ?: trace ~&([term q.tub] ~) ~
950+ =/ res (sef tub)
951+ ?. trace res
952+ ?~ q.res
953+ ~& [term %nope] res
954+ ~& > [term %ok] res
942 --
955 --
zod/luau/tests/foo.lua+1−1
@@ -74,5 +74,5 @@ until true
74
74
75if l == 3 then a = a + 1 ; assert(getlocal(2, 1) == "(temporary)")
75if l == 3 then a = a + 1 ; assert(getlocal(2, 1) == "(temporary)")
76elseif l == 4 then a = a + 1; assert(getlocal(2, 1) == "A")
76elseif l == 4 then a = a + 1; assert(getlocal(2, 1) == "A")
77+else ;
77end
78end
78−