Index: src/objects-inl.h |
=================================================================== |
--- src/objects-inl.h (revision 10321) |
+++ 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++) { |