| 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);
|
| }
|
| }
|
|
|
|
|