Chromium Code Reviews| 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()) { |
|
srdjan
2014/01/30 17:55:23
I think num_elements->BoundConstant must be a Smi,
Florian Schneider
2014/01/31 12:43:34
For now, I'll keep this (more general) version sin
|
| + 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()); |
| } |