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

Unified Diff: pkg/compiler/lib/src/tree_ir/optimization/loop_rewriter.dart

Issue 1068243002: Overhaul tree IR visitor and rename IR classes. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: pkg/compiler/lib/src/tree_ir/optimization/loop_rewriter.dart
diff --git a/pkg/compiler/lib/src/tree_ir/optimization/loop_rewriter.dart b/pkg/compiler/lib/src/tree_ir/optimization/loop_rewriter.dart
index b1357ee32363017a0d56f90838e95f2cf6b2421c..e2b70119a72044ba1435bf9f99c8926b99fb4c69 100644
--- a/pkg/compiler/lib/src/tree_ir/optimization/loop_rewriter.dart
+++ b/pkg/compiler/lib/src/tree_ir/optimization/loop_rewriter.dart
@@ -27,34 +27,19 @@ part of tree_ir.optimization;
///
/// Note that the above pattern needs no iteration since nested ifs
/// have been collapsed previously in the [StatementRewriter] phase.
-class LoopRewriter extends RecursiveVisitor with PassMixin {
+class LoopRewriter extends RecursiveTransformer
+ implements Pass {
String get passName => 'Loop rewriter';
Set<Label> usedContinueLabels = new Set<Label>();
- void rewriteExecutableDefinition(ExecutableDefinition root) {
- root.body = visitStatement(root.body);
+ void rewrite(RootNode root) {
+ root.replaceEachBody(visitStatement);
}
- Statement visitLabeledStatement(LabeledStatement node) {
- node.body = visitStatement(node.body);
- node.next = visitStatement(node.next);
- return node;
- }
-
- Statement visitAssign(Assign node) {
- visitExpression(node.value);
- node.next = visitStatement(node.next);
- return node;
- }
-
- Statement visitReturn(Return node) {
- visitExpression(node.value);
- return node;
- }
-
- Statement visitBreak(Break node) {
- return node;
+ @override
+ void visitInnerFunction(FunctionDefinition node) {
+ node.body = new LoopRewriter().visitStatement(node.body);
}
Statement visitContinue(Continue node) {
@@ -62,13 +47,6 @@ class LoopRewriter extends RecursiveVisitor with PassMixin {
return node;
}
- Statement visitIf(If node) {
- visitExpression(node.condition);
- node.thenStatement = visitStatement(node.thenStatement);
- node.elseStatement = visitStatement(node.elseStatement);
- return node;
- }
-
Statement visitWhileTrue(WhileTrue node) {
assert(!usedContinueLabels.contains(node.label));
if (node.body is If) {
@@ -98,42 +76,4 @@ class LoopRewriter extends RecursiveVisitor with PassMixin {
}
return node;
}
-
- Statement visitWhileCondition(WhileCondition node) {
- // Note: not reachable but the implementation is trivial
- visitExpression(node.condition);
- node.body = visitStatement(node.body);
- node.next = visitStatement(node.next);
- return node;
- }
-
- Statement visitExpressionStatement(ExpressionStatement node) {
- visitExpression(node.expression);
- node.next = visitStatement(node.next);
- return node;
- }
-
- Statement visitTry(Try node) {
- node.tryBody = visitStatement(node.tryBody);
- node.catchBody = visitStatement(node.catchBody);
- return node;
- }
-
- Statement visitFunctionDeclaration(FunctionDeclaration node) {
- new LoopRewriter().rewrite(node.definition);
- node.next = visitStatement(node.next);
- return node;
- }
-
- void visitFunctionExpression(FunctionExpression node) {
- new LoopRewriter().rewrite(node.definition);
- }
-
- Statement visitSetField(SetField node) {
- visitExpression(node.object);
- visitExpression(node.value);
- node.next = visitStatement(node.next);
- return node;
- }
-
}

Powered by Google App Engine
This is Rietveld 408576698