| Index: pkg/compiler/lib/src/cps_ir/cps_ir_nodes.dart
|
| diff --git a/pkg/compiler/lib/src/cps_ir/cps_ir_nodes.dart b/pkg/compiler/lib/src/cps_ir/cps_ir_nodes.dart
|
| index 00f71827f28c571ad84b3c8b53558307fcab3516..5bc5d046b92b73c65dd369f154111892fe7333a9 100644
|
| --- a/pkg/compiler/lib/src/cps_ir/cps_ir_nodes.dart
|
| +++ b/pkg/compiler/lib/src/cps_ir/cps_ir_nodes.dart
|
| @@ -436,6 +436,18 @@ class TypeCast extends Expression {
|
| accept(Visitor visitor) => visitor.visitTypeCast(this);
|
| }
|
|
|
| +/// Invoke [toString] on each argument and concatenate the results.
|
| +class ConcatenateStrings extends Expression {
|
| + final List<Reference<Primitive>> arguments;
|
| + final Reference<Continuation> continuation;
|
| +
|
| + ConcatenateStrings(List<Primitive> args, Continuation cont)
|
| + : arguments = _referenceList(args),
|
| + continuation = new Reference<Continuation>(cont);
|
| +
|
| + accept(Visitor visitor) => visitor.visitConcatenateStrings(this);
|
| +}
|
| +
|
| /// Apply a built-in operator.
|
| ///
|
| /// It must be known that the arguments have the proper types.
|
| @@ -757,9 +769,10 @@ class ForeignCode extends Expression {
|
| }
|
|
|
| class Constant extends Primitive {
|
| + final ConstantExpression expression;
|
| final values.ConstantValue value;
|
|
|
| - Constant(this.value);
|
| + Constant(this.expression, this.value);
|
|
|
| accept(Visitor visitor) => visitor.visitConstant(this);
|
| }
|
| @@ -953,6 +966,7 @@ abstract class Visitor<T> {
|
| T visitInvokeMethod(InvokeMethod node);
|
| T visitInvokeMethodDirectly(InvokeMethodDirectly node);
|
| T visitInvokeConstructor(InvokeConstructor node);
|
| + T visitConcatenateStrings(ConcatenateStrings node);
|
| T visitThrow(Throw node);
|
| T visitRethrow(Rethrow node);
|
| T visitBranch(Branch node);
|
| @@ -1079,6 +1093,13 @@ class RecursiveVisitor implements Visitor {
|
| node.arguments.forEach(processReference);
|
| }
|
|
|
| + processConcatenateStrings(ConcatenateStrings node) {}
|
| + visitConcatenateStrings(ConcatenateStrings node) {
|
| + processConcatenateStrings(node);
|
| + processReference(node.continuation);
|
| + node.arguments.forEach(processReference);
|
| + }
|
| +
|
| processThrow(Throw node) {}
|
| visitThrow(Throw node) {
|
| processThrow(node);
|
|
|