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>(); |
} |