Index: lib/compiler/implementation/ssa/nodes.dart |
diff --git a/lib/compiler/implementation/ssa/nodes.dart b/lib/compiler/implementation/ssa/nodes.dart |
index 8920ea03b826194960c438a5441f72dfa6d4b0e0..e67084dd79de649bd9eecbbf8eff615a501691f7 100644 |
--- a/lib/compiler/implementation/ssa/nodes.dart |
+++ b/lib/compiler/implementation/ssa/nodes.dart |
@@ -51,6 +51,7 @@ interface HVisitor<R> { |
R visitShiftRight(HShiftRight node); |
R visitStatic(HStatic node); |
R visitStaticStore(HStaticStore node); |
+ R visitStringConcat(HStringConcat node); |
R visitSubtract(HSubtract node); |
R visitSwitch(HSwitch node); |
R visitThis(HThis node); |
@@ -304,6 +305,7 @@ class HBaseVisitor extends HGraphVisitor implements HVisitor { |
visitSwitch(HSwitch node) => visitControlFlow(node); |
visitStatic(HStatic node) => visitInstruction(node); |
visitStaticStore(HStaticStore node) => visitInstruction(node); |
+ visitStringConcat(HStringConcat node) => visitInstruction(node); |
visitThis(HThis node) => visitParameterValue(node); |
visitThrow(HThrow node) => visitControlFlow(node); |
visitTry(HTry node) => visitControlFlow(node); |
@@ -2232,6 +2234,18 @@ class HTypeConversion extends HCheck { |
bool hasSideEffects() => checked; |
} |
+class HStringConcat extends HInstruction { |
+ HStringConcat(HInstruction left, HInstrunction right) |
+ : super(<HInstruction>[left, right]); |
+ HType get guaranteedType() => HType.STRING; |
+ |
+ HInstruction get left() => inputs[0]; |
+ HInstruction get right() => inputs[1]; |
+ |
+ accept(HVisitor visitor) => visitor.visitStringConcat(this); |
+ toString() => "string concat"; |
+} |
+ |
/** Non-block-based (aka. traditional) loop information. */ |
class HLoopInformation { |
final HBasicBlock header; |