mirror of https://github.com/nodejs/node.git
deps: patch V8 to 11.8.172.17
Refs: https://github.com/v8/v8/compare/11.8.172.15...11.8.172.17 PR-URL: https://github.com/nodejs/node/pull/50292 Refs: https://github.com/v8/v8/compare/11.8.172.15...11.8.172.16 Reviewed-By: Richard Lau <rlau@redhat.com> Reviewed-By: Jiawen Geng <technicalcute@gmail.com>
This commit is contained in:
parent
6557c1c9b1
commit
0899bee48c
|
@ -11,7 +11,7 @@
|
|||
#define V8_MAJOR_VERSION 11
|
||||
#define V8_MINOR_VERSION 8
|
||||
#define V8_BUILD_NUMBER 172
|
||||
#define V8_PATCH_LEVEL 15
|
||||
#define V8_PATCH_LEVEL 17
|
||||
|
||||
// Use 1 for candidates and 0 otherwise.
|
||||
// (Boolean macro values are not supported by all preprocessors.)
|
||||
|
|
|
@ -579,7 +579,7 @@
|
|||
'release_x64_gcmole': [
|
||||
'release_bot', 'x64', 'gcmole'],
|
||||
'release_x64_msvc': [
|
||||
'release_bot_no_goma', 'x64', 'minimal_symbols', 'msvc'],
|
||||
'release_bot_no_reclient', 'x64', 'minimal_symbols', 'msvc'],
|
||||
'release_x64_correctness_fuzzer' : [
|
||||
'release_bot', 'x64', 'v8_correctness_fuzzer'],
|
||||
'release_x64_disable_runtime_call_stats': [
|
||||
|
@ -589,7 +589,7 @@
|
|||
'release_x64_fuchsia_trybot': [
|
||||
'release_trybot', 'x64', 'fuchsia'],
|
||||
'release_x64_gcc': [
|
||||
'release_bot_no_goma', 'x64', 'gcc', 'lld', 'no_custom_libcxx'],
|
||||
'release_bot_no_reclient', 'x64', 'gcc', 'lld', 'no_custom_libcxx'],
|
||||
'release_x64_ios_simulator': [
|
||||
'release_bot', 'x64', 'ios_simulator'],
|
||||
'release_x64_internal': [
|
||||
|
@ -648,7 +648,7 @@
|
|||
'debug_x64_asan': [
|
||||
'debug_bot', 'x64', 'asan', 'lsan'],
|
||||
'debug_x64_asan_no_lsan_static': [
|
||||
'debug', 'static', 'goma', 'v8_enable_slow_dchecks', 'v8_optimized_debug',
|
||||
'debug', 'static', 'reclient', 'v8_enable_slow_dchecks', 'v8_optimized_debug',
|
||||
'x64', 'asan'],
|
||||
'debug_x64_conservative_stack_scanning': [
|
||||
'debug_bot', 'x64', 'conservative_stack_scanning'],
|
||||
|
@ -661,7 +661,7 @@
|
|||
'debug_x64_fuchsia': [
|
||||
'debug_bot', 'x64', 'fuchsia'],
|
||||
'debug_x64_gcc': [
|
||||
'debug_bot_no_goma', 'x64', 'gcc', 'lld', 'no_custom_libcxx'],
|
||||
'debug_bot_no_reclient', 'x64', 'gcc', 'lld', 'no_custom_libcxx'],
|
||||
'debug_x64_header_includes': [
|
||||
'debug_bot', 'x64', 'v8_check_header_includes'],
|
||||
'debug_x64_no_shared_cage': [
|
||||
|
@ -696,7 +696,7 @@
|
|||
'debug_x86_minimal_symbols': [
|
||||
'debug_bot', 'x86', 'minimal_symbols'],
|
||||
'debug_x86_msvc': [
|
||||
'debug_bot_no_goma', 'x86', 'minimal_symbols', 'msvc'],
|
||||
'debug_bot_no_reclient', 'x86', 'minimal_symbols', 'msvc'],
|
||||
'debug_x86_no_i18n': [
|
||||
'debug_bot', 'x86', 'v8_no_i18n'],
|
||||
'debug_x86_trybot': [
|
||||
|
@ -704,7 +704,7 @@
|
|||
'debug_x86_vtunejit': [
|
||||
'debug_bot', 'x86', 'v8_enable_vtunejit'],
|
||||
'full_debug_x86': [
|
||||
'debug', 'x86', 'goma', 'v8_enable_slow_dchecks', 'v8_full_debug'],
|
||||
'debug', 'x86', 'reclient', 'v8_enable_slow_dchecks', 'v8_full_debug'],
|
||||
|
||||
# Release configs for x86.
|
||||
'release_x86': [
|
||||
|
@ -725,7 +725,7 @@
|
|||
'release_x64_predictable': [
|
||||
'release_bot', 'x64', 'v8_enable_verify_predictable'],
|
||||
'release_x86_shared_verify_heap': [
|
||||
'release', 'x86', 'goma', 'shared', 'v8_verify_heap'],
|
||||
'release', 'x86', 'reclient', 'shared', 'v8_verify_heap'],
|
||||
'release_x86_trybot': [
|
||||
'release_trybot', 'x86'],
|
||||
'release_x86_verify_csa': [
|
||||
|
@ -813,19 +813,19 @@
|
|||
|
||||
'debug_bot_no_slow_dchecks': {
|
||||
'mixins': [
|
||||
'debug', 'shared', 'goma', 'v8_disable_slow_dchecks',
|
||||
'debug', 'shared', 'reclient', 'v8_disable_slow_dchecks',
|
||||
'v8_optimized_debug', 'v8_enable_google_benchmark'],
|
||||
},
|
||||
|
||||
'debug_bot': {
|
||||
'mixins': [
|
||||
'debug', 'shared', 'goma', 'v8_enable_slow_dchecks',
|
||||
'debug', 'shared', 'reclient', 'v8_enable_slow_dchecks',
|
||||
'v8_optimized_debug', 'v8_enable_google_benchmark'],
|
||||
},
|
||||
|
||||
'debug_bot_no_goma': {
|
||||
'debug_bot_no_reclient': {
|
||||
'mixins': [
|
||||
'debug', 'shared', 'no_goma', 'v8_enable_slow_dchecks',
|
||||
'debug', 'shared', 'no_reclient', 'v8_enable_slow_dchecks',
|
||||
'v8_optimized_debug'],
|
||||
},
|
||||
|
||||
|
@ -867,10 +867,6 @@
|
|||
'gn_args': 'v8_gcmole=true',
|
||||
},
|
||||
|
||||
'goma': {
|
||||
'gn_args': 'use_goma=true',
|
||||
},
|
||||
|
||||
'hard_float': {
|
||||
'gn_args': 'arm_float_abi="hard"',
|
||||
},
|
||||
|
@ -910,8 +906,8 @@
|
|||
'gn_args': 'use_custom_libcxx=false',
|
||||
},
|
||||
|
||||
'no_goma': {
|
||||
'gn_args': 'use_goma=false',
|
||||
'no_reclient': {
|
||||
'gn_args': 'use_remoteexec=false',
|
||||
},
|
||||
|
||||
'no_sandbox': {
|
||||
|
@ -935,15 +931,15 @@
|
|||
},
|
||||
|
||||
'release_bot': {
|
||||
'mixins': ['release', 'static', 'goma', 'v8_enable_google_benchmark'],
|
||||
'mixins': ['release', 'static', 'reclient', 'v8_enable_google_benchmark'],
|
||||
},
|
||||
|
||||
'release_bot_no_goma': {
|
||||
'mixins': ['release', 'static', 'no_goma'],
|
||||
'release_bot_no_reclient': {
|
||||
'mixins': ['release', 'static', 'no_reclient'],
|
||||
},
|
||||
|
||||
'release_bot_reclient': {
|
||||
'mixins': ['release', 'static', 'no_goma', 'reclient'],
|
||||
'mixins': ['release', 'static', 'reclient'],
|
||||
},
|
||||
|
||||
'release_trybot': {
|
||||
|
|
|
@ -1083,13 +1083,13 @@ MaybeHandle<Map> JSFunction::GetDerivedMap(Isolate* isolate,
|
|||
isolate);
|
||||
prototype = handle(realm_constructor->prototype(), isolate);
|
||||
}
|
||||
CHECK(IsJSReceiver(*prototype));
|
||||
DCHECK_EQ(constructor_initial_map->constructor_or_back_pointer(),
|
||||
*constructor);
|
||||
|
||||
Handle<Map> map = Map::TransitionToDerivedMap(
|
||||
isolate, constructor_initial_map, Handle<HeapObject>::cast(prototype));
|
||||
DCHECK_EQ(map->constructor_or_back_pointer(), *constructor);
|
||||
Handle<Map> map = Map::CopyInitialMap(isolate, constructor_initial_map);
|
||||
map->set_new_target_is_base(false);
|
||||
CHECK(IsJSReceiver(*prototype));
|
||||
if (map->prototype() != *prototype)
|
||||
Map::SetPrototype(isolate, map, Handle<HeapObject>::cast(prototype));
|
||||
map->SetConstructor(*constructor);
|
||||
return map;
|
||||
}
|
||||
|
||||
|
|
|
@ -2344,31 +2344,13 @@ void Map::StartInobjectSlackTracking() {
|
|||
|
||||
Handle<Map> Map::TransitionToPrototype(Isolate* isolate, Handle<Map> map,
|
||||
Handle<HeapObject> prototype) {
|
||||
Handle<Map> new_map = TransitionsAccessor::GetPrototypeTransition(
|
||||
isolate, map, prototype, map->new_target_is_base());
|
||||
Handle<Map> new_map =
|
||||
TransitionsAccessor::GetPrototypeTransition(isolate, map, prototype);
|
||||
if (new_map.is_null()) {
|
||||
new_map = Copy(isolate, map, "TransitionToPrototype");
|
||||
TransitionsAccessor::PutPrototypeTransition(isolate, map, prototype,
|
||||
new_map);
|
||||
if (*prototype != map->prototype()) {
|
||||
Map::SetPrototype(isolate, new_map, prototype);
|
||||
}
|
||||
}
|
||||
return new_map;
|
||||
}
|
||||
|
||||
Handle<Map> Map::TransitionToDerivedMap(Isolate* isolate, Handle<Map> map,
|
||||
Handle<HeapObject> prototype) {
|
||||
Handle<Map> new_map = TransitionsAccessor::GetPrototypeTransition(
|
||||
isolate, map, prototype, /* new_target_is_base */ false);
|
||||
if (new_map.is_null()) {
|
||||
new_map = CopyInitialMap(isolate, map);
|
||||
TransitionsAccessor::PutPrototypeTransition(isolate, map, prototype,
|
||||
new_map);
|
||||
if (*prototype != map->prototype()) {
|
||||
Map::SetPrototype(isolate, new_map, prototype);
|
||||
}
|
||||
new_map->set_new_target_is_base(false);
|
||||
Map::SetPrototype(isolate, new_map, prototype);
|
||||
}
|
||||
return new_map;
|
||||
}
|
||||
|
|
|
@ -863,9 +863,6 @@ class Map : public TorqueGeneratedMap<Map, HeapObject> {
|
|||
V8_EXPORT_PRIVATE static Handle<Map> TransitionToPrototype(
|
||||
Isolate* isolate, Handle<Map> map, Handle<HeapObject> prototype);
|
||||
|
||||
V8_EXPORT_PRIVATE static Handle<Map> TransitionToDerivedMap(
|
||||
Isolate* isolate, Handle<Map> map, Handle<HeapObject> prototype);
|
||||
|
||||
static Handle<Map> TransitionToImmutableProto(Isolate* isolate,
|
||||
Handle<Map> map);
|
||||
|
||||
|
|
|
@ -443,8 +443,7 @@ void TransitionsAccessor::PutPrototypeTransition(Isolate* isolate,
|
|||
|
||||
// static
|
||||
Handle<Map> TransitionsAccessor::GetPrototypeTransition(
|
||||
Isolate* isolate, Handle<Map> map, Handle<Object> prototype_handle,
|
||||
bool new_target_is_base) {
|
||||
Isolate* isolate, Handle<Map> map, Handle<Object> prototype_handle) {
|
||||
DisallowGarbageCollection no_gc;
|
||||
Object prototype = *prototype_handle;
|
||||
Tagged<WeakFixedArray> cache = GetPrototypeTransitions(isolate, map);
|
||||
|
@ -456,8 +455,7 @@ Handle<Map> TransitionsAccessor::GetPrototypeTransition(
|
|||
Tagged<HeapObject> heap_object;
|
||||
if (target.GetHeapObjectIfWeak(&heap_object)) {
|
||||
Tagged<Map> target_map = Map::cast(heap_object);
|
||||
if (target_map->prototype() == prototype &&
|
||||
target_map->new_target_is_base() == new_target_is_base) {
|
||||
if (target_map->prototype() == prototype) {
|
||||
return handle(target_map, isolate);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -124,20 +124,19 @@ class V8_EXPORT_PRIVATE TransitionsAccessor {
|
|||
}
|
||||
|
||||
// ===== PROTOTYPE TRANSITIONS =====
|
||||
// When you set the prototype of an object using the __proto__ accessor, or if
|
||||
// an unrelated new.target is passed to a constructor you need a new map for
|
||||
// the object (the prototype is stored in the map). In order not to multiply
|
||||
// maps unnecessarily we store these as transitions in the original map. That
|
||||
// way we can transition to the same map if the same prototype is set, rather
|
||||
// than creating a new map every time. The transitions are in the form of a
|
||||
// map where the keys are prototype objects and the values are the maps they
|
||||
// transition to. PutPrototypeTransition can trigger GC.
|
||||
// When you set the prototype of an object using the __proto__ accessor you
|
||||
// need a new map for the object (the prototype is stored in the map). In
|
||||
// order not to multiply maps unnecessarily we store these as transitions in
|
||||
// the original map. That way we can transition to the same map if the same
|
||||
// prototype is set, rather than creating a new map every time. The
|
||||
// transitions are in the form of a map where the keys are prototype objects
|
||||
// and the values are the maps they transition to.
|
||||
// PutPrototypeTransition can trigger GC.
|
||||
static void PutPrototypeTransition(Isolate* isolate, Handle<Map>,
|
||||
Handle<Object> prototype,
|
||||
Handle<Map> target_map);
|
||||
static Handle<Map> GetPrototypeTransition(Isolate* isolate, Handle<Map> map,
|
||||
Handle<Object> prototype,
|
||||
bool new_target_is_base);
|
||||
Handle<Object> prototype);
|
||||
|
||||
// During the first-time Map::Update and Map::TryUpdate, the migration target
|
||||
// map could be cached in the raw_transitions slot of the old map that is
|
||||
|
|
|
@ -1,31 +0,0 @@
|
|||
// Copyright 2023 the V8 project authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
// Flags: --allow-natives-syntax
|
||||
|
||||
|
||||
class A {};
|
||||
class B {};
|
||||
class C {};
|
||||
class D {};
|
||||
class E {};
|
||||
class V { constructor() { this.v = 1 } };
|
||||
class W { constructor() { this.w = 1 } };
|
||||
class X { constructor() { this.x = 1 } };
|
||||
class Y { constructor() { this.y = 1 } };
|
||||
class Z { constructor() { this.z = 1 } };
|
||||
|
||||
var ctrs = [
|
||||
function() {},
|
||||
A,B,C,D,E,V,W,X,Y,Z
|
||||
];
|
||||
|
||||
for (var it = 0; it < 20; ++it) {
|
||||
for (var i in ctrs) {
|
||||
for (var j in ctrs) {
|
||||
assertTrue(%HaveSameMap(Reflect.construct(ctrs[i],[],ctrs[j]),
|
||||
Reflect.construct(ctrs[i],[],ctrs[j])));
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue