Index: lib/compiler/implementation/ssa/optimize.dart |
diff --git a/lib/compiler/implementation/ssa/optimize.dart b/lib/compiler/implementation/ssa/optimize.dart |
index d29e599fd5bb3738e8498a0bd61ffd9c05405196..877fc2994ad9675b8feffa7855eaba87e52bbb26 100644 |
--- a/lib/compiler/implementation/ssa/optimize.dart |
+++ b/lib/compiler/implementation/ssa/optimize.dart |
@@ -590,6 +590,19 @@ class SsaConstantFolder extends HBaseVisitor implements OptimizationPhase { |
if (field === null) return node; |
return new HFieldSet(field, node.inputs[0], node.inputs[1]); |
} |
+ |
+ HInstruction visitStringConcat(HStringConcat node) { |
+ DartString folded = const LiteralDartString(""); |
+ for (int i = 0; i < node.inputs.length; i++) { |
+ HInstruction part = node.inputs[i]; |
+ if (!part.isConstant()) return node; |
+ HConstant constant = part; |
+ if (!constant.constant.isPrimitive()) return node; |
+ PrimitiveConstant primitive = constant.constant; |
+ folded = new DartString.concat(folded, primitive.toDartString()); |
+ } |
+ return graph.addConstantString(folded, node); |
+ } |
} |
class SsaCheckInserter extends HBaseVisitor implements OptimizationPhase { |