| Index: runtime/vm/ast.cc
|
| diff --git a/runtime/vm/ast.cc b/runtime/vm/ast.cc
|
| index 613b46cb93f556c1555667024e4eaa038d4bbdf1..fdd39e4d503965b425ee8f1fefdf6c6e8a311e9f 100644
|
| --- a/runtime/vm/ast.cc
|
| +++ b/runtime/vm/ast.cc
|
| @@ -517,7 +517,7 @@ AstNode* LoadStaticFieldNode::MakeAssignmentNode(AstNode* rhs) {
|
| if (field().is_final()) {
|
| return NULL;
|
| }
|
| - if (Isolate::Current()->TypeChecksEnabled()) {
|
| + if (Isolate::Current()->flags().type_checks()) {
|
| rhs = new AssignableNode(
|
| field().token_pos(),
|
| rhs,
|
| @@ -557,11 +557,14 @@ AstNode* LoadIndexedNode::MakeAssignmentNode(AstNode* rhs) {
|
|
|
|
|
| AstNode* StaticGetterNode::MakeAssignmentNode(AstNode* rhs) {
|
| + Thread* thread = Thread::Current();
|
| + Zone* zone = thread->zone();
|
| + Isolate* isolate = thread->isolate();
|
| if (is_super_getter()) {
|
| ASSERT(receiver() != NULL);
|
| const String& setter_name =
|
| - String::ZoneHandle(Field::SetterSymbol(field_name_));
|
| - Function& setter = Function::ZoneHandle(
|
| + String::ZoneHandle(zone, Field::SetterSymbol(field_name_));
|
| + Function& setter = Function::ZoneHandle(zone,
|
| Resolver::ResolveDynamicAnyArgs(cls(), setter_name));
|
| if (setter.IsNull() || setter.is_abstract()) {
|
| // No instance setter found in super class chain,
|
| @@ -591,14 +594,14 @@ AstNode* StaticGetterNode::MakeAssignmentNode(AstNode* rhs) {
|
| return new StaticSetterNode(token_pos(), NULL, cls(), field_name_, rhs);
|
| }
|
|
|
| - Object& obj = Object::Handle(prefix.LookupObject(field_name_));
|
| + Object& obj = Object::Handle(zone, prefix.LookupObject(field_name_));
|
| if (obj.IsField()) {
|
| - const Field& field = Field::ZoneHandle(Field::Cast(obj).raw());
|
| + const Field& field = Field::ZoneHandle(zone, Field::Cast(obj).raw());
|
| if (!field.is_final()) {
|
| - if (Isolate::Current()->TypeChecksEnabled()) {
|
| + if (isolate->flags().type_checks()) {
|
| rhs = new AssignableNode(field.token_pos(),
|
| rhs,
|
| - AbstractType::ZoneHandle(field.type()),
|
| + AbstractType::ZoneHandle(zone, field.type()),
|
| field_name_);
|
| }
|
| return new StoreStaticFieldNode(token_pos(), field, rhs);
|
| @@ -606,10 +609,12 @@ AstNode* StaticGetterNode::MakeAssignmentNode(AstNode* rhs) {
|
| }
|
|
|
| // No field found in prefix. Look for a setter function.
|
| - const String& setter_name = String::Handle(Field::SetterName(field_name_));
|
| + const String& setter_name = String::Handle(zone,
|
| + Field::SetterName(field_name_));
|
| obj = prefix.LookupObject(setter_name);
|
| if (obj.IsFunction()) {
|
| - const Function& setter = Function::ZoneHandle(Function::Cast(obj).raw());
|
| + const Function& setter = Function::ZoneHandle(zone,
|
| + Function::Cast(obj).raw());
|
| ASSERT(setter.is_static() && setter.IsSetterFunction());
|
| return new StaticSetterNode(
|
| token_pos(), NULL, field_name_, setter, rhs);
|
| @@ -622,14 +627,14 @@ AstNode* StaticGetterNode::MakeAssignmentNode(AstNode* rhs) {
|
|
|
| if (owner().IsLibrary()) {
|
| const Library& library = Library::Cast(owner());
|
| - Object& obj = Object::Handle(library.ResolveName(field_name_));
|
| + Object& obj = Object::Handle(zone, library.ResolveName(field_name_));
|
| if (obj.IsField()) {
|
| - const Field& field = Field::ZoneHandle(Field::Cast(obj).raw());
|
| + const Field& field = Field::ZoneHandle(zone, Field::Cast(obj).raw());
|
| if (!field.is_final()) {
|
| - if (Isolate::Current()->TypeChecksEnabled()) {
|
| + if (isolate->flags().type_checks()) {
|
| rhs = new AssignableNode(field.token_pos(),
|
| rhs,
|
| - AbstractType::ZoneHandle(field.type()),
|
| + AbstractType::ZoneHandle(zone, field.type()),
|
| field_name_);
|
| }
|
| return new StoreStaticFieldNode(token_pos(), field, rhs);
|
| @@ -637,10 +642,12 @@ AstNode* StaticGetterNode::MakeAssignmentNode(AstNode* rhs) {
|
| }
|
|
|
| // No field found in library. Look for a setter function.
|
| - const String& setter_name = String::Handle(Field::SetterName(field_name_));
|
| + const String& setter_name = String::Handle(zone,
|
| + Field::SetterName(field_name_));
|
| obj = library.ResolveName(setter_name);
|
| if (obj.IsFunction()) {
|
| - const Function& setter = Function::ZoneHandle(Function::Cast(obj).raw());
|
| + const Function& setter = Function::ZoneHandle(zone,
|
| + Function::Cast(obj).raw());
|
| ASSERT(setter.is_static() && setter.IsSetterFunction());
|
| return new StaticSetterNode(token_pos(), NULL, field_name_, setter, rhs);
|
| }
|
| @@ -651,7 +658,7 @@ AstNode* StaticGetterNode::MakeAssignmentNode(AstNode* rhs) {
|
| }
|
|
|
| const Function& setter =
|
| - Function::ZoneHandle(cls().LookupSetterFunction(field_name_));
|
| + Function::ZoneHandle(zone, cls().LookupSetterFunction(field_name_));
|
| if (!setter.IsNull() && setter.IsStaticFunction()) {
|
| return new StaticSetterNode(token_pos(), NULL, field_name_, setter, rhs);
|
| }
|
| @@ -659,7 +666,8 @@ AstNode* StaticGetterNode::MakeAssignmentNode(AstNode* rhs) {
|
| // Access to a lazily initialized static field that has not yet been
|
| // initialized is compiled to a static implicit getter.
|
| // A setter may not exist for such a field.
|
| - const Field& field = Field::ZoneHandle(cls().LookupStaticField(field_name_));
|
| + const Field& field = Field::ZoneHandle(zone,
|
| + cls().LookupStaticField(field_name_));
|
| if (!field.IsNull()) {
|
| if (field.is_final()) {
|
| // Attempting to assign to a final variable will cause a NoSuchMethodError
|
| @@ -668,18 +676,19 @@ AstNode* StaticGetterNode::MakeAssignmentNode(AstNode* rhs) {
|
| return new StaticSetterNode(token_pos(), NULL, cls(), field_name_, rhs);
|
| }
|
| #if defined(DEBUG)
|
| - const String& getter_name = String::Handle(Field::GetterName(field_name_));
|
| + const String& getter_name = String::Handle(zone,
|
| + Field::GetterName(field_name_));
|
| const Function& getter =
|
| - Function::Handle(cls().LookupStaticFunction(getter_name));
|
| + Function::Handle(zone, cls().LookupStaticFunction(getter_name));
|
| ASSERT(!getter.IsNull() &&
|
| (getter.kind() == RawFunction::kImplicitStaticFinalGetter));
|
| #endif
|
| - if (Isolate::Current()->TypeChecksEnabled()) {
|
| + if (isolate->flags().type_checks()) {
|
| rhs = new AssignableNode(
|
| field.token_pos(),
|
| rhs,
|
| - AbstractType::ZoneHandle(field.type()),
|
| - String::ZoneHandle(field.name()));
|
| + AbstractType::ZoneHandle(zone, field.type()),
|
| + String::ZoneHandle(zone, field.name()));
|
| }
|
| return new StoreStaticFieldNode(token_pos(), field, rhs);
|
| }
|
|
|