| Index: src/runtime.cc
|
| diff --git a/src/runtime.cc b/src/runtime.cc
|
| index e176951a7da6ab0d326120340ea1472361938696..7d50a66e8408839cc9e1d4a9d2693f5ca2078f9b 100644
|
| --- a/src/runtime.cc
|
| +++ b/src/runtime.cc
|
| @@ -2601,38 +2601,21 @@ RUNTIME_FUNCTION(MaybeObject*, RuntimeHidden_RegExpExec) {
|
|
|
|
|
| RUNTIME_FUNCTION(MaybeObject*, RuntimeHidden_RegExpConstructResult) {
|
| - SealHandleScope shs(isolate);
|
| + HandleScope handle_scope(isolate);
|
| ASSERT(args.length() == 3);
|
| - CONVERT_SMI_ARG_CHECKED(elements_count, 0);
|
| - if (elements_count < 0 ||
|
| - elements_count > FixedArray::kMaxLength ||
|
| - !Smi::IsValid(elements_count)) {
|
| - return isolate->ThrowIllegalOperation();
|
| - }
|
| - Object* new_object;
|
| - { MaybeObject* maybe_new_object =
|
| - isolate->heap()->AllocateFixedArray(elements_count);
|
| - if (!maybe_new_object->ToObject(&new_object)) return maybe_new_object;
|
| - }
|
| - FixedArray* elements = FixedArray::cast(new_object);
|
| - { MaybeObject* maybe_new_object = isolate->heap()->AllocateRaw(
|
| - JSRegExpResult::kSize, NEW_SPACE, OLD_POINTER_SPACE);
|
| - if (!maybe_new_object->ToObject(&new_object)) return maybe_new_object;
|
| - }
|
| - {
|
| - DisallowHeapAllocation no_gc;
|
| - HandleScope scope(isolate);
|
| - reinterpret_cast<HeapObject*>(new_object)->
|
| - set_map(isolate->native_context()->regexp_result_map());
|
| - }
|
| - JSArray* array = JSArray::cast(new_object);
|
| - array->set_properties(isolate->heap()->empty_fixed_array());
|
| - array->set_elements(elements);
|
| - array->set_length(Smi::FromInt(elements_count));
|
| + CONVERT_SMI_ARG_CHECKED(size, 0);
|
| + RUNTIME_ASSERT(size >= 0 && size <= FixedArray::kMaxLength);
|
| + Handle<FixedArray> elements = isolate->factory()->NewFixedArray(size);
|
| + Handle<Map> regexp_map(isolate->native_context()->regexp_result_map());
|
| + Handle<JSObject> object =
|
| + isolate->factory()->NewJSObjectFromMap(regexp_map, NOT_TENURED, false);
|
| + Handle<JSArray> array = Handle<JSArray>::cast(object);
|
| + array->set_elements(*elements);
|
| + array->set_length(Smi::FromInt(size));
|
| // Write in-object properties after the length of the array.
|
| array->InObjectPropertyAtPut(JSRegExpResult::kIndexIndex, args[1]);
|
| array->InObjectPropertyAtPut(JSRegExpResult::kInputIndex, args[2]);
|
| - return array;
|
| + return *array;
|
| }
|
|
|
|
|
|
|