| Index: src/liveedit.cc
|
| diff --git a/src/liveedit.cc b/src/liveedit.cc
|
| index 346d9ea22d1c4448173a2f8545f4a0a869e9671c..2ac24fba0774ff6817c8f4561cfb8091f9756e77 100644
|
| --- a/src/liveedit.cc
|
| +++ b/src/liveedit.cc
|
| @@ -32,6 +32,7 @@
|
| #include "compiler.h"
|
| #include "oprofile-agent.h"
|
| #include "scopes.h"
|
| +#include "scopeinfo.h"
|
| #include "global-handles.h"
|
| #include "debug.h"
|
| #include "memory.h"
|
| @@ -500,12 +501,16 @@ class FunctionInfoWrapper : public JSArrayBasedStruct<FunctionInfoWrapper> {
|
| this->SetSmiValueField(kParamNumOffset_, param_num);
|
| this->SetSmiValueField(kParentIndexOffset_, parent_index);
|
| }
|
| - void SetFunctionCode(Handle<Code> function_code) {
|
| - Handle<JSValue> wrapper = WrapInJSValue(*function_code);
|
| - this->SetField(kCodeOffset_, wrapper);
|
| + void SetFunctionCode(Handle<Code> function_code,
|
| + Handle<Object> code_scope_info) {
|
| + Handle<JSValue> code_wrapper = WrapInJSValue(*function_code);
|
| + this->SetField(kCodeOffset_, code_wrapper);
|
| +
|
| + Handle<JSValue> scope_wrapper = WrapInJSValue(*code_scope_info);
|
| + this->SetField(kCodeScopeInfoOffset_, scope_wrapper);
|
| }
|
| - void SetScopeInfo(Handle<Object> scope_info_array) {
|
| - this->SetField(kScopeInfoOffset_, scope_info_array);
|
| + void SetOuterScopeInfo(Handle<Object> scope_info_array) {
|
| + this->SetField(kOuterScopeInfoOffset_, scope_info_array);
|
| }
|
| void SetSharedFunctionInfo(Handle<SharedFunctionInfo> info) {
|
| Handle<JSValue> info_holder = WrapInJSValue(*info);
|
| @@ -519,6 +524,11 @@ class FunctionInfoWrapper : public JSArrayBasedStruct<FunctionInfoWrapper> {
|
| JSValue::cast(this->GetField(kCodeOffset_))));
|
| return Handle<Code>::cast(raw_result);
|
| }
|
| + Handle<Object> GetCodeScopeInfo() {
|
| + Handle<Object> raw_result = UnwrapJSValue(Handle<JSValue>(
|
| + JSValue::cast(this->GetField(kCodeScopeInfoOffset_))));
|
| + return raw_result;
|
| + }
|
| int GetStartPosition() {
|
| return this->GetSmiValueField(kStartPositionOffset_);
|
| }
|
| @@ -532,10 +542,11 @@ class FunctionInfoWrapper : public JSArrayBasedStruct<FunctionInfoWrapper> {
|
| static const int kEndPositionOffset_ = 2;
|
| static const int kParamNumOffset_ = 3;
|
| static const int kCodeOffset_ = 4;
|
| - static const int kScopeInfoOffset_ = 5;
|
| - static const int kParentIndexOffset_ = 6;
|
| - static const int kSharedFunctionInfoOffset_ = 7;
|
| - static const int kSize_ = 8;
|
| + static const int kCodeScopeInfoOffset_ = 5;
|
| + static const int kOuterScopeInfoOffset_ = 6;
|
| + static const int kParentIndexOffset_ = 7;
|
| + static const int kSharedFunctionInfoOffset_ = 8;
|
| + static const int kSize_ = 9;
|
|
|
| friend class JSArrayBasedStruct<FunctionInfoWrapper>;
|
| };
|
| @@ -671,7 +682,7 @@ class FunctionInfoListener {
|
| void FunctionCode(Handle<Code> function_code) {
|
| FunctionInfoWrapper info =
|
| FunctionInfoWrapper::cast(result_->GetElement(current_parent_index_));
|
| - info.SetFunctionCode(function_code);
|
| + info.SetFunctionCode(function_code, Handle<Object>(Heap::null_value()));
|
| }
|
|
|
| // Saves full information about a function: its code, its scope info
|
| @@ -682,11 +693,12 @@ class FunctionInfoListener {
|
| }
|
| FunctionInfoWrapper info =
|
| FunctionInfoWrapper::cast(result_->GetElement(current_parent_index_));
|
| - info.SetFunctionCode(Handle<Code>(shared->code()));
|
| + info.SetFunctionCode(Handle<Code>(shared->code()),
|
| + Handle<Object>(shared->scope_info()));
|
| info.SetSharedFunctionInfo(shared);
|
|
|
| Handle<Object> scope_info_list(SerializeFunctionScope(scope));
|
| - info.SetScopeInfo(scope_info_list);
|
| + info.SetOuterScopeInfo(scope_info_list);
|
| }
|
|
|
| Handle<JSArray> GetResult() {
|
| @@ -855,6 +867,10 @@ Object* LiveEdit::ReplaceFunctionCode(Handle<JSArray> new_compile_info_array,
|
| if (IsJSFunctionCode(shared_info->code())) {
|
| ReplaceCodeObject(shared_info->code(),
|
| *(compile_info_wrapper.GetFunctionCode()));
|
| + Handle<Object> code_scope_info = compile_info_wrapper.GetCodeScopeInfo();
|
| + if (code_scope_info->IsFixedArray()) {
|
| + shared_info->set_scope_info(SerializedScopeInfo::cast(*code_scope_info));
|
| + }
|
| }
|
|
|
| if (shared_info->debug_info()->IsDebugInfo()) {
|
|
|