Chromium Code Reviews| Index: runtime/vm/object.cc |
| diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc |
| index f674cd4b80669a4b9a64444e12601acb5135aed4..cc0c756c2f01ebec25c599fe6f7cf688d625778b 100644 |
| --- a/runtime/vm/object.cc |
| +++ b/runtime/vm/object.cc |
| @@ -7387,6 +7387,39 @@ void Field::PrintJSONImpl(JSONStream* stream, bool ref) const { |
| } |
| +RawInstance* Field::GetterClosure() const { |
| + ASSERT(is_static()); |
| + const Class& field_owner = Class::Handle(owner()); |
| + const char* field_name = String::Handle(name()).ToCString(); |
| + String& expr_src = String::Handle( |
| + String::NewFormatted("() { return %s; }", field_name)); |
| + Object& result = |
| + Object::Handle(field_owner.Evaluate(expr_src, |
| + Object::empty_array(), |
| + Object::empty_array())); |
| + ASSERT(result.IsInstance()); |
| + result = Object::Clone(result, Heap::kOld); |
| + return Instance::RawCast(result.raw()); |
| +} |
| + |
| + |
| +RawInstance* Field::SetterClosure() const { |
| + ASSERT(is_static()); |
| + const Class& field_owner = Class::Handle(owner()); |
| + const char* field_name = String::Handle(name()).ToCString(); |
| + // TODO(hausner): Ensure that parameter name does not hide field name. |
| + String& expr_src = String::Handle( |
| + String::NewFormatted("(xxx) { return %s = xxx; }", field_name)); |
|
Florian Schneider
2015/07/20 07:00:16
s/xxx/value/
to have a name that is already in ou
hausner
2015/07/21 17:18:36
Done.
|
| + Object& result = |
| + Object::Handle(field_owner.Evaluate(expr_src, |
| + Object::empty_array(), |
| + Object::empty_array())); |
| + ASSERT(result.IsInstance()); |
| + result = Object::Clone(result, Heap::kOld); |
| + return Instance::RawCast(result.raw()); |
| +} |
| + |
| + |
| RawArray* Field::dependent_code() const { |
| return raw_ptr()->dependent_code_; |
| } |