Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(340)

Side by Side Diff: sdk/lib/_internal/compiler/implementation/dart_backend/placeholder_collector.dart

Issue 22791002: Add renames in output when using the mirror helper library. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Changed solution approach. Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 collector.tryMakeLocalPlaceholder(element, node.selector); 100 collector.tryMakeLocalPlaceholder(element, node.selector);
101 } else { 101 } else {
102 assert(node.selector is FunctionExpression); 102 assert(node.selector is FunctionExpression);
103 } 103 }
104 } 104 }
105 } 105 }
106 } 106 }
107 107
108 visitStaticSend(Send node) { 108 visitStaticSend(Send node) {
109 final element = elements[node]; 109 final element = elements[node];
110 backend.registerStaticSend(element, node); 110 collector.backend.registerStaticSend(element, node);
ahe 2013/08/19 15:34:06 I don't understand this change.
zarah 2013/08/20 14:08:17 Since the backend is now needed in the collector a
111 111
112 if (Elements.isUnresolved(element) 112 if (Elements.isUnresolved(element)
113 || identical(element, compiler.assertMethod)) { 113 || identical(element, compiler.assertMethod)) {
114 return; 114 return;
115 } 115 }
116 if (element.isConstructor() || element.isFactoryConstructor()) { 116 if (element.isConstructor() || element.isFactoryConstructor()) {
117 // Rename named constructor in redirection position: 117 // Rename named constructor in redirection position:
118 // class C { C.named(); C.redirecting() : this.named(); } 118 // class C { C.named(); C.redirecting() : this.named(); }
119 if (node.receiver is Identifier 119 if (node.receiver is Identifier
120 && node.receiver.asIdentifier().isThis()) { 120 && node.receiver.asIdentifier().isThis()) {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 final List<DeclarationTypePlaceholder> declarationTypePlaceholders; 154 final List<DeclarationTypePlaceholder> declarationTypePlaceholders;
155 final Map<String, Set<Identifier>> memberPlaceholders; 155 final Map<String, Set<Identifier>> memberPlaceholders;
156 final Map<Element, List<ConstructorPlaceholder>> constructorPlaceholders; 156 final Map<Element, List<ConstructorPlaceholder>> constructorPlaceholders;
157 Map<String, LocalPlaceholder> currentLocalPlaceholders; 157 Map<String, LocalPlaceholder> currentLocalPlaceholders;
158 Element currentElement; 158 Element currentElement;
159 FunctionElement topmostEnclosingFunction; 159 FunctionElement topmostEnclosingFunction;
160 TreeElements treeElements; 160 TreeElements treeElements;
161 161
162 LibraryElement get coreLibrary => compiler.coreLibrary; 162 LibraryElement get coreLibrary => compiler.coreLibrary;
163 FunctionElement get entryFunction => compiler.mainApp.find(Compiler.MAIN); 163 FunctionElement get entryFunction => compiler.mainApp.find(Compiler.MAIN);
164 DartBackend get backend => compiler.backend;
164 165
165 get currentFunctionScope => functionScopes.putIfAbsent( 166 get currentFunctionScope => functionScopes.putIfAbsent(
166 topmostEnclosingFunction, () => new FunctionScope()); 167 topmostEnclosingFunction, () => new FunctionScope());
167 168
168 PlaceholderCollector(this.compiler, this.fixedMemberNames, this.elementAsts) : 169 PlaceholderCollector(this.compiler, this.fixedMemberNames, this.elementAsts) :
169 nullNodes = new Set<Node>(), 170 nullNodes = new Set<Node>(),
170 unresolvedNodes = new Set<Node>(), 171 unresolvedNodes = new Set<Node>(),
171 elementNodes = new Map<Element, Set<Node>>(), 172 elementNodes = new Map<Element, Set<Node>>(),
172 functionScopes = new Map<FunctionElement, FunctionScope>(), 173 functionScopes = new Map<FunctionElement, FunctionScope>(),
173 privateNodes = new Map<LibraryElement, Set<Identifier>>(), 174 privateNodes = new Map<LibraryElement, Set<Identifier>>(),
(...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after
531 } 532 }
532 } 533 }
533 node.visitChildren(this); 534 node.visitChildren(this);
534 } 535 }
535 536
536 visitFunctionExpression(FunctionExpression node) { 537 visitFunctionExpression(FunctionExpression node) {
537 bool isKeyword(Identifier id) => 538 bool isKeyword(Identifier id) =>
538 id != null && Keyword.keywords[id.source.slowToString()] != null; 539 id != null && Keyword.keywords[id.source.slowToString()] != null;
539 540
540 Element element = treeElements[node]; 541 Element element = treeElements[node];
542 if (element == compiler.mirrorHelperFunction) {
543 backend.registerHelperFunction(element, node);
544 }
541 // May get null here in case of A(int this.f()); 545 // May get null here in case of A(int this.f());
542 if (element != null) { 546 if (element != null) {
543 // Rename only local functions. 547 // Rename only local functions.
544 if (topmostEnclosingFunction == null) { 548 if (topmostEnclosingFunction == null) {
545 topmostEnclosingFunction = element; 549 topmostEnclosingFunction = element;
546 } 550 }
547 if (!identical(element, currentElement)) { 551 if (!identical(element, currentElement)) {
548 if (node.name != null) { 552 if (node.name != null) {
549 assert(node.name is Identifier); 553 assert(node.name is Identifier);
550 tryMakeLocalPlaceholder(element, node.name); 554 tryMakeLocalPlaceholder(element, node.name);
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
618 622
619 visitBlock(Block node) { 623 visitBlock(Block node) {
620 for (Node statement in node.statements.nodes) { 624 for (Node statement in node.statements.nodes) {
621 if (statement is VariableDefinitions) { 625 if (statement is VariableDefinitions) {
622 makeVarDeclarationTypePlaceholder(statement); 626 makeVarDeclarationTypePlaceholder(statement);
623 } 627 }
624 } 628 }
625 node.visitChildren(this); 629 node.visitChildren(this);
626 } 630 }
627 } 631 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698