| Index: src/objects-inl.h
|
| ===================================================================
|
| --- src/objects-inl.h (revision 4722)
|
| +++ src/objects-inl.h (working copy)
|
| @@ -759,8 +759,7 @@
|
| ASSERT(mode == SKIP_WRITE_BARRIER); \
|
| ASSERT(Heap::InNewSpace(object) || \
|
| !Heap::InNewSpace(READ_FIELD(object, offset)) || \
|
| - Page::FromAddress(object->address())-> \
|
| - IsRegionDirty(object->address() + offset)); \
|
| + Page::IsRSetSet(object->address(), offset)); \
|
| }
|
|
|
| #define READ_DOUBLE_FIELD(p, offset) \
|
| @@ -1046,10 +1045,6 @@
|
| void HeapObject::VerifyObjectField(int offset) {
|
| VerifyPointer(READ_FIELD(this, offset));
|
| }
|
| -
|
| -void HeapObject::VerifySmiField(int offset) {
|
| - ASSERT(READ_FIELD(this, offset)->IsSmi());
|
| -}
|
| #endif
|
|
|
|
|
| @@ -1069,7 +1064,7 @@
|
|
|
|
|
| void HeapObject::set_map_word(MapWord map_word) {
|
| - // WRITE_FIELD does not invoke write barrier, but there is no need
|
| + // WRITE_FIELD does not update the remembered set, but there is no need
|
| // here.
|
| WRITE_FIELD(this, kMapOffset, reinterpret_cast<Object*>(map_word.value_));
|
| }
|
| @@ -1167,16 +1162,16 @@
|
| ACCESSORS(JSObject, properties, FixedArray, kPropertiesOffset)
|
|
|
|
|
| -HeapObject* JSObject::elements() {
|
| +Array* JSObject::elements() {
|
| Object* array = READ_FIELD(this, kElementsOffset);
|
| // In the assert below Dictionary is covered under FixedArray.
|
| ASSERT(array->IsFixedArray() || array->IsPixelArray() ||
|
| array->IsExternalArray());
|
| - return reinterpret_cast<HeapObject*>(array);
|
| + return reinterpret_cast<Array*>(array);
|
| }
|
|
|
|
|
| -void JSObject::set_elements(HeapObject* value, WriteBarrierMode mode) {
|
| +void JSObject::set_elements(Array* value, WriteBarrierMode mode) {
|
| // In the assert below Dictionary is covered under FixedArray.
|
| ASSERT(value->IsFixedArray() || value->IsPixelArray() ||
|
| value->IsExternalArray());
|
| @@ -1347,15 +1342,15 @@
|
| }
|
|
|
|
|
| -bool Object::ToArrayIndex(uint32_t* index) {
|
| - if (IsSmi()) {
|
| - int value = Smi::cast(this)->value();
|
| +bool Array::IndexFromObject(Object* object, uint32_t* index) {
|
| + if (object->IsSmi()) {
|
| + int value = Smi::cast(object)->value();
|
| if (value < 0) return false;
|
| *index = value;
|
| return true;
|
| }
|
| - if (IsHeapNumber()) {
|
| - double value = HeapNumber::cast(this)->value();
|
| + if (object->IsHeapNumber()) {
|
| + double value = HeapNumber::cast(object)->value();
|
| uint32_t uint_value = static_cast<uint32_t>(value);
|
| if (value == static_cast<double>(uint_value)) {
|
| *index = uint_value;
|
| @@ -1670,13 +1665,9 @@
|
| }
|
|
|
|
|
| -SMI_ACCESSORS(FixedArray, length, kLengthOffset)
|
| -SMI_ACCESSORS(ByteArray, length, kLengthOffset)
|
| +INT_ACCESSORS(Array, length, kLengthOffset)
|
|
|
| -INT_ACCESSORS(PixelArray, length, kLengthOffset)
|
| -INT_ACCESSORS(ExternalArray, length, kLengthOffset)
|
|
|
| -
|
| SMI_ACCESSORS(String, length, kLengthOffset)
|
|
|
|
|
| @@ -1687,9 +1678,6 @@
|
|
|
| void String::set_hash_field(uint32_t value) {
|
| WRITE_UINT32_FIELD(this, kHashFieldOffset, value);
|
| -#if V8_HOST_ARCH_64_BIT
|
| - WRITE_UINT32_FIELD(this, kHashFieldOffset + kIntSize, 0);
|
| -#endif
|
| }
|
|
|
|
|
| @@ -2468,66 +2456,23 @@
|
| try_full_codegen,
|
| kTryFullCodegen)
|
|
|
| -#if V8_HOST_ARCH_32_BIT
|
| -SMI_ACCESSORS(SharedFunctionInfo, length, kLengthOffset)
|
| -SMI_ACCESSORS(SharedFunctionInfo, formal_parameter_count,
|
| +INT_ACCESSORS(SharedFunctionInfo, length, kLengthOffset)
|
| +INT_ACCESSORS(SharedFunctionInfo, formal_parameter_count,
|
| kFormalParameterCountOffset)
|
| -SMI_ACCESSORS(SharedFunctionInfo, expected_nof_properties,
|
| +INT_ACCESSORS(SharedFunctionInfo, expected_nof_properties,
|
| kExpectedNofPropertiesOffset)
|
| -SMI_ACCESSORS(SharedFunctionInfo, num_literals, kNumLiteralsOffset)
|
| -SMI_ACCESSORS(SharedFunctionInfo, start_position_and_type,
|
| +INT_ACCESSORS(SharedFunctionInfo, num_literals, kNumLiteralsOffset)
|
| +INT_ACCESSORS(SharedFunctionInfo, start_position_and_type,
|
| kStartPositionAndTypeOffset)
|
| -SMI_ACCESSORS(SharedFunctionInfo, end_position, kEndPositionOffset)
|
| -SMI_ACCESSORS(SharedFunctionInfo, function_token_position,
|
| +INT_ACCESSORS(SharedFunctionInfo, end_position, kEndPositionOffset)
|
| +INT_ACCESSORS(SharedFunctionInfo, function_token_position,
|
| kFunctionTokenPositionOffset)
|
| -SMI_ACCESSORS(SharedFunctionInfo, compiler_hints,
|
| +INT_ACCESSORS(SharedFunctionInfo, compiler_hints,
|
| kCompilerHintsOffset)
|
| -SMI_ACCESSORS(SharedFunctionInfo, this_property_assignments_count,
|
| +INT_ACCESSORS(SharedFunctionInfo, this_property_assignments_count,
|
| kThisPropertyAssignmentsCountOffset)
|
| -#else
|
|
|
| -#define PSEUDO_SMI_ACCESSORS_LO(holder, name, offset) \
|
| - int holder::name() { \
|
| - int value = READ_INT_FIELD(this, offset); \
|
| - ASSERT(kHeapObjectTag == 1); \
|
| - ASSERT((value & kHeapObjectTag) == 0); \
|
| - return value >> 1; \
|
| - } \
|
| - void holder::set_##name(int value) { \
|
| - ASSERT(kHeapObjectTag == 1); \
|
| - ASSERT((value & 0xC0000000) == 0xC0000000 || \
|
| - (value & 0xC0000000) == 0x000000000); \
|
| - WRITE_INT_FIELD(this, \
|
| - offset, \
|
| - (value << 1) & ~kHeapObjectTag); \
|
| - }
|
|
|
| -#define PSEUDO_SMI_ACCESSORS_HI(holder, name, offset) \
|
| - INT_ACCESSORS(holder, name, offset)
|
| -
|
| -
|
| -
|
| -PSEUDO_SMI_ACCESSORS_LO(SharedFunctionInfo, length, kLengthOffset)
|
| -PSEUDO_SMI_ACCESSORS_HI(SharedFunctionInfo, formal_parameter_count,
|
| - kFormalParameterCountOffset)
|
| -
|
| -PSEUDO_SMI_ACCESSORS_LO(SharedFunctionInfo, expected_nof_properties,
|
| - kExpectedNofPropertiesOffset)
|
| -PSEUDO_SMI_ACCESSORS_HI(SharedFunctionInfo, num_literals, kNumLiteralsOffset)
|
| -
|
| -PSEUDO_SMI_ACCESSORS_LO(SharedFunctionInfo, start_position_and_type,
|
| - kStartPositionAndTypeOffset)
|
| -PSEUDO_SMI_ACCESSORS_HI(SharedFunctionInfo, end_position, kEndPositionOffset)
|
| -
|
| -PSEUDO_SMI_ACCESSORS_LO(SharedFunctionInfo, function_token_position,
|
| - kFunctionTokenPositionOffset)
|
| -PSEUDO_SMI_ACCESSORS_HI(SharedFunctionInfo, compiler_hints,
|
| - kCompilerHintsOffset)
|
| -
|
| -PSEUDO_SMI_ACCESSORS_LO(SharedFunctionInfo, this_property_assignments_count,
|
| - kThisPropertyAssignmentsCountOffset)
|
| -#endif
|
| -
|
| ACCESSORS(CodeCache, default_cache, FixedArray, kDefaultCacheOffset)
|
| ACCESSORS(CodeCache, normal_type_cache, Object, kNormalTypeCacheOffset)
|
|
|
| @@ -2840,7 +2785,7 @@
|
|
|
|
|
| JSObject::ElementsKind JSObject::GetElementsKind() {
|
| - HeapObject* array = elements();
|
| + Array* array = elements();
|
| if (array->IsFixedArray()) {
|
| // FAST_ELEMENTS or DICTIONARY_ELEMENTS are both stored in a FixedArray.
|
| if (array->map() == Heap::fixed_array_map()) {
|
| @@ -2963,20 +2908,15 @@
|
| }
|
|
|
|
|
| -bool String::IsHashFieldComputed(uint32_t field) {
|
| - return (field & kHashNotComputedMask) == 0;
|
| -}
|
| -
|
| -
|
| bool String::HasHashCode() {
|
| - return IsHashFieldComputed(hash_field());
|
| + return (hash_field() & kHashComputedMask) != 0;
|
| }
|
|
|
|
|
| uint32_t String::Hash() {
|
| // Fast case: has hash code already been computed?
|
| uint32_t field = hash_field();
|
| - if (IsHashFieldComputed(field)) return field >> kHashShift;
|
| + if (field & kHashComputedMask) return field >> kHashShift;
|
| // Slow case: compute hash code and set it.
|
| return ComputeAndSetHash();
|
| }
|
| @@ -3049,7 +2989,7 @@
|
|
|
| bool String::AsArrayIndex(uint32_t* index) {
|
| uint32_t field = hash_field();
|
| - if (IsHashFieldComputed(field) && !(field & kIsArrayIndexMask)) return false;
|
| + if ((field & kHashComputedMask) && !(field & kIsArrayIndexMask)) return false;
|
| return SlowAsArrayIndex(index);
|
| }
|
|
|
| @@ -3173,7 +3113,7 @@
|
|
|
| void JSArray::EnsureSize(int required_size) {
|
| ASSERT(HasFastElements());
|
| - FixedArray* elts = FixedArray::cast(elements());
|
| + Array* elts = elements();
|
| const int kArraySizeThatFitsComfortablyInNewSpace = 128;
|
| if (elts->length() < required_size) {
|
| // Doubling in size would be overkill, but leave some slack to avoid
|
|
|