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

Unified Diff: pkg/compiler/lib/src/tree_ir/tree_ir_tracer.dart

Issue 831133004: Use closure conversion in new dart2js backend. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 11 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/tree_ir_tracer.dart
diff --git a/pkg/compiler/lib/src/tree_ir/tree_ir_tracer.dart b/pkg/compiler/lib/src/tree_ir/tree_ir_tracer.dart
index be1fb18cb1fb7e4969f7bfe37b7e89a6e413d84e..9620b57f7967cf3278381fa64ada27385dbc9495 100644
--- a/pkg/compiler/lib/src/tree_ir/tree_ir_tracer.dart
+++ b/pkg/compiler/lib/src/tree_ir/tree_ir_tracer.dart
@@ -151,6 +151,11 @@ class BlockCollector extends StatementVisitor {
visitStatement(node.next);
}
+ visitSetField(SetField node) {
+ _addStatement(node);
+ visitStatement(node.next);
+ }
+
}
class TreeTracer extends TracerUtil with StatementVisitor, PassMixin {
@@ -277,6 +282,16 @@ class TreeTracer extends TracerUtil with StatementVisitor, PassMixin {
printStatement(null, 'function ${node.definition.element.name}');
}
+ visitSetField(SetField node) {
+ String object = expr(node.object);
+ String field = node.field.name;
+ String value = expr(node.value);
+ if (SubexpressionVisitor.usesInfixNotation(node.object)) {
floitsch 2015/01/08 18:29:37 Does this capture `(-x).abs` ?
asgerf 2015/01/12 13:15:43 The IR tracer does not currently use unary pre/pos
+ object = '($object)';
+ }
+ printStatement(null, '$object.$field = $value');
+ }
+
String expr(Expression e) {
return e.accept(new SubexpressionVisitor(names));
}
@@ -368,7 +383,7 @@ class SubexpressionVisitor extends ExpressionVisitor<String> {
return "typevar [${node.typeVariable.name}]";
}
- bool usesInfixNotation(Expression node) {
+ static bool usesInfixNotation(Expression node) {
return node is Conditional || node is LogicalOperator;
}
@@ -417,6 +432,25 @@ class SubexpressionVisitor extends ExpressionVisitor<String> {
throw "$node should not be visited by $this";
}
+ String visitGetField(GetField node) {
+ String object = visitExpression(node.object);
+ String field = node.field.name;
+ if (usesInfixNotation(node.object)) {
+ object = '($object)';
+ }
+ return '$object.$field';
+ }
+
+ String visitCreateBox(CreateBox node) {
+ return 'CreateBox';
+ }
+
+ String visitCreateClosureClass(CreateClosureClass node) {
+ String className = node.classElement.name;
+ String arguments = node.arguments.map(visitExpression).join(', ');
+ return 'CreateClosure $className($arguments)';
+ }
+
}
/**

Powered by Google App Engine
This is Rietveld 408576698