| Index: src/objects-inl.h
|
| ===================================================================
|
| --- src/objects-inl.h (revision 10328)
|
| +++ src/objects-inl.h (working copy)
|
| @@ -2062,8 +2062,9 @@
|
| // EnsureCapacity will guarantee the hash table is never full.
|
| while (true) {
|
| Object* element = KeyAt(entry);
|
| - if (element == isolate->heap()->undefined_value()) break; // Empty entry.
|
| - if (element != isolate->heap()->the_hole_value() &&
|
| + // Empty entry.
|
| + if (element == isolate->heap()->raw_unchecked_undefined_value()) break;
|
| + if (element != isolate->heap()->raw_unchecked_the_hole_value() &&
|
| Shape::IsMatch(key, element)) return entry;
|
| entry = NextProbe(entry, count++, capacity);
|
| }
|
| @@ -4320,13 +4321,15 @@
|
| }
|
|
|
|
|
| -StringHasher::StringHasher(int length)
|
| +StringHasher::StringHasher(int length, uint32_t seed)
|
| : length_(length),
|
| - raw_running_hash_(0),
|
| + raw_running_hash_(seed),
|
| array_index_(0),
|
| is_array_index_(0 < length_ && length_ <= String::kMaxArrayIndexSize),
|
| is_first_char_(true),
|
| - is_valid_(true) { }
|
| + is_valid_(true) {
|
| + ASSERT(FLAG_randomize_string_hashes || raw_running_hash_ == 0);
|
| +}
|
|
|
|
|
| bool StringHasher::has_trivial_hash() {
|
| @@ -4386,8 +4389,8 @@
|
|
|
|
|
| template <typename schar>
|
| -uint32_t HashSequentialString(const schar* chars, int length) {
|
| - StringHasher hasher(length);
|
| +uint32_t HashSequentialString(const schar* chars, int length, uint32_t seed) {
|
| + StringHasher hasher(length, seed);
|
| if (!hasher.has_trivial_hash()) {
|
| int i;
|
| for (i = 0; hasher.is_array_index() && (i < length); i++) {
|
|
|