| OLD | NEW |
| 1 // Copyright 2006-2009 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2009 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 4197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4208 // index. | 4208 // index. |
| 4209 bool is_array_index() { return is_array_index_; } | 4209 bool is_array_index() { return is_array_index_; } |
| 4210 | 4210 |
| 4211 bool is_valid() { return is_valid_; } | 4211 bool is_valid() { return is_valid_; } |
| 4212 | 4212 |
| 4213 void invalidate() { is_valid_ = false; } | 4213 void invalidate() { is_valid_ = false; } |
| 4214 | 4214 |
| 4215 // Calculated hash value for a string consisting of 1 to | 4215 // Calculated hash value for a string consisting of 1 to |
| 4216 // String::kMaxArrayIndexSize digits with no leading zeros (except "0"). | 4216 // String::kMaxArrayIndexSize digits with no leading zeros (except "0"). |
| 4217 // value is represented decimal value. | 4217 // value is represented decimal value. |
| 4218 static uint32_t MakeCachedArrayIndex(uint32_t value, int length); | 4218 static uint32_t MakeArrayIndexHash(uint32_t value, int length); |
| 4219 | 4219 |
| 4220 private: | 4220 private: |
| 4221 | 4221 |
| 4222 uint32_t array_index() { | 4222 uint32_t array_index() { |
| 4223 ASSERT(is_array_index()); | 4223 ASSERT(is_array_index()); |
| 4224 return array_index_; | 4224 return array_index_; |
| 4225 } | 4225 } |
| 4226 | 4226 |
| 4227 inline uint32_t GetHash(); | 4227 inline uint32_t GetHash(); |
| 4228 | 4228 |
| (...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4452 static const int kMaxCachedArrayIndexLength = 7; | 4452 static const int kMaxCachedArrayIndexLength = 7; |
| 4453 | 4453 |
| 4454 // For strings which are array indexes the hash value has the string length | 4454 // For strings which are array indexes the hash value has the string length |
| 4455 // mixed into the hash, mainly to avoid a hash value of zero which would be | 4455 // mixed into the hash, mainly to avoid a hash value of zero which would be |
| 4456 // the case for the string '0'. 24 bits are used for the array index value. | 4456 // the case for the string '0'. 24 bits are used for the array index value. |
| 4457 static const int kArrayIndexValueBits = 24; | 4457 static const int kArrayIndexValueBits = 24; |
| 4458 static const int kArrayIndexLengthBits = | 4458 static const int kArrayIndexLengthBits = |
| 4459 kBitsPerInt - kArrayIndexValueBits - kNofHashBitFields; | 4459 kBitsPerInt - kArrayIndexValueBits - kNofHashBitFields; |
| 4460 | 4460 |
| 4461 STATIC_CHECK((kArrayIndexLengthBits > 0)); | 4461 STATIC_CHECK((kArrayIndexLengthBits > 0)); |
| 4462 STATIC_CHECK(kMaxArrayIndexSize < (1 << kArrayIndexLengthBits)); |
| 4462 | 4463 |
| 4463 static const int kArrayIndexHashLengthShift = | 4464 static const int kArrayIndexHashLengthShift = |
| 4464 kArrayIndexValueBits + kNofHashBitFields; | 4465 kArrayIndexValueBits + kNofHashBitFields; |
| 4465 | 4466 |
| 4466 static const int kArrayIndexHashMask = (1 << kArrayIndexHashLengthShift) - 1; | 4467 static const int kArrayIndexHashMask = (1 << kArrayIndexHashLengthShift) - 1; |
| 4467 | 4468 |
| 4468 static const int kArrayIndexValueMask = | 4469 static const int kArrayIndexValueMask = |
| 4469 ((1 << kArrayIndexValueBits) - 1) << kHashShift; | 4470 ((1 << kArrayIndexValueBits) - 1) << kHashShift; |
| 4470 | 4471 |
| 4471 // Check that kMaxCachedArrayIndexLength + 1 is a power of two so we | 4472 // Check that kMaxCachedArrayIndexLength + 1 is a power of two so we |
| (...skipping 1080 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5552 } else { | 5553 } else { |
| 5553 value &= ~(1 << bit_position); | 5554 value &= ~(1 << bit_position); |
| 5554 } | 5555 } |
| 5555 return value; | 5556 return value; |
| 5556 } | 5557 } |
| 5557 }; | 5558 }; |
| 5558 | 5559 |
| 5559 } } // namespace v8::internal | 5560 } } // namespace v8::internal |
| 5560 | 5561 |
| 5561 #endif // V8_OBJECTS_H_ | 5562 #endif // V8_OBJECTS_H_ |
| OLD | NEW |