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

Side by Side Diff: src/objects.cc

Issue 6546036: Combine typed and pixel arrays. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: final version 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 | Annotate | Revision Log
« no previous file with comments | « src/objects.h ('k') | src/objects-debug.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 942 matching lines...) Expand 10 before | Expand all | Expand 10 after
953 switch (map()->instance_type()) { 953 switch (map()->instance_type()) {
954 case MAP_TYPE: 954 case MAP_TYPE:
955 accumulator->Add("<Map>"); 955 accumulator->Add("<Map>");
956 break; 956 break;
957 case FIXED_ARRAY_TYPE: 957 case FIXED_ARRAY_TYPE:
958 accumulator->Add("<FixedArray[%u]>", FixedArray::cast(this)->length()); 958 accumulator->Add("<FixedArray[%u]>", FixedArray::cast(this)->length());
959 break; 959 break;
960 case BYTE_ARRAY_TYPE: 960 case BYTE_ARRAY_TYPE:
961 accumulator->Add("<ByteArray[%u]>", ByteArray::cast(this)->length()); 961 accumulator->Add("<ByteArray[%u]>", ByteArray::cast(this)->length());
962 break; 962 break;
963 case PIXEL_ARRAY_TYPE: 963 case EXTERNAL_PIXEL_ARRAY_TYPE:
964 accumulator->Add("<PixelArray[%u]>", PixelArray::cast(this)->length()); 964 accumulator->Add("<ExternalPixelArray[%u]>",
965 ExternalPixelArray::cast(this)->length());
965 break; 966 break;
966 case EXTERNAL_BYTE_ARRAY_TYPE: 967 case EXTERNAL_BYTE_ARRAY_TYPE:
967 accumulator->Add("<ExternalByteArray[%u]>", 968 accumulator->Add("<ExternalByteArray[%u]>",
968 ExternalByteArray::cast(this)->length()); 969 ExternalByteArray::cast(this)->length());
969 break; 970 break;
970 case EXTERNAL_UNSIGNED_BYTE_ARRAY_TYPE: 971 case EXTERNAL_UNSIGNED_BYTE_ARRAY_TYPE:
971 accumulator->Add("<ExternalUnsignedByteArray[%u]>", 972 accumulator->Add("<ExternalUnsignedByteArray[%u]>",
972 ExternalUnsignedByteArray::cast(this)->length()); 973 ExternalUnsignedByteArray::cast(this)->length());
973 break; 974 break;
974 case EXTERNAL_SHORT_ARRAY_TYPE: 975 case EXTERNAL_SHORT_ARRAY_TYPE:
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
1105 break; 1106 break;
1106 case CODE_TYPE: 1107 case CODE_TYPE:
1107 reinterpret_cast<Code*>(this)->CodeIterateBody(v); 1108 reinterpret_cast<Code*>(this)->CodeIterateBody(v);
1108 break; 1109 break;
1109 case JS_GLOBAL_PROPERTY_CELL_TYPE: 1110 case JS_GLOBAL_PROPERTY_CELL_TYPE:
1110 JSGlobalPropertyCell::BodyDescriptor::IterateBody(this, v); 1111 JSGlobalPropertyCell::BodyDescriptor::IterateBody(this, v);
1111 break; 1112 break;
1112 case HEAP_NUMBER_TYPE: 1113 case HEAP_NUMBER_TYPE:
1113 case FILLER_TYPE: 1114 case FILLER_TYPE:
1114 case BYTE_ARRAY_TYPE: 1115 case BYTE_ARRAY_TYPE:
1115 case PIXEL_ARRAY_TYPE: 1116 case EXTERNAL_PIXEL_ARRAY_TYPE:
1116 case EXTERNAL_BYTE_ARRAY_TYPE: 1117 case EXTERNAL_BYTE_ARRAY_TYPE:
1117 case EXTERNAL_UNSIGNED_BYTE_ARRAY_TYPE: 1118 case EXTERNAL_UNSIGNED_BYTE_ARRAY_TYPE:
1118 case EXTERNAL_SHORT_ARRAY_TYPE: 1119 case EXTERNAL_SHORT_ARRAY_TYPE:
1119 case EXTERNAL_UNSIGNED_SHORT_ARRAY_TYPE: 1120 case EXTERNAL_UNSIGNED_SHORT_ARRAY_TYPE:
1120 case EXTERNAL_INT_ARRAY_TYPE: 1121 case EXTERNAL_INT_ARRAY_TYPE:
1121 case EXTERNAL_UNSIGNED_INT_ARRAY_TYPE: 1122 case EXTERNAL_UNSIGNED_INT_ARRAY_TYPE:
1122 case EXTERNAL_FLOAT_ARRAY_TYPE: 1123 case EXTERNAL_FLOAT_ARRAY_TYPE:
1123 break; 1124 break;
1124 case SHARED_FUNCTION_INFO_TYPE: 1125 case SHARED_FUNCTION_INFO_TYPE:
1125 SharedFunctionInfo::BodyDescriptor::IterateBody(this, v); 1126 SharedFunctionInfo::BodyDescriptor::IterateBody(this, v);
(...skipping 1303 matching lines...) Expand 10 before | Expand all | Expand 10 after
2429 2430
2430 MaybeObject* JSObject::TransformToFastProperties(int unused_property_fields) { 2431 MaybeObject* JSObject::TransformToFastProperties(int unused_property_fields) {
2431 if (HasFastProperties()) return this; 2432 if (HasFastProperties()) return this;
2432 ASSERT(!IsGlobalObject()); 2433 ASSERT(!IsGlobalObject());
2433 return property_dictionary()-> 2434 return property_dictionary()->
2434 TransformPropertiesToFastFor(this, unused_property_fields); 2435 TransformPropertiesToFastFor(this, unused_property_fields);
2435 } 2436 }
2436 2437
2437 2438
2438 MaybeObject* JSObject::NormalizeElements() { 2439 MaybeObject* JSObject::NormalizeElements() {
2439 ASSERT(!HasPixelElements() && !HasExternalArrayElements()); 2440 ASSERT(!HasExternalArrayElements());
2440 if (HasDictionaryElements()) return this; 2441 if (HasDictionaryElements()) return this;
2441 ASSERT(map()->has_fast_elements()); 2442 ASSERT(map()->has_fast_elements());
2442 2443
2443 Object* obj; 2444 Object* obj;
2444 { MaybeObject* maybe_obj = map()->GetSlowElementsMap(); 2445 { MaybeObject* maybe_obj = map()->GetSlowElementsMap();
2445 if (!maybe_obj->ToObject(&obj)) return maybe_obj; 2446 if (!maybe_obj->ToObject(&obj)) return maybe_obj;
2446 } 2447 }
2447 Map* new_map = Map::cast(obj); 2448 Map* new_map = Map::cast(obj);
2448 2449
2449 // Get number of entries. 2450 // Get number of entries.
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
2531 } 2532 }
2532 MaybeObject* raw_result = 2533 MaybeObject* raw_result =
2533 this_handle->DeletePropertyPostInterceptor(*name_handle, NORMAL_DELETION); 2534 this_handle->DeletePropertyPostInterceptor(*name_handle, NORMAL_DELETION);
2534 RETURN_IF_SCHEDULED_EXCEPTION(); 2535 RETURN_IF_SCHEDULED_EXCEPTION();
2535 return raw_result; 2536 return raw_result;
2536 } 2537 }
2537 2538
2538 2539
2539 MaybeObject* JSObject::DeleteElementPostInterceptor(uint32_t index, 2540 MaybeObject* JSObject::DeleteElementPostInterceptor(uint32_t index,
2540 DeleteMode mode) { 2541 DeleteMode mode) {
2541 ASSERT(!HasPixelElements() && !HasExternalArrayElements()); 2542 ASSERT(!HasExternalArrayElements());
2542 switch (GetElementsKind()) { 2543 switch (GetElementsKind()) {
2543 case FAST_ELEMENTS: { 2544 case FAST_ELEMENTS: {
2544 Object* obj; 2545 Object* obj;
2545 { MaybeObject* maybe_obj = EnsureWritableFastElements(); 2546 { MaybeObject* maybe_obj = EnsureWritableFastElements();
2546 if (!maybe_obj->ToObject(&obj)) return maybe_obj; 2547 if (!maybe_obj->ToObject(&obj)) return maybe_obj;
2547 } 2548 }
2548 uint32_t length = IsJSArray() ? 2549 uint32_t length = IsJSArray() ?
2549 static_cast<uint32_t>(Smi::cast(JSArray::cast(this)->length())->value()) : 2550 static_cast<uint32_t>(Smi::cast(JSArray::cast(this)->length())->value()) :
2550 static_cast<uint32_t>(FixedArray::cast(elements())->length()); 2551 static_cast<uint32_t>(FixedArray::cast(elements())->length());
2551 if (index < length) { 2552 if (index < length) {
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
2630 if (!maybe_obj->ToObject(&obj)) return maybe_obj; 2631 if (!maybe_obj->ToObject(&obj)) return maybe_obj;
2631 } 2632 }
2632 uint32_t length = IsJSArray() ? 2633 uint32_t length = IsJSArray() ?
2633 static_cast<uint32_t>(Smi::cast(JSArray::cast(this)->length())->value()) : 2634 static_cast<uint32_t>(Smi::cast(JSArray::cast(this)->length())->value()) :
2634 static_cast<uint32_t>(FixedArray::cast(elements())->length()); 2635 static_cast<uint32_t>(FixedArray::cast(elements())->length());
2635 if (index < length) { 2636 if (index < length) {
2636 FixedArray::cast(elements())->set_the_hole(index); 2637 FixedArray::cast(elements())->set_the_hole(index);
2637 } 2638 }
2638 break; 2639 break;
2639 } 2640 }
2640 case PIXEL_ELEMENTS: 2641 case EXTERNAL_PIXEL_ELEMENTS:
2641 case EXTERNAL_BYTE_ELEMENTS: 2642 case EXTERNAL_BYTE_ELEMENTS:
2642 case EXTERNAL_UNSIGNED_BYTE_ELEMENTS: 2643 case EXTERNAL_UNSIGNED_BYTE_ELEMENTS:
2643 case EXTERNAL_SHORT_ELEMENTS: 2644 case EXTERNAL_SHORT_ELEMENTS:
2644 case EXTERNAL_UNSIGNED_SHORT_ELEMENTS: 2645 case EXTERNAL_UNSIGNED_SHORT_ELEMENTS:
2645 case EXTERNAL_INT_ELEMENTS: 2646 case EXTERNAL_INT_ELEMENTS:
2646 case EXTERNAL_UNSIGNED_INT_ELEMENTS: 2647 case EXTERNAL_UNSIGNED_INT_ELEMENTS:
2647 case EXTERNAL_FLOAT_ELEMENTS: 2648 case EXTERNAL_FLOAT_ELEMENTS:
2648 // Pixel and external array elements cannot be deleted. Just 2649 // Pixel and external array elements cannot be deleted. Just
2649 // silently ignore here. 2650 // silently ignore here.
2650 break; 2651 break;
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
2745 } 2746 }
2746 2747
2747 // Check if the object is among the named properties. 2748 // Check if the object is among the named properties.
2748 Object* key = SlowReverseLookup(obj); 2749 Object* key = SlowReverseLookup(obj);
2749 if (key != Heap::undefined_value()) { 2750 if (key != Heap::undefined_value()) {
2750 return true; 2751 return true;
2751 } 2752 }
2752 2753
2753 // Check if the object is among the indexed properties. 2754 // Check if the object is among the indexed properties.
2754 switch (GetElementsKind()) { 2755 switch (GetElementsKind()) {
2755 case PIXEL_ELEMENTS: 2756 case EXTERNAL_PIXEL_ELEMENTS:
2756 case EXTERNAL_BYTE_ELEMENTS: 2757 case EXTERNAL_BYTE_ELEMENTS:
2757 case EXTERNAL_UNSIGNED_BYTE_ELEMENTS: 2758 case EXTERNAL_UNSIGNED_BYTE_ELEMENTS:
2758 case EXTERNAL_SHORT_ELEMENTS: 2759 case EXTERNAL_SHORT_ELEMENTS:
2759 case EXTERNAL_UNSIGNED_SHORT_ELEMENTS: 2760 case EXTERNAL_UNSIGNED_SHORT_ELEMENTS:
2760 case EXTERNAL_INT_ELEMENTS: 2761 case EXTERNAL_INT_ELEMENTS:
2761 case EXTERNAL_UNSIGNED_INT_ELEMENTS: 2762 case EXTERNAL_UNSIGNED_INT_ELEMENTS:
2762 case EXTERNAL_FLOAT_ELEMENTS: 2763 case EXTERNAL_FLOAT_ELEMENTS:
2763 // Raw pixels and external arrays do not reference other 2764 // Raw pixels and external arrays do not reference other
2764 // objects. 2765 // objects.
2765 break; 2766 break;
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
3005 return Heap::undefined_value(); 3006 return Heap::undefined_value();
3006 } 3007 }
3007 3008
3008 uint32_t index = 0; 3009 uint32_t index = 0;
3009 bool is_element = name->AsArrayIndex(&index); 3010 bool is_element = name->AsArrayIndex(&index);
3010 3011
3011 if (is_element) { 3012 if (is_element) {
3012 switch (GetElementsKind()) { 3013 switch (GetElementsKind()) {
3013 case FAST_ELEMENTS: 3014 case FAST_ELEMENTS:
3014 break; 3015 break;
3015 case PIXEL_ELEMENTS: 3016 case EXTERNAL_PIXEL_ELEMENTS:
3016 case EXTERNAL_BYTE_ELEMENTS: 3017 case EXTERNAL_BYTE_ELEMENTS:
3017 case EXTERNAL_UNSIGNED_BYTE_ELEMENTS: 3018 case EXTERNAL_UNSIGNED_BYTE_ELEMENTS:
3018 case EXTERNAL_SHORT_ELEMENTS: 3019 case EXTERNAL_SHORT_ELEMENTS:
3019 case EXTERNAL_UNSIGNED_SHORT_ELEMENTS: 3020 case EXTERNAL_UNSIGNED_SHORT_ELEMENTS:
3020 case EXTERNAL_INT_ELEMENTS: 3021 case EXTERNAL_INT_ELEMENTS:
3021 case EXTERNAL_UNSIGNED_INT_ELEMENTS: 3022 case EXTERNAL_UNSIGNED_INT_ELEMENTS:
3022 case EXTERNAL_FLOAT_ELEMENTS: 3023 case EXTERNAL_FLOAT_ELEMENTS:
3023 // Ignore getters and setters on pixel and external array 3024 // Ignore getters and setters on pixel and external array
3024 // elements. 3025 // elements.
3025 return Heap::undefined_value(); 3026 return Heap::undefined_value();
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
3229 uint32_t index = 0; 3230 uint32_t index = 0;
3230 bool is_element = name->AsArrayIndex(&index); 3231 bool is_element = name->AsArrayIndex(&index);
3231 3232
3232 if (is_element) { 3233 if (is_element) {
3233 if (IsJSArray()) return Heap::undefined_value(); 3234 if (IsJSArray()) return Heap::undefined_value();
3234 3235
3235 // Accessors overwrite previous callbacks (cf. with getters/setters). 3236 // Accessors overwrite previous callbacks (cf. with getters/setters).
3236 switch (GetElementsKind()) { 3237 switch (GetElementsKind()) {
3237 case FAST_ELEMENTS: 3238 case FAST_ELEMENTS:
3238 break; 3239 break;
3239 case PIXEL_ELEMENTS: 3240 case EXTERNAL_PIXEL_ELEMENTS:
3240 case EXTERNAL_BYTE_ELEMENTS: 3241 case EXTERNAL_BYTE_ELEMENTS:
3241 case EXTERNAL_UNSIGNED_BYTE_ELEMENTS: 3242 case EXTERNAL_UNSIGNED_BYTE_ELEMENTS:
3242 case EXTERNAL_SHORT_ELEMENTS: 3243 case EXTERNAL_SHORT_ELEMENTS:
3243 case EXTERNAL_UNSIGNED_SHORT_ELEMENTS: 3244 case EXTERNAL_UNSIGNED_SHORT_ELEMENTS:
3244 case EXTERNAL_INT_ELEMENTS: 3245 case EXTERNAL_INT_ELEMENTS:
3245 case EXTERNAL_UNSIGNED_INT_ELEMENTS: 3246 case EXTERNAL_UNSIGNED_INT_ELEMENTS:
3246 case EXTERNAL_FLOAT_ELEMENTS: 3247 case EXTERNAL_FLOAT_ELEMENTS:
3247 // Ignore getters and setters on pixel and external array 3248 // Ignore getters and setters on pixel and external array
3248 // elements. 3249 // elements.
3249 return Heap::undefined_value(); 3250 return Heap::undefined_value();
(...skipping 560 matching lines...) Expand 10 before | Expand all | Expand 10 after
3810 if (element->IsString() && 3811 if (element->IsString() &&
3811 key->IsString() && String::cast(element)->Equals(String::cast(key))) { 3812 key->IsString() && String::cast(element)->Equals(String::cast(key))) {
3812 return true; 3813 return true;
3813 } 3814 }
3814 } 3815 }
3815 return false; 3816 return false;
3816 } 3817 }
3817 3818
3818 3819
3819 MaybeObject* FixedArray::AddKeysFromJSArray(JSArray* array) { 3820 MaybeObject* FixedArray::AddKeysFromJSArray(JSArray* array) {
3820 ASSERT(!array->HasPixelElements() && !array->HasExternalArrayElements()); 3821 ASSERT(!array->HasExternalArrayElements());
3821 switch (array->GetElementsKind()) { 3822 switch (array->GetElementsKind()) {
3822 case JSObject::FAST_ELEMENTS: 3823 case JSObject::FAST_ELEMENTS:
3823 return UnionOfKeys(FixedArray::cast(array->elements())); 3824 return UnionOfKeys(FixedArray::cast(array->elements()));
3824 case JSObject::DICTIONARY_ELEMENTS: { 3825 case JSObject::DICTIONARY_ELEMENTS: {
3825 NumberDictionary* dict = array->element_dictionary(); 3826 NumberDictionary* dict = array->element_dictionary();
3826 int size = dict->NumberOfElements(); 3827 int size = dict->NumberOfElements();
3827 3828
3828 // Allocate a temporary fixed array. 3829 // Allocate a temporary fixed array.
3829 Object* object; 3830 Object* object;
3830 { MaybeObject* maybe_object = Heap::AllocateFixedArray(size); 3831 { MaybeObject* maybe_object = Heap::AllocateFixedArray(size);
(...skipping 2417 matching lines...) Expand 10 before | Expand all | Expand 10 after
6248 6249
6249 // Identify kind of code. 6250 // Identify kind of code.
6250 const char* Code::Kind2String(Kind kind) { 6251 const char* Code::Kind2String(Kind kind) {
6251 switch (kind) { 6252 switch (kind) {
6252 case FUNCTION: return "FUNCTION"; 6253 case FUNCTION: return "FUNCTION";
6253 case OPTIMIZED_FUNCTION: return "OPTIMIZED_FUNCTION"; 6254 case OPTIMIZED_FUNCTION: return "OPTIMIZED_FUNCTION";
6254 case STUB: return "STUB"; 6255 case STUB: return "STUB";
6255 case BUILTIN: return "BUILTIN"; 6256 case BUILTIN: return "BUILTIN";
6256 case LOAD_IC: return "LOAD_IC"; 6257 case LOAD_IC: return "LOAD_IC";
6257 case KEYED_LOAD_IC: return "KEYED_LOAD_IC"; 6258 case KEYED_LOAD_IC: return "KEYED_LOAD_IC";
6259 case KEYED_EXTERNAL_ARRAY_LOAD_IC: return "KEYED_EXTERNAL_ARRAY_LOAD_IC";
6258 case STORE_IC: return "STORE_IC"; 6260 case STORE_IC: return "STORE_IC";
6259 case KEYED_STORE_IC: return "KEYED_STORE_IC"; 6261 case KEYED_STORE_IC: return "KEYED_STORE_IC";
6262 case KEYED_EXTERNAL_ARRAY_STORE_IC: return "KEYED_EXTERNAL_ARRAY_STORE_IC";
6260 case CALL_IC: return "CALL_IC"; 6263 case CALL_IC: return "CALL_IC";
6261 case KEYED_CALL_IC: return "KEYED_CALL_IC"; 6264 case KEYED_CALL_IC: return "KEYED_CALL_IC";
6262 case BINARY_OP_IC: return "BINARY_OP_IC"; 6265 case BINARY_OP_IC: return "BINARY_OP_IC";
6263 case TYPE_RECORDING_BINARY_OP_IC: return "TYPE_RECORDING_BINARY_OP_IC"; 6266 case TYPE_RECORDING_BINARY_OP_IC: return "TYPE_RECORDING_BINARY_OP_IC";
6264 case COMPARE_IC: return "COMPARE_IC"; 6267 case COMPARE_IC: return "COMPARE_IC";
6265 } 6268 }
6266 UNREACHABLE(); 6269 UNREACHABLE();
6267 return NULL; 6270 return NULL;
6268 } 6271 }
6269 6272
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
6399 PrintF("RelocInfo (size = %d)\n", relocation_size()); 6402 PrintF("RelocInfo (size = %d)\n", relocation_size());
6400 for (RelocIterator it(this); !it.done(); it.next()) it.rinfo()->Print(out); 6403 for (RelocIterator it(this); !it.done(); it.next()) it.rinfo()->Print(out);
6401 PrintF(out, "\n"); 6404 PrintF(out, "\n");
6402 } 6405 }
6403 #endif // ENABLE_DISASSEMBLER 6406 #endif // ENABLE_DISASSEMBLER
6404 6407
6405 6408
6406 MaybeObject* JSObject::SetFastElementsCapacityAndLength(int capacity, 6409 MaybeObject* JSObject::SetFastElementsCapacityAndLength(int capacity,
6407 int length) { 6410 int length) {
6408 // We should never end in here with a pixel or external array. 6411 // We should never end in here with a pixel or external array.
6409 ASSERT(!HasPixelElements() && !HasExternalArrayElements()); 6412 ASSERT(!HasExternalArrayElements());
6410 6413
6411 Object* obj; 6414 Object* obj;
6412 { MaybeObject* maybe_obj = Heap::AllocateFixedArrayWithHoles(capacity); 6415 { MaybeObject* maybe_obj = Heap::AllocateFixedArrayWithHoles(capacity);
6413 if (!maybe_obj->ToObject(&obj)) return maybe_obj; 6416 if (!maybe_obj->ToObject(&obj)) return maybe_obj;
6414 } 6417 }
6415 FixedArray* elems = FixedArray::cast(obj); 6418 FixedArray* elems = FixedArray::cast(obj);
6416 6419
6417 { MaybeObject* maybe_obj = map()->GetFastElementsMap(); 6420 { MaybeObject* maybe_obj = map()->GetFastElementsMap();
6418 if (!maybe_obj->ToObject(&obj)) return maybe_obj; 6421 if (!maybe_obj->ToObject(&obj)) return maybe_obj;
6419 } 6422 }
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
6453 if (IsJSArray()) { 6456 if (IsJSArray()) {
6454 JSArray::cast(this)->set_length(Smi::FromInt(length)); 6457 JSArray::cast(this)->set_length(Smi::FromInt(length));
6455 } 6458 }
6456 6459
6457 return this; 6460 return this;
6458 } 6461 }
6459 6462
6460 6463
6461 MaybeObject* JSObject::SetSlowElements(Object* len) { 6464 MaybeObject* JSObject::SetSlowElements(Object* len) {
6462 // We should never end in here with a pixel or external array. 6465 // We should never end in here with a pixel or external array.
6463 ASSERT(!HasPixelElements() && !HasExternalArrayElements()); 6466 ASSERT(!HasExternalArrayElements());
6464 6467
6465 uint32_t new_length = static_cast<uint32_t>(len->Number()); 6468 uint32_t new_length = static_cast<uint32_t>(len->Number());
6466 6469
6467 switch (GetElementsKind()) { 6470 switch (GetElementsKind()) {
6468 case FAST_ELEMENTS: { 6471 case FAST_ELEMENTS: {
6469 // Make sure we never try to shrink dense arrays into sparse arrays. 6472 // Make sure we never try to shrink dense arrays into sparse arrays.
6470 ASSERT(static_cast<uint32_t>(FixedArray::cast(elements())->length()) <= 6473 ASSERT(static_cast<uint32_t>(FixedArray::cast(elements())->length()) <=
6471 new_length); 6474 new_length);
6472 Object* obj; 6475 Object* obj;
6473 { MaybeObject* maybe_obj = NormalizeElements(); 6476 { MaybeObject* maybe_obj = NormalizeElements();
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
6675 uint32_t length = IsJSArray() ? 6678 uint32_t length = IsJSArray() ?
6676 static_cast<uint32_t> 6679 static_cast<uint32_t>
6677 (Smi::cast(JSArray::cast(this)->length())->value()) : 6680 (Smi::cast(JSArray::cast(this)->length())->value()) :
6678 static_cast<uint32_t>(FixedArray::cast(elements())->length()); 6681 static_cast<uint32_t>(FixedArray::cast(elements())->length());
6679 if ((index < length) && 6682 if ((index < length) &&
6680 !FixedArray::cast(elements())->get(index)->IsTheHole()) { 6683 !FixedArray::cast(elements())->get(index)->IsTheHole()) {
6681 return true; 6684 return true;
6682 } 6685 }
6683 break; 6686 break;
6684 } 6687 }
6685 case PIXEL_ELEMENTS: { 6688 case EXTERNAL_PIXEL_ELEMENTS: {
6686 PixelArray* pixels = PixelArray::cast(elements()); 6689 ExternalPixelArray* pixels = ExternalPixelArray::cast(elements());
6687 if (index < static_cast<uint32_t>(pixels->length())) { 6690 if (index < static_cast<uint32_t>(pixels->length())) {
6688 return true; 6691 return true;
6689 } 6692 }
6690 break; 6693 break;
6691 } 6694 }
6692 case EXTERNAL_BYTE_ELEMENTS: 6695 case EXTERNAL_BYTE_ELEMENTS:
6693 case EXTERNAL_UNSIGNED_BYTE_ELEMENTS: 6696 case EXTERNAL_UNSIGNED_BYTE_ELEMENTS:
6694 case EXTERNAL_SHORT_ELEMENTS: 6697 case EXTERNAL_SHORT_ELEMENTS:
6695 case EXTERNAL_UNSIGNED_SHORT_ELEMENTS: 6698 case EXTERNAL_UNSIGNED_SHORT_ELEMENTS:
6696 case EXTERNAL_INT_ELEMENTS: 6699 case EXTERNAL_INT_ELEMENTS:
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
6794 uint32_t length = IsJSArray() ? 6797 uint32_t length = IsJSArray() ?
6795 static_cast<uint32_t> 6798 static_cast<uint32_t>
6796 (Smi::cast(JSArray::cast(this)->length())->value()) : 6799 (Smi::cast(JSArray::cast(this)->length())->value()) :
6797 static_cast<uint32_t>(FixedArray::cast(elements())->length()); 6800 static_cast<uint32_t>(FixedArray::cast(elements())->length());
6798 if ((index < length) && 6801 if ((index < length) &&
6799 !FixedArray::cast(elements())->get(index)->IsTheHole()) { 6802 !FixedArray::cast(elements())->get(index)->IsTheHole()) {
6800 return FAST_ELEMENT; 6803 return FAST_ELEMENT;
6801 } 6804 }
6802 break; 6805 break;
6803 } 6806 }
6804 case PIXEL_ELEMENTS: { 6807 case EXTERNAL_PIXEL_ELEMENTS: {
6805 PixelArray* pixels = PixelArray::cast(elements()); 6808 ExternalPixelArray* pixels = ExternalPixelArray::cast(elements());
6806 if (index < static_cast<uint32_t>(pixels->length())) return FAST_ELEMENT; 6809 if (index < static_cast<uint32_t>(pixels->length())) return FAST_ELEMENT;
6807 break; 6810 break;
6808 } 6811 }
6809 case EXTERNAL_BYTE_ELEMENTS: 6812 case EXTERNAL_BYTE_ELEMENTS:
6810 case EXTERNAL_UNSIGNED_BYTE_ELEMENTS: 6813 case EXTERNAL_UNSIGNED_BYTE_ELEMENTS:
6811 case EXTERNAL_SHORT_ELEMENTS: 6814 case EXTERNAL_SHORT_ELEMENTS:
6812 case EXTERNAL_UNSIGNED_SHORT_ELEMENTS: 6815 case EXTERNAL_UNSIGNED_SHORT_ELEMENTS:
6813 case EXTERNAL_INT_ELEMENTS: 6816 case EXTERNAL_INT_ELEMENTS:
6814 case EXTERNAL_UNSIGNED_INT_ELEMENTS: 6817 case EXTERNAL_UNSIGNED_INT_ELEMENTS:
6815 case EXTERNAL_FLOAT_ELEMENTS: { 6818 case EXTERNAL_FLOAT_ELEMENTS: {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
6849 switch (GetElementsKind()) { 6852 switch (GetElementsKind()) {
6850 case FAST_ELEMENTS: { 6853 case FAST_ELEMENTS: {
6851 uint32_t length = IsJSArray() ? 6854 uint32_t length = IsJSArray() ?
6852 static_cast<uint32_t> 6855 static_cast<uint32_t>
6853 (Smi::cast(JSArray::cast(this)->length())->value()) : 6856 (Smi::cast(JSArray::cast(this)->length())->value()) :
6854 static_cast<uint32_t>(FixedArray::cast(elements())->length()); 6857 static_cast<uint32_t>(FixedArray::cast(elements())->length());
6855 if ((index < length) && 6858 if ((index < length) &&
6856 !FixedArray::cast(elements())->get(index)->IsTheHole()) return true; 6859 !FixedArray::cast(elements())->get(index)->IsTheHole()) return true;
6857 break; 6860 break;
6858 } 6861 }
6859 case PIXEL_ELEMENTS: { 6862 case EXTERNAL_PIXEL_ELEMENTS: {
6860 PixelArray* pixels = PixelArray::cast(elements()); 6863 ExternalPixelArray* pixels = ExternalPixelArray::cast(elements());
6861 if (index < static_cast<uint32_t>(pixels->length())) { 6864 if (index < static_cast<uint32_t>(pixels->length())) {
6862 return true; 6865 return true;
6863 } 6866 }
6864 break; 6867 break;
6865 } 6868 }
6866 case EXTERNAL_BYTE_ELEMENTS: 6869 case EXTERNAL_BYTE_ELEMENTS:
6867 case EXTERNAL_UNSIGNED_BYTE_ELEMENTS: 6870 case EXTERNAL_UNSIGNED_BYTE_ELEMENTS:
6868 case EXTERNAL_SHORT_ELEMENTS: 6871 case EXTERNAL_SHORT_ELEMENTS:
6869 case EXTERNAL_UNSIGNED_SHORT_ELEMENTS: 6872 case EXTERNAL_UNSIGNED_SHORT_ELEMENTS:
6870 case EXTERNAL_INT_ELEMENTS: 6873 case EXTERNAL_INT_ELEMENTS:
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after
7140 7143
7141 7144
7142 MaybeObject* JSObject::SetElementWithoutInterceptor(uint32_t index, 7145 MaybeObject* JSObject::SetElementWithoutInterceptor(uint32_t index,
7143 Object* value, 7146 Object* value,
7144 StrictModeFlag strict_mode, 7147 StrictModeFlag strict_mode,
7145 bool check_prototype) { 7148 bool check_prototype) {
7146 switch (GetElementsKind()) { 7149 switch (GetElementsKind()) {
7147 case FAST_ELEMENTS: 7150 case FAST_ELEMENTS:
7148 // Fast case. 7151 // Fast case.
7149 return SetFastElement(index, value, strict_mode, check_prototype); 7152 return SetFastElement(index, value, strict_mode, check_prototype);
7150 case PIXEL_ELEMENTS: { 7153 case EXTERNAL_PIXEL_ELEMENTS: {
7151 PixelArray* pixels = PixelArray::cast(elements()); 7154 ExternalPixelArray* pixels = ExternalPixelArray::cast(elements());
7152 return pixels->SetValue(index, value); 7155 return pixels->SetValue(index, value);
7153 } 7156 }
7154 case EXTERNAL_BYTE_ELEMENTS: { 7157 case EXTERNAL_BYTE_ELEMENTS: {
7155 ExternalByteArray* array = ExternalByteArray::cast(elements()); 7158 ExternalByteArray* array = ExternalByteArray::cast(elements());
7156 return array->SetValue(index, value); 7159 return array->SetValue(index, value);
7157 } 7160 }
7158 case EXTERNAL_UNSIGNED_BYTE_ELEMENTS: { 7161 case EXTERNAL_UNSIGNED_BYTE_ELEMENTS: {
7159 ExternalUnsignedByteArray* array = 7162 ExternalUnsignedByteArray* array =
7160 ExternalUnsignedByteArray::cast(elements()); 7163 ExternalUnsignedByteArray::cast(elements());
7161 return array->SetValue(index, value); 7164 return array->SetValue(index, value);
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
7303 // JSArray::length cannot change. 7306 // JSArray::length cannot change.
7304 switch (GetElementsKind()) { 7307 switch (GetElementsKind()) {
7305 case FAST_ELEMENTS: { 7308 case FAST_ELEMENTS: {
7306 FixedArray* elms = FixedArray::cast(elements()); 7309 FixedArray* elms = FixedArray::cast(elements());
7307 if (index < static_cast<uint32_t>(elms->length())) { 7310 if (index < static_cast<uint32_t>(elms->length())) {
7308 Object* value = elms->get(index); 7311 Object* value = elms->get(index);
7309 if (!value->IsTheHole()) return value; 7312 if (!value->IsTheHole()) return value;
7310 } 7313 }
7311 break; 7314 break;
7312 } 7315 }
7313 case PIXEL_ELEMENTS: 7316 case EXTERNAL_PIXEL_ELEMENTS:
7314 case EXTERNAL_BYTE_ELEMENTS: 7317 case EXTERNAL_BYTE_ELEMENTS:
7315 case EXTERNAL_UNSIGNED_BYTE_ELEMENTS: 7318 case EXTERNAL_UNSIGNED_BYTE_ELEMENTS:
7316 case EXTERNAL_SHORT_ELEMENTS: 7319 case EXTERNAL_SHORT_ELEMENTS:
7317 case EXTERNAL_UNSIGNED_SHORT_ELEMENTS: 7320 case EXTERNAL_UNSIGNED_SHORT_ELEMENTS:
7318 case EXTERNAL_INT_ELEMENTS: 7321 case EXTERNAL_INT_ELEMENTS:
7319 case EXTERNAL_UNSIGNED_INT_ELEMENTS: 7322 case EXTERNAL_UNSIGNED_INT_ELEMENTS:
7320 case EXTERNAL_FLOAT_ELEMENTS: { 7323 case EXTERNAL_FLOAT_ELEMENTS: {
7321 MaybeObject* maybe_value = GetExternalElement(index); 7324 MaybeObject* maybe_value = GetExternalElement(index);
7322 Object* value; 7325 Object* value;
7323 if (!maybe_value->ToObject(&value)) return maybe_value; 7326 if (!maybe_value->ToObject(&value)) return maybe_value;
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
7402 // JSArray::length cannot change. 7405 // JSArray::length cannot change.
7403 switch (GetElementsKind()) { 7406 switch (GetElementsKind()) {
7404 case FAST_ELEMENTS: { 7407 case FAST_ELEMENTS: {
7405 FixedArray* elms = FixedArray::cast(elements()); 7408 FixedArray* elms = FixedArray::cast(elements());
7406 if (index < static_cast<uint32_t>(elms->length())) { 7409 if (index < static_cast<uint32_t>(elms->length())) {
7407 Object* value = elms->get(index); 7410 Object* value = elms->get(index);
7408 if (!value->IsTheHole()) return value; 7411 if (!value->IsTheHole()) return value;
7409 } 7412 }
7410 break; 7413 break;
7411 } 7414 }
7412 case PIXEL_ELEMENTS: 7415 case EXTERNAL_PIXEL_ELEMENTS:
7413 case EXTERNAL_BYTE_ELEMENTS: 7416 case EXTERNAL_BYTE_ELEMENTS:
7414 case EXTERNAL_UNSIGNED_BYTE_ELEMENTS: 7417 case EXTERNAL_UNSIGNED_BYTE_ELEMENTS:
7415 case EXTERNAL_SHORT_ELEMENTS: 7418 case EXTERNAL_SHORT_ELEMENTS:
7416 case EXTERNAL_UNSIGNED_SHORT_ELEMENTS: 7419 case EXTERNAL_UNSIGNED_SHORT_ELEMENTS:
7417 case EXTERNAL_INT_ELEMENTS: 7420 case EXTERNAL_INT_ELEMENTS:
7418 case EXTERNAL_UNSIGNED_INT_ELEMENTS: 7421 case EXTERNAL_UNSIGNED_INT_ELEMENTS:
7419 case EXTERNAL_FLOAT_ELEMENTS: { 7422 case EXTERNAL_FLOAT_ELEMENTS: {
7420 MaybeObject* maybe_value = GetExternalElement(index); 7423 MaybeObject* maybe_value = GetExternalElement(index);
7421 Object* value; 7424 Object* value;
7422 if (!maybe_value->ToObject(&value)) return maybe_value; 7425 if (!maybe_value->ToObject(&value)) return maybe_value;
(...skipping 21 matching lines...) Expand all
7444 Object* pt = GetPrototype(); 7447 Object* pt = GetPrototype();
7445 if (pt == Heap::null_value()) return Heap::undefined_value(); 7448 if (pt == Heap::null_value()) return Heap::undefined_value();
7446 return pt->GetElementWithReceiver(receiver, index); 7449 return pt->GetElementWithReceiver(receiver, index);
7447 } 7450 }
7448 7451
7449 7452
7450 MaybeObject* JSObject::GetExternalElement(uint32_t index) { 7453 MaybeObject* JSObject::GetExternalElement(uint32_t index) {
7451 // Get element works for both JSObject and JSArray since 7454 // Get element works for both JSObject and JSArray since
7452 // JSArray::length cannot change. 7455 // JSArray::length cannot change.
7453 switch (GetElementsKind()) { 7456 switch (GetElementsKind()) {
7454 case PIXEL_ELEMENTS: { 7457 case EXTERNAL_PIXEL_ELEMENTS: {
7455 PixelArray* pixels = PixelArray::cast(elements()); 7458 ExternalPixelArray* pixels = ExternalPixelArray::cast(elements());
7456 if (index < static_cast<uint32_t>(pixels->length())) { 7459 if (index < static_cast<uint32_t>(pixels->length())) {
7457 uint8_t value = pixels->get(index); 7460 uint8_t value = pixels->get(index);
7458 return Smi::FromInt(value); 7461 return Smi::FromInt(value);
7459 } 7462 }
7460 break; 7463 break;
7461 } 7464 }
7462 case EXTERNAL_BYTE_ELEMENTS: { 7465 case EXTERNAL_BYTE_ELEMENTS: {
7463 ExternalByteArray* array = ExternalByteArray::cast(elements()); 7466 ExternalByteArray* array = ExternalByteArray::cast(elements());
7464 if (index < static_cast<uint32_t>(array->length())) { 7467 if (index < static_cast<uint32_t>(array->length())) {
7465 int8_t value = array->get(index); 7468 int8_t value = array->get(index);
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
7533 7536
7534 switch (GetElementsKind()) { 7537 switch (GetElementsKind()) {
7535 case FAST_ELEMENTS: { 7538 case FAST_ELEMENTS: {
7536 FixedArray* elms = FixedArray::cast(elements()); 7539 FixedArray* elms = FixedArray::cast(elements());
7537 capacity = elms->length(); 7540 capacity = elms->length();
7538 for (int i = 0; i < capacity; i++) { 7541 for (int i = 0; i < capacity; i++) {
7539 if (!elms->get(i)->IsTheHole()) number_of_elements++; 7542 if (!elms->get(i)->IsTheHole()) number_of_elements++;
7540 } 7543 }
7541 break; 7544 break;
7542 } 7545 }
7543 case PIXEL_ELEMENTS: 7546 case EXTERNAL_PIXEL_ELEMENTS:
7544 case EXTERNAL_BYTE_ELEMENTS: 7547 case EXTERNAL_BYTE_ELEMENTS:
7545 case EXTERNAL_UNSIGNED_BYTE_ELEMENTS: 7548 case EXTERNAL_UNSIGNED_BYTE_ELEMENTS:
7546 case EXTERNAL_SHORT_ELEMENTS: 7549 case EXTERNAL_SHORT_ELEMENTS:
7547 case EXTERNAL_UNSIGNED_SHORT_ELEMENTS: 7550 case EXTERNAL_UNSIGNED_SHORT_ELEMENTS:
7548 case EXTERNAL_INT_ELEMENTS: 7551 case EXTERNAL_INT_ELEMENTS:
7549 case EXTERNAL_UNSIGNED_INT_ELEMENTS: 7552 case EXTERNAL_UNSIGNED_INT_ELEMENTS:
7550 case EXTERNAL_FLOAT_ELEMENTS: { 7553 case EXTERNAL_FLOAT_ELEMENTS: {
7551 return true; 7554 return true;
7552 } 7555 }
7553 case DICTIONARY_ELEMENTS: { 7556 case DICTIONARY_ELEMENTS: {
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
7761 7764
7762 switch (GetElementsKind()) { 7765 switch (GetElementsKind()) {
7763 case FAST_ELEMENTS: { 7766 case FAST_ELEMENTS: {
7764 uint32_t length = IsJSArray() ? 7767 uint32_t length = IsJSArray() ?
7765 static_cast<uint32_t>( 7768 static_cast<uint32_t>(
7766 Smi::cast(JSArray::cast(this)->length())->value()) : 7769 Smi::cast(JSArray::cast(this)->length())->value()) :
7767 static_cast<uint32_t>(FixedArray::cast(elements())->length()); 7770 static_cast<uint32_t>(FixedArray::cast(elements())->length());
7768 return (index < length) && 7771 return (index < length) &&
7769 !FixedArray::cast(elements())->get(index)->IsTheHole(); 7772 !FixedArray::cast(elements())->get(index)->IsTheHole();
7770 } 7773 }
7771 case PIXEL_ELEMENTS: { 7774 case EXTERNAL_PIXEL_ELEMENTS: {
7772 PixelArray* pixels = PixelArray::cast(elements()); 7775 ExternalPixelArray* pixels = ExternalPixelArray::cast(elements());
7773 return index < static_cast<uint32_t>(pixels->length()); 7776 return index < static_cast<uint32_t>(pixels->length());
7774 } 7777 }
7775 case EXTERNAL_BYTE_ELEMENTS: 7778 case EXTERNAL_BYTE_ELEMENTS:
7776 case EXTERNAL_UNSIGNED_BYTE_ELEMENTS: 7779 case EXTERNAL_UNSIGNED_BYTE_ELEMENTS:
7777 case EXTERNAL_SHORT_ELEMENTS: 7780 case EXTERNAL_SHORT_ELEMENTS:
7778 case EXTERNAL_UNSIGNED_SHORT_ELEMENTS: 7781 case EXTERNAL_UNSIGNED_SHORT_ELEMENTS:
7779 case EXTERNAL_INT_ELEMENTS: 7782 case EXTERNAL_INT_ELEMENTS:
7780 case EXTERNAL_UNSIGNED_INT_ELEMENTS: 7783 case EXTERNAL_UNSIGNED_INT_ELEMENTS:
7781 case EXTERNAL_FLOAT_ELEMENTS: { 7784 case EXTERNAL_FLOAT_ELEMENTS: {
7782 ExternalArray* array = ExternalArray::cast(elements()); 7785 ExternalArray* array = ExternalArray::cast(elements());
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
7993 if (!FixedArray::cast(elements())->get(i)->IsTheHole()) { 7996 if (!FixedArray::cast(elements())->get(i)->IsTheHole()) {
7994 if (storage != NULL) { 7997 if (storage != NULL) {
7995 storage->set(counter, Smi::FromInt(i)); 7998 storage->set(counter, Smi::FromInt(i));
7996 } 7999 }
7997 counter++; 8000 counter++;
7998 } 8001 }
7999 } 8002 }
8000 ASSERT(!storage || storage->length() >= counter); 8003 ASSERT(!storage || storage->length() >= counter);
8001 break; 8004 break;
8002 } 8005 }
8003 case PIXEL_ELEMENTS: { 8006 case EXTERNAL_PIXEL_ELEMENTS: {
8004 int length = PixelArray::cast(elements())->length(); 8007 int length = ExternalPixelArray::cast(elements())->length();
8005 while (counter < length) { 8008 while (counter < length) {
8006 if (storage != NULL) { 8009 if (storage != NULL) {
8007 storage->set(counter, Smi::FromInt(counter)); 8010 storage->set(counter, Smi::FromInt(counter));
8008 } 8011 }
8009 counter++; 8012 counter++;
8010 } 8013 }
8011 ASSERT(!storage || storage->length() >= counter); 8014 ASSERT(!storage || storage->length() >= counter);
8012 break; 8015 break;
8013 } 8016 }
8014 case EXTERNAL_BYTE_ELEMENTS: 8017 case EXTERNAL_BYTE_ELEMENTS:
(...skipping 720 matching lines...) Expand 10 before | Expand all | Expand 10 after
8735 result_double->set_value(static_cast<double>(result)); 8738 result_double->set_value(static_cast<double>(result));
8736 return result_double; 8739 return result_double;
8737 } 8740 }
8738 8741
8739 8742
8740 // Collects all defined (non-hole) and non-undefined (array) elements at 8743 // Collects all defined (non-hole) and non-undefined (array) elements at
8741 // the start of the elements array. 8744 // the start of the elements array.
8742 // If the object is in dictionary mode, it is converted to fast elements 8745 // If the object is in dictionary mode, it is converted to fast elements
8743 // mode. 8746 // mode.
8744 MaybeObject* JSObject::PrepareElementsForSort(uint32_t limit) { 8747 MaybeObject* JSObject::PrepareElementsForSort(uint32_t limit) {
8745 ASSERT(!HasPixelElements() && !HasExternalArrayElements()); 8748 ASSERT(!HasExternalArrayElements());
8746 8749
8747 if (HasDictionaryElements()) { 8750 if (HasDictionaryElements()) {
8748 // Convert to fast elements containing only the existing properties. 8751 // Convert to fast elements containing only the existing properties.
8749 // Ordering is irrelevant, since we are going to sort anyway. 8752 // Ordering is irrelevant, since we are going to sort anyway.
8750 NumberDictionary* dict = element_dictionary(); 8753 NumberDictionary* dict = element_dictionary();
8751 if (IsJSArray() || dict->requires_slow_elements() || 8754 if (IsJSArray() || dict->requires_slow_elements() ||
8752 dict->max_number_key() >= limit) { 8755 dict->max_number_key() >= limit) {
8753 return PrepareSlowElementsForSort(limit); 8756 return PrepareSlowElementsForSort(limit);
8754 } 8757 }
8755 // Convert to fast elements. 8758 // Convert to fast elements.
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
8847 8850
8848 if (result <= static_cast<uint32_t>(Smi::kMaxValue)) { 8851 if (result <= static_cast<uint32_t>(Smi::kMaxValue)) {
8849 return Smi::FromInt(static_cast<int>(result)); 8852 return Smi::FromInt(static_cast<int>(result));
8850 } 8853 }
8851 ASSERT_NE(NULL, result_double); 8854 ASSERT_NE(NULL, result_double);
8852 result_double->set_value(static_cast<double>(result)); 8855 result_double->set_value(static_cast<double>(result));
8853 return result_double; 8856 return result_double;
8854 } 8857 }
8855 8858
8856 8859
8857 Object* PixelArray::SetValue(uint32_t index, Object* value) { 8860 Object* ExternalPixelArray::SetValue(uint32_t index, Object* value) {
8858 uint8_t clamped_value = 0; 8861 uint8_t clamped_value = 0;
8859 if (index < static_cast<uint32_t>(length())) { 8862 if (index < static_cast<uint32_t>(length())) {
8860 if (value->IsSmi()) { 8863 if (value->IsSmi()) {
8861 int int_value = Smi::cast(value)->value(); 8864 int int_value = Smi::cast(value)->value();
8862 if (int_value < 0) { 8865 if (int_value < 0) {
8863 clamped_value = 0; 8866 clamped_value = 0;
8864 } else if (int_value > 255) { 8867 } else if (int_value > 255) {
8865 clamped_value = 255; 8868 clamped_value = 255;
8866 } else { 8869 } else {
8867 clamped_value = static_cast<uint8_t>(int_value); 8870 clamped_value = static_cast<uint8_t>(int_value);
(...skipping 1187 matching lines...) Expand 10 before | Expand all | Expand 10 after
10055 if (break_point_objects()->IsUndefined()) return 0; 10058 if (break_point_objects()->IsUndefined()) return 0;
10056 // Single beak point. 10059 // Single beak point.
10057 if (!break_point_objects()->IsFixedArray()) return 1; 10060 if (!break_point_objects()->IsFixedArray()) return 1;
10058 // Multiple break points. 10061 // Multiple break points.
10059 return FixedArray::cast(break_point_objects())->length(); 10062 return FixedArray::cast(break_point_objects())->length();
10060 } 10063 }
10061 #endif 10064 #endif
10062 10065
10063 10066
10064 } } // namespace v8::internal 10067 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/objects.h ('k') | src/objects-debug.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698