| Index: src/runtime.cc
|
| diff --git a/src/runtime.cc b/src/runtime.cc
|
| index a6924a0ff362250918b8af2b6b1b3eb77087faee..4063a0fc7d751aa86c4fd47ab46b2e1e9d05bcf9 100644
|
| --- a/src/runtime.cc
|
| +++ b/src/runtime.cc
|
| @@ -6757,17 +6757,23 @@ static Object* Runtime_NewObjectFromBound(Arguments args) {
|
| CONVERT_ARG_CHECKED(JSFunction, function, 0);
|
| CONVERT_ARG_CHECKED(JSArray, params, 1);
|
|
|
| + RUNTIME_ASSERT(params->HasFastElements());
|
| FixedArray* fixed = FixedArray::cast(params->elements());
|
|
|
| - bool exception = false;
|
| - Object*** param_data = NewArray<Object**>(fixed->length());
|
| - for (int i = 0; i < fixed->length(); i++) {
|
| + int fixed_length = Smi::cast(params->length())->value();
|
| + SmartPointer<Object**> param_data(NewArray<Object**>(fixed_length));
|
| + for (int i = 0; i < fixed_length; i++) {
|
| Handle<Object> val = Handle<Object>(fixed->get(i));
|
| param_data[i] = val.location();
|
| }
|
|
|
| + bool exception = false;
|
| Handle<Object> result = Execution::New(
|
| - function, fixed->length(), param_data, &exception);
|
| + function, fixed_length, *param_data, &exception);
|
| + if (exception) {
|
| + return Failure::Exception();
|
| + }
|
| + ASSERT(!result.is_null());
|
| return *result;
|
| }
|
|
|
|
|