| Index: pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart
|
| diff --git a/pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart b/pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart
|
| index a9c283184802fcba3a8755457a2472b3dd16263e..324f45f2b3fde2cb330595186fed02b34b229ed7 100644
|
| --- a/pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart
|
| +++ b/pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart
|
| @@ -396,7 +396,7 @@ class Builder implements cps_ir.Visitor/*<NodeCallback|Node>*/ {
|
|
|
| NodeCallback visitLetMutable(cps_ir.LetMutable node) {
|
| Variable variable = addMutableVariable(node.variable);
|
| - Expression value = getVariableUse(node.value);
|
| + Expression value = getVariableUse(node.valueRef);
|
| return (Statement next) => Assign.makeStatement(variable, value, next);
|
| }
|
|
|
| @@ -406,7 +406,7 @@ class Builder implements cps_ir.Visitor/*<NodeCallback|Node>*/ {
|
| // (not a function like interior and call expressions).
|
|
|
| Statement visitThrow(cps_ir.Throw node) {
|
| - Expression value = getVariableUse(node.value);
|
| + Expression value = getVariableUse(node.valueRef);
|
| return new Throw(value);
|
| }
|
|
|
| @@ -420,13 +420,13 @@ class Builder implements cps_ir.Visitor/*<NodeCallback|Node>*/ {
|
| // arguments to formal parameter variables, followed by the body if
|
| // the continuation is singly reference or a break if it is multiply
|
| // referenced.
|
| - cps_ir.Continuation cont = node.continuation.definition;
|
| + cps_ir.Continuation cont = node.continuation;
|
| if (cont == returnContinuation) {
|
| - assert(node.arguments.length == 1);
|
| - return new Return(getVariableUse(node.arguments.single),
|
| + assert(node.argumentRefs.length == 1);
|
| + return new Return(getVariableUse(node.argumentRefs.single),
|
| sourceInformation: node.sourceInformation);
|
| } else {
|
| - List<Expression> arguments = translateArguments(node.arguments);
|
| + List<Expression> arguments = translateArguments(node.argumentRefs);
|
| return buildPhiAssignments(cont.parameters, arguments,
|
| () {
|
| // Translate invocations of recursive and non-recursive
|
| @@ -456,7 +456,7 @@ class Builder implements cps_ir.Visitor/*<NodeCallback|Node>*/ {
|
|
|
| /// Translates a branch condition to a tree expression.
|
| Expression translateCondition(cps_ir.Branch branch) {
|
| - Expression value = getVariableUse(branch.condition);
|
| + Expression value = getVariableUse(branch.conditionRef);
|
| if (branch.isStrictCheck) {
|
| return new ApplyBuiltinOperator(
|
| BuiltinOperator.StrictEq,
|
| @@ -469,12 +469,12 @@ class Builder implements cps_ir.Visitor/*<NodeCallback|Node>*/ {
|
| Statement visitBranch(cps_ir.Branch node) {
|
| Expression condition = translateCondition(node);
|
| Statement thenStatement, elseStatement;
|
| - cps_ir.Continuation cont = node.trueContinuation.definition;
|
| + cps_ir.Continuation cont = node.trueContinuation;
|
| assert(cont.parameters.isEmpty);
|
| thenStatement = cont.hasExactlyOneUse
|
| ? translateExpression(cont.body)
|
| : new Break(labels[cont]);
|
| - cont = node.falseContinuation.definition;
|
| + cont = node.falseContinuation;
|
| assert(cont.parameters.isEmpty);
|
| elseStatement = cont.hasExactlyOneUse
|
| ? translateExpression(cont.body)
|
| @@ -489,13 +489,13 @@ class Builder implements cps_ir.Visitor/*<NodeCallback|Node>*/ {
|
| //
|
|
|
| Expression visitSetField(cps_ir.SetField node) {
|
| - return new SetField(getVariableUse(node.object),
|
| + return new SetField(getVariableUse(node.objectRef),
|
| node.field,
|
| - getVariableUse(node.value));
|
| + getVariableUse(node.valueRef));
|
| }
|
|
|
| Expression visitInterceptor(cps_ir.Interceptor node) {
|
| - return new Interceptor(getVariableUse(node.input),
|
| + return new Interceptor(getVariableUse(node.inputRef),
|
| node.interceptedClasses,
|
| node.sourceInformation);
|
| }
|
| @@ -503,14 +503,14 @@ class Builder implements cps_ir.Visitor/*<NodeCallback|Node>*/ {
|
| Expression visitCreateInstance(cps_ir.CreateInstance node) {
|
| return new CreateInstance(
|
| node.classElement,
|
| - translateArguments(node.arguments),
|
| - getVariableUseOrNull(node.typeInformation),
|
| + translateArguments(node.argumentRefs),
|
| + getVariableUseOrNull(node.typeInformationRef),
|
| node.sourceInformation);
|
| }
|
|
|
| Expression visitGetField(cps_ir.GetField node) {
|
| - return new GetField(getVariableUse(node.object), node.field,
|
| - objectIsNotNull: !node.object.definition.type.isNullable);
|
| + return new GetField(getVariableUse(node.objectRef), node.field,
|
| + objectIsNotNull: !node.object.type.isNullable);
|
| }
|
|
|
| Expression visitCreateBox(cps_ir.CreateBox node) {
|
| @@ -520,16 +520,16 @@ class Builder implements cps_ir.Visitor/*<NodeCallback|Node>*/ {
|
| Expression visitCreateInvocationMirror(cps_ir.CreateInvocationMirror node) {
|
| return new CreateInvocationMirror(
|
| node.selector,
|
| - translateArguments(node.arguments));
|
| + translateArguments(node.argumentRefs));
|
| }
|
|
|
| Expression visitGetMutable(cps_ir.GetMutable node) {
|
| - return getMutableVariableUse(node.variable);
|
| + return getMutableVariableUse(node.variableRef);
|
| }
|
|
|
| Expression visitSetMutable(cps_ir.SetMutable node) {
|
| - Variable variable = getMutableVariable(node.variable.definition);
|
| - Expression value = getVariableUse(node.value);
|
| + Variable variable = getMutableVariable(node.variable);
|
| + Expression value = getVariableUse(node.valueRef);
|
| return new Assign(variable, value);
|
| }
|
|
|
| @@ -540,18 +540,18 @@ class Builder implements cps_ir.Visitor/*<NodeCallback|Node>*/ {
|
| Expression visitLiteralList(cps_ir.LiteralList node) {
|
| return new LiteralList(
|
| node.dartType,
|
| - translateArguments(node.values));
|
| + translateArguments(node.valueRefs));
|
| }
|
|
|
| Expression visitReifyRuntimeType(cps_ir.ReifyRuntimeType node) {
|
| return new ReifyRuntimeType(
|
| - getVariableUse(node.value), node.sourceInformation);
|
| + getVariableUse(node.valueRef), node.sourceInformation);
|
| }
|
|
|
| Expression visitReadTypeVariable(cps_ir.ReadTypeVariable node) {
|
| return new ReadTypeVariable(
|
| node.variable,
|
| - getVariableUse(node.target),
|
| + getVariableUse(node.targetRef),
|
| node.sourceInformation);
|
| }
|
|
|
| @@ -559,17 +559,17 @@ class Builder implements cps_ir.Visitor/*<NodeCallback|Node>*/ {
|
| return new TypeExpression(
|
| node.kind,
|
| node.dartType,
|
| - node.arguments.map(getVariableUse).toList());
|
| + node.argumentRefs.map(getVariableUse).toList());
|
| }
|
|
|
| Expression visitTypeTest(cps_ir.TypeTest node) {
|
| - Expression value = getVariableUse(node.value);
|
| - List<Expression> typeArgs = translateArguments(node.typeArguments);
|
| + Expression value = getVariableUse(node.valueRef);
|
| + List<Expression> typeArgs = translateArguments(node.typeArgumentRefs);
|
| return new TypeOperator(value, node.dartType, typeArgs, isTypeTest: true);
|
| }
|
|
|
| Expression visitTypeTestViaFlag(cps_ir.TypeTestViaFlag node) {
|
| - Expression value = getVariableUse(node.interceptor);
|
| + Expression value = getVariableUse(node.interceptorRef);
|
| // TODO(sra): Move !! to cps_ir level.
|
| return new Not(new Not(new GetTypeTestProperty(value, node.dartType)));
|
| }
|
| @@ -581,42 +581,42 @@ class Builder implements cps_ir.Visitor/*<NodeCallback|Node>*/ {
|
| Expression visitSetStatic(cps_ir.SetStatic node) {
|
| return new SetStatic(
|
| node.element,
|
| - getVariableUse(node.value),
|
| + getVariableUse(node.valueRef),
|
| node.sourceInformation);
|
| }
|
|
|
| Expression visitApplyBuiltinOperator(cps_ir.ApplyBuiltinOperator node) {
|
| if (node.operator == BuiltinOperator.IsFalsy) {
|
| - return new Not(getVariableUse(node.arguments.single));
|
| + return new Not(getVariableUse(node.argumentRefs.single));
|
| }
|
| return new ApplyBuiltinOperator(node.operator,
|
| - translateArguments(node.arguments));
|
| + translateArguments(node.argumentRefs));
|
| }
|
|
|
| Expression visitApplyBuiltinMethod(cps_ir.ApplyBuiltinMethod node) {
|
| return new ApplyBuiltinMethod(node.method,
|
| - getVariableUse(node.receiver),
|
| - translateArguments(node.arguments),
|
| - receiverIsNotNull: !node.receiver.definition.type.isNullable);
|
| + getVariableUse(node.receiverRef),
|
| + translateArguments(node.argumentRefs),
|
| + receiverIsNotNull: !node.receiver.type.isNullable);
|
| }
|
|
|
| Expression visitGetLength(cps_ir.GetLength node) {
|
| - return new GetLength(getVariableUse(node.object));
|
| + return new GetLength(getVariableUse(node.objectRef));
|
| }
|
|
|
| Expression visitGetIndex(cps_ir.GetIndex node) {
|
| - return new GetIndex(getVariableUse(node.object),
|
| - getVariableUse(node.index));
|
| + return new GetIndex(getVariableUse(node.objectRef),
|
| + getVariableUse(node.indexRef));
|
| }
|
|
|
| Expression visitSetIndex(cps_ir.SetIndex node) {
|
| - return new SetIndex(getVariableUse(node.object),
|
| - getVariableUse(node.index),
|
| - getVariableUse(node.value));
|
| + return new SetIndex(getVariableUse(node.objectRef),
|
| + getVariableUse(node.indexRef),
|
| + getVariableUse(node.valueRef));
|
| }
|
|
|
| Expression visitInvokeStatic(cps_ir.InvokeStatic node) {
|
| - List<Expression> arguments = translateArguments(node.arguments);
|
| + List<Expression> arguments = translateArguments(node.argumentRefs);
|
| return new InvokeStatic(node.target, node.selector, arguments,
|
| node.sourceInformation);
|
| }
|
| @@ -624,17 +624,17 @@ class Builder implements cps_ir.Visitor/*<NodeCallback|Node>*/ {
|
| Expression visitInvokeMethod(cps_ir.InvokeMethod node) {
|
| if (node.callingConvention == cps_ir.CallingConvention.OneShotIntercepted) {
|
| List<Expression> arguments = new List.generate(
|
| - 1 + node.arguments.length,
|
| - (n) => getVariableUse(n == 0 ? node.receiver : node.arguments[n - 1]),
|
| + 1 + node.argumentRefs.length,
|
| + (n) => getVariableUse(n == 0 ? node.receiverRef : node.argumentRefs[n - 1]),
|
| growable: false);
|
| return new OneShotInterceptor(node.selector, node.mask, arguments,
|
| node.sourceInformation);
|
| }
|
| InvokeMethod invoke = new InvokeMethod(
|
| - getVariableUse(node.receiver),
|
| + getVariableUse(node.receiverRef),
|
| node.selector,
|
| node.mask,
|
| - translateArguments(node.arguments),
|
| + translateArguments(node.argumentRefs),
|
| node.sourceInformation);
|
| // Sometimes we know the Dart receiver is non-null because it has been
|
| // refined, which implies that the JS receiver also can not be null at the
|
| @@ -644,25 +644,25 @@ class Builder implements cps_ir.Visitor/*<NodeCallback|Node>*/ {
|
| // interceptor is non-null because it intercepts JSNull.
|
| invoke.receiverIsNotNull =
|
| !node.dartReceiver.type.isNullable ||
|
| - !node.receiver.definition.type.isNullable;
|
| + !node.receiver.type.isNullable;
|
| return invoke;
|
| }
|
|
|
| Expression visitInvokeMethodDirectly(cps_ir.InvokeMethodDirectly node) {
|
| - Expression receiver = getVariableUse(node.receiver);
|
| - List<Expression> arguments = translateArguments(node.arguments);
|
| + Expression receiver = getVariableUse(node.receiverRef);
|
| + List<Expression> arguments = translateArguments(node.argumentRefs);
|
| return new InvokeMethodDirectly(receiver, node.target,
|
| node.selector, arguments, node.sourceInformation);
|
| }
|
|
|
| Expression visitTypeCast(cps_ir.TypeCast node) {
|
| - Expression value = getVariableUse(node.value);
|
| - List<Expression> typeArgs = translateArguments(node.typeArguments);
|
| + Expression value = getVariableUse(node.valueRef);
|
| + List<Expression> typeArgs = translateArguments(node.typeArgumentRefs);
|
| return new TypeOperator(value, node.dartType, typeArgs, isTypeTest: false);
|
| }
|
|
|
| Expression visitInvokeConstructor(cps_ir.InvokeConstructor node) {
|
| - List<Expression> arguments = translateArguments(node.arguments);
|
| + List<Expression> arguments = translateArguments(node.argumentRefs);
|
| return new InvokeConstructor(
|
| node.dartType,
|
| node.target,
|
| @@ -673,8 +673,8 @@ class Builder implements cps_ir.Visitor/*<NodeCallback|Node>*/ {
|
|
|
| visitForeignCode(cps_ir.ForeignCode node) {
|
| List<Expression> arguments =
|
| - node.arguments.map(getVariableUse).toList(growable: false);
|
| - List<bool> nullableArguments = node.arguments
|
| + node.argumentRefs.map(getVariableUse).toList(growable: false);
|
| + List<bool> nullableArguments = node.argumentRefs
|
| .map((argument) => argument.definition.type.isNullable)
|
| .toList(growable: false);
|
| if (node.codeTemplate.isExpression) {
|
| @@ -704,8 +704,8 @@ class Builder implements cps_ir.Visitor/*<NodeCallback|Node>*/ {
|
| // In the Tree IR, syntax is more important, so the receiver check uses
|
| // "useInvoke" to denote if an invocation should be emitted.
|
| return new ReceiverCheck(
|
| - condition: getVariableUseOrNull(node.condition),
|
| - value: getVariableUse(node.value),
|
| + condition: getVariableUseOrNull(node.conditionRef),
|
| + value: getVariableUse(node.valueRef),
|
| selector: node.selector,
|
| useSelector: node.useSelector,
|
| useInvoke: !node.isNullCheck,
|
| @@ -720,13 +720,13 @@ class Builder implements cps_ir.Visitor/*<NodeCallback|Node>*/ {
|
| @override
|
| NodeCallback visitYield(cps_ir.Yield node) {
|
| return (Statement next) {
|
| - return new Yield(getVariableUse(node.input), node.hasStar, next);
|
| + return new Yield(getVariableUse(node.inputRef), node.hasStar, next);
|
| };
|
| }
|
|
|
| @override
|
| Expression visitAwait(cps_ir.Await node) {
|
| - return new Await(getVariableUse(node.input));
|
| + return new Await(getVariableUse(node.inputRef));
|
| }
|
|
|
| @override
|
|
|