| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 // | 4 // |
| 5 // Review notes: | 5 // Review notes: |
| 6 // | 6 // |
| 7 // - The use of macros in these inline functions may seem superfluous | 7 // - The use of macros in these inline functions may seem superfluous |
| 8 // but it is absolutely needed to make sure gcc generates optimal | 8 // but it is absolutely needed to make sure gcc generates optimal |
| 9 // code. gcc is not happy when attempting to inline too deep. | 9 // code. gcc is not happy when attempting to inline too deep. |
| 10 // | 10 // |
| (...skipping 6704 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6715 running_hash += (running_hash << 3); | 6715 running_hash += (running_hash << 3); |
| 6716 running_hash ^= (running_hash >> 11); | 6716 running_hash ^= (running_hash >> 11); |
| 6717 running_hash += (running_hash << 15); | 6717 running_hash += (running_hash << 15); |
| 6718 if ((running_hash & String::kHashBitMask) == 0) { | 6718 if ((running_hash & String::kHashBitMask) == 0) { |
| 6719 return kZeroHash; | 6719 return kZeroHash; |
| 6720 } | 6720 } |
| 6721 return running_hash; | 6721 return running_hash; |
| 6722 } | 6722 } |
| 6723 | 6723 |
| 6724 | 6724 |
| 6725 uint32_t StringHasher::ComputeRunningHash(uint32_t running_hash, |
| 6726 const uc16* chars, int length) { |
| 6727 DCHECK_NOT_NULL(chars); |
| 6728 DCHECK(length >= 0); |
| 6729 for (int i = 0; i < length; ++i) { |
| 6730 running_hash = AddCharacterCore(running_hash, *chars++); |
| 6731 } |
| 6732 return running_hash; |
| 6733 } |
| 6734 |
| 6735 |
| 6736 uint32_t StringHasher::ComputeRunningHashOneByte(uint32_t running_hash, |
| 6737 const char* chars, |
| 6738 int length) { |
| 6739 DCHECK_NOT_NULL(chars); |
| 6740 DCHECK(length >= 0); |
| 6741 for (int i = 0; i < length; ++i) { |
| 6742 uint16_t c = static_cast<uint16_t>(*chars++); |
| 6743 running_hash = AddCharacterCore(running_hash, c); |
| 6744 } |
| 6745 return running_hash; |
| 6746 } |
| 6747 |
| 6748 |
| 6725 void StringHasher::AddCharacter(uint16_t c) { | 6749 void StringHasher::AddCharacter(uint16_t c) { |
| 6726 // Use the Jenkins one-at-a-time hash function to update the hash | 6750 // Use the Jenkins one-at-a-time hash function to update the hash |
| 6727 // for the given character. | 6751 // for the given character. |
| 6728 raw_running_hash_ = AddCharacterCore(raw_running_hash_, c); | 6752 raw_running_hash_ = AddCharacterCore(raw_running_hash_, c); |
| 6729 } | 6753 } |
| 6730 | 6754 |
| 6731 | 6755 |
| 6732 bool StringHasher::UpdateIndex(uint16_t c) { | 6756 bool StringHasher::UpdateIndex(uint16_t c) { |
| 6733 DCHECK(is_array_index_); | 6757 DCHECK(is_array_index_); |
| 6734 if (c < '0' || c > '9') { | 6758 if (c < '0' || c > '9') { |
| (...skipping 739 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7474 #undef READ_SHORT_FIELD | 7498 #undef READ_SHORT_FIELD |
| 7475 #undef WRITE_SHORT_FIELD | 7499 #undef WRITE_SHORT_FIELD |
| 7476 #undef READ_BYTE_FIELD | 7500 #undef READ_BYTE_FIELD |
| 7477 #undef WRITE_BYTE_FIELD | 7501 #undef WRITE_BYTE_FIELD |
| 7478 #undef NOBARRIER_READ_BYTE_FIELD | 7502 #undef NOBARRIER_READ_BYTE_FIELD |
| 7479 #undef NOBARRIER_WRITE_BYTE_FIELD | 7503 #undef NOBARRIER_WRITE_BYTE_FIELD |
| 7480 | 7504 |
| 7481 } } // namespace v8::internal | 7505 } } // namespace v8::internal |
| 7482 | 7506 |
| 7483 #endif // V8_OBJECTS_INL_H_ | 7507 #endif // V8_OBJECTS_INL_H_ |
| OLD | NEW |