Skip to content

Commit 2f9dabd

Browse files
committed
deps: cherry-pick 9eb96bb from upstream V8
Original commit message: [api] Avoid needlessly calling descriptor interceptors Reland part of https://chromium-review.googlesource.com/c/v8/v8/+/816515. Change-Id: I72ad85ffd162fc0563fc25cdf35189e894f9dc82 Reviewed-on: https://chromium-review.googlesource.com/1138808 Commit-Queue: Timothy Gu <timothygu@chromium.org> Reviewed-by: Jakob Kummerow <jkummerow@chromium.org> Reviewed-by: Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#54492} PR-URL: #22390 Fixes: #17480 Fixes: #17481 Refs: v8/v8@9eb96bb Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Gus Caplan <me@gus.host> Reviewed-By: James M Snell <jasnell@gmail.com>
1 parent fa543c0 commit 2f9dabd

File tree

3 files changed

+16
-12
lines changed

3 files changed

+16
-12
lines changed

common.gypi

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929

3030
# Reset this number to 0 on major V8 upgrades.
3131
# Increment by one for each non-official patch applied to deps/v8.
32-
'v8_embedder_string': '-node.16',
32+
'v8_embedder_string': '-node.17',
3333

3434
# Enable disassembler for `--print-code` v8 options
3535
'v8_enable_disassembler': 1,

deps/v8/src/objects.cc

+9-5
Original file line numberDiff line numberDiff line change
@@ -7662,13 +7662,17 @@ namespace {
76627662

76637663
Maybe<bool> GetPropertyDescriptorWithInterceptor(LookupIterator* it,
76647664
PropertyDescriptor* desc) {
7665-
bool has_access = true;
76667665
if (it->state() == LookupIterator::ACCESS_CHECK) {
7667-
has_access = it->HasAccess() || JSObject::AllCanRead(it);
7668-
it->Next();
7666+
if (it->HasAccess()) {
7667+
it->Next();
7668+
} else if (!JSObject::AllCanRead(it) ||
7669+
it->state() != LookupIterator::INTERCEPTOR) {
7670+
it->Restart();
7671+
return Just(false);
7672+
}
76697673
}
76707674

7671-
if (has_access && it->state() == LookupIterator::INTERCEPTOR) {
7675+
if (it->state() == LookupIterator::INTERCEPTOR) {
76727676
Isolate* isolate = it->isolate();
76737677
Handle<InterceptorInfo> interceptor = it->GetInterceptor();
76747678
if (!interceptor->descriptor()->IsUndefined(isolate)) {
@@ -7700,9 +7704,9 @@ Maybe<bool> GetPropertyDescriptorWithInterceptor(LookupIterator* it,
77007704

77017705
return Just(true);
77027706
}
7707+
it->Next();
77037708
}
77047709
}
7705-
it->Restart();
77067710
return Just(false);
77077711
}
77087712
} // namespace

deps/v8/test/cctest/test-api-interceptors.cc

+6-6
Original file line numberDiff line numberDiff line change
@@ -4768,7 +4768,7 @@ TEST(NamedAllCanReadInterceptor) {
47684768
ExpectInt32("checked.whatever", 17);
47694769
CHECK(!CompileRun("Object.getOwnPropertyDescriptor(checked, 'whatever')")
47704770
->IsUndefined());
4771-
CHECK_EQ(6, access_check_data.count);
4771+
CHECK_EQ(5, access_check_data.count);
47724772

47734773
access_check_data.result = false;
47744774
ExpectInt32("checked.whatever", intercept_data_0.value);
@@ -4777,7 +4777,7 @@ TEST(NamedAllCanReadInterceptor) {
47774777
CompileRun("Object.getOwnPropertyDescriptor(checked, 'whatever')");
47784778
CHECK(try_catch.HasCaught());
47794779
}
4780-
CHECK_EQ(9, access_check_data.count);
4780+
CHECK_EQ(8, access_check_data.count);
47814781

47824782
intercept_data_1.should_intercept = true;
47834783
ExpectInt32("checked.whatever", intercept_data_1.value);
@@ -4786,7 +4786,7 @@ TEST(NamedAllCanReadInterceptor) {
47864786
CompileRun("Object.getOwnPropertyDescriptor(checked, 'whatever')");
47874787
CHECK(try_catch.HasCaught());
47884788
}
4789-
CHECK_EQ(12, access_check_data.count);
4789+
CHECK_EQ(11, access_check_data.count);
47904790
g_access_check_data = nullptr;
47914791
}
47924792

@@ -4855,7 +4855,7 @@ TEST(IndexedAllCanReadInterceptor) {
48554855
ExpectInt32("checked[15]", 17);
48564856
CHECK(!CompileRun("Object.getOwnPropertyDescriptor(checked, '15')")
48574857
->IsUndefined());
4858-
CHECK_EQ(6, access_check_data.count);
4858+
CHECK_EQ(5, access_check_data.count);
48594859

48604860
access_check_data.result = false;
48614861
ExpectInt32("checked[15]", intercept_data_0.value);
@@ -4864,7 +4864,7 @@ TEST(IndexedAllCanReadInterceptor) {
48644864
CompileRun("Object.getOwnPropertyDescriptor(checked, '15')");
48654865
CHECK(try_catch.HasCaught());
48664866
}
4867-
CHECK_EQ(9, access_check_data.count);
4867+
CHECK_EQ(8, access_check_data.count);
48684868

48694869
intercept_data_1.should_intercept = true;
48704870
ExpectInt32("checked[15]", intercept_data_1.value);
@@ -4873,7 +4873,7 @@ TEST(IndexedAllCanReadInterceptor) {
48734873
CompileRun("Object.getOwnPropertyDescriptor(checked, '15')");
48744874
CHECK(try_catch.HasCaught());
48754875
}
4876-
CHECK_EQ(12, access_check_data.count);
4876+
CHECK_EQ(11, access_check_data.count);
48774877

48784878
g_access_check_data = nullptr;
48794879
}

0 commit comments

Comments
 (0)