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