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`.
20 lines
391 B
Plaintext
20 lines
391 B
Plaintext
{
|
|
var f = null
|
|
|
|
{
|
|
var a = "a"
|
|
f = fn io.write(a)
|
|
}
|
|
|
|
{
|
|
// Since a is out of scope, the local slot will be reused by b. Make sure
|
|
// that f still closes over a.
|
|
var b = "b"
|
|
f.call // expect: a
|
|
}
|
|
}
|
|
|
|
// TODO(bob): Closing over this.
|
|
// TODO(bob): Close over fn/method parameter.
|
|
// TODO(bob): Maximum number of closed-over variables (directly and/or indirect).
|