Index: src/objects.cc |
=================================================================== |
--- src/objects.cc (revision 4686) |
+++ src/objects.cc (working copy) |
@@ -4683,7 +4683,7 @@ |
uint32_t String::ComputeAndSetHash() { |
// Should only be called if hash code has not yet been computed. |
- ASSERT(!HasHashCode()); |
+ ASSERT(!(hash_field() & kHashComputedMask)); |
const int len = length(); |
@@ -4702,7 +4702,7 @@ |
set_hash_field(field); |
// Check the hash code is there. |
- ASSERT(HasHashCode()); |
+ ASSERT(hash_field() & kHashComputedMask); |
uint32_t result = field >> kHashShift; |
ASSERT(result != 0); // Ensure that the hash value of 0 is never computed. |
return result; |
@@ -4757,7 +4757,8 @@ |
static inline uint32_t HashField(uint32_t hash, |
bool is_array_index, |
int length = -1) { |
- uint32_t result = (hash << String::kHashShift); |
+ uint32_t result = |
+ (hash << String::kHashShift) | String::kHashComputedMask; |
if (is_array_index) { |
// For array indexes mix the length into the hash as an array index could |
// be zero. |
@@ -5552,7 +5553,7 @@ |
// General slow case. |
if (len->IsNumber()) { |
uint32_t length; |
- if (len->ToArrayIndex(&length)) { |
+ if (Array::IndexFromObject(len, &length)) { |
return SetSlowElements(len); |
} else { |
return ArrayLengthRangeError(); |
@@ -5875,7 +5876,8 @@ |
if (IsJSArray()) { |
// Update the length of the array if needed. |
uint32_t array_length = 0; |
- CHECK(JSArray::cast(this)->length()->ToArrayIndex(&array_length)); |
+ CHECK(Array::IndexFromObject(JSArray::cast(this)->length(), |
+ &array_length)); |
if (index >= array_length) { |
JSArray::cast(this)->set_length(Smi::FromInt(index + 1)); |
} |
@@ -6026,7 +6028,8 @@ |
if (ShouldConvertToFastElements()) { |
uint32_t new_length = 0; |
if (IsJSArray()) { |
- CHECK(JSArray::cast(this)->length()->ToArrayIndex(&new_length)); |
+ CHECK(Array::IndexFromObject(JSArray::cast(this)->length(), |
+ &new_length)); |
JSArray::cast(this)->set_length(Smi::FromInt(new_length)); |
} else { |
new_length = NumberDictionary::cast(elements())->max_number_key() + 1; |
@@ -6057,7 +6060,7 @@ |
Object* JSArray::JSArrayUpdateLengthFromIndex(uint32_t index, Object* value) { |
uint32_t old_len = 0; |
- CHECK(length()->ToArrayIndex(&old_len)); |
+ CHECK(Array::IndexFromObject(length(), &old_len)); |
// Check to see if we need to update the length. For now, we make |
// sure that the length stays within 32-bits (unsigned). |
if (index >= old_len && index != 0xffffffff) { |
@@ -6351,7 +6354,7 @@ |
// fast elements. |
uint32_t length = 0; |
if (IsJSArray()) { |
- CHECK(JSArray::cast(this)->length()->ToArrayIndex(&length)); |
+ CHECK(Array::IndexFromObject(JSArray::cast(this)->length(), &length)); |
} else { |
length = dictionary->max_number_key(); |
} |