summaryrefslogtreecommitdiff
path: root/deps/v8/src/objects/name.tq
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/objects/name.tq')
-rw-r--r--deps/v8/src/objects/name.tq35
1 files changed, 18 insertions, 17 deletions
diff --git a/deps/v8/src/objects/name.tq b/deps/v8/src/objects/name.tq
index 6fe141f90c..81566e7961 100644
--- a/deps/v8/src/objects/name.tq
+++ b/deps/v8/src/objects/name.tq
@@ -8,8 +8,7 @@ extern class Name extends PrimitiveHeapObject {
}
bitfield struct NameHash extends uint32 {
- hash_not_computed: bool: 1 bit;
- is_not_integer_index_mask: bool: 1 bit;
+ hash_field_type: HashFieldType: 2 bit;
array_index_value: uint32: 24 bit;
array_index_length: uint32: 6 bit;
}
@@ -35,25 +34,21 @@ extern class Symbol extends Name {
type PublicSymbol extends Symbol;
type PrivateSymbol extends Symbol;
-const kNameEmptyHashField: NameHash = NameHash{
- hash_not_computed: true,
- is_not_integer_index_mask: true,
- array_index_value: 0,
- array_index_length: 0
-};
-
const kMaxCachedArrayIndexLength: constexpr uint32
generates 'Name::kMaxCachedArrayIndexLength';
const kMaxArrayIndexSize: constexpr uint32
generates 'Name::kMaxArrayIndexSize';
const kNofHashBitFields: constexpr int31
- generates 'Name::kNofHashBitFields';
+ generates 'Name::HashFieldTypeBits::kSize';
const kArrayIndexValueBits: constexpr int31
generates 'Name::kArrayIndexValueBits';
const kDoesNotContainCachedArrayIndexMask: constexpr uint32
generates 'Name::kDoesNotContainCachedArrayIndexMask';
-const kIsNotIntegerIndexMask: constexpr uint32
- generates 'Name::kIsNotIntegerIndexMask';
+const kNameEmptyHashField: NameHash = NameHash{
+ hash_field_type: HashFieldType::kEmpty,
+ array_index_value: 0,
+ array_index_length: 0
+};
macro ContainsCachedArrayIndex(hash: uint32): bool {
return (hash & kDoesNotContainCachedArrayIndexMask) == 0;
@@ -72,16 +67,22 @@ macro TenToThe(exponent: uint32): uint32 {
return Unsigned(answer);
}
+macro IsIntegerIndex(hash: NameHash): bool {
+ return hash.hash_field_type == HashFieldType::kIntegerIndex;
+}
+
macro MakeArrayIndexHash(value: uint32, length: uint32): NameHash {
// This is in sync with StringHasher::MakeArrayIndexHash.
dcheck(length <= kMaxArrayIndexSize);
const one: uint32 = 1;
dcheck(TenToThe(kMaxCachedArrayIndexLength) < (one << kArrayIndexValueBits));
- let hash: uint32 = value;
- hash = (hash << kArrayIndexValueBitsShift) |
+ let rawHash: uint32 = value;
+ rawHash = (rawHash << kArrayIndexValueBitsShift) |
(length << kArrayIndexLengthBitsShift);
- dcheck((hash & kIsNotIntegerIndexMask) == 0);
dcheck(
- (length <= kMaxCachedArrayIndexLength) == ContainsCachedArrayIndex(hash));
- return %RawDownCast<NameHash>(hash);
+ (length <= kMaxCachedArrayIndexLength) ==
+ ContainsCachedArrayIndex(rawHash));
+ const hash: NameHash = %RawDownCast<NameHash>(rawHash);
+ dcheck(IsIntegerIndex(hash));
+ return hash;
}