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
This commit is contained in:
parent
5c7bff3ed8
commit
82a7ce63dc
@ -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) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 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(
|
|||||||
// 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,
|
|||||||
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(
|
|||||||
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(
|
|||||||
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) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
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;
|
||||||
|
Loading…
Reference in New Issue
Block a user