// Copyright 2017 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. #include #include "src/objects/objects-inl.h" #include "src/objects/ordered-hash-table-inl.h" #include "test/cctest/cctest.h" namespace v8 { namespace internal { namespace test_orderedhashtable { static Isolate* GetIsolateFrom(LocalContext* context) { return reinterpret_cast((*context)->GetIsolate()); } void CopyHashCode(DirectHandle from, DirectHandle to) { int hash = Smi::ToInt(Object::GetHash(*from)); to->SetIdentityHash(hash); } void Verify(Isolate* isolate, DirectHandle obj) { #if VERIFY_HEAP Object::ObjectVerify(*obj, isolate); #endif } // Helpers to abstract over differences in interfaces of the different ordered // datastructures template Handle Add(Isolate* isolate, Handle table, Handle key1, Handle value1, PropertyDetails details); template <> Handle Add(Isolate* isolate, Handle table, Handle key, Handle value, PropertyDetails details) { return OrderedHashMap::Add(isolate, table, key, value).ToHandleChecked(); } template <> Handle Add(Isolate* isolate, Handle table, Handle key, Handle value, PropertyDetails details) { return OrderedHashSet::Add(isolate, table, key).ToHandleChecked(); } template <> Handle Add(Isolate* isolate, Handle table, Handle key, Handle value, PropertyDetails details) { return OrderedNameDictionary::Add(isolate, table, key, value, details) .ToHandleChecked(); } // version for // OrderedHashMap, OrderedHashSet template typename HandleType> requires(std::is_convertible_v, DirectHandle>) bool HasKey(Isolate* isolate, HandleType table, Tagged key) { return T::HasKey(isolate, *table, key); } template