| Index: runtime/vm/object.cc
|
| ===================================================================
|
| --- runtime/vm/object.cc (revision 14794)
|
| +++ runtime/vm/object.cc (working copy)
|
| @@ -3066,6 +3066,27 @@
|
| }
|
|
|
|
|
| +RawInstance* Function::implicit_static_closure() const {
|
| + if (IsImplicitStaticClosureFunction()) {
|
| + const Object& obj = Object::Handle(raw_ptr()->data_);
|
| + ASSERT(!obj.IsNull());
|
| + return ClosureData::Cast(obj).implicit_static_closure();
|
| + }
|
| + return Instance::null();
|
| +}
|
| +
|
| +
|
| +void Function::set_implicit_static_closure(const Instance& closure) const {
|
| + if (IsImplicitStaticClosureFunction()) {
|
| + const Object& obj = Object::Handle(raw_ptr()->data_);
|
| + ASSERT(!obj.IsNull());
|
| + ClosureData::Cast(obj).set_implicit_static_closure(closure);
|
| + return;
|
| + }
|
| + UNREACHABLE();
|
| +}
|
| +
|
| +
|
| RawCode* Function::closure_allocation_stub() const {
|
| if (IsClosureFunction()) {
|
| const Object& obj = Object::Handle(raw_ptr()->data_);
|
| @@ -4170,6 +4191,13 @@
|
| }
|
|
|
|
|
| +void ClosureData::set_implicit_static_closure(const Instance& closure) const {
|
| + ASSERT(!closure.IsNull());
|
| + ASSERT(raw_ptr()->closure_ == Instance::null());
|
| + StorePointer(&raw_ptr()->closure_, closure.raw());
|
| +}
|
| +
|
| +
|
| void ClosureData::set_closure_allocation_stub(const Code& value) const {
|
| ASSERT(!value.IsNull());
|
| ASSERT(raw_ptr()->closure_allocation_stub_ == Code::null());
|
|
|