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).
|
||||
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);
|
||||
|
||||
// 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
|
||||
// frame.
|
||||
static Handle<JSObject> MaterializeLocalScopeWithFrameInspector(
|
||||
@ -10637,8 +10665,8 @@ static Handle<JSObject> MaterializeLocalScopeWithFrameInspector(
|
||||
// Third fill all context locals.
|
||||
Handle<Context> frame_context(Context::cast(frame->context()));
|
||||
Handle<Context> function_context(frame_context->declaration_context());
|
||||
if (!scope_info->CopyContextLocalsToScopeObject(
|
||||
isolate, function_context, local_scope)) {
|
||||
if (!CopyContextLocalsToScopeObject(
|
||||
isolate, scope_info, function_context, local_scope)) {
|
||||
return Handle<JSObject>();
|
||||
}
|
||||
|
||||
@ -10790,8 +10818,8 @@ static Handle<JSObject> MaterializeClosure(Isolate* isolate,
|
||||
isolate->factory()->NewJSObject(isolate->object_function());
|
||||
|
||||
// Fill all context locals to the context extension.
|
||||
if (!scope_info->CopyContextLocalsToScopeObject(
|
||||
isolate, context, closure_scope)) {
|
||||
if (!CopyContextLocalsToScopeObject(
|
||||
isolate, scope_info, context, closure_scope)) {
|
||||
return Handle<JSObject>();
|
||||
}
|
||||
|
||||
@ -10910,8 +10938,8 @@ static Handle<JSObject> MaterializeBlockScope(
|
||||
isolate->factory()->NewJSObject(isolate->object_function());
|
||||
|
||||
// Fill all context locals.
|
||||
if (!scope_info->CopyContextLocalsToScopeObject(
|
||||
isolate, context, block_scope)) {
|
||||
if (!CopyContextLocalsToScopeObject(
|
||||
isolate, scope_info, context, block_scope)) {
|
||||
return Handle<JSObject>();
|
||||
}
|
||||
|
||||
@ -10933,8 +10961,8 @@ static Handle<JSObject> MaterializeModuleScope(
|
||||
isolate->factory()->NewJSObject(isolate->object_function());
|
||||
|
||||
// Fill all context locals.
|
||||
if (!scope_info->CopyContextLocalsToScopeObject(
|
||||
isolate, context, module_scope)) {
|
||||
if (!CopyContextLocalsToScopeObject(
|
||||
isolate, scope_info, context, module_scope)) {
|
||||
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() {
|
||||
ASSERT(length() > 0);
|
||||
return kVariablePartIndex;
|
||||
|
Loading…
Reference in New Issue
Block a user