| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 3875 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3886 public: | 3886 public: |
| 3887 // Returns whether the other object matches this key. | 3887 // Returns whether the other object matches this key. |
| 3888 virtual bool IsMatch(Object* other) = 0; | 3888 virtual bool IsMatch(Object* other) = 0; |
| 3889 // Returns the hash value for this key. | 3889 // Returns the hash value for this key. |
| 3890 virtual uint32_t Hash() = 0; | 3890 virtual uint32_t Hash() = 0; |
| 3891 // Returns the hash value for object. | 3891 // Returns the hash value for object. |
| 3892 virtual uint32_t HashForObject(Object* key) = 0; | 3892 virtual uint32_t HashForObject(Object* key) = 0; |
| 3893 // Returns the key object for storing into the hash table. | 3893 // Returns the key object for storing into the hash table. |
| 3894 // If allocations fails a failure object is returned. | 3894 // If allocations fails a failure object is returned. |
| 3895 MUST_USE_RESULT virtual MaybeObject* AsObject(Heap* heap) = 0; | 3895 MUST_USE_RESULT virtual MaybeObject* AsObject(Heap* heap) = 0; |
| 3896 // TODO(ishell): This should eventually replace AsObject(). |
| 3897 inline Handle<Object> AsHandle(Isolate* isolate); |
| 3896 // Required. | 3898 // Required. |
| 3897 virtual ~HashTableKey() {} | 3899 virtual ~HashTableKey() {} |
| 3898 }; | 3900 }; |
| 3899 | 3901 |
| 3900 | 3902 |
| 3901 class StringTableShape : public BaseShape<HashTableKey*> { | 3903 class StringTableShape : public BaseShape<HashTableKey*> { |
| 3902 public: | 3904 public: |
| 3903 static inline bool IsMatch(HashTableKey* key, Object* value) { | 3905 static inline bool IsMatch(HashTableKey* key, Object* value) { |
| 3904 return key->IsMatch(value); | 3906 return key->IsMatch(value); |
| 3905 } | 3907 } |
| (...skipping 17 matching lines...) Expand all Loading... |
| 3923 // StringTable. | 3925 // StringTable. |
| 3924 // | 3926 // |
| 3925 // No special elements in the prefix and the element size is 1 | 3927 // No special elements in the prefix and the element size is 1 |
| 3926 // because only the string itself (the key) needs to be stored. | 3928 // because only the string itself (the key) needs to be stored. |
| 3927 // TODO(ishell): Make StringTable a singleton class and move | 3929 // TODO(ishell): Make StringTable a singleton class and move |
| 3928 // Heap::InternalizeStringXX() methods here. | 3930 // Heap::InternalizeStringXX() methods here. |
| 3929 class StringTable: public HashTable<StringTable, | 3931 class StringTable: public HashTable<StringTable, |
| 3930 StringTableShape, | 3932 StringTableShape, |
| 3931 HashTableKey*> { | 3933 HashTableKey*> { |
| 3932 public: | 3934 public: |
| 3933 // Find string in the string table. If it is not there yet, it is | 3935 // Find string in the string table. If it is not there yet, it is |
| 3934 // added. The return value is the string table which might have | 3936 // added. The return value is the string found. |
| 3935 // been enlarged. If the return value is not a failure, the string | 3937 static Handle<String> LookupString(Isolate* isolate, Handle<String> key); |
| 3936 // pointer *s is set to the string found. | 3938 static Handle<String> LookupKey(Isolate* isolate, HashTableKey* key); |
| 3937 MUST_USE_RESULT MaybeObject* LookupString(String* key, Object** s); | |
| 3938 MUST_USE_RESULT MaybeObject* LookupKey(HashTableKey* key, Object** s); | |
| 3939 | 3939 |
| 3940 // Looks up a string that is equal to the given string and returns | 3940 // Looks up a string that is equal to the given string and returns |
| 3941 // true if it is found, assigning the string to the given output | 3941 // true if it is found, assigning the string to the given output |
| 3942 // parameter. | 3942 // parameter. |
| 3943 bool LookupStringIfExists(String* str, String** result); | 3943 bool LookupStringIfExists(String* str, String** result); |
| 3944 bool LookupTwoCharsStringIfExists(uint16_t c1, uint16_t c2, String** result); | 3944 bool LookupTwoCharsStringIfExists(uint16_t c1, uint16_t c2, String** result); |
| 3945 | 3945 |
| 3946 // Casting. | 3946 // Casting. |
| 3947 static inline StringTable* cast(Object* obj); | 3947 static inline StringTable* cast(Object* obj); |
| 3948 | 3948 |
| (...skipping 5269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9218 | 9218 |
| 9219 // Maximum number of characters to consider when trying to convert a string | 9219 // Maximum number of characters to consider when trying to convert a string |
| 9220 // value into an array index. | 9220 // value into an array index. |
| 9221 static const int kMaxArrayIndexSize = 10; | 9221 static const int kMaxArrayIndexSize = 10; |
| 9222 STATIC_CHECK(kMaxArrayIndexSize < (1 << kArrayIndexLengthBits)); | 9222 STATIC_CHECK(kMaxArrayIndexSize < (1 << kArrayIndexLengthBits)); |
| 9223 | 9223 |
| 9224 // Max char codes. | 9224 // Max char codes. |
| 9225 static const int32_t kMaxOneByteCharCode = unibrow::Latin1::kMaxChar; | 9225 static const int32_t kMaxOneByteCharCode = unibrow::Latin1::kMaxChar; |
| 9226 static const uint32_t kMaxOneByteCharCodeU = unibrow::Latin1::kMaxChar; | 9226 static const uint32_t kMaxOneByteCharCodeU = unibrow::Latin1::kMaxChar; |
| 9227 static const int kMaxUtf16CodeUnit = 0xffff; | 9227 static const int kMaxUtf16CodeUnit = 0xffff; |
| 9228 static const uint32_t kMaxUtf16CodeUnitU = kMaxUtf16CodeUnit; |
| 9228 | 9229 |
| 9229 // Value of hash field containing computed hash equal to zero. | 9230 // Value of hash field containing computed hash equal to zero. |
| 9230 static const int kEmptyStringHash = kIsNotArrayIndexMask; | 9231 static const int kEmptyStringHash = kIsNotArrayIndexMask; |
| 9231 | 9232 |
| 9232 // Maximal string length. | 9233 // Maximal string length. |
| 9233 static const int kMaxLength = (1 << 28) - 16; | 9234 static const int kMaxLength = (1 << 28) - 16; |
| 9234 | 9235 |
| 9235 // Max length for computing hash. For strings longer than this limit the | 9236 // Max length for computing hash. For strings longer than this limit the |
| 9236 // string length is used as the hash value. | 9237 // string length is used as the hash value. |
| 9237 static const int kMaxHashCalcLength = 16383; | 9238 static const int kMaxHashCalcLength = 16383; |
| (...skipping 2046 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 11284 } else { | 11285 } else { |
| 11285 value &= ~(1 << bit_position); | 11286 value &= ~(1 << bit_position); |
| 11286 } | 11287 } |
| 11287 return value; | 11288 return value; |
| 11288 } | 11289 } |
| 11289 }; | 11290 }; |
| 11290 | 11291 |
| 11291 } } // namespace v8::internal | 11292 } } // namespace v8::internal |
| 11292 | 11293 |
| 11293 #endif // V8_OBJECTS_H_ | 11294 #endif // V8_OBJECTS_H_ |
| OLD | NEW |