Chromium Code Reviews| Index: src/runtime.cc |
| diff --git a/src/runtime.cc b/src/runtime.cc |
| index b928cd01dc8de2f47537c4fca88d6c8acc375be8..3fd5c338257eba69b194218d7cdaf6d8e41d9459 100644 |
| --- a/src/runtime.cc |
| +++ b/src/runtime.cc |
| @@ -13049,20 +13049,20 @@ static int DebugReferencedBy(HeapIterator* iterator, |
| // args[1]: constructor function for instances to exclude (Mirror) |
| // args[2]: the the maximum number of objects to return |
| RUNTIME_FUNCTION(MaybeObject*, Runtime_DebugReferencedBy) { |
| - SealHandleScope shs(isolate); |
| + HandleScope scope(isolate); |
| ASSERT(args.length() == 3); |
| // First perform a full GC in order to avoid references from dead objects. |
| - isolate->heap()->CollectAllGarbage(Heap::kMakeHeapIterableMask, |
| - "%DebugReferencedBy"); |
| + Heap* heap = isolate->heap(); |
| + heap->CollectAllGarbage(Heap::kMakeHeapIterableMask, "%DebugReferencedBy"); |
| // The heap iterator reserves the right to do a GC to make the heap iterable. |
| // Due to the GC above we know it won't need to do that, but it seems cleaner |
| // to get the heap iterator constructed before we start having unprotected |
| // Object* locals that are not protected by handles. |
| // Check parameters. |
| - CONVERT_ARG_CHECKED(JSObject, target, 0); |
| - Object* instance_filter = args[1]; |
| + CONVERT_ARG_HANDLE_CHECKED(JSObject, target, 0); |
| + Handle<Object> instance_filter = args.at<Object>(1); |
| RUNTIME_ASSERT(instance_filter->IsUndefined() || |
| instance_filter->IsJSObject()); |
| CONVERT_NUMBER_CHECKED(int32_t, max_references, Int32, args[2]); |
| @@ -13070,40 +13070,36 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DebugReferencedBy) { |
| // Get the constructor function for context extension and arguments array. |
| - JSObject* arguments_boilerplate = |
| - isolate->context()->native_context()->sloppy_arguments_boilerplate(); |
| - JSFunction* arguments_function = |
| - JSFunction::cast(arguments_boilerplate->map()->constructor()); |
| + Handle<JSObject> arguments_boilerplate( |
| + isolate->context()->native_context()->sloppy_arguments_boilerplate()); |
| + Handle<JSFunction> arguments_function( |
| + JSFunction::cast(arguments_boilerplate->map()->constructor())); |
| // Get the number of referencing objects. |
| int count; |
| - Heap* heap = isolate->heap(); |
| HeapIterator heap_iterator(heap); |
| count = DebugReferencedBy(&heap_iterator, |
| - target, instance_filter, max_references, |
| - NULL, 0, arguments_function); |
| + *target, *instance_filter, max_references, |
| + NULL, 0, *arguments_function); |
| // Allocate an array to hold the result. |
| - Object* object; |
| - { MaybeObject* maybe_object = heap->AllocateFixedArray(count); |
| - if (!maybe_object->ToObject(&object)) return maybe_object; |
| - } |
| - FixedArray* instances = FixedArray::cast(object); |
| + Handle<FixedArray> instances = isolate->factory()->NewFixedArray(count); |
| // Fill the referencing objects. |
| // AllocateFixedArray above does not make the heap non-iterable. |
| ASSERT(heap->IsHeapIterable()); |
| HeapIterator heap_iterator2(heap); |
| count = DebugReferencedBy(&heap_iterator2, |
| - target, instance_filter, max_references, |
| - instances, count, arguments_function); |
| + *target, *instance_filter, max_references, |
| + *instances, count, *arguments_function); |
| // Return result as JS array. |
| - Object* result; |
| - MaybeObject* maybe_result = heap->AllocateJSObject( |
| + Handle<JSFunction> constructor( |
| isolate->context()->native_context()->array_function()); |
| - if (!maybe_result->ToObject(&result)) return maybe_result; |
| - return JSArray::cast(result)->SetContent(instances); |
| + |
| + Handle<JSObject> result = isolate->factory()->NewJSObject(constructor); |
| + isolate->factory()->SetContent(Handle<JSArray>::cast(result), instances); |
|
Yang
2014/03/20 13:22:07
for the sake of consistency, could we move SetCont
Igor Sheludko
2014/03/20 13:28:14
It is done in a next CL where I handlified JSArray
|
| + return *result; |
| } |
| @@ -13143,7 +13139,7 @@ static int DebugConstructedBy(HeapIterator* iterator, |
| // args[0]: the constructor to find instances of |
| // args[1]: the the maximum number of objects to return |
| RUNTIME_FUNCTION(MaybeObject*, Runtime_DebugConstructedBy) { |
| - SealHandleScope shs(isolate); |
| + HandleScope scope(isolate); |
| ASSERT(args.length() == 2); |
| // First perform a full GC in order to avoid dead objects. |
| @@ -13151,7 +13147,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DebugConstructedBy) { |
| heap->CollectAllGarbage(Heap::kMakeHeapIterableMask, "%DebugConstructedBy"); |
| // Check parameters. |
| - CONVERT_ARG_CHECKED(JSFunction, constructor, 0); |
| + CONVERT_ARG_HANDLE_CHECKED(JSFunction, constructor, 0); |
| CONVERT_NUMBER_CHECKED(int32_t, max_references, Int32, args[1]); |
| RUNTIME_ASSERT(max_references >= 0); |
| @@ -13159,34 +13155,29 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DebugConstructedBy) { |
| int count; |
| HeapIterator heap_iterator(heap); |
| count = DebugConstructedBy(&heap_iterator, |
| - constructor, |
| + *constructor, |
| max_references, |
| NULL, |
| 0); |
| // Allocate an array to hold the result. |
| - Object* object; |
| - { MaybeObject* maybe_object = heap->AllocateFixedArray(count); |
| - if (!maybe_object->ToObject(&object)) return maybe_object; |
| - } |
| - FixedArray* instances = FixedArray::cast(object); |
| + Handle<FixedArray> instances = isolate->factory()->NewFixedArray(count); |
| - ASSERT(isolate->heap()->IsHeapIterable()); |
| + ASSERT(heap->IsHeapIterable()); |
| // Fill the referencing objects. |
| HeapIterator heap_iterator2(heap); |
| count = DebugConstructedBy(&heap_iterator2, |
| - constructor, |
| + *constructor, |
| max_references, |
| - instances, |
| + *instances, |
| count); |
| // Return result as JS array. |
| - Object* result; |
| - { MaybeObject* maybe_result = isolate->heap()->AllocateJSObject( |
| + Handle<JSFunction> array_function( |
| isolate->context()->native_context()->array_function()); |
| - if (!maybe_result->ToObject(&result)) return maybe_result; |
| - } |
| - return JSArray::cast(result)->SetContent(instances); |
| + Handle<JSObject> result = isolate->factory()->NewJSObject(array_function); |
| + isolate->factory()->SetContent(Handle<JSArray>::cast(result), instances); |
| + return *result; |
| } |