Index: src/liveedit.cc |
diff --git a/src/liveedit.cc b/src/liveedit.cc |
index e6bb4b29a636297d25d1d69c9ca7ff3a7b1edb52..9f6985be596a6810ee5e498db1222da2f715c7d1 100644 |
--- a/src/liveedit.cc |
+++ b/src/liveedit.cc |
@@ -939,13 +939,10 @@ static void ReplaceCodeObject(Handle<Code> original, |
// to code objects (that are never in new space) without worrying about |
// write barriers. |
Heap* heap = original->GetHeap(); |
- heap->CollectAllGarbage(Heap::kMakeHeapIterableMask, |
- "liveedit.cc ReplaceCodeObject"); |
+ HeapIterator iterator(heap); |
ASSERT(!heap->InNewSpace(*substitution)); |
- DisallowHeapAllocation no_allocation; |
- |
ReplacingVisitor visitor(*original, *substitution); |
// Iterate over all roots. Stack frames may have pointer into original code, |
@@ -955,7 +952,6 @@ static void ReplaceCodeObject(Handle<Code> original, |
// Now iterate over all pointers of all objects, including code_target |
// implicit pointers. |
- HeapIterator iterator(heap); |
for (HeapObject* obj = iterator.next(); obj != NULL; obj = iterator.next()) { |
obj->Iterate(&visitor); |
} |
@@ -982,7 +978,7 @@ class LiteralFixer { |
// If literal count didn't change, simply go over all functions |
// and clear literal arrays. |
ClearValuesVisitor visitor; |
- IterateJSFunctions(*shared_info, &visitor); |
+ IterateJSFunctions(shared_info, &visitor); |
} else { |
// When literal count changes, we have to create new array instances. |
// Since we cannot create instances when iterating heap, we should first |
@@ -1017,16 +1013,14 @@ class LiteralFixer { |
// Iterates all function instances in the HEAP that refers to the |
// provided shared_info. |
template<typename Visitor> |
- static void IterateJSFunctions(SharedFunctionInfo* shared_info, |
+ static void IterateJSFunctions(Handle<SharedFunctionInfo> shared_info, |
Visitor* visitor) { |
- DisallowHeapAllocation no_allocation; |
- |
HeapIterator iterator(shared_info->GetHeap()); |
for (HeapObject* obj = iterator.next(); obj != NULL; |
obj = iterator.next()) { |
if (obj->IsJSFunction()) { |
JSFunction* function = JSFunction::cast(obj); |
- if (function->shared() == shared_info) { |
+ if (function->shared() == *shared_info) { |
visitor->visit(function); |
} |
} |
@@ -1039,13 +1033,13 @@ class LiteralFixer { |
Handle<SharedFunctionInfo> shared_info, Isolate* isolate) { |
CountVisitor count_visitor; |
count_visitor.count = 0; |
- IterateJSFunctions(*shared_info, &count_visitor); |
+ IterateJSFunctions(shared_info, &count_visitor); |
int size = count_visitor.count; |
Handle<FixedArray> result = isolate->factory()->NewFixedArray(size); |
if (size > 0) { |
CollectVisitor collect_visitor(result); |
- IterateJSFunctions(*shared_info, &collect_visitor); |
+ IterateJSFunctions(shared_info, &collect_visitor); |
} |
return result; |
} |
@@ -1165,7 +1159,7 @@ void LiveEdit::ReplaceFunctionCode( |
Handle<SharedFunctionInfo> shared_info = shared_info_wrapper.GetInfo(); |
- isolate->heap()->EnsureHeapIsIterable(); |
+ isolate->heap()->MakeHeapIterable(); |
if (IsJSFunctionCode(shared_info->code())) { |
Handle<Code> code = compile_info_wrapper.GetFunctionCode(); |
@@ -1402,7 +1396,7 @@ void LiveEdit::PatchFunctionPositions(Handle<JSArray> shared_info_array, |
info->set_end_position(new_function_end); |
info->set_function_token_position(new_function_token_pos); |
- info->GetIsolate()->heap()->EnsureHeapIsIterable(); |
+ info->GetIsolate()->heap()->MakeHeapIterable(); |
if (IsJSFunctionCode(info->code())) { |
// Patch relocation info section of the code. |