Add a new test case `shadow_closure_with_local.wren` that verifies a closed-over variable can be shadowed by a local variable in an inner scope within the same closure. The test ensures that the outer closure variable retains its value outside the inner scope after the shadowing local goes out of scope. Also remove an incomplete TODO comment from `reuse_closure_slot.wren` and add a detailed TODO comment in `wren_compiler.c` discussing the design trade-off between treating capitalized names as globals versus implicit `this` calls when walking the scope chain.
18 lines
315 B
Plaintext
18 lines
315 B
Plaintext
{
|
|
var f = null
|
|
|
|
{
|
|
var a = "a"
|
|
f = new Fn { IO.print(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: Maximum number of closed-over variables (directly and/or indirect).
|