Commit 82a7ce63 authored by ulan@chromium.org's avatar ulan@chromium.org

Revert r13699 "Debugger: ScopeMirror has N^2 algorithm when building closure...

Revert r13699 "Debugger: ScopeMirror has N^2 algorithm when building closure mirrors." because of WebKit crashes.

BUG=v8:2554
R=verwaest@chromium.org

Review URL: https://chromiumcodereview.appspot.com/12321108

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@13714 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 5c7bff3e
...@@ -3559,13 +3559,6 @@ class ScopeInfo : public FixedArray { ...@@ -3559,13 +3559,6 @@ class ScopeInfo : public FixedArray {
// must be a symbol (canonicalized). // must be a symbol (canonicalized).
int FunctionContextSlotIndex(String* name, VariableMode* mode); int FunctionContextSlotIndex(String* name, VariableMode* mode);
// Copies all the context locals into an object used to materialize a scope.
bool CopyContextLocalsToScopeObject(Isolate* isolate,
Handle<Context> context,
Handle<JSObject> scope_object);
static Handle<ScopeInfo> Create(Scope* scope, Zone* zone); static Handle<ScopeInfo> Create(Scope* scope, Zone* zone);
// Serializes empty scope info. // Serializes empty scope info.
......
...@@ -10588,6 +10588,34 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_GetFrameDetails) { ...@@ -10588,6 +10588,34 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_GetFrameDetails) {
} }
// Copy all the context locals into an object used to materialize a scope.
static bool CopyContextLocalsToScopeObject(
Isolate* isolate,
Handle<ScopeInfo> scope_info,
Handle<Context> context,
Handle<JSObject> scope_object) {
// Fill all context locals to the context extension.
for (int i = 0; i < scope_info->ContextLocalCount(); i++) {
VariableMode mode;
InitializationFlag init_flag;
int context_index = scope_info->ContextSlotIndex(
scope_info->ContextLocalName(i), &mode, &init_flag);
RETURN_IF_EMPTY_HANDLE_VALUE(
isolate,
SetProperty(isolate,
scope_object,
Handle<String>(scope_info->ContextLocalName(i)),
Handle<Object>(context->get(context_index), isolate),
NONE,
kNonStrictMode),
false);
}
return true;
}
// Create a plain JSObject which materializes the local scope for the specified // Create a plain JSObject which materializes the local scope for the specified
// frame. // frame.
static Handle<JSObject> MaterializeLocalScopeWithFrameInspector( static Handle<JSObject> MaterializeLocalScopeWithFrameInspector(
...@@ -10637,8 +10665,8 @@ static Handle<JSObject> MaterializeLocalScopeWithFrameInspector( ...@@ -10637,8 +10665,8 @@ static Handle<JSObject> MaterializeLocalScopeWithFrameInspector(
// Third fill all context locals. // Third fill all context locals.
Handle<Context> frame_context(Context::cast(frame->context())); Handle<Context> frame_context(Context::cast(frame->context()));
Handle<Context> function_context(frame_context->declaration_context()); Handle<Context> function_context(frame_context->declaration_context());
if (!scope_info->CopyContextLocalsToScopeObject( if (!CopyContextLocalsToScopeObject(
isolate, function_context, local_scope)) { isolate, scope_info, function_context, local_scope)) {
return Handle<JSObject>(); return Handle<JSObject>();
} }
...@@ -10790,8 +10818,8 @@ static Handle<JSObject> MaterializeClosure(Isolate* isolate, ...@@ -10790,8 +10818,8 @@ static Handle<JSObject> MaterializeClosure(Isolate* isolate,
isolate->factory()->NewJSObject(isolate->object_function()); isolate->factory()->NewJSObject(isolate->object_function());
// Fill all context locals to the context extension. // Fill all context locals to the context extension.
if (!scope_info->CopyContextLocalsToScopeObject( if (!CopyContextLocalsToScopeObject(
isolate, context, closure_scope)) { isolate, scope_info, context, closure_scope)) {
return Handle<JSObject>(); return Handle<JSObject>();
} }
...@@ -10910,8 +10938,8 @@ static Handle<JSObject> MaterializeBlockScope( ...@@ -10910,8 +10938,8 @@ static Handle<JSObject> MaterializeBlockScope(
isolate->factory()->NewJSObject(isolate->object_function()); isolate->factory()->NewJSObject(isolate->object_function());
// Fill all context locals. // Fill all context locals.
if (!scope_info->CopyContextLocalsToScopeObject( if (!CopyContextLocalsToScopeObject(
isolate, context, block_scope)) { isolate, scope_info, context, block_scope)) {
return Handle<JSObject>(); return Handle<JSObject>();
} }
...@@ -10933,8 +10961,8 @@ static Handle<JSObject> MaterializeModuleScope( ...@@ -10933,8 +10961,8 @@ static Handle<JSObject> MaterializeModuleScope(
isolate->factory()->NewJSObject(isolate->object_function()); isolate->factory()->NewJSObject(isolate->object_function());
// Fill all context locals. // Fill all context locals.
if (!scope_info->CopyContextLocalsToScopeObject( if (!CopyContextLocalsToScopeObject(
isolate, context, module_scope)) { isolate, scope_info, context, module_scope)) {
return Handle<JSObject>(); return Handle<JSObject>();
} }
......
...@@ -362,29 +362,6 @@ int ScopeInfo::FunctionContextSlotIndex(String* name, VariableMode* mode) { ...@@ -362,29 +362,6 @@ int ScopeInfo::FunctionContextSlotIndex(String* name, VariableMode* mode) {
} }
bool ScopeInfo::CopyContextLocalsToScopeObject(
Isolate* isolate,
Handle<Context> context,
Handle<JSObject> scope_object) {
// Fill all context locals to the context extension.
int start = ContextLocalNameEntriesIndex();
int end = start + ContextLocalCount();
for (int i = start; i < end; ++i) {
int context_index = Context::MIN_CONTEXT_SLOTS + i - start;
RETURN_IF_EMPTY_HANDLE_VALUE(
isolate,
SetProperty(isolate,
scope_object,
Handle<String>(String::cast(get(i))),
Handle<Object>(context->get(context_index), isolate),
::NONE,
kNonStrictMode),
false);
}
return true;
}
int ScopeInfo::ParameterEntriesIndex() { int ScopeInfo::ParameterEntriesIndex() {
ASSERT(length() > 0); ASSERT(length() > 0);
return kVariablePartIndex; return kVariablePartIndex;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment