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

Unified Diff: sdk/lib/_internal/compiler/implementation/ir/ir_tracer.dart

Issue 231863007: Support local variables in dart2dart. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Incorporated review comments. Created 6 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: sdk/lib/_internal/compiler/implementation/ir/ir_tracer.dart
diff --git a/sdk/lib/_internal/compiler/implementation/ir/ir_tracer.dart b/sdk/lib/_internal/compiler/implementation/ir/ir_tracer.dart
index 3c79ef05cbe3b627085e4331e2e7effdfef0c416..f3864d154184e96216ef7ddf22858f526f9d9701 100644
--- a/sdk/lib/_internal/compiler/implementation/ir/ir_tracer.dart
+++ b/sdk/lib/_internal/compiler/implementation/ir/ir_tracer.dart
@@ -31,7 +31,7 @@ class IRTracer extends TracerUtil implements ir.Visitor {
visitFunctionDefinition(ir.FunctionDefinition f) {
names = new Names();
BlockCollector builder = new BlockCollector(names);
- f.accept(builder);
+ builder.visit(f);
printNode(builder.entry);
for (Block block in builder.cont2block.values) {
@@ -58,7 +58,7 @@ class IRTracer extends TracerUtil implements ir.Visitor {
});
});
tag("HIR", () {
- block.body.accept(this);
+ visit(block.body);
});
});
}
@@ -73,7 +73,7 @@ class IRTracer extends TracerUtil implements ir.Visitor {
visitLetPrim(ir.LetPrim node) {
String id = names.name(node.primitive);
printStmt(id, "LetPrim $id = ${formatPrimitive(node.primitive)}");
- node.body.accept(this);
+ visit(node.body);
}
visitLetCont(ir.LetCont node) {
@@ -82,7 +82,7 @@ class IRTracer extends TracerUtil implements ir.Visitor {
String id = names.name(node.continuation);
printStmt(dummy, "LetCont $id = <$id>");
}
- node.body.accept(this);
+ visit(node.body);
}
visitInvokeStatic(ir.InvokeStatic node) {
@@ -96,8 +96,16 @@ class IRTracer extends TracerUtil implements ir.Visitor {
visitInvokeContinuation(ir.InvokeContinuation node) {
String dummy = names.name(node);
String kont = formatReference(node.continuation);
- String arg = formatReference(node.argument);
- printStmt(dummy, "InvokeContinuation $kont ($arg)");
+ String args = node.arguments.map(formatReference).join(', ');
+ printStmt(dummy, "InvokeContinuation $kont ($args)");
+ }
+
+ visitBranch(ir.Branch node) {
+ String dummy = names.name(node);
+ String condition = visit(node.condition);
+ String trueCont = formatReference(node.trueContinuation);
+ String falseCont = formatReference(node.falseContinuation);
+ printStmt(dummy, "Branch $condition ($trueCont, $falseCont)");
}
String formatReference(ir.Reference ref) {
@@ -109,9 +117,7 @@ class IRTracer extends TracerUtil implements ir.Visitor {
}
}
- String formatPrimitive(ir.Primitive p) {
- return p.accept(this);
- }
+ String formatPrimitive(ir.Primitive p) => visit(p);
visitConstant(ir.Constant node) {
return "Constant ${node.value}";
@@ -125,6 +131,11 @@ class IRTracer extends TracerUtil implements ir.Visitor {
return "Continuation ${names.name(node)}";
}
+ visitIsTrue(ir.IsTrue node) {
+ return "IsTrue(${names.name(node)})";
+ }
+
+ visitCondition(ir.Condition c) {}
visitExpression(ir.Expression e) {}
visitPrimitive(ir.Primitive p) {}
visitDefinition(ir.Definition d) {}
@@ -201,16 +212,16 @@ class BlockCollector extends ir.Visitor {
visitFunctionDefinition(ir.FunctionDefinition f) {
entry = current_block = new Block(names.name(f), [], f.body);
- f.body.accept(this);
+ visit(f.body);
}
visitLetPrim(ir.LetPrim exp) {
- exp.body.accept(this);
+ visit(exp.body);
}
visitLetCont(ir.LetCont exp) {
- exp.continuation.accept(this);
- exp.body.accept(this);
+ visit(exp.continuation);
+ visit(exp.body);
}
visitInvokeStatic(ir.InvokeStatic exp) {
@@ -227,14 +238,21 @@ class BlockCollector extends ir.Visitor {
}
}
- visitConstant(ir.Constant constant) {}
-
- visitParameter(ir.Parameter p) {}
+ visitBranch(ir.Branch exp) {
+ ir.Continuation trueTarget = exp.trueContinuation.definition;
+ if (trueTarget.body != null) {
+ current_block.addEdgeTo(getBlock(trueTarget));
+ }
+ ir.Continuation falseTarget = exp.falseContinuation.definition;
+ if (falseTarget.body != null) {
+ current_block.addEdgeTo(getBlock(falseTarget));
+ }
+ }
visitContinuation(ir.Continuation c) {
var old_node = current_block;
current_block = getBlock(c);
- c.body.accept(this);
+ visit(c.body);
current_block = old_node;
}
}

Powered by Google App Engine
This is Rietveld 408576698