Chromium Code Reviews| Index: src/runtime.cc |
| diff --git a/src/runtime.cc b/src/runtime.cc |
| index a6c238c23a21a853af476346a6f79e9c45298aae..a4f6acedabaa4d3e80df714142953822d92f4d5d 100644 |
| --- a/src/runtime.cc |
| +++ b/src/runtime.cc |
| @@ -10059,14 +10059,16 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_GetFrameDetails) { |
| locals->set(i * 2 + 1, it.frame()->GetExpression(i)); |
| } |
| } |
| - // Get the context containing declarations. |
| - Handle<Context> context( |
| - Context::cast(it.frame()->context())->declaration_context()); |
| - for (; i < info.NumberOfLocals(); ++i) { |
| - Handle<String> name = info.LocalName(i); |
| - locals->set(i * 2, *name); |
| - locals->set(i * 2 + 1, |
| - context->get(scope_info->ContextSlotIndex(*name, NULL))); |
| + if (i < info.NumberOfLocals()) { |
| + // Get the context containing declarations. |
| + Handle<Context> context( |
| + Context::cast(it.frame()->context())->declaration_context()); |
| + for (; i < info.NumberOfLocals(); ++i) { |
| + Handle<String> name = info.LocalName(i); |
| + locals->set(i * 2, *name); |
| + locals->set(i * 2 + 1, |
| + context->get(scope_info->ContextSlotIndex(*name, NULL))); |
| + } |
| } |
| // Check whether this frame is positioned at return. If not top |
| @@ -10288,7 +10290,7 @@ static Handle<JSObject> MaterializeLocalScope(Isolate* isolate, |
| } |
| // Second fill all stack locals. |
| - for (int i = 0; i < scope_info.number_of_stack_slots(); i++) { |
| + for (int i = 0; i < scope_info.number_of_stack_slots(); ++i) { |
| RETURN_IF_EMPTY_HANDLE_VALUE( |
| isolate, |
| SetProperty(local_scope, |
| @@ -10299,37 +10301,40 @@ static Handle<JSObject> MaterializeLocalScope(Isolate* isolate, |
| Handle<JSObject>()); |
| } |
| - // Third fill all context locals. |
| - Handle<Context> frame_context(Context::cast(frame->context())); |
| - Handle<Context> function_context(frame_context->declaration_context()); |
| - if (!CopyContextLocalsToScopeObject(isolate, |
| - serialized_scope_info, scope_info, |
| - function_context, local_scope)) { |
| - return Handle<JSObject>(); |
| - } |
| - |
| - // Finally copy any properties from the function context extension. This will |
| - // be variables introduced by eval. |
| - if (function_context->closure() == *function) { |
| - if (function_context->has_extension() && |
| - !function_context->IsGlobalContext()) { |
| - Handle<JSObject> ext(JSObject::cast(function_context->extension())); |
| - Handle<FixedArray> keys = GetKeysInFixedArrayFor(ext, INCLUDE_PROTOS); |
| - for (int i = 0; i < keys->length(); i++) { |
| - // Names of variables introduced by eval are strings. |
| - ASSERT(keys->get(i)->IsString()); |
| - Handle<String> key(String::cast(keys->get(i))); |
| - RETURN_IF_EMPTY_HANDLE_VALUE( |
| - isolate, |
| - SetProperty(local_scope, |
| - key, |
| - GetProperty(ext, key), |
| - NONE, |
| - kNonStrictMode), |
| - Handle<JSObject>()); |
| + if (scope_info.number_of_context_slots() > Context::MIN_CONTEXT_SLOTS) { |
| + // Third fill all context locals. |
| + Handle<Context> frame_context(Context::cast(frame->context())); |
| + Handle<Context> function_context(frame_context->declaration_context()); |
| + if (!CopyContextLocalsToScopeObject(isolate, |
| + serialized_scope_info, scope_info, |
| + function_context, local_scope)) { |
| + return Handle<JSObject>(); |
| + } |
| + |
| + // Finally copy any properties from the function context extension. This will |
|
Kevin Millikin (Chromium)
2011/06/30 09:28:45
Long line already fixed.
|
| + // be variables introduced by eval. |
| + if (function_context->closure() == *function) { |
| + if (function_context->has_extension() && |
| + !function_context->IsGlobalContext()) { |
| + Handle<JSObject> ext(JSObject::cast(function_context->extension())); |
| + Handle<FixedArray> keys = GetKeysInFixedArrayFor(ext, INCLUDE_PROTOS); |
| + for (int i = 0; i < keys->length(); i++) { |
| + // Names of variables introduced by eval are strings. |
| + ASSERT(keys->get(i)->IsString()); |
| + Handle<String> key(String::cast(keys->get(i))); |
| + RETURN_IF_EMPTY_HANDLE_VALUE( |
| + isolate, |
| + SetProperty(local_scope, |
| + key, |
| + GetProperty(ext, key), |
| + NONE, |
| + kNonStrictMode), |
| + Handle<JSObject>()); |
| + } |
| } |
| } |
| } |
| + |
| return local_scope; |
| } |