Chromium Code Reviews| Index: lib/compiler/implementation/dart_backend/placeholder_collector.dart |
| diff --git a/lib/compiler/implementation/dart_backend/placeholder_collector.dart b/lib/compiler/implementation/dart_backend/placeholder_collector.dart |
| index b2197e20ed52637a1fd4724035c7b691f1a6bd1a..80285d39b88b40380c913c15e1d42e8d2bfc3f2a 100644 |
| --- a/lib/compiler/implementation/dart_backend/placeholder_collector.dart |
| +++ b/lib/compiler/implementation/dart_backend/placeholder_collector.dart |
| @@ -375,10 +375,18 @@ class PlaceholderCollector extends AbstractVisitor { |
| } |
| visitSendSet(SendSet send) { |
| - final element = treeElements[send]; |
| - if (!Elements.isUnresolved(element)) { |
| + Element element = treeElements[send]; |
| + if (Elements.isErroneousElement(element)) { |
| + // Complicated case: constructs like receiver.selector++ can resolve |
| + // to ErroneousElement. Fortunately, receiver.selector still |
| + // can be resoved via treeElements[send.selector], that's all |
| + // that is needed to rename the construct properly. |
| + element = treeElements[send.selector]; |
| + } |
| + if (element === null) { |
| + if (send.receiver !== null) tryMakeMemberPlaceholder(send.selector); |
| + } else if (!element.isErroneous()) { |
| if (Elements.isStaticOrTopLevel(element)) { |
| - assert(element is VariableElement || element.isSetter()); |
|
Roman
2012/09/17 10:19:39
Maybe just add element.isGetter() to the assert? I
Anton Muhin
2012/09/17 14:13:06
Done.
|
| makeElementPlaceholder(send.selector, element); |
| } else { |
| assert(send.selector is Identifier); |
| @@ -388,10 +396,6 @@ class PlaceholderCollector extends AbstractVisitor { |
| tryMakeLocalPlaceholder(element, send.selector); |
| } |
| } |
| - } else { |
| - if (send.receiver !== null) { |
| - tryMakeMemberPlaceholder(send.selector); |
| - } |
| } |
| send.visitChildren(this); |
| } |