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:
Bob Nystrom
2015-01-13 21:36:42 -08:00
parent 9cb414d63b
commit a8e2ba233c
8 changed files with 124 additions and 61 deletions
+18
View File
@@ -0,0 +1,18 @@
var foo = "variable"
class Foo {
foo { "method" }
method {
IO.print(foo)
}
static foo { "class method" }
static classMethod {
IO.print(foo)
}
}
(new Foo).method // expect: method
Foo.classMethod // expect: class method