Handle references to fields with inheritance in closures.

This commit is contained in:
Bob Nystrom
2014-01-15 07:03:24 -08:00
parent 9e30fa67ed
commit eb1c0284dd
3 changed files with 62 additions and 2 deletions
@@ -0,0 +1,36 @@
class Foo {
new { _field = "Foo field" }
closeOverFooGet {
return fn { return fn { return _field } }
}
closeOverFooSet {
return fn { return fn { _field = "new foo value" } }
}
}
class Bar is Foo {
new {
super
_field = "Bar field"
}
closeOverBarGet {
return fn { return fn { return _field } }
}
closeOverBarSet {
return fn { return fn { _field = "new bar value" } }
}
}
var bar = new Bar
IO.print(bar.closeOverFooGet.call.call) // expect: Foo field
IO.print(bar.closeOverBarGet.call.call) // expect: Bar field
bar.closeOverFooSet.call.call
IO.print(bar.closeOverFooGet.call.call) // expect: new foo value
IO.print(bar.closeOverBarGet.call.call) // expect: Bar field
bar.closeOverBarSet.call.call
IO.print(bar.closeOverFooGet.call.call) // expect: new foo value
IO.print(bar.closeOverBarGet.call.call) // expect: new bar value
+16
View File
@@ -0,0 +1,16 @@
class Base {
foo {
IO.print("Base.foo")
}
}
class Derived is Base {
foo {
IO.print("Derived.foo")
super
}
}
(new Derived).foo
// expect: Derived.foo
// expect: Base.foo