|
@@ -16,6 +16,7 @@
|
|
|
#include <AK/String.h>
|
|
|
#include <AK/Types.h>
|
|
|
#include <LibJS/Forward.h>
|
|
|
+#include <LibJS/Runtime/BigInt.h>
|
|
|
#include <math.h>
|
|
|
|
|
|
// 2 ** 53 - 1
|
|
@@ -376,6 +377,27 @@ Function* species_constructor(GlobalObject&, const Object&, Function& default_co
|
|
|
Value require_object_coercible(GlobalObject&, Value);
|
|
|
MarkedValueList create_list_from_array_like(GlobalObject&, Value, AK::Function<Result<void, ErrorType>(Value)> = {});
|
|
|
|
|
|
+struct ValueTraits : public Traits<Value> {
|
|
|
+ static unsigned hash(Value value)
|
|
|
+ {
|
|
|
+ VERIFY(!value.is_empty());
|
|
|
+ if (value.is_string())
|
|
|
+ return value.as_string().string().hash();
|
|
|
+
|
|
|
+ if (value.is_bigint())
|
|
|
+ return value.as_bigint().big_integer().hash();
|
|
|
+
|
|
|
+ if (value.is_negative_zero())
|
|
|
+ value = Value(0);
|
|
|
+
|
|
|
+ return u64_hash(value.encoded()); // FIXME: Is this the best way to hash pointers, doubles & ints?
|
|
|
+ }
|
|
|
+ static bool equals(const Value a, const Value b)
|
|
|
+ {
|
|
|
+ return same_value_zero(a, b);
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
}
|
|
|
|
|
|
namespace AK {
|