| Index: src/runtime.cc
|
| diff --git a/src/runtime.cc b/src/runtime.cc
|
| index 37286463b17efc42f29c5189828459cbbeef9dbf..d9b226e430b02e377300c216cd69206bf179f5a1 100644
|
| --- a/src/runtime.cc
|
| +++ b/src/runtime.cc
|
| @@ -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>();
|
| }
|
|
|
|
|