OLD | NEW |
---|---|
1 // Copyright 2010 the V8 project authors. All rights reserved. | 1 // Copyright 2010 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
323 return IsSmi() || IsHeapNumber(); | 323 return IsSmi() || IsHeapNumber(); |
324 } | 324 } |
325 | 325 |
326 | 326 |
327 bool Object::IsByteArray() { | 327 bool Object::IsByteArray() { |
328 return Object::IsHeapObject() | 328 return Object::IsHeapObject() |
329 && HeapObject::cast(this)->map()->instance_type() == BYTE_ARRAY_TYPE; | 329 && HeapObject::cast(this)->map()->instance_type() == BYTE_ARRAY_TYPE; |
330 } | 330 } |
331 | 331 |
332 | 332 |
333 bool Object::IsPixelArray() { | 333 bool Object::IsExternalPixelArray() { |
334 return Object::IsHeapObject() && | 334 return Object::IsHeapObject() && |
335 HeapObject::cast(this)->map()->instance_type() == PIXEL_ARRAY_TYPE; | 335 HeapObject::cast(this)->map()->instance_type() == |
336 EXTERNAL_PIXEL_ARRAY_TYPE; | |
336 } | 337 } |
337 | 338 |
338 | 339 |
339 bool Object::IsExternalArray() { | 340 bool Object::IsExternalArray() { |
340 if (!Object::IsHeapObject()) | 341 if (!Object::IsHeapObject()) |
341 return false; | 342 return false; |
342 InstanceType instance_type = | 343 InstanceType instance_type = |
343 HeapObject::cast(this)->map()->instance_type(); | 344 HeapObject::cast(this)->map()->instance_type(); |
344 return (instance_type >= FIRST_EXTERNAL_ARRAY_TYPE && | 345 return (instance_type >= FIRST_EXTERNAL_ARRAY_TYPE && |
345 instance_type <= LAST_EXTERNAL_ARRAY_TYPE); | 346 instance_type <= LAST_EXTERNAL_ARRAY_TYPE); |
(...skipping 862 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1208 return READ_INT_FIELD(this, kExponentOffset) & kSignMask; | 1209 return READ_INT_FIELD(this, kExponentOffset) & kSignMask; |
1209 } | 1210 } |
1210 | 1211 |
1211 | 1212 |
1212 ACCESSORS(JSObject, properties, FixedArray, kPropertiesOffset) | 1213 ACCESSORS(JSObject, properties, FixedArray, kPropertiesOffset) |
1213 | 1214 |
1214 | 1215 |
1215 HeapObject* JSObject::elements() { | 1216 HeapObject* JSObject::elements() { |
1216 Object* array = READ_FIELD(this, kElementsOffset); | 1217 Object* array = READ_FIELD(this, kElementsOffset); |
1217 // In the assert below Dictionary is covered under FixedArray. | 1218 // In the assert below Dictionary is covered under FixedArray. |
1218 ASSERT(array->IsFixedArray() || array->IsPixelArray() || | 1219 ASSERT(array->IsFixedArray() || array->IsExternalArray()); |
1219 array->IsExternalArray()); | |
1220 return reinterpret_cast<HeapObject*>(array); | 1220 return reinterpret_cast<HeapObject*>(array); |
1221 } | 1221 } |
1222 | 1222 |
1223 | 1223 |
1224 void JSObject::set_elements(HeapObject* value, WriteBarrierMode mode) { | 1224 void JSObject::set_elements(HeapObject* value, WriteBarrierMode mode) { |
1225 ASSERT(map()->has_fast_elements() == | 1225 ASSERT(map()->has_fast_elements() == |
1226 (value->map() == Heap::fixed_array_map() || | 1226 (value->map() == Heap::fixed_array_map() || |
1227 value->map() == Heap::fixed_cow_array_map())); | 1227 value->map() == Heap::fixed_cow_array_map())); |
1228 // In the assert below Dictionary is covered under FixedArray. | 1228 // In the assert below Dictionary is covered under FixedArray. |
1229 ASSERT(value->IsFixedArray() || value->IsPixelArray() || | 1229 ASSERT(value->IsFixedArray() || value->IsExternalArray()); |
1230 value->IsExternalArray()); | |
1231 WRITE_FIELD(this, kElementsOffset, value); | 1230 WRITE_FIELD(this, kElementsOffset, value); |
1232 CONDITIONAL_WRITE_BARRIER(this, kElementsOffset, mode); | 1231 CONDITIONAL_WRITE_BARRIER(this, kElementsOffset, mode); |
1233 } | 1232 } |
1234 | 1233 |
1235 | 1234 |
1236 void JSObject::initialize_properties() { | 1235 void JSObject::initialize_properties() { |
1237 ASSERT(!Heap::InNewSpace(Heap::empty_fixed_array())); | 1236 ASSERT(!Heap::InNewSpace(Heap::empty_fixed_array())); |
1238 WRITE_FIELD(this, kPropertiesOffset, Heap::empty_fixed_array()); | 1237 WRITE_FIELD(this, kPropertiesOffset, Heap::empty_fixed_array()); |
1239 } | 1238 } |
1240 | 1239 |
(...skipping 512 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1753 CAST_ACCESSOR(JSFunction) | 1752 CAST_ACCESSOR(JSFunction) |
1754 CAST_ACCESSOR(GlobalObject) | 1753 CAST_ACCESSOR(GlobalObject) |
1755 CAST_ACCESSOR(JSGlobalProxy) | 1754 CAST_ACCESSOR(JSGlobalProxy) |
1756 CAST_ACCESSOR(JSGlobalObject) | 1755 CAST_ACCESSOR(JSGlobalObject) |
1757 CAST_ACCESSOR(JSBuiltinsObject) | 1756 CAST_ACCESSOR(JSBuiltinsObject) |
1758 CAST_ACCESSOR(Code) | 1757 CAST_ACCESSOR(Code) |
1759 CAST_ACCESSOR(JSArray) | 1758 CAST_ACCESSOR(JSArray) |
1760 CAST_ACCESSOR(JSRegExp) | 1759 CAST_ACCESSOR(JSRegExp) |
1761 CAST_ACCESSOR(Proxy) | 1760 CAST_ACCESSOR(Proxy) |
1762 CAST_ACCESSOR(ByteArray) | 1761 CAST_ACCESSOR(ByteArray) |
1763 CAST_ACCESSOR(PixelArray) | |
1764 CAST_ACCESSOR(ExternalArray) | 1762 CAST_ACCESSOR(ExternalArray) |
1765 CAST_ACCESSOR(ExternalByteArray) | 1763 CAST_ACCESSOR(ExternalByteArray) |
1766 CAST_ACCESSOR(ExternalUnsignedByteArray) | 1764 CAST_ACCESSOR(ExternalUnsignedByteArray) |
1767 CAST_ACCESSOR(ExternalShortArray) | 1765 CAST_ACCESSOR(ExternalShortArray) |
1768 CAST_ACCESSOR(ExternalUnsignedShortArray) | 1766 CAST_ACCESSOR(ExternalUnsignedShortArray) |
1769 CAST_ACCESSOR(ExternalIntArray) | 1767 CAST_ACCESSOR(ExternalIntArray) |
1770 CAST_ACCESSOR(ExternalUnsignedIntArray) | 1768 CAST_ACCESSOR(ExternalUnsignedIntArray) |
1771 CAST_ACCESSOR(ExternalFloatArray) | 1769 CAST_ACCESSOR(ExternalFloatArray) |
1770 CAST_ACCESSOR(ExternalPixelArray) | |
1772 CAST_ACCESSOR(Struct) | 1771 CAST_ACCESSOR(Struct) |
1773 | 1772 |
1774 | 1773 |
1775 #define MAKE_STRUCT_CAST(NAME, Name, name) CAST_ACCESSOR(Name) | 1774 #define MAKE_STRUCT_CAST(NAME, Name, name) CAST_ACCESSOR(Name) |
1776 STRUCT_LIST(MAKE_STRUCT_CAST) | 1775 STRUCT_LIST(MAKE_STRUCT_CAST) |
1777 #undef MAKE_STRUCT_CAST | 1776 #undef MAKE_STRUCT_CAST |
1778 | 1777 |
1779 | 1778 |
1780 template <typename Shape, typename Key> | 1779 template <typename Shape, typename Key> |
1781 HashTable<Shape, Key>* HashTable<Shape, Key>::cast(Object* obj) { | 1780 HashTable<Shape, Key>* HashTable<Shape, Key>::cast(Object* obj) { |
1782 ASSERT(obj->IsHashTable()); | 1781 ASSERT(obj->IsHashTable()); |
1783 return reinterpret_cast<HashTable*>(obj); | 1782 return reinterpret_cast<HashTable*>(obj); |
1784 } | 1783 } |
1785 | 1784 |
1786 | 1785 |
1787 SMI_ACCESSORS(FixedArray, length, kLengthOffset) | 1786 SMI_ACCESSORS(FixedArray, length, kLengthOffset) |
1788 SMI_ACCESSORS(ByteArray, length, kLengthOffset) | 1787 SMI_ACCESSORS(ByteArray, length, kLengthOffset) |
1789 | 1788 |
1790 INT_ACCESSORS(PixelArray, length, kLengthOffset) | |
1791 INT_ACCESSORS(ExternalArray, length, kLengthOffset) | 1789 INT_ACCESSORS(ExternalArray, length, kLengthOffset) |
1792 | 1790 |
1793 | 1791 |
1794 SMI_ACCESSORS(String, length, kLengthOffset) | 1792 SMI_ACCESSORS(String, length, kLengthOffset) |
1795 | 1793 |
1796 | 1794 |
1797 uint32_t String::hash_field() { | 1795 uint32_t String::hash_field() { |
1798 return READ_UINT32_FIELD(this, kHashFieldOffset); | 1796 return READ_UINT32_FIELD(this, kHashFieldOffset); |
1799 } | 1797 } |
1800 | 1798 |
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2047 ASSERT_TAG_ALIGNED(address); | 2045 ASSERT_TAG_ALIGNED(address); |
2048 return reinterpret_cast<ByteArray*>(address - kHeaderSize + kHeapObjectTag); | 2046 return reinterpret_cast<ByteArray*>(address - kHeaderSize + kHeapObjectTag); |
2049 } | 2047 } |
2050 | 2048 |
2051 | 2049 |
2052 Address ByteArray::GetDataStartAddress() { | 2050 Address ByteArray::GetDataStartAddress() { |
2053 return reinterpret_cast<Address>(this) - kHeapObjectTag + kHeaderSize; | 2051 return reinterpret_cast<Address>(this) - kHeapObjectTag + kHeaderSize; |
2054 } | 2052 } |
2055 | 2053 |
2056 | 2054 |
2057 uint8_t* PixelArray::external_pointer() { | 2055 uint8_t* ExternalPixelArray::external_pixel_pointer() { |
2058 intptr_t ptr = READ_INTPTR_FIELD(this, kExternalPointerOffset); | 2056 return reinterpret_cast<uint8_t*>(external_pointer()); |
2059 return reinterpret_cast<uint8_t*>(ptr); | |
2060 } | 2057 } |
2061 | 2058 |
2062 | 2059 |
2063 void PixelArray::set_external_pointer(uint8_t* value, WriteBarrierMode mode) { | 2060 uint8_t ExternalPixelArray::get(int index) { |
2064 intptr_t ptr = reinterpret_cast<intptr_t>(value); | |
2065 WRITE_INTPTR_FIELD(this, kExternalPointerOffset, ptr); | |
2066 } | |
2067 | |
2068 | |
2069 uint8_t PixelArray::get(int index) { | |
2070 ASSERT((index >= 0) && (index < this->length())); | 2061 ASSERT((index >= 0) && (index < this->length())); |
2071 uint8_t* ptr = external_pointer(); | 2062 uint8_t* ptr = external_pixel_pointer(); |
2072 return ptr[index]; | 2063 return ptr[index]; |
2073 } | 2064 } |
2074 | 2065 |
2075 | 2066 |
2076 void PixelArray::set(int index, uint8_t value) { | 2067 void ExternalPixelArray::set(int index, uint8_t value) { |
2077 ASSERT((index >= 0) && (index < this->length())); | 2068 ASSERT((index >= 0) && (index < this->length())); |
2078 uint8_t* ptr = external_pointer(); | 2069 uint8_t* ptr = external_pixel_pointer(); |
2079 ptr[index] = value; | 2070 ptr[index] = value; |
2080 } | 2071 } |
2081 | 2072 |
2082 | 2073 |
2083 void* ExternalArray::external_pointer() { | 2074 void* ExternalArray::external_pointer() { |
2084 intptr_t ptr = READ_INTPTR_FIELD(this, kExternalPointerOffset); | 2075 intptr_t ptr = READ_INTPTR_FIELD(this, kExternalPointerOffset); |
2085 return reinterpret_cast<void*>(ptr); | 2076 return reinterpret_cast<void*>(ptr); |
2086 } | 2077 } |
2087 | 2078 |
2088 | 2079 |
(...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2546 return static_cast<CheckType>(type); | 2537 return static_cast<CheckType>(type); |
2547 } | 2538 } |
2548 | 2539 |
2549 | 2540 |
2550 void Code::set_check_type(CheckType value) { | 2541 void Code::set_check_type(CheckType value) { |
2551 ASSERT(is_call_stub() || is_keyed_call_stub()); | 2542 ASSERT(is_call_stub() || is_keyed_call_stub()); |
2552 WRITE_BYTE_FIELD(this, kCheckTypeOffset, value); | 2543 WRITE_BYTE_FIELD(this, kCheckTypeOffset, value); |
2553 } | 2544 } |
2554 | 2545 |
2555 | 2546 |
2547 ExternalArrayType Code::external_array_type() { | |
2548 ASSERT(is_external_array_load_stub() || is_external_array_store_stub()); | |
2549 byte type = READ_BYTE_FIELD(this, kExternalArrayTypeOffset); | |
2550 return static_cast<ExternalArrayType>(type); | |
2551 } | |
2552 | |
2553 | |
2554 void Code::set_external_array_type(ExternalArrayType value) { | |
2555 ASSERT(is_external_array_load_stub() || is_external_array_store_stub()); | |
2556 WRITE_BYTE_FIELD(this, kExternalArrayTypeOffset, value); | |
2557 } | |
2558 | |
2559 | |
2556 byte Code::binary_op_type() { | 2560 byte Code::binary_op_type() { |
2557 ASSERT(is_binary_op_stub()); | 2561 ASSERT(is_binary_op_stub()); |
2558 return READ_BYTE_FIELD(this, kBinaryOpTypeOffset); | 2562 return READ_BYTE_FIELD(this, kBinaryOpTypeOffset); |
2559 } | 2563 } |
2560 | 2564 |
2561 | 2565 |
2562 void Code::set_binary_op_type(byte value) { | 2566 void Code::set_binary_op_type(byte value) { |
2563 ASSERT(is_binary_op_stub()); | 2567 ASSERT(is_binary_op_stub()); |
2564 WRITE_BYTE_FIELD(this, kBinaryOpTypeOffset, value); | 2568 WRITE_BYTE_FIELD(this, kBinaryOpTypeOffset, value); |
2565 } | 2569 } |
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2747 { MaybeObject* maybe_obj = CopyDropTransitions(); | 2751 { MaybeObject* maybe_obj = CopyDropTransitions(); |
2748 if (!maybe_obj->ToObject(&obj)) return maybe_obj; | 2752 if (!maybe_obj->ToObject(&obj)) return maybe_obj; |
2749 } | 2753 } |
2750 Map* new_map = Map::cast(obj); | 2754 Map* new_map = Map::cast(obj); |
2751 new_map->set_has_fast_elements(false); | 2755 new_map->set_has_fast_elements(false); |
2752 Counters::map_fast_to_slow_elements.Increment(); | 2756 Counters::map_fast_to_slow_elements.Increment(); |
2753 return new_map; | 2757 return new_map; |
2754 } | 2758 } |
2755 | 2759 |
2756 | 2760 |
2757 MaybeObject* Map::GetPixelArrayElementsMap() { | 2761 MaybeObject* Map::NewExternalArrayElementsMap() { |
2758 if (has_pixel_array_elements()) return this; | |
2759 // TODO(danno): Special case empty object map (or most common case) | 2762 // TODO(danno): Special case empty object map (or most common case) |
2760 // to return a pre-canned pixel array map. | 2763 // to return a pre-canned pixel array map. |
2761 Object* obj; | 2764 Object* obj; |
2762 { MaybeObject* maybe_obj = CopyDropTransitions(); | 2765 { MaybeObject* maybe_obj = CopyDropTransitions(); |
2763 if (!maybe_obj->ToObject(&obj)) return maybe_obj; | 2766 if (!maybe_obj->ToObject(&obj)) return maybe_obj; |
2764 } | 2767 } |
2765 Map* new_map = Map::cast(obj); | 2768 Map* new_map = Map::cast(obj); |
2766 new_map->set_has_fast_elements(false); | 2769 new_map->set_has_fast_elements(false); |
2767 new_map->set_has_pixel_array_elements(true); | 2770 new_map->set_has_external_array_elements(true); |
2768 Counters::map_to_pixel_array_elements.Increment(); | 2771 Counters::map_to_external_array_elements.Increment(); |
2769 return new_map; | 2772 return new_map; |
2770 } | 2773 } |
2771 | 2774 |
2772 | 2775 |
2773 ACCESSORS(Map, instance_descriptors, DescriptorArray, | 2776 ACCESSORS(Map, instance_descriptors, DescriptorArray, |
2774 kInstanceDescriptorsOffset) | 2777 kInstanceDescriptorsOffset) |
2775 ACCESSORS(Map, code_cache, Object, kCodeCacheOffset) | 2778 ACCESSORS(Map, code_cache, Object, kCodeCacheOffset) |
2776 ACCESSORS(Map, constructor, Object, kConstructorOffset) | 2779 ACCESSORS(Map, constructor, Object, kConstructorOffset) |
2777 | 2780 |
2778 ACCESSORS(JSFunction, shared, SharedFunctionInfo, kSharedFunctionInfoOffset) | 2781 ACCESSORS(JSFunction, shared, SharedFunctionInfo, kSharedFunctionInfoOffset) |
(...skipping 698 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3477 case EXTERNAL_UNSIGNED_BYTE_ARRAY_TYPE: | 3480 case EXTERNAL_UNSIGNED_BYTE_ARRAY_TYPE: |
3478 return EXTERNAL_UNSIGNED_BYTE_ELEMENTS; | 3481 return EXTERNAL_UNSIGNED_BYTE_ELEMENTS; |
3479 case EXTERNAL_SHORT_ARRAY_TYPE: | 3482 case EXTERNAL_SHORT_ARRAY_TYPE: |
3480 return EXTERNAL_SHORT_ELEMENTS; | 3483 return EXTERNAL_SHORT_ELEMENTS; |
3481 case EXTERNAL_UNSIGNED_SHORT_ARRAY_TYPE: | 3484 case EXTERNAL_UNSIGNED_SHORT_ARRAY_TYPE: |
3482 return EXTERNAL_UNSIGNED_SHORT_ELEMENTS; | 3485 return EXTERNAL_UNSIGNED_SHORT_ELEMENTS; |
3483 case EXTERNAL_INT_ARRAY_TYPE: | 3486 case EXTERNAL_INT_ARRAY_TYPE: |
3484 return EXTERNAL_INT_ELEMENTS; | 3487 return EXTERNAL_INT_ELEMENTS; |
3485 case EXTERNAL_UNSIGNED_INT_ARRAY_TYPE: | 3488 case EXTERNAL_UNSIGNED_INT_ARRAY_TYPE: |
3486 return EXTERNAL_UNSIGNED_INT_ELEMENTS; | 3489 return EXTERNAL_UNSIGNED_INT_ELEMENTS; |
3490 case EXTERNAL_PIXEL_ARRAY_TYPE: | |
3491 return EXTERNAL_PIXEL_ELEMENTS; | |
3487 default: | 3492 default: |
3488 ASSERT(array->map()->instance_type() == EXTERNAL_FLOAT_ARRAY_TYPE); | 3493 break; |
3489 return EXTERNAL_FLOAT_ELEMENTS; | |
3490 } | 3494 } |
3491 } | 3495 } |
3492 ASSERT(array->IsPixelArray()); | 3496 ASSERT(array->map()->instance_type() == EXTERNAL_FLOAT_ARRAY_TYPE); |
3493 return PIXEL_ELEMENTS; | 3497 return EXTERNAL_FLOAT_ELEMENTS; |
3494 } | 3498 } |
3495 | 3499 |
3496 | 3500 |
3497 bool JSObject::HasFastElements() { | 3501 bool JSObject::HasFastElements() { |
3498 return GetElementsKind() == FAST_ELEMENTS; | 3502 return GetElementsKind() == FAST_ELEMENTS; |
3499 } | 3503 } |
3500 | 3504 |
3501 | 3505 |
3502 bool JSObject::HasDictionaryElements() { | 3506 bool JSObject::HasDictionaryElements() { |
3503 return GetElementsKind() == DICTIONARY_ELEMENTS; | 3507 return GetElementsKind() == DICTIONARY_ELEMENTS; |
3504 } | 3508 } |
3505 | 3509 |
3506 | 3510 |
3507 bool JSObject::HasPixelElements() { | |
3508 return GetElementsKind() == PIXEL_ELEMENTS; | |
3509 } | |
3510 | |
3511 | |
3512 bool JSObject::HasExternalArrayElements() { | 3511 bool JSObject::HasExternalArrayElements() { |
3513 return (HasExternalByteElements() || | 3512 HeapObject* array = elements(); |
3514 HasExternalUnsignedByteElements() || | 3513 ASSERT(array); |
Kevin Millikin (Chromium)
2011/03/08 14:26:49
V8 style seems to be ASSERT(array != NULL);
| |
3515 HasExternalShortElements() || | 3514 return array->IsExternalArray(); |
3516 HasExternalUnsignedShortElements() || | |
3517 HasExternalIntElements() || | |
3518 HasExternalUnsignedIntElements() || | |
3519 HasExternalFloatElements()); | |
3520 } | 3515 } |
3521 | 3516 |
3522 | 3517 |
3523 bool JSObject::HasExternalByteElements() { | 3518 #define EXTERNAL_ELEMENTS_CHECK(name, type) \ |
3524 return GetElementsKind() == EXTERNAL_BYTE_ELEMENTS; | 3519 bool JSObject::HasExternal##name##Elements() { \ |
3520 HeapObject* array = elements(); \ | |
3521 ASSERT(array); \ | |
3522 if (!array->IsHeapObject()) \ | |
3523 return false; \ | |
3524 return array->map()->instance_type() == type; \ | |
3525 } | 3525 } |
3526 | 3526 |
3527 | 3527 |
3528 bool JSObject::HasExternalUnsignedByteElements() { | 3528 EXTERNAL_ELEMENTS_CHECK(Byte, EXTERNAL_BYTE_ARRAY_TYPE) |
3529 return GetElementsKind() == EXTERNAL_UNSIGNED_BYTE_ELEMENTS; | 3529 EXTERNAL_ELEMENTS_CHECK(UnsignedByte, EXTERNAL_UNSIGNED_BYTE_ARRAY_TYPE) |
3530 } | 3530 EXTERNAL_ELEMENTS_CHECK(Short, EXTERNAL_SHORT_ARRAY_TYPE) |
3531 | 3531 EXTERNAL_ELEMENTS_CHECK(UnsignedShort, |
3532 | 3532 EXTERNAL_UNSIGNED_SHORT_ARRAY_TYPE) |
3533 bool JSObject::HasExternalShortElements() { | 3533 EXTERNAL_ELEMENTS_CHECK(Int, EXTERNAL_INT_ARRAY_TYPE) |
3534 return GetElementsKind() == EXTERNAL_SHORT_ELEMENTS; | 3534 EXTERNAL_ELEMENTS_CHECK(UnsignedInt, |
3535 } | 3535 EXTERNAL_UNSIGNED_INT_ARRAY_TYPE) |
3536 | 3536 EXTERNAL_ELEMENTS_CHECK(Float, |
3537 | 3537 EXTERNAL_FLOAT_ARRAY_TYPE) |
3538 bool JSObject::HasExternalUnsignedShortElements() { | 3538 EXTERNAL_ELEMENTS_CHECK(Pixel, EXTERNAL_PIXEL_ARRAY_TYPE) |
3539 return GetElementsKind() == EXTERNAL_UNSIGNED_SHORT_ELEMENTS; | |
3540 } | |
3541 | |
3542 | |
3543 bool JSObject::HasExternalIntElements() { | |
3544 return GetElementsKind() == EXTERNAL_INT_ELEMENTS; | |
3545 } | |
3546 | |
3547 | |
3548 bool JSObject::HasExternalUnsignedIntElements() { | |
3549 return GetElementsKind() == EXTERNAL_UNSIGNED_INT_ELEMENTS; | |
3550 } | |
3551 | |
3552 | |
3553 bool JSObject::HasExternalFloatElements() { | |
3554 return GetElementsKind() == EXTERNAL_FLOAT_ELEMENTS; | |
3555 } | |
3556 | 3539 |
3557 | 3540 |
3558 bool JSObject::HasNamedInterceptor() { | 3541 bool JSObject::HasNamedInterceptor() { |
3559 return map()->has_named_interceptor(); | 3542 return map()->has_named_interceptor(); |
3560 } | 3543 } |
3561 | 3544 |
3562 | 3545 |
3563 bool JSObject::HasIndexedInterceptor() { | 3546 bool JSObject::HasIndexedInterceptor() { |
3564 return map()->has_indexed_interceptor(); | 3547 return map()->has_indexed_interceptor(); |
3565 } | 3548 } |
3566 | 3549 |
3567 | 3550 |
3568 bool JSObject::AllowsSetElementsLength() { | 3551 bool JSObject::AllowsSetElementsLength() { |
3569 bool result = elements()->IsFixedArray(); | 3552 bool result = elements()->IsFixedArray(); |
3570 ASSERT(result == (!HasPixelElements() && !HasExternalArrayElements())); | 3553 ASSERT(result == !HasExternalArrayElements()); |
3571 return result; | 3554 return result; |
3572 } | 3555 } |
3573 | 3556 |
3574 | 3557 |
3575 MaybeObject* JSObject::EnsureWritableFastElements() { | 3558 MaybeObject* JSObject::EnsureWritableFastElements() { |
3576 ASSERT(HasFastElements()); | 3559 ASSERT(HasFastElements()); |
3577 FixedArray* elems = FixedArray::cast(elements()); | 3560 FixedArray* elems = FixedArray::cast(elements()); |
3578 if (elems->map() != Heap::fixed_cow_array_map()) return elems; | 3561 if (elems->map() != Heap::fixed_cow_array_map()) return elems; |
3579 Object* writable_elems; | 3562 Object* writable_elems; |
3580 { MaybeObject* maybe_writable_elems = | 3563 { MaybeObject* maybe_writable_elems = |
(...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3937 #undef WRITE_INT_FIELD | 3920 #undef WRITE_INT_FIELD |
3938 #undef READ_SHORT_FIELD | 3921 #undef READ_SHORT_FIELD |
3939 #undef WRITE_SHORT_FIELD | 3922 #undef WRITE_SHORT_FIELD |
3940 #undef READ_BYTE_FIELD | 3923 #undef READ_BYTE_FIELD |
3941 #undef WRITE_BYTE_FIELD | 3924 #undef WRITE_BYTE_FIELD |
3942 | 3925 |
3943 | 3926 |
3944 } } // namespace v8::internal | 3927 } } // namespace v8::internal |
3945 | 3928 |
3946 #endif // V8_OBJECTS_INL_H_ | 3929 #endif // V8_OBJECTS_INL_H_ |
OLD | NEW |