| Index: pkg/compiler/lib/src/ssa/nodes.dart
|
| diff --git a/pkg/compiler/lib/src/ssa/nodes.dart b/pkg/compiler/lib/src/ssa/nodes.dart
|
| index a0aafb00ce276783a0884fae91d7ed057fe20b73..e3342cd5b69161e65ad5e1c8e3ddf55d83723ca2 100644
|
| --- a/pkg/compiler/lib/src/ssa/nodes.dart
|
| +++ b/pkg/compiler/lib/src/ssa/nodes.dart
|
| @@ -1504,6 +1504,9 @@ abstract class HControlFlow extends HInstruction {
|
| class HCreate extends HInstruction {
|
| final ClassElement element;
|
|
|
| + /// Does this instruction have reified type information as the last input?
|
| + final bool hasRtiInput;
|
| +
|
| /// If this field is not `null`, this call is from an inlined constructor and
|
| /// we have to register the instantiated type in the code generator. The
|
| /// [instructionType] of this node is not enough, because we also need the
|
| @@ -1511,14 +1514,19 @@ class HCreate extends HInstruction {
|
| List<DartType> instantiatedTypes;
|
|
|
| HCreate(this.element, List<HInstruction> inputs, TypeMask type,
|
| - [this.instantiatedTypes])
|
| + {this.instantiatedTypes, this.hasRtiInput: false})
|
| : super(inputs, type);
|
|
|
| - accept(HVisitor visitor) => visitor.visitCreate(this);
|
| -
|
| bool get isAllocation => true;
|
|
|
| - String toString() => 'HCreate($element)';
|
| + HInstruction get rtiInput {
|
| + assert(hasRtiInput);
|
| + return inputs.last;
|
| + }
|
| +
|
| + accept(HVisitor visitor) => visitor.visitCreate(this);
|
| +
|
| + String toString() => 'HCreate($element, ${instantiatedTypes})';
|
| }
|
|
|
| abstract class HInvoke extends HInstruction {
|
| @@ -3330,7 +3338,7 @@ class HTypeInfoExpression extends HInstruction {
|
| return kind == other.kind && dartType == other.dartType;
|
| }
|
|
|
| - String toString() => 'HTypeInfoExpression $kindAsString $dartType';
|
| + String toString() => 'HTypeInfoExpression($kindAsString, $dartType)';
|
|
|
| String get kindAsString {
|
| switch (kind) {
|
|
|