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 part of dart_backend; | 5 part of dart_backend; |
6 | 6 |
7 class LocalPlaceholder { | 7 class LocalPlaceholder { |
8 final String identifier; | 8 final String identifier; |
9 final Set<Node> nodes; | 9 final Set<Node> nodes; |
10 LocalPlaceholder(this.identifier) : nodes = new Set<Node>(); | 10 LocalPlaceholder(this.identifier) : nodes = new Set<Node>(); |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
163 internalError(Spannable node, String reason) { | 163 internalError(Spannable node, String reason) { |
164 collector.internalError(reason, node: node); | 164 collector.internalError(reason, node: node); |
165 } | 165 } |
166 | 166 |
167 visitNode(Node node) { | 167 visitNode(Node node) { |
168 internalError(node, "Unhandled node"); | 168 internalError(node, "Unhandled node"); |
169 } | 169 } |
170 } | 170 } |
171 | 171 |
172 class PlaceholderCollector extends Visitor { | 172 class PlaceholderCollector extends Visitor { |
173 final DiagnosticListener listener; | 173 final DiagnosticReporter reporter; |
174 final MirrorRenamer mirrorRenamer; | 174 final MirrorRenamer mirrorRenamer; |
175 final FunctionElement mainFunction; | 175 final FunctionElement mainFunction; |
176 final Set<String> fixedMemberNames; // member names which cannot be renamed. | 176 final Set<String> fixedMemberNames; // member names which cannot be renamed. |
177 final Map<Element, ElementAst> elementAsts; | 177 final Map<Element, ElementAst> elementAsts; |
178 final Set<Node> prefixNodesToErase = new Set<Node>(); | 178 final Set<Node> prefixNodesToErase = new Set<Node>(); |
179 final Set<Node> unresolvedNodes = new Set<Node>(); | 179 final Set<Node> unresolvedNodes = new Set<Node>(); |
180 final Map<Element, Set<Node>> elementNodes = new Map<Element, Set<Node>>(); | 180 final Map<Element, Set<Node>> elementNodes = new Map<Element, Set<Node>>(); |
181 final Map<FunctionElement, FunctionScope> functionScopes | 181 final Map<FunctionElement, FunctionScope> functionScopes |
182 = new Map<FunctionElement, FunctionScope>(); | 182 = new Map<FunctionElement, FunctionScope>(); |
183 final Map<LibraryElement, Set<Identifier>> privateNodes = | 183 final Map<LibraryElement, Set<Identifier>> privateNodes = |
184 new Map<LibraryElement, Set<Identifier>>(); | 184 new Map<LibraryElement, Set<Identifier>>(); |
185 final List<DeclarationTypePlaceholder> declarationTypePlaceholders | 185 final List<DeclarationTypePlaceholder> declarationTypePlaceholders |
186 = new List<DeclarationTypePlaceholder>(); | 186 = new List<DeclarationTypePlaceholder>(); |
187 final Map<String, Set<Identifier>> memberPlaceholders | 187 final Map<String, Set<Identifier>> memberPlaceholders |
188 = new Map<String, Set<Identifier>>(); | 188 = new Map<String, Set<Identifier>>(); |
189 final List<ConstructorPlaceholder> constructorPlaceholders | 189 final List<ConstructorPlaceholder> constructorPlaceholders |
190 = new List<ConstructorPlaceholder>(); | 190 = new List<ConstructorPlaceholder>(); |
191 Map<String, LocalPlaceholder> currentLocalPlaceholders; | 191 Map<String, LocalPlaceholder> currentLocalPlaceholders; |
192 Element currentElement; | 192 Element currentElement; |
193 FunctionElement topmostEnclosingFunction; | 193 FunctionElement topmostEnclosingFunction; |
194 TreeElements treeElements; | 194 TreeElements treeElements; |
195 | 195 |
196 get currentFunctionScope => functionScopes.putIfAbsent( | 196 get currentFunctionScope => functionScopes.putIfAbsent( |
197 topmostEnclosingFunction, () => new FunctionScope()); | 197 topmostEnclosingFunction, () => new FunctionScope()); |
198 | 198 |
199 PlaceholderCollector(this.listener, this.mirrorRenamer, | 199 PlaceholderCollector(this.reporter, this.mirrorRenamer, |
200 this.fixedMemberNames, this.elementAsts, | 200 this.fixedMemberNames, this.elementAsts, |
201 this.mainFunction); | 201 this.mainFunction); |
202 | 202 |
203 void collectFunctionDeclarationPlaceholders( | 203 void collectFunctionDeclarationPlaceholders( |
204 FunctionElement element, FunctionExpression node) { | 204 FunctionElement element, FunctionExpression node) { |
205 if (element.isConstructor) { | 205 if (element.isConstructor) { |
206 ConstructorElement constructor = element; | 206 ConstructorElement constructor = element; |
207 tryMakeConstructorPlaceholder(node.name, element); | 207 tryMakeConstructorPlaceholder(node.name, element); |
208 RedirectingFactoryBody bodyAsRedirectingFactoryBody = | 208 RedirectingFactoryBody bodyAsRedirectingFactoryBody = |
209 node.body.asRedirectingFactoryBody(); | 209 node.body.asRedirectingFactoryBody(); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
251 VariableDefinitions definitions = elementNode; | 251 VariableDefinitions definitions = elementNode; |
252 Node definition = definitions.definitions.nodes.head; | 252 Node definition = definitions.definitions.nodes.head; |
253 collectFieldDeclarationPlaceholders(element, definition); | 253 collectFieldDeclarationPlaceholders(element, definition); |
254 makeVarDeclarationTypePlaceholder(definitions); | 254 makeVarDeclarationTypePlaceholder(definitions); |
255 } else { | 255 } else { |
256 assert(element is ClassElement || element is TypedefElement); | 256 assert(element is ClassElement || element is TypedefElement); |
257 } | 257 } |
258 currentLocalPlaceholders = new Map<String, LocalPlaceholder>(); | 258 currentLocalPlaceholders = new Map<String, LocalPlaceholder>(); |
259 if (!(element is ConstructorElement && element.isRedirectingFactory)) { | 259 if (!(element is ConstructorElement && element.isRedirectingFactory)) { |
260 // Do not visit the body of redirecting factories. | 260 // Do not visit the body of redirecting factories. |
261 listener.withCurrentElement(element, () { | 261 reporter.withCurrentElement(element, () { |
262 elementNode.accept(this); | 262 elementNode.accept(this); |
263 }); | 263 }); |
264 } | 264 } |
265 } | 265 } |
266 | 266 |
267 // TODO(karlklose): should we create placeholders for these? | 267 // TODO(karlklose): should we create placeholders for these? |
268 bool isTypedefParameter(Element element) { | 268 bool isTypedefParameter(Element element) { |
269 return element != null && | 269 return element != null && |
270 element.enclosingElement != null && | 270 element.enclosingElement != null && |
271 element.enclosingElement.isTypedef; | 271 element.enclosingElement.isTypedef; |
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
468 | 468 |
469 if (constructorName != null) { | 469 if (constructorName != null) { |
470 Element definingConstructor = findDefiningConstructor(element); | 470 Element definingConstructor = findDefiningConstructor(element); |
471 constructorPlaceholders.add(new ConstructorPlaceholder(constructorName, | 471 constructorPlaceholders.add(new ConstructorPlaceholder(constructorName, |
472 definingConstructor)); | 472 definingConstructor)); |
473 tryMakePrivateIdentifier(constructorName, element); | 473 tryMakePrivateIdentifier(constructorName, element); |
474 } | 474 } |
475 } | 475 } |
476 | 476 |
477 void internalError(String reason, {Node node}) { | 477 void internalError(String reason, {Node node}) { |
478 listener.internalError(node, reason); | 478 reporter.internalError(node, reason); |
479 } | 479 } |
480 | 480 |
481 visit(Node node) => (node == null) ? null : node.accept(this); | 481 visit(Node node) => (node == null) ? null : node.accept(this); |
482 | 482 |
483 visitNode(Node node) { node.visitChildren(this); } // We must go deeper. | 483 visitNode(Node node) { node.visitChildren(this); } // We must go deeper. |
484 | 484 |
485 visitNewExpression(NewExpression node) { | 485 visitNewExpression(NewExpression node) { |
486 Send send = node.send; | 486 Send send = node.send; |
487 DartType type = treeElements.getType(node); | 487 DartType type = treeElements.getType(node); |
488 assert(type != null); | 488 assert(type != null); |
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
714 | 714 |
715 visitBlock(Block node) { | 715 visitBlock(Block node) { |
716 for (Node statement in node.statements.nodes) { | 716 for (Node statement in node.statements.nodes) { |
717 if (statement is VariableDefinitions) { | 717 if (statement is VariableDefinitions) { |
718 makeVarDeclarationTypePlaceholder(statement); | 718 makeVarDeclarationTypePlaceholder(statement); |
719 } | 719 } |
720 } | 720 } |
721 node.visitChildren(this); | 721 node.visitChildren(this); |
722 } | 722 } |
723 } | 723 } |
OLD | NEW |