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