on 9e7a271 help sign in
15 files changed+48−683
since splitsnapshots
unifiedsplit
TODO.md−2 desk/lib/interlist.hoon+6−1 desk/lib/lua.hoon+2−1 desk/lib/lua/interpreter.hoon−554 desk/lib/lua/parser.hoon+22−23 desk/lib/lua/printer.hoon+8−8 desk/lib/lua/utils.hoon−2 desk/lib/st.hoon+3−32 desk/res/lua/bar.lua−20 desk/res/lua/baz.lua−6 desk/res/lua/cycled/constructs.lua+2−2 desk/res/lua/foo.lua+2−2 desk/sur/interlist.hoon−8 desk/sur/lua.hoon+3−3 desk/ted/eval-lua.hoon−19
TODO.md−2
@@ -7,5 +7,3 @@
77- [x] binary operator priority
88- [x] ^ should be higher priority than unary ops
99- [x] Unifiy parened exprs
10−- [ ] pow
11−- [ ] attributes
desk/lib/interlist.hoon+6−1
@@ -1,6 +1,11 @@
1−/- *interlist
21=<
32|%
3+++ interlist
4+ |$ [sep val]
5+ $%
6+ [%double =val =sep tail=(interlist sep val)]
7+ [%single =val]
8+ ==
49++ new
510 |* [a=* b=(list [* *])]
611 ^- (interlist _?<(?=(~ b) -.i.b) _a)
desk/lib/lua.hoon+2−1
@@ -1 +1,2 @@
1−/+ lua-interpreter
1+|%
2+--
desk/lib/lua/interpreter.hoondeleted−554
@@ -1,554 +0,0 @@
1−/- *lua
2−/+ st
3−=<
4−|= =chunk
5−((eval-chunk chunk) *state)
6−|%
7−++ eval-chunk
8− |= =chunk
9− ^- (eval-m value)
10− ?- -.chunk
11− %blok (eval-blok +.chunk)
12− ==
13−++ object-id |$ obj @
14−++ objects
15− |$ obj [objs=(map (object-id obj) obj) next-id=(object-id obj)]
16−+$ value
17− $%
18− [%table val=(object-id table) meta=(unit (object-id table))]
19− [%string string]
20− [%num numeral]
21− [%multires (lest value)]
22− [%true ~]
23− [%false ~]
24− [%nil ~]
25− ==
26−+$ lval
27− $%
28− [%var name]
29− [%table-field (object-id table) value]
30− ==
31−+$ table (map value value)
32−+$ state
33− $:
34− tables=$~([(malt ~[[0 *table]]) 1] (objects table))
35− global-env=table
36− local-envs=$~(~[(malt ~[['_ENV' table+[0 ~]]])] (lest (map name value)))
37− ==
38−++ eval-m
39− |$ [val]
40− $-(state [st=state val=val])
41−++ pure
42− |* x=*
43− ^- (eval-m _x)
44− |=(st=state [st x])
45−++ bind
46− |* =mold
47− |* [prev=(eval-m) cont=$-(* (eval-m mold))]
48− ^+ $:cont
49− |= st=state
50− =/ [st=state val=_val:$:prev] (prev st)
51− ((cont val) st)
52−++ get-state
53− ^- (eval-m state)
54− |= st=state
55− [st st]
56−++ set-state
57− |= st=state
58− ^- (eval-m ~)
59− |= state
60− [st ~]
61−++ eval-blok
62− =<
63− |= =blok
64− ^- (eval-m value)
65− %- with-local
66− =/ body body.blok
67− |-
68− ^- (eval-m value)
69− ?~ body
70− ?~ ret.blok (pure nil+~)
71− ?~ u.ret.blok (pure nil+~)
72− ;< rets=(lest value) bind (eval-exprlist u.u.ret.blok)
73− (pure (multires rets))
74− ;< ~ bind (eval-stat i.body)
75− ;< ret=value bind $(body t.body)
76− (pure ret)
77− |%
78− ++ with-local
79− |* act=(eval-m)
80− ^- _act
81− ;< ~ bind push-local
82− ;< res=_val:$:act bind act
83− ;< ~ bind pop-local
84− (pure res)
85− ++ push-local
86− ^- (eval-m ~)
87− |= st=state
88− =. local-envs.st [*(map name value) local-envs.st]
89− [st ~]
90− ++ pop-local
91− ^- (eval-m ~)
92− |= st=state
93− =. local-envs.st
94− ?~ t.local-envs.st !!
95− t.local-envs.st
96− [st ~]
97− --
98−++ multires
99− |= vals=(lest value)
100− ^- value
101− ?~ t.vals i.vals
102− multires+vals
103−++ eval-exprlist
104− |= vals=exprlist
105− ^- (eval-m (lest value))
106− ;< val=value bind (eval-expr i.vals)
107− ?~ t.vals (pure [val ~])
108− ;< tail=(list value) bind $(vals t.vals)
109− (pure [val tail])
110−++ eval-stat
111− |= =stat
112− ^- (eval-m ~)
113− ?+ -.stat !!
114− %asmnt
115− ;< lhs=(lest lval) bind (process-varlist +<.stat)
116− ;< rhs=(lest value) bind (eval-exprlist +>.stat)
117− =/ asmnts (zip lhs (normalize-multires-exprlist rhs))
118− |-
119− ?~ asmnts (pure ~)
120− ;< * bind
121− ?- -<.i.asmnts
122− %var ((set-var ->.i.asmnts) +.i.asmnts)
123− %table-field
124− ;< tabl=table bind (get-table ->-.i.asmnts)
125− (set-table ->-.i.asmnts (~(put by tabl) ->+.i.asmnts +.i.asmnts))
126− ==
127− $(asmnts t.asmnts)
128− %local-asmnt
129− =/ lhs=(list name)
130− %+ turn attrnamelist.stat
131− |= [=name attr=(unit attrib)]
132− ?> ?=(~ attr)
133− name
134− ;< actual-values=(list [name value]) bind
135− ?~ rhs.stat (pure ~)
136− ;< rhs=(list value) bind (eval-exprlist u.rhs.stat)
137− (pure (zip lhs rhs))
138− ;< st=state bind get-state
139− =. i.local-envs.st
140− %- ~(uni by i.local-envs.st)
141− %- malt
142− (weld (turn lhs |=(=name [name `value`nil+~])) actual-values)
143− (set-state st)
144− ==
145−++ set-var
146− |= var=name
147− |= val=value
148− ^- (eval-m ~)
149− ;< envs=(list (map name value)) bind get-local-envs
150− =/ new-envs=(unit (lest (map name value)))
151− |-
152− ^- (unit (lest (map name value)))
153− ?~ envs ~
154− ?. (~(has by i.envs) var)
155− =/ rest $(envs t.envs)
156− ?~ rest ~
157− `[i.envs u.rest]
158− `[(~(put by i.envs) var val) t.envs]
159− ^- (eval-m ~)
160− ?. ?=(~ new-envs)
161− |= st=state
162− =. local-envs.st u.new-envs
163− [st ~]
164− =/ global-env (need ((get-from-local-envs envs) '_ENV'))
165− :: TODO: proper error
166− ?+ -.global-env !!
167− %table
168− ;< tabl=table bind (get-table +<.global-env)
169− (set-table +<.global-env (~(put by tabl) (string-val var) val))
170− ==
171−++ normalize-multires-exprlist
172− |= vals=(list value)
173− ^- (list value)
174− ?~ vals ~
175− ?~ t.vals ~[(normalize-multires i.vals)]
176− [i.vals $(vals t.vals)]
177−++ normalize-multires
178− |= val=value
179− ^- value
180− ?+ -.val val
181− %multires
182− =/ res=(lest value)
183− =/ vals=(lest value) +.val
184− |-
185− ?~ t.vals
186− =/ tail=value (normalize-multires i.vals)
187− ?: ?=(%multires -.tail) +.tail [tail ~]
188− [i.vals $(vals t.vals)]
189− ?~ t.res i.res
190− multires+res
191− ==
192−++ process-varlist
193− =<
194− |= =varlist
195− ^- (eval-m (lest lval))
196− ;< val=lval bind (process-var i.varlist)
197− ?~ t.varlist (pure ~[val])
198− ;< tail=(list lval) bind $(varlist t.varlist)
199− (pure [val tail])
200− |%
201− ++ process-var
202− |= =var
203− ^- (eval-m lval)
204− ?- -.var
205− %name (pure var++.var)
206− %indexed
207− ;< prefix=value bind (eval-prefix-expr +<.var)
208− ;< idx=value bind (eval-expr +>.var)
209− :: TODO: proper error
210− ?. ?=(%table -.prefix) !!
211− (pure table-field+[val.prefix idx])
212− %dot
213− ;< prefix=value bind (eval-prefix-expr +<.var)
214− :: TODO: proper error
215− ?. ?=(%table -.prefix) !!
216− (pure table-field+[val.prefix (string-val +>.var)])
217− ==
218− --
219−++ eval-expr
220− |= =expr
221− ^- (eval-m value)
222− ?+ -.expr !!
223− %false (pure expr)
224− %true (pure expr)
225− %nil (pure expr)
226− %string (pure expr)
227− %num (pure expr)
228− %binop (eval-binop +.expr)
229− %prefix-expr (eval-prefix-expr +.expr)
230− %unop (eval-unop +.expr)
231− %table
232− ;< tabl-id=(object-id table) bind (eval-table +.expr)
233− (pure table+[tabl-id ~])
234− ==
235−++ eval-table
236− |= tabl=^table
237− =<
238− ^- (eval-m (object-id table))
239− ;< felds=(list [value value]) bind
240− =/ counter 1
241− |-
242− ?~ tabl (pure ~)
243− ?- -.i.tabl
244− %keyed
245− ;< k=value bind (eval-expr +<.i.tabl)
246− ;< v=value bind (eval-expr +>.i.tabl)
247− ;< tail=(list [value value]) bind $(tabl t.tabl)
248− (pure [[k v] tail])
249− %unkeyed
250− ;< v=value bind (eval-expr +.i.tabl)
251− ?: &(?=(~ t.tabl) ?=(%multires -.v))
252− =/ vals=(list value) +.v
253− %- pure
254− ^- (list [value value])
255− |-
256− ?~ vals ~
257− [[num+int+(new:st counter) i.vals] $(vals t.vals, counter +(counter))]
258− ;< tail=(list [value value]) bind $(tabl t.tabl, counter +(counter))
259− (pure [[num+int+(new:st counter) v] tail])
260− ==
261− (new-table (malt felds))
262− |%
263− --
264−++ eval-unop
265− |= [op=unop =expr]
266− ^- (eval-m value)
267− ?+ op !!
268− %minus
269− ;< val=value bind (eval-expr expr)
270− ;< num=numeral bind (assert-numeral val)
271− %- pure
272− ?- -.num
273− %int num+int+(neg:st +.num)
274− %float num+float+(sub:rd *@rd +.num)
275− ==
276− %not
277− ;< val=value bind (eval-expr expr)
278− %- pure
279− ?: (falsy val) [%false ~] [%true ~]
280− %sig
281− ;< val=value bind (eval-expr expr)
282− ;< n=numeral bind (assert-numeral val)
283− ;< i=@st bind (to-int n)
284− %- pure
285− num+int+(mix i mask:st)
286− ==
287−++ eval-binop
288− |= [lhs=expr op=binop rhs=expr]
289− ^- (eval-m value)
290− =<
291− ?+ op !!
292− %add
293− ;< lhs=value bind (eval-expr lhs)
294− ;< rhs=value bind (eval-expr rhs)
295− ;< unified=unified-numerals bind (unify-numeral-values lhs rhs)
296− %- pure
297− :- %num
298− ?- -.unified
299− %i :- %int (add:st a.unified b.unified)
300− %f :- %float (add:rd a.unified b.unified)
301− ==
302− %sub
303− ;< lhs=value bind (eval-expr lhs)
304− ;< rhs=value bind (eval-expr rhs)
305− ;< unified=unified-numerals bind (unify-numeral-values lhs rhs)
306− %- pure
307− :- %num
308− ?- -.unified
309− %i :- %int (sub:st a.unified b.unified)
310− %f :- %float (sub:rd a.unified b.unified)
311− ==
312− %mul
313− ;< lhs=value bind (eval-expr lhs)
314− ;< rhs=value bind (eval-expr rhs)
315− ;< unified=unified-numerals bind (unify-numeral-values lhs rhs)
316− %- pure
317− :- %num
318− ?- -.unified
319− %i :- %int (mul:st a.unified b.unified)
320− %f :- %float (mul:rd a.unified b.unified)
321− ==
322− %int-div
323− ;< lhs=value bind (eval-expr lhs)
324− ;< rhs=value bind (eval-expr rhs)
325− ;< unified=unified-numerals bind (unify-numeral-values lhs rhs)
326− %- pure
327− :- %num
328− ?- -.unified
329− %i :- %int (div:st +.unified)
330− %f :- %float (int-div-float +.unified)
331− ==
332− %mod
333− ;< lhs=value bind (eval-expr lhs)
334− ;< rhs=value bind (eval-expr rhs)
335− ;< unified=unified-numerals bind (unify-numeral-values lhs rhs)
336− %- pure
337− :- %num
338− ?- -.unified
339− %i :- %int (mod:st +.unified)
340− %f
341− :- %float
342− (sub:rd a.unified (mul:rd (int-div-float +.unified) b.unified))
343− ==
344− %div
345− ;< lhs=value bind (eval-expr lhs)
346− ;< rhs=value bind (eval-expr rhs)
347− ;< lhs=numeral bind (assert-numeral lhs)
348− ;< rhs=numeral bind (assert-numeral rhs)
349− %- pure num+float+(div:rd (to-float lhs) (to-float rhs))
350− %exp !!
351− %band
352− ;< lhs=value bind (eval-expr lhs)
353− ;< rhs=value bind (eval-expr rhs)
354− ;< lhs=numeral bind (assert-numeral lhs)
355− ;< rhs=numeral bind (assert-numeral rhs)
356− ;< lhs=@st bind (to-int lhs)
357− ;< rhs=@st bind (to-int rhs)
358− %- pure
359− num+int+(dis lhs rhs)
360− %bor
361− ;< lhs=value bind (eval-expr lhs)
362− ;< rhs=value bind (eval-expr rhs)
363− ;< lhs=numeral bind (assert-numeral lhs)
364− ;< rhs=numeral bind (assert-numeral rhs)
365− ;< lhs=@st bind (to-int lhs)
366− ;< rhs=@st bind (to-int rhs)
367− %- pure
368− num+int+(con lhs rhs)
369− %bxor
370− ;< lhs=value bind (eval-expr lhs)
371− ;< rhs=value bind (eval-expr rhs)
372− ;< lhs=numeral bind (assert-numeral lhs)
373− ;< rhs=numeral bind (assert-numeral rhs)
374− ;< lhs=@st bind (to-int lhs)
375− ;< rhs=@st bind (to-int rhs)
376− %- pure
377− num+int+(mix lhs rhs)
378− %rshft
379− ;< lhs=value bind (eval-expr lhs)
380− ;< rhs=value bind (eval-expr rhs)
381− ;< lhs=numeral bind (assert-numeral lhs)
382− ;< rhs=numeral bind (assert-numeral rhs)
383− ;< lhs=@st bind (to-int lhs)
384− ;< rhs=@st bind (to-int rhs)
385− %- pure
386− num+int+(dis mask:st (?:((sig:st rhs) lsh rsh) [0 (abs:st rhs)] lhs))
387− %lshft
388− ;< lhs=value bind (eval-expr lhs)
389− ;< rhs=value bind (eval-expr rhs)
390− ;< lhs=numeral bind (assert-numeral lhs)
391− ;< rhs=numeral bind (assert-numeral rhs)
392− ;< lhs=@st bind (to-int lhs)
393− ;< rhs=@st bind (to-int rhs)
394− %- pure
395− num+int+(dis mask:st (?:((sig:st rhs) rsh lsh) [0 (abs:st rhs)] lhs))
396− %or
397− ;< lhs=value bind (eval-expr lhs)
398− ?. (falsy lhs) (pure lhs)
399− (eval-expr rhs)
400− %and
401− ;< lhs=value bind (eval-expr lhs)
402− ?: (falsy lhs) (pure lhs)
403− (eval-expr rhs)
404− ==
405− |%
406− ++ show-numeral
407− |= n=numeral
408− ^- tape
409− ?- -.n
410− %int (scow %s (to-s:st +.n))
411− %float (scow %rd +.n)
412− ==
413− ++ int-div-float
414− |= [a=@rd b=@rd]
415− =/ whole=(unit @s) (~(toi rd %d) (div:rd a b))
416− ?~ whole (div:rd .~0 .~0)
417− (san:rd u.whole)
418− +$ unified-numerals $%([%i a=@st b=@st] [%f a=@rd b=@rd])
419− ++ unify-numeral-values
420− |= [a=value b=value]
421− ^- (eval-m unified-numerals)
422− ;< a=numeral bind (assert-numeral a)
423− ;< b=numeral bind (assert-numeral b)
424− (pure (unify-numerals a b))
425− ++ unify-numerals
426− |= [a=numeral b=numeral]
427− ^- unified-numerals
428− ?: &(?=(%int -.a) ?=(%int -.b)) [%i +.a +.b]
429− [%f (to-float a) (to-float b)]
430− ++ to-float
431− |= n=numeral
432− ^- @rd
433− ?: ?=(%float -.n) +.n
434− (san:rd (to-s:st +.n))
435− --
436−++ to-int
437− |= n=numeral
438− ^- (eval-m @st)
439− ?: ?=(%int -.n) (pure +.n)
440− =/ i=(unit @s) (toi:rd +.n)
441− :: TODO: proper error
442− ?~ i !!
443− =/ i u.i
444− =/ cycled (san:rd i)
445− :: TODO: proper error
446− :: checks that we don't lose any information
447− ?. =(+.n cycled) !!
448− (pure (from-s:st i))
449−++ falsy
450− |= v=value
451− ^- ?
452− ?+ -.v |
453− %false &
454− %nil &
455− ==
456−++ assert-numeral
457− |= [a=value]
458− ^- (eval-m numeral)
459− :: TODO: throw a proper error
460− ?. ?=(%num -.a) !!
461− (pure +.a)
462−++ eval-prefix-expr
463− |= =prefix-expr
464− ^- (eval-m value)
465− ?- -.prefix-expr
466− %expr (eval-expr +.prefix-expr)
467− %call (eval-functioncall +.prefix-expr)
468− %var
469− ?- +<.prefix-expr
470− %name (lookup-var +>.prefix-expr)
471− %dot
472− ;< tabl=value bind (eval-prefix-expr +>-.prefix-expr)
473− (lookup-table-field tabl (string-val +>+.prefix-expr))
474− %indexed
475− ;< tabl=value bind (eval-prefix-expr +>-.prefix-expr)
476− ;< idx=value bind (eval-expr +>+.prefix-expr)
477− (lookup-table-field tabl idx)
478− ==
479− ==
480−++ lookup-table-field
481− |= [val=value fild=value]
482− ^- (eval-m value)
483− :: TODO: proper error
484− ?+ -.val !!
485− %table
486− ;< tabl=table bind (get-table val.val)
487− =/ res (~(get by tabl) fild)
488− :: TODO: error
489− ?~ res !!
490− (pure u.res)
491− ==
492−++ lookup-var
493− |= =name
494− ^- (eval-m value)
495− ;< envs=(list (map ^name value)) bind get-local-envs
496− =/ get-local (get-from-local-envs envs)
497− =/ local=(unit value) (get-local name)
498− ?. ?=(~ local) (pure u.local)
499− =/ global-env (get-local '_ENV')
500− ?~ global-env !!
501− (lookup-table-field u.global-env (string-val name))
502−++ get-from-local-envs
503− |= envs=(list (map name value))
504− |= =name
505− ^- (unit value)
506− ?~ envs ~
507− =/ val=(unit value) (~(get by i.envs) name)
508− ?~ val $(envs t.envs)
509− val
510−++ string-val
511− |= val=@t
512− ^- value
513− string+(trip val)
514−++ get
515− |* f=$-(state *)
516− ^- (eval-m _$:f)
517− |= st=state
518− [st (f st)]
519−++ get-table
520− |= id=(object-id table)
521− ^- (eval-m table)
522− ;< tables=(objects table) bind
523− %- get |=(st=state tables.st)
524− =/ table (~(get by objs.tables) id)
525− :: TODO: proper error
526− ?~ table !!
527− (pure u.table)
528−++ set-table
529− |= [id=(object-id table) tabl=table]
530− ^- (eval-m ~)
531− |= st=state
532− =. objs.tables.st (~(put by objs.tables.st) id tabl)
533− [st ~]
534−++ get-local-envs
535− ^- (eval-m (list (map name value)))
536− %- get |=(st=state local-envs.st)
537−++ eval-functioncall
538− |= =functioncall
539− ^- (eval-m value)
540− !!
541−++ new-table
542− |= tabl=table
543− ^- (eval-m (object-id table))
544− |= st=state
545− =/ id next-id.tables.st
546− =. next-id.tables.st +(id)
547− =. objs.tables.st (~(put by objs.tables.st) id tabl)
548− [st id]
549−++ zip
550− |* [lhs=(list) rhs=(list)]
551− ^- (list [_?<(?=(~ lhs) i.lhs) _?<(?=(~ rhs) i.rhs)])
552− ?: |(?=(~ lhs) ?=(~ rhs)) ~
553− [[i.lhs i.rhs] $(lhs t.lhs, rhs t.rhs)]
554−--
desk/lib/lua/parser.hoon+22−23
@@ -1,12 +1,11 @@
11/- *lua
2−/- *interlist
32/+ st
4−/+ inter=interlist
3+/+ interlist
54=<
65apex
76|%
87++ apex
9− %^ tnee %apex chunk
8+ %^ tnee %apex ast
109 ;~ pfix
1110 %- punt
1211 ;~ plug
@@ -58,8 +57,8 @@ apex
5857:: Parse expressions separated by binary operators
5958::
6059++ parse-expr-list
61− %^ tnee %parse-expr-list ,(interlist binop [(list unop) expr])
62− %+ parse:inter (ifix [ws ws] parse-binop)
60+ %^ tnee %parse-expr-list ,(interlist:interlist binop [(list unop) expr])
61+ %+ parse:interlist (ifix [ws ws] parse-binop)
6362 ;~ plug
6463 %- star
6564 ;~ pose
@@ -81,7 +80,7 @@ apex
8180 ==
8281++ process-expr-list
8382 =<
84− |= l=(interlist binop [(list unop) expr])
83+ |= l=(interlist:interlist binop [(list unop) expr])
8584 ^- expr
8685 %- strip-tree
8786 %- (process-right-assoc ~[%pow])
@@ -104,13 +103,13 @@ apex
104103 [%branch b=unop t=working-tree]
105104 [%tbd-unop l=(list [=expr =binop]) =unop r=working-tree]
106105 [%unoped l=(list [=expr =binop]) r=working-tree]
107− [%leaf (interlist binop expr)]
106+ [%leaf (interlist:interlist binop expr)]
108107 ==
109108 ++ preprocess-tree
110− |= l=(interlist binop [(list unop) expr])
109+ |= l=(interlist:interlist binop [(list unop) expr])
111110 ^- working-tree
112111 =/ splitted (find-unop l)
113− ?~ splitted leaf+(turn:inter l |=([* =expr] expr))
112+ ?~ splitted leaf+(turn:interlist l |=([* =expr] expr))
114113 tbd-unop+[l.u.splitted unop.u.splitted $(l r.u.splitted)]
115114 ++ apply-unops
116115 |= [unops=(list unop) =expr]
@@ -128,8 +127,8 @@ apex
128127 %unoped ?> =(~ l.tree) $(tree r.tree)
129128 ==
130129 ++ find-unop
131− |= l=(interlist binop [(list unop) expr])
132− ^- (unit [l=(list [=expr =binop]) =unop r=(interlist binop [(list unop) expr])])
130+ |= l=(interlist:interlist binop [(list unop) expr])
131+ ^- (unit [l=(list [=expr =binop]) =unop r=(interlist:interlist binop [(list unop) expr])])
133132 ?- -.l
134133 %single
135134 ?~ +<.l ~
@@ -138,7 +137,7 @@ apex
138137 %double
139138 ?~ -.val.l
140139 %+ ^^bind $(l tail.l)
141− |= [k=(list [expr binop]) =unop tail=(interlist binop [(list unop) expr])]
140+ |= [k=(list [expr binop]) =unop tail=(interlist:interlist binop [(list unop) expr])]
142141 [[[+.val.l sep.l] k] unop tail]
143142 %- some
144143 [~ i.-.val.l double+[[t.-.val.l +.val.l] sep.l tail.l]]
@@ -155,7 +154,7 @@ apex
155154 ==
156155 ++ split-left-unop-list
157156 |= [is-pivot=$-(binop ?) l=(list [=expr =binop])]
158− ^- (unit [l=(interlist binop expr) =binop r=(list [=expr =binop])])
157+ ^- (unit [l=(interlist:interlist binop expr) =binop r=(list [=expr =binop])])
159158 ?~ l ~
160159 ?: (is-pivot binop.i.l) `[single+expr.i.l binop.i.l t.l]
161160 =/ rest $(l t.l)
@@ -163,17 +162,17 @@ apex
163162 `[double+[expr.i.l binop.i.l -.u.rest] +.u.rest]
164163 ++ split-right-unop-list
165164 |= [is-pivot=$-(binop ?) l=(list [=expr =binop])]
166− ^- (unit [l=(interlist binop expr) =binop r=(list [=expr =binop])])
167− =/ reversed=(unit [l=(list [=binop =expr]) =binop r=(interlist binop expr)])
165+ ^- (unit [l=(interlist:interlist binop expr) =binop r=(list [=expr =binop])])
166+ =/ reversed=(unit [l=(list [=binop =expr]) =binop r=(interlist:interlist binop expr)])
168167 =/ l=(list [=binop =expr]) (flop (turn l swap))
169168 |-
170169 ?~ l ~
171− ?: (is-pivot binop.i.l) `[~ binop.i.l (new:inter expr.i.l t.l)]
172− =/ rest=(unit [l=(list [=binop =expr]) =binop r=(interlist binop expr)]) $(l t.l)
170+ ?: (is-pivot binop.i.l) `[~ binop.i.l (new:interlist expr.i.l t.l)]
171+ =/ rest=(unit [l=(list [=binop =expr]) =binop r=(interlist:interlist binop expr)]) $(l t.l)
173172 ?~ rest ~
174173 `[[i.l l.u.rest] +.u.rest]
175174 ?~ reversed ~
176− `[(reverse:inter r.u.reversed) binop.u.reversed (turn (flop l.u.reversed) swap)]
175+ `[(reverse:interlist r.u.reversed) binop.u.reversed (turn (flop l.u.reversed) swap)]
177176 ++ swap |*([a=* b=*] [b a])
178177 ++ process-right-assoc
179178 |= ops=(lest binop)
@@ -183,7 +182,7 @@ apex
183182 %leaf
184183 =/ l +.tree
185184 |-
186− =/ splitted (split-left-on:inter |=(op=binop (elem op ops)) l)
185+ =/ splitted (split-left-on:interlist |=(op=binop (elem op ops)) l)
187186 ?~ splitted [%leaf l]
188187 [%node $(l lhs.u.splitted) pivot.u.splitted $(l rhs.u.splitted)]
189188 %branch branch+[b.tree $(tree t.tree)]
@@ -209,7 +208,7 @@ apex
209208 =/ l +.tree
210209 |-
211210 ^- working-tree
212− =/ splitted (split-right-on:inter |=(op=binop (elem op ops)) l)
211+ =/ splitted (split-right-on:interlist |=(op=binop (elem op ops)) l)
213212 ?~ splitted [%leaf l]
214213 [%node $(l lhs.u.splitted) pivot.u.splitted $(l rhs.u.splitted)]
215214 %tbd-unop
@@ -568,7 +567,7 @@ apex
568567++ parse-local-asmnt
569568 %^ tnee %parse-local-asmnt local-asmnt
570569 %+ cook
571− |= [* * =attrnamelist rhs=(unit explist)] [attrnamelist rhs]
570+ |= [* * =attnamelist rhs=(unit explist)] [attnamelist rhs]
572571 ;~ plug
573572 (jest 'local')
574573 wss
@@ -582,7 +581,7 @@ apex
582581 ==
583582 ==
584583++ parse-attnamelist
585− %^ tnee %parse-attnamelist attrnamelist
584+ %^ tnee %parse-attnamelist attnamelist
586585 %+ most (ifix [ws ws] com)
587586 ;~ plug
588587 parse-name
@@ -867,7 +866,7 @@ apex
867866 ;~(less keyword ;~(plug name-fst-char (star name-char)))
868867++ bind
869868 |* =mold
870− |* [prev=rule cont=$-(* rule)]
869+ |* [prev=rule cont=$-(mold rule)]
871870 |= =nail
872871 =/ prev-edge (prev nail)
873872 ?~ q.prev-edge prev-edge
desk/lib/lua/printer.hoon+8−8
@@ -6,10 +6,10 @@ print
66:: AST
77::
88++ print
9− |= [=chunk]
9+ |= [=ast]
1010 ^- tape
11− ?- -.chunk
12− %blok (print-blok +.chunk)
11+ ?- -.ast
12+ %blok (print-blok +.ast)
1313 ==
1414:: Expr
1515::
@@ -264,7 +264,7 @@ print
264264 %- zing
265265 :~
266266 "local "
267− (print-attrnamelist attrnamelist.local-asmnt)
267+ (print-attnamelist attnamelist.local-asmnt)
268268 ?~ rhs.local-asmnt ""
269269 %- zing
270270 :~
@@ -272,13 +272,13 @@ print
272272 (print-explist u.rhs.local-asmnt)
273273 ==
274274 ==
275−:: attrnamelist
275+:: attnamelist
276276::
277−++ print-attrnamelist
278− |= =attrnamelist
277+++ print-attnamelist
278+ |= =attnamelist
279279 ^- tape
280280 %- commaed
281− %+ turn attrnamelist
281+ %+ turn attnamelist
282282 |= [=name attr=(unit attrib)]
283283 %- zing
284284 :~
desk/lib/lua/utils.hoondeleted−2
@@ -1,2 +0,0 @@
1−|%
2−--
desk/lib/st.hoon+3−32
@@ -11,15 +11,6 @@
1111 |= x=@st
1212 ^- @s
1313 (new:si ?!((sig x)) (abs x))
14−++ from-s
15− |= x=@s
16− ^- @st
17− %- ?. (syn:si x) neg |=(x=@st x)
18− (dis abs-mask (abs:si x))
19−++ neg
20− |= x=@st
21− ^- @st
22− (dis mask +((mix mask x)))
2314++ sig
2415 |= x=@st
2516 ^- ?
@@ -27,7 +18,8 @@
2718++ abs
2819 |= x=@st
2920 ^- @u
30− ?. (sig x) `@u`x `@u`(neg x)
21+ ?. (sig x) `@u`x
22+ (dis mask +((mix mask x)))
3123++ inc
3224 |= x=@st
3325 ^- @st
@@ -36,29 +28,8 @@
3628 |= [x=@st y=@st]
3729 ^- @st
3830 (dis mask (^add x y))
39−++ sub
40− |= [x=@st y=@st]
41− ^- @st
42− (from-s (dif:si (to-s x) (to-s y)))
43−++ mul
44− |= [x=@st y=@st]
45− ^- @st
46− (from-s (pro:si (to-s x) (to-s y)))
47−++ div
48− |= [x=@st y=@st]
49− ^- @st
50− =/ [x=@s y=@s] [(to-s x) (to-s y)]
51− =/ fra (fra:si x y)
52− =/ res (from-s fra)
53− ?: |(=(0 (rem:si x y)) (syn:si fra)) res
54− (dec res)
55−++ mod
56− |= [x=@st y=@st]
57− ^- @st
58− (sub x (mul (div x y) y))
59−++ mask 0xffff.ffff.ffff.ffff
6031--
6132|%
62−++ abs-mask 0x7fff.ffff.ffff.ffff
33+++ mask 0xffff.ffff.ffff.ffff
6334++ sign-mask 0x8000.0000.0000.0000
6435--
desk/res/lua/bar.lua−20
@@ -1,23 +1,3 @@
11assert(010 .. 020 .. -030 == "1020-30")
22x = - 2 ^ - 3^4
33
4−x = 1
5−
6−print(_ENV)
7−print(_ENV._ENV)
8−
9−local foo = _ENV
10−
11−-- local x = 8
12−
13−do
14− _ENV = {x = 2, print = print}
15− -- local x = 3
16− print(x)
17− print(_ENV)
18−end
19−
20−print(_ENV)
21−print(_ENV._ENV)
22−
23−print(foo._ENV)
desk/res/lua/baz.luadeleted−6
@@ -1,6 +0,0 @@
1−x = 8
2−
3−local y = x + 3
4−
5−
6−return y / 2
desk/res/lua/cycled/constructs.lua+2−2
@@ -28,7 +28,7 @@ a=(0x3 // 0x0)
2828;
2929a=(0x0 % 0x0)
3030end
31−assert(((0x2 ^ (0x3 ^ 0x2)) == (0x2 ^ (0x3 ^ 0x2))))
31+assert((((0x2 ^ 0x3) ^ 0x2) == (0x2 ^ (0x3 ^ 0x2))))
3232;
3333assert((((0x2 ^ 0x3) * 0x4) == ((0x2 ^ 0x3) * 0x4)))
3434;
@@ -49,7 +49,7 @@ assert(((0xf0 | (0xcc ~ (0xaa & 0xfd))) == 0xf4))
4949assert(((((0xfd & 0xaa) ~ 0xcc) | 0xf0) == 0xf4))
5050assert(((0xf0 & (0xf + 0x1)) == 0x10))
5151assert(((((0x3 ^ 0x4) // (0x2 ^ 0x3)) // 0x5) == 0x2))
52−assert((- (((0x3 + (((0x4 * 0x5) // (0x2 ^ (0x3 ^ 0x2))) // 0x9)) + ((0x4 % 0xa) / 0x3)) == (((- 0x3) + (((0x4 * 0x5) // (0x2 ^ (0x3 ^ 0x2))) // 0x9)) + ((0x4 % 0xa) / 0x3)))))
52+assert((- (((0x3 + (((0x4 * 0x5) // ((0x2 ^ 0x3) ^ 0x2)) // 0x9)) + ((0x4 % 0xa) / 0x3)) == (((- 0x3) + (((0x4 * 0x5) // (0x2 ^ (0x3 ^ 0x2))) // 0x9)) + ((0x4 % 0xa) / 0x3)))))
5353assert((not ((true or false) and nil)))
5454assert((true or (false and nil)))
5555assert(((((0x1 or false) and true) or false) == true))
desk/res/lua/foo.lua+2−2
@@ -47,9 +47,9 @@ do
4747 return 8, foo;
4848end
4949
50−-- print('the way of the future')
50+print('the way of the future')
5151
52−-- print 'hello'
52+print 'hello'
5353
5454h{key1 = 'Sonmi~451'}
5555
desk/sur/interlist.hoondeleted−8
@@ -1,8 +0,0 @@
1−|%
2−++ interlist
3− |$ [sep val]
4− $%
5− [%double =val =sep tail=(interlist sep val)]
6− [%single =val]
7− ==
8−--
desk/sur/lua.hoon+3−3
@@ -1,7 +1,7 @@
11|%
22+$ name @t
33+$ namelist (lest name)
4−+$ chunk
4++$ ast
55 $%
66 [%blok blok]
77 ==
@@ -104,8 +104,8 @@
104104+$ funcbody [pars=parlist body=blok]
105105+$ parlist [pars=(list name) wildcard=?]
106106+$ local-function [=name body=funcbody]
107−+$ local-asmnt [=attrnamelist rhs=(unit exprlist)]
108−+$ attrnamelist (lest [=name attr=(unit attrib)])
107++$ local-asmnt [=attnamelist rhs=(unit exprlist)]
108++$ attnamelist (lest [=name attr=(unit attrib)])
109109+$ attrib
110110 $?
111111 %const
desk/ted/eval-lua.hoondeleted−19
@@ -1,19 +0,0 @@
1−/- spider
2−/+ *strandio
3−/+ lua-parser
4−/+ lua-printer
5−/+ lua-interpreter
6−=>
7−|%
8−--
9−=/ m (strand:spider ,vase)
10−^- thread:spider
11−|= arg=vase
12−^- form:m
13−=/ file=beam (need (de-beam (need !<((unit path) arg))))
14−;< =cage bind:m (read-file file)
15−=/ lua-code=@t (of-wain:format !<(wain +.cage))
16−~& %parsing
17−=/ ast (scan (trip lua-code) lua-parser)
18−~& %evaluating
19−%- pure:m !>((lua-interpreter ast))