| Index: src/objects-inl.h
 | 
| ===================================================================
 | 
| --- src/objects-inl.h	(revision 435)
 | 
| +++ src/objects-inl.h	(working copy)
 | 
| @@ -484,6 +484,12 @@
 | 
|  #define WRITE_INT_FIELD(p, offset, value) \
 | 
|    (*reinterpret_cast<int*>(FIELD_ADDR(p, offset)) = value)
 | 
|  
 | 
| +#define READ_UINT32_FIELD(p, offset) \
 | 
| +  (*reinterpret_cast<uint32_t*>(FIELD_ADDR(p, offset)))
 | 
| +
 | 
| +#define WRITE_UINT32_FIELD(p, offset, value) \
 | 
| +  (*reinterpret_cast<uint32_t*>(FIELD_ADDR(p, offset)) = value)
 | 
| +
 | 
|  #define READ_SHORT_FIELD(p, offset) \
 | 
|    (*reinterpret_cast<uint16_t*>(FIELD_ADDR(p, offset)))
 | 
|  
 | 
| @@ -1204,13 +1210,13 @@
 | 
|  }
 | 
|  
 | 
|  
 | 
| -int String::length_field() {
 | 
| -  return READ_INT_FIELD(this, kLengthOffset);
 | 
| +uint32_t String::length_field() {
 | 
| +  return READ_UINT32_FIELD(this, kLengthOffset);
 | 
|  }
 | 
|  
 | 
|  
 | 
| -void String::set_length_field(int value) {
 | 
| -  WRITE_INT_FIELD(this, kLengthOffset, value);
 | 
| +void String::set_length_field(uint32_t value) {
 | 
| +  WRITE_UINT32_FIELD(this, kLengthOffset, value);
 | 
|  }
 | 
|  
 | 
|  
 | 
| @@ -2070,16 +2076,16 @@
 | 
|  
 | 
|  uint32_t String::Hash() {
 | 
|    // Fast case: has hash code already been computed?
 | 
| -  int hash = length_field();
 | 
| -  if (hash & kHashComputedMask) return hash;
 | 
| +  uint32_t field = length_field();
 | 
| +  if (field & kHashComputedMask) return field >> kHashShift;
 | 
|    // Slow case: compute hash code and set it..
 | 
|    return ComputeAndSetHash();
 | 
|  }
 | 
|  
 | 
|  
 | 
|  bool String::AsArrayIndex(uint32_t* index) {
 | 
| -  int hash = length_field();
 | 
| -  if ((hash & kHashComputedMask) && !(hash & kIsArrayIndexMask)) return false;
 | 
| +  uint32_t field = length_field();
 | 
| +  if ((field & kHashComputedMask) && !(field & kIsArrayIndexMask)) return false;
 | 
|    return SlowAsArrayIndex(index);
 | 
|  }
 | 
|  
 | 
| 
 |