push and pop local vars
commite7d0400c1cf5dc7f8c799213093e4eb9e3486ac1
authoriko <mail@iko.soy>
dateWed 7 Aug 2024, 20:15 (2 years ago)
parentf420294
TODO.md−3
@@ -8,6 +8,3 @@
88- [x] ^ should be higher priority than unary ops
99- [x] Unifiy parened exprs
1010- [ ] pow
11−
12−
13− {f()} -- creates a list with all results from f().
desk/lib/lua/interpreter.hoon+19−1
@@ -59,9 +59,11 @@
5959 |= state
6060 [st ~]
6161++ eval-blok
62+ =<
6263 |= =blok
6364 ^- (eval-m value)
6465 =/ body body.blok
66+ ;< ~ bind push-local
6567 |-
6668 ^- (eval-m value)
6769 ?~ body
@@ -70,7 +72,23 @@
7072 ;< rets=(lest value) bind (eval-exprlist u.u.ret.blok)
7173 (pure multires+rets)
7274 ;< ~ bind (eval-stat i.body)
73− $(body t.body)
75+ ;< ret=value bind $(body t.body)
76+ ;< ~ bind pop-local
77+ (pure ret)
78+ |%
79+ ++ push-local
80+ ^- (eval-m ~)
81+ |= st=state
82+ =. local-envs.st [*(map name value) local-envs.st]
83+ [st ~]
84+ ++ pop-local
85+ ^- (eval-m ~)
86+ |= st=state
87+ =. local-envs.st
88+ ?~ local-envs.st !!
89+ t.local-envs.st
90+ [st ~]
91+ --
7492++ eval-exprlist
7593 |= vals=exprlist
7694 ^- (eval-m (lest value))