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`.
26 lines
298 B
Plaintext
26 lines
298 B
Plaintext
var f = null
|
|
var g = null
|
|
|
|
{
|
|
var local = "local"
|
|
f = fn {
|
|
io.write(local)
|
|
local = "after f"
|
|
io.write(local)
|
|
}
|
|
|
|
g = fn {
|
|
io.write(local)
|
|
local = "after g"
|
|
io.write(local)
|
|
}
|
|
}
|
|
|
|
f.call
|
|
// expect: local
|
|
// expect: after f
|
|
|
|
g.call
|
|
// expect: after f
|
|
// expect: after g
|