/
githubmirror
/
node
Обзор
Документация
Войти
/
githubmirror
/
node
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
deps/v8/src/objects/maybe-object-inl.h
66 строк
2 KB
Michaël Zasso
deps: update V8 to 14.1.146.11
04 окт 2025, 19:47
Не верифицирован
04 окт 2025, 19:47
7772a2d
Код
Авторство
О чём код?
// Copyright 2018 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. #ifndef V8_OBJECTS_MAYBE_OBJECT_INL_H_ #define V8_OBJECTS_MAYBE_OBJECT_INL_H_ #include "src/objects/maybe-object.h" // Include the non-inl header before the rest of the headers. #include "src/common/ptr-compr-inl.h" #include "src/objects/casting.h" #include "src/objects/smi-inl.h" #include "src/objects/tagged-impl-inl.h" #include "src/objects/tagged.h" namespace v8 { namespace internal { inline Tagged<ClearedWeakValue> ClearedValue() { #ifdef V8_COMPRESS_POINTERS return Tagged<ClearedWeakValue>( V8HeapCompressionScheme::DecompressTagged(kClearedWeakHeapObjectLower32)); #else return kClearedWeakValue; #endif } inline Tagged<ClearedWeakValue> ClearedTrustedValue() { #ifdef V8_COMPRESS_POINTERS return Tagged<ClearedWeakValue>( TrustedSpaceCompressionScheme::DecompressTagged( kClearedWeakHeapObjectLower32)); #else return kClearedWeakValue; #endif } template <typename THeapObjectSlot> void UpdateHeapObjectReferenceSlot(THeapObjectSlot slot, Tagged<HeapObject> value) { static_assert(std::is_same_v<THeapObjectSlot, FullHeapObjectSlot> || std::is_same_v<THeapObjectSlot, HeapObjectSlot>, "Only FullHeapObjectSlot and HeapObjectSlot are expected here"); Address old_value = (*slot).ptr(); DCHECK(!HAS_SMI_TAG(old_value)); Address new_value = value.ptr(); DCHECK(Internals::HasHeapObjectTag(new_value)); #ifdef DEBUG bool weak_before = HAS_WEAK_HEAP_OBJECT_TAG(old_value); #endif slot.store(Cast<HeapObjectReference>( Tagged<MaybeObject>(new_value | (old_value & kWeakHeapObjectMask)))); #ifdef DEBUG bool weak_after = HAS_WEAK_HEAP_OBJECT_TAG((*slot).ptr()); DCHECK_EQ(weak_before, weak_after); #endif } } // namespace internal } // namespace v8 #endif // V8_OBJECTS_MAYBE_OBJECT_INL_H_