| Index: src/runtime/runtime-array.cc | 
| diff --git a/src/runtime/runtime-array.cc b/src/runtime/runtime-array.cc | 
| index cb849d2067ad0bb02a539817e6ef9ea5221a0942..c95ef969bfabe2a7e6c450a247eb11299bd5a771 100644 | 
| --- a/src/runtime/runtime-array.cc | 
| +++ b/src/runtime/runtime-array.cc | 
| @@ -648,5 +648,28 @@ RUNTIME_FUNCTION(Runtime_SpreadIterablePrepare) { | 
| return *spread; | 
| } | 
|  | 
| +RUNTIME_FUNCTION(Runtime_SpreadIterablePrepareFixed) { | 
| +  HandleScope scope(isolate); | 
| +  DCHECK_EQ(1, args.length()); | 
| +  CONVERT_ARG_HANDLE_CHECKED(Object, spread, 0); | 
| + | 
| +  // Iterate over the spread if we need to. | 
| +  if (spread->IterationHasObservableEffects()) { | 
| +    Handle<JSFunction> spread_iterable_function = isolate->spread_iterable(); | 
| +    ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 
| +        isolate, spread, | 
| +        Execution::Call(isolate, spread_iterable_function, | 
| +                        isolate->factory()->undefined_value(), 1, &spread)); | 
| +  } | 
| +  // Return the backing store fixed array. | 
| +  Handle<JSArray> spread_array = Handle<JSArray>::cast(spread); | 
| +  uint32_t spread_length; | 
| +  CHECK(spread_array->length()->ToArrayIndex(&spread_length)); | 
| + | 
| +  FixedArrayBase* a = spread_array->elements(); | 
| +  a->set_length(spread_length); | 
| +  return a; | 
| +} | 
| + | 
| }  // namespace internal | 
| }  // namespace v8 | 
|  |