From 367b0c1e7a323deafeab56736b01bc7e14fc1998 Mon Sep 17 00:00:00 2001 From: Victor Gomes Date: Wed, 1 Jul 2020 15:32:55 +0200 Subject: [PATCH] [runtime] Change default scope info for SyntheticFunctionContexts This changes the default scope info for SyntheticFunctionContexts to the EmptyScopeInfo which does not contain an extension slot. The bug happened because, previously, the native context scope info was used as dummy. Change-Id: I4d6bf6918c11c79201d16bde99ed76800ad6f6c5 Bug: v8:10629 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2277806 Commit-Queue: Victor Gomes Commit-Queue: Leszek Swirski Auto-Submit: Victor Gomes Reviewed-by: Leszek Swirski Cr-Commit-Position: refs/heads/master@{#68636} --- src/codegen/code-stub-assembler.cc | 3 +-- test/cctest/test-code-stub-assembler.cc | 7 ++++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/codegen/code-stub-assembler.cc b/src/codegen/code-stub-assembler.cc index 9d153de6a5fa..912f4a83d58c 100644 --- a/src/codegen/code-stub-assembler.cc +++ b/src/codegen/code-stub-assembler.cc @@ -12961,8 +12961,7 @@ void CodeStubAssembler::InitializeSyntheticFunctionContext( SmiConstant(slots)); TNode context = CAST(context_heap_object); - const TNode empty_scope_info = - LoadContextElement(native_context, Context::SCOPE_INFO_INDEX); + const TNode empty_scope_info = LoadRoot(RootIndex::kEmptyScopeInfo); StoreContextElementNoWriteBarrier(context, Context::SCOPE_INFO_INDEX, empty_scope_info); StoreContextElementNoWriteBarrier(context, Context::PREVIOUS_INDEX, diff --git a/test/cctest/test-code-stub-assembler.cc b/test/cctest/test-code-stub-assembler.cc index 4dc67f07e34a..79532603212f 100644 --- a/test/cctest/test-code-stub-assembler.cc +++ b/test/cctest/test-code-stub-assembler.cc @@ -2491,7 +2491,7 @@ TEST(CreatePromiseResolvingFunctionsContext) { ft.Call(isolate->factory()->undefined_value()).ToHandleChecked(); CHECK(result->IsContext()); Handle context_js = Handle::cast(result); - CHECK_EQ(isolate->native_context()->scope_info(), context_js->scope_info()); + CHECK_EQ(isolate->root(RootIndex::kEmptyScopeInfo), context_js->scope_info()); CHECK_EQ(*isolate->native_context(), context_js->native_context()); CHECK(context_js->get(PromiseBuiltins::kPromiseSlot).IsJSPromise()); CHECK_EQ(ReadOnlyRoots(isolate).false_value(), @@ -2649,7 +2649,7 @@ TEST(CreatePromiseGetCapabilitiesExecutorContext) { CHECK(result_obj->IsContext()); Handle context_js = Handle::cast(result_obj); CHECK_EQ(PromiseBuiltins::kCapabilitiesContextLength, context_js->length()); - CHECK_EQ(isolate->native_context()->scope_info(), context_js->scope_info()); + CHECK_EQ(isolate->root(RootIndex::kEmptyScopeInfo), context_js->scope_info()); CHECK_EQ(*isolate->native_context(), context_js->native_context()); CHECK( context_js->get(PromiseBuiltins::kCapabilitySlot).IsPromiseCapability()); @@ -2698,7 +2698,8 @@ TEST(NewPromiseCapability) { for (auto&& callback : callbacks) { Handle context(Context::cast(callback->context()), isolate); - CHECK_EQ(isolate->native_context()->scope_info(), context->scope_info()); + CHECK_EQ(isolate->root(RootIndex::kEmptyScopeInfo), + context->scope_info()); CHECK_EQ(*isolate->native_context(), context->native_context()); CHECK_EQ(PromiseBuiltins::kPromiseContextLength, context->length()); CHECK_EQ(context->get(PromiseBuiltins::kPromiseSlot), result->promise());