OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 357 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
368 int packed_size, | 368 int packed_size, |
369 int raw_copy_size) { | 369 int raw_copy_size) { |
370 int copy_size = raw_copy_size; | 370 int copy_size = raw_copy_size; |
371 uint32_t to_end; | 371 uint32_t to_end; |
372 if (raw_copy_size < 0) { | 372 if (raw_copy_size < 0) { |
373 ASSERT(raw_copy_size == ElementsAccessor::kCopyToEnd || | 373 ASSERT(raw_copy_size == ElementsAccessor::kCopyToEnd || |
374 raw_copy_size == ElementsAccessor::kCopyToEndAndInitializeToHole); | 374 raw_copy_size == ElementsAccessor::kCopyToEndAndInitializeToHole); |
375 copy_size = from->length() - from_start; | 375 copy_size = from->length() - from_start; |
376 if (raw_copy_size == ElementsAccessor::kCopyToEndAndInitializeToHole) { | 376 if (raw_copy_size == ElementsAccessor::kCopyToEndAndInitializeToHole) { |
377 to_end = to->length(); | 377 to_end = to->length(); |
| 378 for (uint32_t i = to_start + copy_size; i < to_end; ++i) { |
| 379 to->set_the_hole(i); |
| 380 } |
378 } else { | 381 } else { |
379 to_end = to_start + static_cast<uint32_t>(copy_size); | 382 to_end = to_start + static_cast<uint32_t>(copy_size); |
380 } | 383 } |
381 } else { | 384 } else { |
382 to_end = to_start + static_cast<uint32_t>(copy_size); | 385 to_end = to_start + static_cast<uint32_t>(copy_size); |
383 } | 386 } |
384 ASSERT(static_cast<int>(to_end) <= to->length()); | 387 ASSERT(static_cast<int>(to_end) <= to->length()); |
385 ASSERT(packed_size >= 0 && packed_size <= copy_size); | 388 ASSERT(packed_size >= 0 && packed_size <= copy_size); |
386 ASSERT((copy_size + static_cast<int>(to_start)) <= to->length() && | 389 ASSERT((copy_size + static_cast<int>(to_start)) <= to->length() && |
387 (copy_size + static_cast<int>(from_start)) <= from->length()); | 390 (copy_size + static_cast<int>(from_start)) <= from->length()); |
388 if (copy_size == 0) return; | 391 if (copy_size == 0) return; |
389 for (uint32_t from_end = from_start + static_cast<uint32_t>(packed_size); | 392 for (uint32_t from_end = from_start + static_cast<uint32_t>(packed_size); |
390 from_start < from_end; from_start++, to_start++) { | 393 from_start < from_end; from_start++, to_start++) { |
391 Object* smi = from->get(from_start); | 394 Object* smi = from->get(from_start); |
392 ASSERT(!smi->IsTheHole()); | 395 ASSERT(!smi->IsTheHole()); |
393 to->set(to_start, Smi::cast(smi)->value()); | 396 to->set(to_start, Smi::cast(smi)->value()); |
394 } | 397 } |
395 | |
396 while (to_start < to_end) { | |
397 to->set_the_hole(to_start++); | |
398 } | |
399 } | 398 } |
400 | 399 |
401 | 400 |
402 static void CopyObjectToDoubleElements(FixedArray* from, | 401 static void CopyObjectToDoubleElements(FixedArray* from, |
403 uint32_t from_start, | 402 uint32_t from_start, |
404 FixedDoubleArray* to, | 403 FixedDoubleArray* to, |
405 uint32_t to_start, | 404 uint32_t to_start, |
406 int raw_copy_size) { | 405 int raw_copy_size) { |
407 int copy_size = raw_copy_size; | 406 int copy_size = raw_copy_size; |
408 if (raw_copy_size < 0) { | 407 if (raw_copy_size < 0) { |
(...skipping 1447 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1856 if (!maybe_obj->To(&new_backing_store)) return maybe_obj; | 1855 if (!maybe_obj->To(&new_backing_store)) return maybe_obj; |
1857 new_backing_store->set(0, length); | 1856 new_backing_store->set(0, length); |
1858 { MaybeObject* result = array->SetContent(new_backing_store); | 1857 { MaybeObject* result = array->SetContent(new_backing_store); |
1859 if (result->IsFailure()) return result; | 1858 if (result->IsFailure()) return result; |
1860 } | 1859 } |
1861 return array; | 1860 return array; |
1862 } | 1861 } |
1863 | 1862 |
1864 | 1863 |
1865 } } // namespace v8::internal | 1864 } } // namespace v8::internal |
OLD | NEW |