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)'; |
+ } |
+ |
} |
/** |