Index: pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart |
diff --git a/pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart b/pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart |
index 4d73e403e4bbed13482ddf919276b932079a8095..d922d0963fa440c2b27973c782d9a4eb4543a377 100644 |
--- a/pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart |
+++ b/pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart |
@@ -201,11 +201,16 @@ class InvokeMethod extends Expression implements Invoke { |
final Selector selector; |
final TypeMask mask; |
final List<Expression> arguments; |
+ final SourceInformation sourceInformation; |
/// If true, it is known that the receiver cannot be `null`. |
bool receiverIsNotNull = false; |
- InvokeMethod(this.receiver, this.selector, this.mask, this.arguments) { |
+ InvokeMethod(this.receiver, |
+ this.selector, |
+ this.mask, |
+ this.arguments, |
+ this.sourceInformation) { |
assert(receiver != null); |
} |
@@ -224,9 +229,10 @@ class InvokeMethodDirectly extends Expression implements Invoke { |
final Element target; |
final Selector selector; |
final List<Expression> arguments; |
+ final SourceInformation sourceInformation; |
InvokeMethodDirectly(this.receiver, this.target, this.selector, |
- this.arguments); |
+ this.arguments, this.sourceInformation); |
accept(ExpressionVisitor visitor) => visitor.visitInvokeMethodDirectly(this); |
accept1(ExpressionVisitor1 visitor, arg) { |
@@ -242,12 +248,13 @@ class InvokeConstructor extends Expression implements Invoke { |
final FunctionElement target; |
final List<Expression> arguments; |
final Selector selector; |
+ final SourceInformation sourceInformation; |
/// TODO(karlklose): get rid of this field. Instead use the constant's |
/// expression to find the constructor to be called in dart2dart. |
final values.ConstantValue constant; |
InvokeConstructor(this.type, this.target, this.selector, this.arguments, |
- [this.constant]); |
+ this.sourceInformation, [this.constant]); |
ClassElement get targetClass => target.enclosingElement; |
@@ -265,14 +272,18 @@ class InvokeConstructor extends Expression implements Invoke { |
*/ |
class Constant extends Expression { |
final values.ConstantValue value; |
+ final SourceInformation sourceInformation; |
- Constant(this.value); |
+ Constant(this.value, {this.sourceInformation}); |
Constant.bool(values.BoolConstantValue constantValue) |
- : value = constantValue; |
+ : value = constantValue, |
+ sourceInformation = null; |
accept(ExpressionVisitor visitor) => visitor.visitConstant(this); |
accept1(ExpressionVisitor1 visitor, arg) => visitor.visitConstant(this, arg); |
+ |
+ String toString() => 'Constant(value=${value.toStructuredString()})'; |
} |
class This extends Expression { |
@@ -364,6 +375,9 @@ class Conditional extends Expression { |
accept1(ExpressionVisitor1 visitor, arg) { |
return visitor.visitConditional(this, arg); |
} |
+ |
+ String toString() => 'Conditional(condition=$condition,thenExpression=' |
+ '$thenExpression,elseExpression=$elseExpression)'; |
} |
/// An && or || expression. The operator is internally represented as a boolean |
@@ -383,6 +397,8 @@ class LogicalOperator extends Expression { |
accept1(ExpressionVisitor1 visitor, arg) { |
return visitor.visitLogicalOperator(this, arg); |
} |
+ |
+ String toString() => 'LogicalOperator(left=$left,right=$right,isAnd=$isAnd)'; |
} |
/// Logical negation. |
@@ -541,11 +557,12 @@ class Return extends Statement { |
/// Even in constructors this holds true. Take special care when translating |
/// back to dart, where `return null;` in a constructor is an error. |
Expression value; |
+ SourceInformation sourceInformation; |
Statement get next => null; |
void set next(Statement s) => throw 'UNREACHABLE'; |
- Return(this.value); |
+ Return(this.value, {this.sourceInformation}); |
accept(StatementVisitor visitor) => visitor.visitReturn(this); |
accept1(StatementVisitor1 visitor, arg) => visitor.visitReturn(this, arg); |
@@ -664,8 +681,10 @@ class CreateInstance extends Expression { |
ClassElement classElement; |
List<Expression> arguments; |
List<Expression> typeInformation; |
+ SourceInformation sourceInformation; |
- CreateInstance(this.classElement, this.arguments, this.typeInformation); |
+ CreateInstance(this.classElement, this.arguments, |
+ this.typeInformation, this.sourceInformation); |
accept(ExpressionVisitor visitor) => visitor.visitCreateInstance(this); |
accept1(ExpressionVisitor1 visitor, arg) { |
@@ -749,8 +768,9 @@ class SetIndex extends Expression { |
class ReifyRuntimeType extends Expression { |
Expression value; |
+ SourceInformation sourceInformation; |
- ReifyRuntimeType(this.value); |
+ ReifyRuntimeType(this.value, this.sourceInformation); |
accept(ExpressionVisitor visitor) { |
return visitor.visitReifyRuntimeType(this); |
@@ -764,8 +784,9 @@ class ReifyRuntimeType extends Expression { |
class ReadTypeVariable extends Expression { |
final TypeVariableType variable; |
Expression target; |
+ final SourceInformation sourceInformation; |
- ReadTypeVariable(this.variable, this.target); |
+ ReadTypeVariable(this.variable, this.target, this.sourceInformation); |
accept(ExpressionVisitor visitor) { |
return visitor.visitReadTypeVariable(this); |