Get closures working!
In the process, I had to change the grammar. There is now a strong separation between statements and expressions. The code was just wrong before when it popped locals at the end of a block scope because there could be temporaries on the stack if the block was in expression position. This fixes that. Still need to implement closing over `this`.
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
var f = null
|
||||
|
||||
fn {
|
||||
var a = "a"
|
||||
fn {
|
||||
var b = "b"
|
||||
fn {
|
||||
var c = "c"
|
||||
f = fn {
|
||||
io.write(a)
|
||||
io.write(b)
|
||||
io.write(c)
|
||||
}
|
||||
}.call
|
||||
}.call
|
||||
}.call
|
||||
|
||||
f.call
|
||||
// expect: a
|
||||
// expect: b
|
||||
// expect: c
|
||||
Reference in New Issue
Block a user