| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 class LocalPlaceholder implements Hashable { | 5 class LocalPlaceholder implements Hashable { |
| 6 final String identifier; | 6 final String identifier; |
| 7 final Set<Node> nodes; | 7 final Set<Node> nodes; |
| 8 LocalPlaceholder(this.identifier) : nodes = new Set<Node>(); | 8 LocalPlaceholder(this.identifier) : nodes = new Set<Node>(); |
| 9 int hashCode() => identifier.hashCode(); | 9 int hashCode() => identifier.hashCode(); |
| 10 String toString() => | 10 String toString() => |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 52 if (element !== null) { | 52 if (element !== null) { |
| 53 collector.tryMakeLocalPlaceholder(element, node.selector); | 53 collector.tryMakeLocalPlaceholder(element, node.selector); |
| 54 } | 54 } |
| 55 } | 55 } |
| 56 | 56 |
| 57 visitGetterSend(Send node) { | 57 visitGetterSend(Send node) { |
| 58 final element = elements[node]; | 58 final element = elements[node]; |
| 59 // element === null means dynamic property access. | 59 // element === null means dynamic property access. |
| 60 if (element === null) { | 60 if (element === null) { |
| 61 collector.tryMakeMemberPlaceholder(node.selector); | 61 collector.tryMakeMemberPlaceholder(node.selector); |
| 62 } else if (element.isErroneous()) { |
| 63 return; |
| 62 } else if (element.isPrefix()) { | 64 } else if (element.isPrefix()) { |
| 63 // Node is prefix part in case of source 'lib.somesetter = 5;' | 65 // Node is prefix part in case of source 'lib.somesetter = 5;' |
| 64 collector.makeNullPlaceholder(node); | 66 collector.makeNullPlaceholder(node); |
| 65 } else if (Elements.isStaticOrTopLevel(element)) { | 67 } else if (Elements.isStaticOrTopLevel(element)) { |
| 66 // Unqualified or prefixed top level or static. | 68 // Unqualified or prefixed top level or static. |
| 67 collector.makeElementPlaceholder(node.selector, element); | 69 collector.makeElementPlaceholder(node.selector, element); |
| 68 } else if (!element.isTopLevel()) { | 70 } else if (!element.isTopLevel()) { |
| 69 if (element.isInstanceMember()) { | 71 if (element.isInstanceMember()) { |
| 70 collector.tryMakeMemberPlaceholder(node.selector); | 72 collector.tryMakeMemberPlaceholder(node.selector); |
| 71 } else { | 73 } else { |
| 72 // May get FunctionExpression here in selector | 74 // May get FunctionExpression here in selector |
| 73 // in case of A(int this.f()); | 75 // in case of A(int this.f()); |
| 74 if (node.selector is Identifier) { | 76 if (node.selector is Identifier) { |
| 75 collector.tryMakeLocalPlaceholder(element, node.selector); | 77 collector.tryMakeLocalPlaceholder(element, node.selector); |
| 76 } else { | 78 } else { |
| 77 assert(node.selector is FunctionExpression); | 79 assert(node.selector is FunctionExpression); |
| 78 } | 80 } |
| 79 } | 81 } |
| 80 } | 82 } |
| 81 } | 83 } |
| 82 | 84 |
| 83 visitStaticSend(Send node) { | 85 visitStaticSend(Send node) { |
| 84 final element = elements[node]; | 86 final element = elements[node]; |
| 87 if (Element.isUnresolved(element)) { |
| 88 return; |
| 89 } |
| 85 if (element.isConstructor() || element.isFactoryConstructor()) { | 90 if (element.isConstructor() || element.isFactoryConstructor()) { |
| 86 // Rename named constructor in redirection position: | 91 // Rename named constructor in redirection position: |
| 87 // class C { C.named(); C.redirecting() : this.named(); } | 92 // class C { C.named(); C.redirecting() : this.named(); } |
| 88 if (node.receiver is Identifier | 93 if (node.receiver is Identifier |
| 89 && node.receiver.asIdentifier().isThis()) { | 94 && node.receiver.asIdentifier().isThis()) { |
| 90 assert(node.selector is Identifier); | 95 assert(node.selector is Identifier); |
| 91 collector.tryMakeMemberPlaceholder(node.selector); | 96 collector.tryMakeMemberPlaceholder(node.selector); |
| 92 } | 97 } |
| 93 // Field names can be exposed as names of optional arguments, e.g. | 98 // Field names can be exposed as names of optional arguments, e.g. |
| 94 // class C { | 99 // class C { |
| (...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 355 | 360 |
| 356 visitNode(Node node) { node.visitChildren(this); } // We must go deeper. | 361 visitNode(Node node) { node.visitChildren(this); } // We must go deeper. |
| 357 | 362 |
| 358 visitSend(Send send) { | 363 visitSend(Send send) { |
| 359 new SendVisitor(this, treeElements).visitSend(send); | 364 new SendVisitor(this, treeElements).visitSend(send); |
| 360 send.visitChildren(this); | 365 send.visitChildren(this); |
| 361 } | 366 } |
| 362 | 367 |
| 363 visitSendSet(SendSet send) { | 368 visitSendSet(SendSet send) { |
| 364 final element = treeElements[send]; | 369 final element = treeElements[send]; |
| 365 if (element !== null) { | 370 if (!Element.isUnresolved(element)) { |
| 366 if (Elements.isStaticOrTopLevel(element)) { | 371 if (Elements.isStaticOrTopLevel(element)) { |
| 367 assert(element is VariableElement || element.isSetter()); | 372 assert(element is VariableElement || element.isSetter()); |
| 368 makeElementPlaceholder(send.selector, element); | 373 makeElementPlaceholder(send.selector, element); |
| 369 } else { | 374 } else { |
| 370 assert(send.selector is Identifier); | 375 assert(send.selector is Identifier); |
| 371 if (Elements.isInstanceField(element)) { | 376 if (Elements.isInstanceField(element)) { |
| 372 tryMakeMemberPlaceholder(send.selector); | 377 tryMakeMemberPlaceholder(send.selector); |
| 373 } else { | 378 } else { |
| 374 tryMakeLocalPlaceholder(element, send.selector); | 379 tryMakeLocalPlaceholder(element, send.selector); |
| 375 } | 380 } |
| (...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 563 | 568 |
| 564 visitBlock(Block node) { | 569 visitBlock(Block node) { |
| 565 for (Node statement in node.statements.nodes) { | 570 for (Node statement in node.statements.nodes) { |
| 566 if (statement is VariableDefinitions) { | 571 if (statement is VariableDefinitions) { |
| 567 makeVarDeclarationTypePlaceholder(statement); | 572 makeVarDeclarationTypePlaceholder(statement); |
| 568 } | 573 } |
| 569 } | 574 } |
| 570 node.visitChildren(this); | 575 node.visitChildren(this); |
| 571 } | 576 } |
| 572 } | 577 } |
| OLD | NEW |