Index: pkg/compiler/lib/src/ssa/ssa_tracer.dart |
diff --git a/pkg/compiler/lib/src/ssa/ssa_tracer.dart b/pkg/compiler/lib/src/ssa/ssa_tracer.dart |
index 1768db1c2a114eaed6809fad489d1e72dd0eeac6..6c1d54319cda1ed02834769ddab0eef52d484694 100644 |
--- a/pkg/compiler/lib/src/ssa/ssa_tracer.dart |
+++ b/pkg/compiler/lib/src/ssa/ssa_tracer.dart |
@@ -334,9 +334,11 @@ class HInstructionStringifier implements HVisitor<String> { |
return handleGenericInvoke("InvokeConstructorBody", target, invoke.inputs); |
} |
- String visitForeignCode(HForeignCode foreign) { |
- return handleGenericInvoke( |
- "ForeignCode", "${foreign.codeTemplate.ast}", foreign.inputs); |
+ String visitForeignCode(HForeignCode node) { |
+ var template = node.codeTemplate; |
+ String code = '${template.ast}'; |
+ var inputs = node.inputs.map(temporaryId).join(', '); |
+ return "ForeignCode: $code ($inputs)"; |
} |
String visitLess(HLess node) => handleInvokeBinary(node, 'Less'); |
@@ -482,11 +484,19 @@ class HInstructionStringifier implements HVisitor<String> { |
} |
String visitTypeConversion(HTypeConversion node) { |
- assert(node.inputs.length <= 2); |
- String otherInput = |
- (node.inputs.length == 2) ? temporaryId(node.inputs[1]) : ''; |
- return "TypeConversion: ${temporaryId(node.checkedInput)} to " |
- "${node.instructionType} $otherInput"; |
+ String checkedInput = temporaryId(node.checkedInput); |
+ String rest; |
+ if (node.usesMethodOnType) { |
+ assert(node.inputs.length == 2); |
+ assert(identical(node.checkedInput, node.inputs.last)); |
+ rest = " ${temporaryId(node.inputs.first)}"; |
+ } else if (node.inputs.length == 2) { |
+ rest = " ${temporaryId(node.inputs.last)}"; |
+ } else { |
+ assert(node.inputs.length == 1); |
+ rest = ""; |
+ } |
+ return "TypeConversion: $checkedInput to ${node.instructionType}$rest"; |
} |
String visitTypeKnown(HTypeKnown node) { |
@@ -504,23 +514,29 @@ class HInstructionStringifier implements HVisitor<String> { |
} |
String visitTypeInfoReadRaw(HTypeInfoReadRaw node) { |
- return "TypeInfoReadRaw"; |
+ var inputs = node.inputs.map(temporaryId).join(', '); |
+ return "TypeInfoReadRaw: $inputs"; |
} |
String visitTypeInfoReadVariable(HTypeInfoReadVariable node) { |
- return "TypeInfoReadVariable ${node.variable}"; |
+ return "TypeInfoReadVariable: " |
+ "${temporaryId(node.inputs.single)}.${node.variable}"; |
} |
String visitTypeInfoExpression(HTypeInfoExpression node) { |
- return "TypeInfoExpression ${node.kindAsString} ${node.dartType}"; |
+ var inputs = node.inputs.map(temporaryId).join(', '); |
+ return "TypeInfoExpression: ${node.kindAsString} ${node.dartType}" |
+ " ($inputs)"; |
} |
String visitReadTypeVariable(HReadTypeVariable node) { |
- return "ReadTypeVariable: ${node.dartType} ${node.hasReceiver}"; |
+ var inputs = node.inputs.map(temporaryId).join(', '); |
+ return "ReadTypeVariable: ${node.dartType} ${node.hasReceiver} $inputs"; |
} |
String visitFunctionType(HFunctionType node) { |
- return "FunctionType: ${node.dartType}"; |
+ var inputs = node.inputs.map(temporaryId).join(', '); |
+ return "FunctionType: ${node.dartType} $inputs"; |
} |
String visitVoidType(HVoidType node) { |