diff options
Diffstat (limited to 'deps/v8/src/objects/name.tq')
-rw-r--r-- | deps/v8/src/objects/name.tq | 35 |
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; } |