Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4)

Side by Side Diff: src/objects-inl.h

Issue 6664001: [Isolates] Merge (7083,7111] from bleeding_edge. (Closed)
Patch Set: Created 9 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/objects-debug.cc ('k') | src/objects-printer.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 322 matching lines...) Expand 10 before | Expand all | Expand 10 after
333 return IsSmi() || IsHeapNumber(); 333 return IsSmi() || IsHeapNumber();
334 } 334 }
335 335
336 336
337 bool Object::IsByteArray() { 337 bool Object::IsByteArray() {
338 return Object::IsHeapObject() 338 return Object::IsHeapObject()
339 && HeapObject::cast(this)->map()->instance_type() == BYTE_ARRAY_TYPE; 339 && HeapObject::cast(this)->map()->instance_type() == BYTE_ARRAY_TYPE;
340 } 340 }
341 341
342 342
343 bool Object::IsPixelArray() { 343 bool Object::IsExternalPixelArray() {
344 return Object::IsHeapObject() && 344 return Object::IsHeapObject() &&
345 HeapObject::cast(this)->map()->instance_type() == PIXEL_ARRAY_TYPE; 345 HeapObject::cast(this)->map()->instance_type() ==
346 EXTERNAL_PIXEL_ARRAY_TYPE;
346 } 347 }
347 348
348 349
349 bool Object::IsExternalArray() { 350 bool Object::IsExternalArray() {
350 if (!Object::IsHeapObject()) 351 if (!Object::IsHeapObject())
351 return false; 352 return false;
352 InstanceType instance_type = 353 InstanceType instance_type =
353 HeapObject::cast(this)->map()->instance_type(); 354 HeapObject::cast(this)->map()->instance_type();
354 return (instance_type >= FIRST_EXTERNAL_ARRAY_TYPE && 355 return (instance_type >= FIRST_EXTERNAL_ARRAY_TYPE &&
355 instance_type <= LAST_EXTERNAL_ARRAY_TYPE); 356 instance_type <= LAST_EXTERNAL_ARRAY_TYPE);
(...skipping 893 matching lines...) Expand 10 before | Expand all | Expand 10 after
1249 return READ_INT_FIELD(this, kExponentOffset) & kSignMask; 1250 return READ_INT_FIELD(this, kExponentOffset) & kSignMask;
1250 } 1251 }
1251 1252
1252 1253
1253 ACCESSORS(JSObject, properties, FixedArray, kPropertiesOffset) 1254 ACCESSORS(JSObject, properties, FixedArray, kPropertiesOffset)
1254 1255
1255 1256
1256 HeapObject* JSObject::elements() { 1257 HeapObject* JSObject::elements() {
1257 Object* array = READ_FIELD(this, kElementsOffset); 1258 Object* array = READ_FIELD(this, kElementsOffset);
1258 // In the assert below Dictionary is covered under FixedArray. 1259 // In the assert below Dictionary is covered under FixedArray.
1259 ASSERT(array->IsFixedArray() || array->IsPixelArray() || 1260 ASSERT(array->IsFixedArray() || array->IsExternalArray());
1260 array->IsExternalArray());
1261 return reinterpret_cast<HeapObject*>(array); 1261 return reinterpret_cast<HeapObject*>(array);
1262 } 1262 }
1263 1263
1264 1264
1265 void JSObject::set_elements(HeapObject* value, WriteBarrierMode mode) { 1265 void JSObject::set_elements(HeapObject* value, WriteBarrierMode mode) {
1266 ASSERT(map()->has_fast_elements() == 1266 ASSERT(map()->has_fast_elements() ==
1267 (value->map() == GetHeap()->fixed_array_map() || 1267 (value->map() == GetHeap()->fixed_array_map() ||
1268 value->map() == GetHeap()->fixed_cow_array_map())); 1268 value->map() == GetHeap()->fixed_cow_array_map()));
1269 // In the assert below Dictionary is covered under FixedArray. 1269 // In the assert below Dictionary is covered under FixedArray.
1270 ASSERT(value->IsFixedArray() || value->IsPixelArray() || 1270 ASSERT(value->IsFixedArray() || value->IsExternalArray());
1271 value->IsExternalArray());
1272 WRITE_FIELD(this, kElementsOffset, value); 1271 WRITE_FIELD(this, kElementsOffset, value);
1273 CONDITIONAL_WRITE_BARRIER(GetHeap(), this, kElementsOffset, mode); 1272 CONDITIONAL_WRITE_BARRIER(GetHeap(), this, kElementsOffset, mode);
1274 } 1273 }
1275 1274
1276 1275
1277 void JSObject::initialize_properties() { 1276 void JSObject::initialize_properties() {
1278 ASSERT(!GetHeap()->InNewSpace(GetHeap()->empty_fixed_array())); 1277 ASSERT(!GetHeap()->InNewSpace(GetHeap()->empty_fixed_array()));
1279 WRITE_FIELD(this, kPropertiesOffset, GetHeap()->empty_fixed_array()); 1278 WRITE_FIELD(this, kPropertiesOffset, GetHeap()->empty_fixed_array());
1280 } 1279 }
1281 1280
(...skipping 558 matching lines...) Expand 10 before | Expand all | Expand 10 after
1840 CAST_ACCESSOR(JSFunction) 1839 CAST_ACCESSOR(JSFunction)
1841 CAST_ACCESSOR(GlobalObject) 1840 CAST_ACCESSOR(GlobalObject)
1842 CAST_ACCESSOR(JSGlobalProxy) 1841 CAST_ACCESSOR(JSGlobalProxy)
1843 CAST_ACCESSOR(JSGlobalObject) 1842 CAST_ACCESSOR(JSGlobalObject)
1844 CAST_ACCESSOR(JSBuiltinsObject) 1843 CAST_ACCESSOR(JSBuiltinsObject)
1845 CAST_ACCESSOR(Code) 1844 CAST_ACCESSOR(Code)
1846 CAST_ACCESSOR(JSArray) 1845 CAST_ACCESSOR(JSArray)
1847 CAST_ACCESSOR(JSRegExp) 1846 CAST_ACCESSOR(JSRegExp)
1848 CAST_ACCESSOR(Proxy) 1847 CAST_ACCESSOR(Proxy)
1849 CAST_ACCESSOR(ByteArray) 1848 CAST_ACCESSOR(ByteArray)
1850 CAST_ACCESSOR(PixelArray)
1851 CAST_ACCESSOR(ExternalArray) 1849 CAST_ACCESSOR(ExternalArray)
1852 CAST_ACCESSOR(ExternalByteArray) 1850 CAST_ACCESSOR(ExternalByteArray)
1853 CAST_ACCESSOR(ExternalUnsignedByteArray) 1851 CAST_ACCESSOR(ExternalUnsignedByteArray)
1854 CAST_ACCESSOR(ExternalShortArray) 1852 CAST_ACCESSOR(ExternalShortArray)
1855 CAST_ACCESSOR(ExternalUnsignedShortArray) 1853 CAST_ACCESSOR(ExternalUnsignedShortArray)
1856 CAST_ACCESSOR(ExternalIntArray) 1854 CAST_ACCESSOR(ExternalIntArray)
1857 CAST_ACCESSOR(ExternalUnsignedIntArray) 1855 CAST_ACCESSOR(ExternalUnsignedIntArray)
1858 CAST_ACCESSOR(ExternalFloatArray) 1856 CAST_ACCESSOR(ExternalFloatArray)
1857 CAST_ACCESSOR(ExternalPixelArray)
1859 CAST_ACCESSOR(Struct) 1858 CAST_ACCESSOR(Struct)
1860 1859
1861 1860
1862 #define MAKE_STRUCT_CAST(NAME, Name, name) CAST_ACCESSOR(Name) 1861 #define MAKE_STRUCT_CAST(NAME, Name, name) CAST_ACCESSOR(Name)
1863 STRUCT_LIST(MAKE_STRUCT_CAST) 1862 STRUCT_LIST(MAKE_STRUCT_CAST)
1864 #undef MAKE_STRUCT_CAST 1863 #undef MAKE_STRUCT_CAST
1865 1864
1866 1865
1867 template <typename Shape, typename Key> 1866 template <typename Shape, typename Key>
1868 HashTable<Shape, Key>* HashTable<Shape, Key>::cast(Object* obj) { 1867 HashTable<Shape, Key>* HashTable<Shape, Key>::cast(Object* obj) {
1869 ASSERT(obj->IsHashTable()); 1868 ASSERT(obj->IsHashTable());
1870 return reinterpret_cast<HashTable*>(obj); 1869 return reinterpret_cast<HashTable*>(obj);
1871 } 1870 }
1872 1871
1873 1872
1874 SMI_ACCESSORS(FixedArray, length, kLengthOffset) 1873 SMI_ACCESSORS(FixedArray, length, kLengthOffset)
1875 SMI_ACCESSORS(ByteArray, length, kLengthOffset) 1874 SMI_ACCESSORS(ByteArray, length, kLengthOffset)
1876 1875
1877 INT_ACCESSORS(PixelArray, length, kLengthOffset)
1878 INT_ACCESSORS(ExternalArray, length, kLengthOffset) 1876 INT_ACCESSORS(ExternalArray, length, kLengthOffset)
1879 1877
1880 1878
1881 SMI_ACCESSORS(String, length, kLengthOffset) 1879 SMI_ACCESSORS(String, length, kLengthOffset)
1882 1880
1883 1881
1884 uint32_t String::hash_field() { 1882 uint32_t String::hash_field() {
1885 return READ_UINT32_FIELD(this, kHashFieldOffset); 1883 return READ_UINT32_FIELD(this, kHashFieldOffset);
1886 } 1884 }
1887 1885
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
2134 ASSERT_TAG_ALIGNED(address); 2132 ASSERT_TAG_ALIGNED(address);
2135 return reinterpret_cast<ByteArray*>(address - kHeaderSize + kHeapObjectTag); 2133 return reinterpret_cast<ByteArray*>(address - kHeaderSize + kHeapObjectTag);
2136 } 2134 }
2137 2135
2138 2136
2139 Address ByteArray::GetDataStartAddress() { 2137 Address ByteArray::GetDataStartAddress() {
2140 return reinterpret_cast<Address>(this) - kHeapObjectTag + kHeaderSize; 2138 return reinterpret_cast<Address>(this) - kHeapObjectTag + kHeaderSize;
2141 } 2139 }
2142 2140
2143 2141
2144 uint8_t* PixelArray::external_pointer() { 2142 uint8_t* ExternalPixelArray::external_pixel_pointer() {
2145 intptr_t ptr = READ_INTPTR_FIELD(this, kExternalPointerOffset); 2143 return reinterpret_cast<uint8_t*>(external_pointer());
2146 return reinterpret_cast<uint8_t*>(ptr);
2147 } 2144 }
2148 2145
2149 2146
2150 void PixelArray::set_external_pointer(uint8_t* value, WriteBarrierMode mode) { 2147 uint8_t ExternalPixelArray::get(int index) {
2151 intptr_t ptr = reinterpret_cast<intptr_t>(value);
2152 WRITE_INTPTR_FIELD(this, kExternalPointerOffset, ptr);
2153 }
2154
2155
2156 uint8_t PixelArray::get(int index) {
2157 ASSERT((index >= 0) && (index < this->length())); 2148 ASSERT((index >= 0) && (index < this->length()));
2158 uint8_t* ptr = external_pointer(); 2149 uint8_t* ptr = external_pixel_pointer();
2159 return ptr[index]; 2150 return ptr[index];
2160 } 2151 }
2161 2152
2162 2153
2163 void PixelArray::set(int index, uint8_t value) { 2154 void ExternalPixelArray::set(int index, uint8_t value) {
2164 ASSERT((index >= 0) && (index < this->length())); 2155 ASSERT((index >= 0) && (index < this->length()));
2165 uint8_t* ptr = external_pointer(); 2156 uint8_t* ptr = external_pixel_pointer();
2166 ptr[index] = value; 2157 ptr[index] = value;
2167 } 2158 }
2168 2159
2169 2160
2170 void* ExternalArray::external_pointer() { 2161 void* ExternalArray::external_pointer() {
2171 intptr_t ptr = READ_INTPTR_FIELD(this, kExternalPointerOffset); 2162 intptr_t ptr = READ_INTPTR_FIELD(this, kExternalPointerOffset);
2172 return reinterpret_cast<void*>(ptr); 2163 return reinterpret_cast<void*>(ptr);
2173 } 2164 }
2174 2165
2175 2166
(...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after
2633 return static_cast<CheckType>(type); 2624 return static_cast<CheckType>(type);
2634 } 2625 }
2635 2626
2636 2627
2637 void Code::set_check_type(CheckType value) { 2628 void Code::set_check_type(CheckType value) {
2638 ASSERT(is_call_stub() || is_keyed_call_stub()); 2629 ASSERT(is_call_stub() || is_keyed_call_stub());
2639 WRITE_BYTE_FIELD(this, kCheckTypeOffset, value); 2630 WRITE_BYTE_FIELD(this, kCheckTypeOffset, value);
2640 } 2631 }
2641 2632
2642 2633
2634 ExternalArrayType Code::external_array_type() {
2635 ASSERT(is_external_array_load_stub() || is_external_array_store_stub());
2636 byte type = READ_BYTE_FIELD(this, kExternalArrayTypeOffset);
2637 return static_cast<ExternalArrayType>(type);
2638 }
2639
2640
2641 void Code::set_external_array_type(ExternalArrayType value) {
2642 ASSERT(is_external_array_load_stub() || is_external_array_store_stub());
2643 WRITE_BYTE_FIELD(this, kExternalArrayTypeOffset, value);
2644 }
2645
2646
2643 byte Code::binary_op_type() { 2647 byte Code::binary_op_type() {
2644 ASSERT(is_binary_op_stub()); 2648 ASSERT(is_binary_op_stub());
2645 return READ_BYTE_FIELD(this, kBinaryOpTypeOffset); 2649 return READ_BYTE_FIELD(this, kBinaryOpTypeOffset);
2646 } 2650 }
2647 2651
2648 2652
2649 void Code::set_binary_op_type(byte value) { 2653 void Code::set_binary_op_type(byte value) {
2650 ASSERT(is_binary_op_stub()); 2654 ASSERT(is_binary_op_stub());
2651 WRITE_BYTE_FIELD(this, kBinaryOpTypeOffset, value); 2655 WRITE_BYTE_FIELD(this, kBinaryOpTypeOffset, value);
2652 } 2656 }
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
2843 { MaybeObject* maybe_obj = CopyDropTransitions(); 2847 { MaybeObject* maybe_obj = CopyDropTransitions();
2844 if (!maybe_obj->ToObject(&obj)) return maybe_obj; 2848 if (!maybe_obj->ToObject(&obj)) return maybe_obj;
2845 } 2849 }
2846 Map* new_map = Map::cast(obj); 2850 Map* new_map = Map::cast(obj);
2847 new_map->set_has_fast_elements(false); 2851 new_map->set_has_fast_elements(false);
2848 COUNTERS->map_fast_to_slow_elements()->Increment(); 2852 COUNTERS->map_fast_to_slow_elements()->Increment();
2849 return new_map; 2853 return new_map;
2850 } 2854 }
2851 2855
2852 2856
2853 MaybeObject* Map::GetPixelArrayElementsMap() { 2857 MaybeObject* Map::NewExternalArrayElementsMap() {
2854 if (has_pixel_array_elements()) return this;
2855 // TODO(danno): Special case empty object map (or most common case) 2858 // TODO(danno): Special case empty object map (or most common case)
2856 // to return a pre-canned pixel array map. 2859 // to return a pre-canned pixel array map.
2857 Object* obj; 2860 Object* obj;
2858 { MaybeObject* maybe_obj = CopyDropTransitions(); 2861 { MaybeObject* maybe_obj = CopyDropTransitions();
2859 if (!maybe_obj->ToObject(&obj)) return maybe_obj; 2862 if (!maybe_obj->ToObject(&obj)) return maybe_obj;
2860 } 2863 }
2861 Map* new_map = Map::cast(obj); 2864 Map* new_map = Map::cast(obj);
2862 new_map->set_has_fast_elements(false); 2865 new_map->set_has_fast_elements(false);
2863 new_map->set_has_pixel_array_elements(true); 2866 new_map->set_has_external_array_elements(true);
2864 COUNTERS->map_to_pixel_array_elements()->Increment(); 2867 COUNTERS->map_to_external_array_elements()->Increment();
2865 return new_map; 2868 return new_map;
2866 } 2869 }
2867 2870
2868 2871
2869 ACCESSORS(Map, instance_descriptors, DescriptorArray, 2872 ACCESSORS(Map, instance_descriptors, DescriptorArray,
2870 kInstanceDescriptorsOffset) 2873 kInstanceDescriptorsOffset)
2871 ACCESSORS(Map, code_cache, Object, kCodeCacheOffset) 2874 ACCESSORS(Map, code_cache, Object, kCodeCacheOffset)
2872 ACCESSORS(Map, constructor, Object, kConstructorOffset) 2875 ACCESSORS(Map, constructor, Object, kConstructorOffset)
2873 2876
2874 ACCESSORS(JSFunction, shared, SharedFunctionInfo, kSharedFunctionInfoOffset) 2877 ACCESSORS(JSFunction, shared, SharedFunctionInfo, kSharedFunctionInfoOffset)
(...skipping 701 matching lines...) Expand 10 before | Expand all | Expand 10 after
3576 case EXTERNAL_UNSIGNED_BYTE_ARRAY_TYPE: 3579 case EXTERNAL_UNSIGNED_BYTE_ARRAY_TYPE:
3577 return EXTERNAL_UNSIGNED_BYTE_ELEMENTS; 3580 return EXTERNAL_UNSIGNED_BYTE_ELEMENTS;
3578 case EXTERNAL_SHORT_ARRAY_TYPE: 3581 case EXTERNAL_SHORT_ARRAY_TYPE:
3579 return EXTERNAL_SHORT_ELEMENTS; 3582 return EXTERNAL_SHORT_ELEMENTS;
3580 case EXTERNAL_UNSIGNED_SHORT_ARRAY_TYPE: 3583 case EXTERNAL_UNSIGNED_SHORT_ARRAY_TYPE:
3581 return EXTERNAL_UNSIGNED_SHORT_ELEMENTS; 3584 return EXTERNAL_UNSIGNED_SHORT_ELEMENTS;
3582 case EXTERNAL_INT_ARRAY_TYPE: 3585 case EXTERNAL_INT_ARRAY_TYPE:
3583 return EXTERNAL_INT_ELEMENTS; 3586 return EXTERNAL_INT_ELEMENTS;
3584 case EXTERNAL_UNSIGNED_INT_ARRAY_TYPE: 3587 case EXTERNAL_UNSIGNED_INT_ARRAY_TYPE:
3585 return EXTERNAL_UNSIGNED_INT_ELEMENTS; 3588 return EXTERNAL_UNSIGNED_INT_ELEMENTS;
3589 case EXTERNAL_PIXEL_ARRAY_TYPE:
3590 return EXTERNAL_PIXEL_ELEMENTS;
3586 default: 3591 default:
3587 ASSERT(array->map()->instance_type() == EXTERNAL_FLOAT_ARRAY_TYPE); 3592 break;
3588 return EXTERNAL_FLOAT_ELEMENTS;
3589 } 3593 }
3590 } 3594 }
3591 ASSERT(array->IsPixelArray()); 3595 ASSERT(array->map()->instance_type() == EXTERNAL_FLOAT_ARRAY_TYPE);
3592 return PIXEL_ELEMENTS; 3596 return EXTERNAL_FLOAT_ELEMENTS;
3593 } 3597 }
3594 3598
3595 3599
3596 bool JSObject::HasFastElements() { 3600 bool JSObject::HasFastElements() {
3597 return GetElementsKind() == FAST_ELEMENTS; 3601 return GetElementsKind() == FAST_ELEMENTS;
3598 } 3602 }
3599 3603
3600 3604
3601 bool JSObject::HasDictionaryElements() { 3605 bool JSObject::HasDictionaryElements() {
3602 return GetElementsKind() == DICTIONARY_ELEMENTS; 3606 return GetElementsKind() == DICTIONARY_ELEMENTS;
3603 } 3607 }
3604 3608
3605 3609
3606 bool JSObject::HasPixelElements() {
3607 return GetElementsKind() == PIXEL_ELEMENTS;
3608 }
3609
3610
3611 bool JSObject::HasExternalArrayElements() { 3610 bool JSObject::HasExternalArrayElements() {
3612 return (HasExternalByteElements() || 3611 HeapObject* array = elements();
3613 HasExternalUnsignedByteElements() || 3612 ASSERT(array != NULL);
3614 HasExternalShortElements() || 3613 return array->IsExternalArray();
3615 HasExternalUnsignedShortElements() ||
3616 HasExternalIntElements() ||
3617 HasExternalUnsignedIntElements() ||
3618 HasExternalFloatElements());
3619 } 3614 }
3620 3615
3621 3616
3622 bool JSObject::HasExternalByteElements() { 3617 #define EXTERNAL_ELEMENTS_CHECK(name, type) \
3623 return GetElementsKind() == EXTERNAL_BYTE_ELEMENTS; 3618 bool JSObject::HasExternal##name##Elements() { \
3619 HeapObject* array = elements(); \
3620 ASSERT(array != NULL); \
3621 if (!array->IsHeapObject()) \
3622 return false; \
3623 return array->map()->instance_type() == type; \
3624 } 3624 }
3625 3625
3626 3626
3627 bool JSObject::HasExternalUnsignedByteElements() { 3627 EXTERNAL_ELEMENTS_CHECK(Byte, EXTERNAL_BYTE_ARRAY_TYPE)
3628 return GetElementsKind() == EXTERNAL_UNSIGNED_BYTE_ELEMENTS; 3628 EXTERNAL_ELEMENTS_CHECK(UnsignedByte, EXTERNAL_UNSIGNED_BYTE_ARRAY_TYPE)
3629 } 3629 EXTERNAL_ELEMENTS_CHECK(Short, EXTERNAL_SHORT_ARRAY_TYPE)
3630 3630 EXTERNAL_ELEMENTS_CHECK(UnsignedShort,
3631 3631 EXTERNAL_UNSIGNED_SHORT_ARRAY_TYPE)
3632 bool JSObject::HasExternalShortElements() { 3632 EXTERNAL_ELEMENTS_CHECK(Int, EXTERNAL_INT_ARRAY_TYPE)
3633 return GetElementsKind() == EXTERNAL_SHORT_ELEMENTS; 3633 EXTERNAL_ELEMENTS_CHECK(UnsignedInt,
3634 } 3634 EXTERNAL_UNSIGNED_INT_ARRAY_TYPE)
3635 3635 EXTERNAL_ELEMENTS_CHECK(Float,
3636 3636 EXTERNAL_FLOAT_ARRAY_TYPE)
3637 bool JSObject::HasExternalUnsignedShortElements() { 3637 EXTERNAL_ELEMENTS_CHECK(Pixel, EXTERNAL_PIXEL_ARRAY_TYPE)
3638 return GetElementsKind() == EXTERNAL_UNSIGNED_SHORT_ELEMENTS;
3639 }
3640
3641
3642 bool JSObject::HasExternalIntElements() {
3643 return GetElementsKind() == EXTERNAL_INT_ELEMENTS;
3644 }
3645
3646
3647 bool JSObject::HasExternalUnsignedIntElements() {
3648 return GetElementsKind() == EXTERNAL_UNSIGNED_INT_ELEMENTS;
3649 }
3650
3651
3652 bool JSObject::HasExternalFloatElements() {
3653 return GetElementsKind() == EXTERNAL_FLOAT_ELEMENTS;
3654 }
3655 3638
3656 3639
3657 bool JSObject::HasNamedInterceptor() { 3640 bool JSObject::HasNamedInterceptor() {
3658 return map()->has_named_interceptor(); 3641 return map()->has_named_interceptor();
3659 } 3642 }
3660 3643
3661 3644
3662 bool JSObject::HasIndexedInterceptor() { 3645 bool JSObject::HasIndexedInterceptor() {
3663 return map()->has_indexed_interceptor(); 3646 return map()->has_indexed_interceptor();
3664 } 3647 }
3665 3648
3666 3649
3667 bool JSObject::AllowsSetElementsLength() { 3650 bool JSObject::AllowsSetElementsLength() {
3668 bool result = elements()->IsFixedArray(); 3651 bool result = elements()->IsFixedArray();
3669 ASSERT(result == (!HasPixelElements() && !HasExternalArrayElements())); 3652 ASSERT(result == !HasExternalArrayElements());
3670 return result; 3653 return result;
3671 } 3654 }
3672 3655
3673 3656
3674 MaybeObject* JSObject::EnsureWritableFastElements() { 3657 MaybeObject* JSObject::EnsureWritableFastElements() {
3675 ASSERT(HasFastElements()); 3658 ASSERT(HasFastElements());
3676 FixedArray* elems = FixedArray::cast(elements()); 3659 FixedArray* elems = FixedArray::cast(elements());
3677 Isolate* isolate = GetIsolate(); 3660 Isolate* isolate = GetIsolate();
3678 if (elems->map() != isolate->heap()->fixed_cow_array_map()) return elems; 3661 if (elems->map() != isolate->heap()->fixed_cow_array_map()) return elems;
3679 Object* writable_elems; 3662 Object* writable_elems;
(...skipping 417 matching lines...) Expand 10 before | Expand all | Expand 10 after
4097 #undef WRITE_INT_FIELD 4080 #undef WRITE_INT_FIELD
4098 #undef READ_SHORT_FIELD 4081 #undef READ_SHORT_FIELD
4099 #undef WRITE_SHORT_FIELD 4082 #undef WRITE_SHORT_FIELD
4100 #undef READ_BYTE_FIELD 4083 #undef READ_BYTE_FIELD
4101 #undef WRITE_BYTE_FIELD 4084 #undef WRITE_BYTE_FIELD
4102 4085
4103 4086
4104 } } // namespace v8::internal 4087 } } // namespace v8::internal
4105 4088
4106 #endif // V8_OBJECTS_INL_H_ 4089 #endif // V8_OBJECTS_INL_H_
OLDNEW
« no previous file with comments | « src/objects-debug.cc ('k') | src/objects-printer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698