Index: src/liveedit.cc |
diff --git a/src/liveedit.cc b/src/liveedit.cc |
index 22b82501e91f244b7bf16839e30ffb295c51e34d..e670b442b6d5033c4734d307a3cc74c9d094d537 100644 |
--- a/src/liveedit.cc |
+++ b/src/liveedit.cc |
@@ -825,7 +825,8 @@ class FunctionInfoListener { |
// Saves full information about a function: its code, its scope info |
// and a SharedFunctionInfo object. |
- void FunctionInfo(Handle<SharedFunctionInfo> shared, Scope* scope) { |
+ void FunctionInfo(Handle<SharedFunctionInfo> shared, Scope* scope, |
+ Zone* zone) { |
if (!shared->IsSharedFunctionInfo()) { |
return; |
} |
@@ -836,14 +837,14 @@ class FunctionInfoListener { |
Handle<Object>(shared->scope_info())); |
info.SetSharedFunctionInfo(shared); |
- Handle<Object> scope_info_list(SerializeFunctionScope(scope)); |
+ Handle<Object> scope_info_list(SerializeFunctionScope(scope, zone)); |
info.SetOuterScopeInfo(scope_info_list); |
} |
Handle<JSArray> GetResult() { return result_; } |
private: |
- Object* SerializeFunctionScope(Scope* scope) { |
+ Object* SerializeFunctionScope(Scope* scope, Zone* zone) { |
HandleScope handle_scope; |
Handle<JSArray> scope_info_list = FACTORY->NewJSArray(10); |
@@ -857,8 +858,8 @@ class FunctionInfoListener { |
return HEAP->undefined_value(); |
} |
do { |
- ZoneList<Variable*> stack_list(outer_scope->StackLocalCount()); |
- ZoneList<Variable*> context_list(outer_scope->ContextLocalCount()); |
+ ZoneList<Variable*> stack_list(outer_scope->StackLocalCount(), zone); |
+ ZoneList<Variable*> context_list(outer_scope->ContextLocalCount(), zone); |
outer_scope->CollectStackAndContextLocals(&stack_list, &context_list); |
context_list.Sort(&Variable::CompareIndex); |
@@ -927,28 +928,32 @@ void LiveEdit::WrapSharedFunctionInfos(Handle<JSArray> array) { |
// It works in context of ZoneScope. |
class ReferenceCollectorVisitor : public ObjectVisitor { |
public: |
- explicit ReferenceCollectorVisitor(Code* original) |
- : original_(original), rvalues_(10), reloc_infos_(10), code_entries_(10) { |
+ ReferenceCollectorVisitor(Code* original, Zone* zone) |
+ : original_(original), |
+ rvalues_(10, zone), |
+ reloc_infos_(10, zone), |
+ code_entries_(10, zone), |
+ zone_(zone) { |
} |
virtual void VisitPointers(Object** start, Object** end) { |
for (Object** p = start; p < end; p++) { |
if (*p == original_) { |
- rvalues_.Add(p); |
+ rvalues_.Add(p, zone_); |
} |
} |
} |
virtual void VisitCodeEntry(Address entry) { |
if (Code::GetObjectFromEntryAddress(entry) == original_) { |
- code_entries_.Add(entry); |
+ code_entries_.Add(entry, zone_); |
} |
} |
virtual void VisitCodeTarget(RelocInfo* rinfo) { |
if (RelocInfo::IsCodeTarget(rinfo->rmode()) && |
Code::GetCodeFromTargetAddress(rinfo->target_address()) == original_) { |
- reloc_infos_.Add(*rinfo); |
+ reloc_infos_.Add(*rinfo, zone_); |
} |
} |
@@ -977,6 +982,7 @@ class ReferenceCollectorVisitor : public ObjectVisitor { |
ZoneList<Object**> rvalues_; |
ZoneList<RelocInfo> reloc_infos_; |
ZoneList<Address> code_entries_; |
+ Zone* zone_; |
}; |
@@ -990,7 +996,7 @@ static void ReplaceCodeObject(Code* original, Code* substitution) { |
// A zone scope for ReferenceCollectorVisitor. |
ZoneScope scope(Isolate::Current(), DELETE_ON_EXIT); |
- ReferenceCollectorVisitor visitor(original); |
+ ReferenceCollectorVisitor visitor(original, Isolate::Current()->zone()); |
// Iterate over all roots. Stack frames may have pointer into original code, |
// so temporary replace the pointers with offset numbers |
@@ -1592,11 +1598,12 @@ static bool IsDropableFrame(StackFrame* frame) { |
// Fills result array with statuses of functions. Modifies the stack |
// removing all listed function if possible and if do_drop is true. |
static const char* DropActivationsInActiveThread( |
- Handle<JSArray> shared_info_array, Handle<JSArray> result, bool do_drop) { |
+ Handle<JSArray> shared_info_array, Handle<JSArray> result, bool do_drop, |
+ Zone* zone) { |
Isolate* isolate = Isolate::Current(); |
Debug* debug = isolate->debug(); |
ZoneScope scope(isolate, DELETE_ON_EXIT); |
- Vector<StackFrame*> frames = CreateStackMap(); |
+ Vector<StackFrame*> frames = CreateStackMap(zone); |
int array_len = Smi::cast(shared_info_array->length())->value(); |
@@ -1723,7 +1730,7 @@ class InactiveThreadActivationsChecker : public ThreadVisitor { |
Handle<JSArray> LiveEdit::CheckAndDropActivations( |
- Handle<JSArray> shared_info_array, bool do_drop) { |
+ Handle<JSArray> shared_info_array, bool do_drop, Zone* zone) { |
int len = Smi::cast(shared_info_array->length())->value(); |
Handle<JSArray> result = FACTORY->NewJSArray(len); |
@@ -1748,7 +1755,7 @@ Handle<JSArray> LiveEdit::CheckAndDropActivations( |
// Try to drop activations from the current stack. |
const char* error_message = |
- DropActivationsInActiveThread(shared_info_array, result, do_drop); |
+ DropActivationsInActiveThread(shared_info_array, result, do_drop, zone); |
if (error_message != NULL) { |
// Add error message as an array extra element. |
Vector<const char> vector_message(error_message, StrLength(error_message)); |
@@ -1776,9 +1783,11 @@ LiveEditFunctionTracker::~LiveEditFunctionTracker() { |
void LiveEditFunctionTracker::RecordFunctionInfo( |
- Handle<SharedFunctionInfo> info, FunctionLiteral* lit) { |
+ Handle<SharedFunctionInfo> info, FunctionLiteral* lit, |
+ Zone* zone) { |
if (isolate_->active_function_info_listener() != NULL) { |
- isolate_->active_function_info_listener()->FunctionInfo(info, lit->scope()); |
+ isolate_->active_function_info_listener()->FunctionInfo(info, lit->scope(), |
+ zone); |
} |
} |