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

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

Issue 24488004: Implement correct scoping rules for variables. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 2 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 CloningVisitor implements Visitor<Node> { 7 class CloningVisitor implements Visitor<Node> {
8 final TreeElements originalTreeElements; 8 final TreeElements originalTreeElements;
9 final TreeElementMapping cloneTreeElements; 9 final TreeElementMapping cloneTreeElements;
10 10
11 CloningVisitor(originalTreeElements) 11 CloningVisitor(originalTreeElements)
12 : cloneTreeElements = 12 : cloneTreeElements =
13 new TreeElementMapping(originalTreeElements.currentElement), 13 new TreeElementMapping(originalTreeElements.currentElement),
14 this.originalTreeElements = originalTreeElements; 14 this.originalTreeElements = originalTreeElements;
15 15
16 visit(Node node) { 16 visit(Node node) {
17 if (node == null) return null; 17 if (node == null) return null;
18 final clone = node.accept(this); 18 final clone = node.accept(this);
19 19
20 final originalElement = originalTreeElements[node]; 20 final originalElement = originalTreeElements[node];
21 if (originalElement != null) cloneTreeElements[clone] = originalElement; 21 if (originalElement != null) cloneTreeElements[clone] = originalElement;
22 22
23 final originalType = originalTreeElements.getType(node); 23 final originalType = originalTreeElements.getType(node);
24 if (originalType != null) cloneTreeElements.setType(clone, originalType); 24 if (originalType != null) cloneTreeElements.setType(clone, originalType);
25 return clone; 25 return clone;
26 } 26 }
27 27
28 visitBlock(Block node) => new Block(visit(node.statements)); 28 visitBlock(Block node) {
29 return new Block(visit(node.statements), node.declarations);
30 }
29 31
30 visitBreakStatement(BreakStatement node) => new BreakStatement( 32 visitBreakStatement(BreakStatement node) => new BreakStatement(
31 visit(node.target), node.keywordToken, node.semicolonToken); 33 visit(node.target), node.keywordToken, node.semicolonToken);
32 34
33 visitCascade(Cascade node) => new Cascade(visit(node.expression)); 35 visitCascade(Cascade node) => new Cascade(visit(node.expression));
34 36
35 visitCascadeReceiver(CascadeReceiver node) => new CascadeReceiver( 37 visitCascadeReceiver(CascadeReceiver node) => new CascadeReceiver(
36 visit(node.expression), node.cascadeOperator); 38 visit(node.expression), node.cascadeOperator);
37 39
38 visitCaseMatch(CaseMatch node) => new CaseMatch( 40 visitCaseMatch(CaseMatch node) => new CaseMatch(
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
180 new StringInterpolation(visit(node.string), visit(node.parts)); 182 new StringInterpolation(visit(node.string), visit(node.parts));
181 183
182 visitStringInterpolationPart(StringInterpolationPart node) => 184 visitStringInterpolationPart(StringInterpolationPart node) =>
183 new StringInterpolationPart(visit(node.expression), visit(node.string)); 185 new StringInterpolationPart(visit(node.expression), visit(node.string));
184 186
185 visitStringJuxtaposition(StringJuxtaposition node) => 187 visitStringJuxtaposition(StringJuxtaposition node) =>
186 new StringJuxtaposition(visit(node.first), visit(node.second)); 188 new StringJuxtaposition(visit(node.first), visit(node.second));
187 189
188 visitSwitchCase(SwitchCase node) => new SwitchCase( 190 visitSwitchCase(SwitchCase node) => new SwitchCase(
189 visit(node.labelsAndCases), node.defaultKeyword, visit(node.statements), 191 visit(node.labelsAndCases), node.defaultKeyword, visit(node.statements),
190 node.startToken); 192 node.startToken, node.declarations);
191 193
192 visitSwitchStatement(SwitchStatement node) => new SwitchStatement( 194 visitSwitchStatement(SwitchStatement node) => new SwitchStatement(
193 visit(node.parenthesizedExpression), visit(node.cases), 195 visit(node.parenthesizedExpression), visit(node.cases),
194 node.switchKeyword); 196 node.switchKeyword);
195 197
196 visitLiteralSymbol(LiteralSymbol node) => new LiteralSymbol( 198 visitLiteralSymbol(LiteralSymbol node) => new LiteralSymbol(
197 node.hashToken, visit(node.identifiers)); 199 node.hashToken, visit(node.identifiers));
198 200
199 visitThrow(Throw node) => new Throw( 201 visitThrow(Throw node) => new Throw(
200 visit(node.expression), node.throwToken, node.endToken); 202 visit(node.expression), node.throwToken, node.endToken);
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
284 } 286 }
285 287
286 Node visitStringNode(StringNode node) { 288 Node visitStringNode(StringNode node) {
287 unimplemented('visitNode', node: node); 289 unimplemented('visitNode', node: node);
288 } 290 }
289 291
290 unimplemented(String message, {Node node}) { 292 unimplemented(String message, {Node node}) {
291 throw message; 293 throw message;
292 } 294 }
293 } 295 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698