| Index: runtime/vm/intermediate_language.cc
|
| ===================================================================
|
| --- runtime/vm/intermediate_language.cc (revision 32158)
|
| +++ runtime/vm/intermediate_language.cc (working copy)
|
| @@ -2917,8 +2917,14 @@
|
| CreateArrayInstr* create_array = value()->definition()->AsCreateArray();
|
| ASSERT(create_array != NULL);
|
| // Check if the string interpolation has only constant inputs.
|
| - GrowableArray<ConstantInstr*> constants(create_array->num_elements());
|
| - for (intptr_t i = 0; i < create_array->num_elements(); i++) {
|
| + Value* num_elements = create_array->num_elements();
|
| + if (!num_elements->BindsToConstant() ||
|
| + !num_elements->BoundConstant().IsSmi()) {
|
| + return this;
|
| + }
|
| + intptr_t length = Smi::Cast(num_elements->BoundConstant()).Value();
|
| + GrowableArray<ConstantInstr*> constants(length);
|
| + for (intptr_t i = 0; i < length; i++) {
|
| constants.Add(NULL);
|
| }
|
| for (Value::Iterator it(create_array->input_use_list());
|
| @@ -2944,7 +2950,7 @@
|
| }
|
| // Interpolate string at compile time.
|
| const Array& array_argument =
|
| - Array::Handle(Array::New(create_array->num_elements()));
|
| + Array::Handle(Array::New(length));
|
| for (intptr_t i = 0; i < constants.length(); i++) {
|
| array_argument.SetAt(i, constants[i]->value());
|
| }
|
|
|