Add support for "nonlocal" (capitalized) names, and change how variable lookup works.
Inside a method, all local variable lookup stops at the method boundary. In other words, methods, do not close over outer local variables. If a name is not found inside a method and is lowercase, it's a method on this. If it's capitalized, it's a global variable.
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
var Nonlocal = "before"
|
||||
IO.print(Nonlocal) // expect: before
|
||||
Nonlocal = "after"
|
||||
IO.print(Nonlocal) // expect: after
|
||||
|
||||
class Foo {
|
||||
static method {
|
||||
Nonlocal = "method"
|
||||
}
|
||||
}
|
||||
|
||||
Foo.method
|
||||
IO.print(Nonlocal) // expect: method
|
||||
|
||||
new Fn {
|
||||
Nonlocal = "fn"
|
||||
}.call
|
||||
IO.print(Nonlocal) // expect: fn
|
||||
Reference in New Issue
Block a user