Index: src/runtime/runtime-liveedit.cc |
diff --git a/src/runtime/runtime-liveedit.cc b/src/runtime/runtime-liveedit.cc |
index 0ec484204f965fbd69c2fc33e2ef8f77dc7557d6..b52980ab9237378796808f9b8c016f2617177907 100644 |
--- a/src/runtime/runtime-liveedit.cc |
+++ b/src/runtime/runtime-liveedit.cc |
@@ -15,32 +15,6 @@ |
namespace v8 { |
namespace internal { |
- |
-static int FindSharedFunctionInfosForScript(HeapIterator* iterator, |
- Script* script, |
- FixedArray* buffer) { |
- DisallowHeapAllocation no_allocation; |
- int counter = 0; |
- int buffer_size = buffer->length(); |
- for (HeapObject* obj = iterator->next(); obj != NULL; |
- obj = iterator->next()) { |
- DCHECK(obj != NULL); |
- if (!obj->IsSharedFunctionInfo()) { |
- continue; |
- } |
- SharedFunctionInfo* shared = SharedFunctionInfo::cast(obj); |
- if (shared->script() != script) { |
- continue; |
- } |
- if (counter < buffer_size) { |
- buffer->set(counter, shared); |
- } |
- counter++; |
- } |
- return counter; |
-} |
- |
- |
// For a script finds all SharedFunctionInfo's in the heap that points |
// to this script. Returns JSArray of SharedFunctionInfo wrapped |
// in OpaqueReferences. |
@@ -53,32 +27,29 @@ RUNTIME_FUNCTION(Runtime_LiveEditFindSharedFunctionInfosForScript) { |
RUNTIME_ASSERT(script_value->value()->IsScript()); |
Handle<Script> script = Handle<Script>(Script::cast(script_value->value())); |
- const int kBufferSize = 32; |
- |
- Handle<FixedArray> array; |
- array = isolate->factory()->NewFixedArray(kBufferSize); |
- int number; |
+ List<Handle<SharedFunctionInfo> > found; |
Heap* heap = isolate->heap(); |
{ |
- HeapIterator heap_iterator(heap); |
- Script* scr = *script; |
- FixedArray* arr = *array; |
- number = FindSharedFunctionInfosForScript(&heap_iterator, scr, arr); |
- } |
- if (number > kBufferSize) { |
- array = isolate->factory()->NewFixedArray(number); |
- HeapIterator heap_iterator(heap); |
- Script* scr = *script; |
- FixedArray* arr = *array; |
- FindSharedFunctionInfosForScript(&heap_iterator, scr, arr); |
+ HeapIterator iterator(heap); |
+ HeapObject* heap_obj; |
+ while ((heap_obj = iterator.next())) { |
+ if (!heap_obj->IsSharedFunctionInfo()) continue; |
+ SharedFunctionInfo* shared = SharedFunctionInfo::cast(heap_obj); |
+ if (shared->script() != *script) continue; |
+ found.Add(Handle<SharedFunctionInfo>(shared)); |
+ } |
} |
- Handle<JSArray> result = isolate->factory()->NewJSArrayWithElements(array); |
- result->set_length(Smi::FromInt(number)); |
- |
- LiveEdit::WrapSharedFunctionInfos(result); |
- |
- return *result; |
+ Handle<FixedArray> result = isolate->factory()->NewFixedArray(found.length()); |
+ for (int i = 0; i < found.length(); ++i) { |
+ Handle<SharedFunctionInfo> shared = found[i]; |
+ SharedInfoWrapper info_wrapper = SharedInfoWrapper::Create(isolate); |
+ Handle<String> name(String::cast(shared->name())); |
+ info_wrapper.SetProperties(name, shared->start_position(), |
+ shared->end_position(), shared); |
+ result->set(i, *info_wrapper.GetJSArray()); |
+ } |
+ return *isolate->factory()->NewJSArrayWithElements(result); |
} |