| Index: runtime/vm/ast.cc
|
| ===================================================================
|
| --- runtime/vm/ast.cc (revision 45120)
|
| +++ runtime/vm/ast.cc (working copy)
|
| @@ -559,9 +559,7 @@
|
|
|
|
|
| AstNode* StaticGetterNode::MakeAssignmentNode(AstNode* rhs) {
|
| - const String& setter_name = String::Handle(Field::SetterName(field_name()));
|
| -
|
| - if (is_super_getter_) {
|
| + if (is_super_getter()) {
|
| ASSERT(receiver() != NULL);
|
| // If the static setter is not found in the superclass, noSuchMethod will be
|
| // called at runtime.
|
| @@ -571,9 +569,10 @@
|
| field_name(),
|
| rhs);
|
| }
|
| +
|
| const Function& setter =
|
| - Function::ZoneHandle(cls().LookupStaticFunction(setter_name));
|
| - if (!setter.IsNull()) {
|
| + Function::Handle(cls().LookupSetterFunction(field_name()));
|
| + if (!setter.IsNull() && setter.IsStaticFunction()) {
|
| return new StaticSetterNode(token_pos(), NULL, cls(), field_name(), rhs);
|
| }
|
| // Could not find a static setter. Look for a field.
|
| @@ -604,14 +603,8 @@
|
| }
|
| return new StoreStaticFieldNode(token_pos(), field, rhs);
|
| }
|
| - // Didn't find a static setter or a static field.
|
| - // If this static getter is in an instance function where
|
| - // a receiver is available, we turn this static getter
|
| - // into an instance setter (and will get an error at runtime if an
|
| - // instance setter cannot be found either).
|
| - if (receiver() != NULL) {
|
| - return new InstanceSetterNode(token_pos(), receiver(), field_name(), rhs);
|
| - }
|
| + // Didn't find a static setter or a static field. Make a call to
|
| + // the non-existent setter to trigger a NoSuchMethodError at runtime.
|
| return new StaticSetterNode(token_pos(), NULL, cls(), field_name(), rhs);
|
| }
|
|
|
|
|