| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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 11389 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 11400 Handle<Object> hresult = | 11400 Handle<Object> hresult = |
| 11401 array->GetElementsAccessor()->SetLength(array, new_length_handle); | 11401 array->GetElementsAccessor()->SetLength(array, new_length_handle); |
| 11402 RETURN_IF_EMPTY_HANDLE_VALUE(isolate, hresult, hresult); | 11402 RETURN_IF_EMPTY_HANDLE_VALUE(isolate, hresult, hresult); |
| 11403 | 11403 |
| 11404 CHECK(array->length()->ToArrayIndex(&new_length)); | 11404 CHECK(array->length()->ToArrayIndex(&new_length)); |
| 11405 if (old_length == new_length) return hresult; | 11405 if (old_length == new_length) return hresult; |
| 11406 | 11406 |
| 11407 BeginPerformSplice(array); | 11407 BeginPerformSplice(array); |
| 11408 | 11408 |
| 11409 for (int i = 0; i < indices.length(); ++i) { | 11409 for (int i = 0; i < indices.length(); ++i) { |
| 11410 // For deletions where the property was an accessor, old_values[i] |
| 11411 // will be the hole, which instructs EnqueueChangeRecord to elide |
| 11412 // the "oldValue" property. |
| 11410 JSObject::EnqueueChangeRecord( | 11413 JSObject::EnqueueChangeRecord( |
| 11411 array, "delete", isolate->factory()->Uint32ToString(indices[i]), | 11414 array, "delete", isolate->factory()->Uint32ToString(indices[i]), |
| 11412 old_values[i]); | 11415 old_values[i]); |
| 11413 } | 11416 } |
| 11414 JSObject::EnqueueChangeRecord( | 11417 JSObject::EnqueueChangeRecord( |
| 11415 array, "update", isolate->factory()->length_string(), | 11418 array, "update", isolate->factory()->length_string(), |
| 11416 old_length_handle); | 11419 old_length_handle); |
| 11417 | 11420 |
| 11418 EndPerformSplice(array); | 11421 EndPerformSplice(array); |
| 11419 | 11422 |
| 11420 uint32_t index = Min(old_length, new_length); | 11423 uint32_t index = Min(old_length, new_length); |
| 11421 uint32_t add_count = new_length > old_length ? new_length - old_length : 0; | 11424 uint32_t add_count = new_length > old_length ? new_length - old_length : 0; |
| 11422 uint32_t delete_count = new_length < old_length ? old_length - new_length : 0; | 11425 uint32_t delete_count = new_length < old_length ? old_length - new_length : 0; |
| 11423 Handle<JSArray> deleted = isolate->factory()->NewJSArray(0); | 11426 Handle<JSArray> deleted = isolate->factory()->NewJSArray(0); |
| 11424 if (delete_count > 0) { | 11427 if (delete_count > 0) { |
| 11425 for (int i = indices.length() - 1; i >= 0; i--) { | 11428 for (int i = indices.length() - 1; i >= 0; i--) { |
| 11429 // Skip deletions where the property was an accessor, leaving holes |
| 11430 // in the array of old values. |
| 11431 if (old_values[i]->IsTheHole()) continue; |
| 11426 JSObject::SetElement(deleted, indices[i] - index, old_values[i], NONE, | 11432 JSObject::SetElement(deleted, indices[i] - index, old_values[i], NONE, |
| 11427 SLOPPY); | 11433 SLOPPY); |
| 11428 } | 11434 } |
| 11429 | 11435 |
| 11430 SetProperty(deleted, isolate->factory()->length_string(), | 11436 SetProperty(deleted, isolate->factory()->length_string(), |
| 11431 isolate->factory()->NewNumberFromUint(delete_count), | 11437 isolate->factory()->NewNumberFromUint(delete_count), |
| 11432 NONE, SLOPPY); | 11438 NONE, SLOPPY); |
| 11433 } | 11439 } |
| 11434 | 11440 |
| 11435 EnqueueSpliceRecord(array, index, deleted, add_count); | 11441 EnqueueSpliceRecord(array, index, deleted, add_count); |
| (...skipping 4983 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 16419 #define ERROR_MESSAGES_TEXTS(C, T) T, | 16425 #define ERROR_MESSAGES_TEXTS(C, T) T, |
| 16420 static const char* error_messages_[] = { | 16426 static const char* error_messages_[] = { |
| 16421 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) | 16427 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) |
| 16422 }; | 16428 }; |
| 16423 #undef ERROR_MESSAGES_TEXTS | 16429 #undef ERROR_MESSAGES_TEXTS |
| 16424 return error_messages_[reason]; | 16430 return error_messages_[reason]; |
| 16425 } | 16431 } |
| 16426 | 16432 |
| 16427 | 16433 |
| 16428 } } // namespace v8::internal | 16434 } } // namespace v8::internal |
| OLD | NEW |