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

Side by Side Diff: src/elements.cc

Issue 1770793002: Move EnsureFastWritableElements into the elements accessor. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 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/elements.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/elements.h" 5 #include "src/elements.h"
6 6
7 #include "src/arguments.h" 7 #include "src/arguments.h"
8 #include "src/conversions.h" 8 #include "src/conversions.h"
9 #include "src/factory.h" 9 #include "src/factory.h"
10 #include "src/messages.h" 10 #include "src/messages.h"
(...skipping 485 matching lines...) Expand 10 before | Expand all | Expand 10 after
496 length = fixed_array_base->length(); 496 length = fixed_array_base->length();
497 } 497 }
498 ElementsAccessorSubclass::ValidateContents(holder, length); 498 ElementsAccessorSubclass::ValidateContents(holder, length);
499 } 499 }
500 500
501 void Validate(Handle<JSObject> holder) final { 501 void Validate(Handle<JSObject> holder) final {
502 DisallowHeapAllocation no_gc; 502 DisallowHeapAllocation no_gc;
503 ElementsAccessorSubclass::ValidateImpl(holder); 503 ElementsAccessorSubclass::ValidateImpl(holder);
504 } 504 }
505 505
506 bool IsPacked(Handle<JSObject> holder, Handle<FixedArrayBase> backing_store,
507 uint32_t start, uint32_t end) final {
508 return ElementsAccessorSubclass::IsPackedImpl(holder, backing_store, start,
509 end);
510 }
511
512 static bool IsPackedImpl(Handle<JSObject> holder, 506 static bool IsPackedImpl(Handle<JSObject> holder,
513 Handle<FixedArrayBase> backing_store, uint32_t start, 507 Handle<FixedArrayBase> backing_store, uint32_t start,
514 uint32_t end) { 508 uint32_t end) {
515 if (IsFastPackedElementsKind(kind())) return true; 509 if (IsFastPackedElementsKind(kind())) return true;
516 for (uint32_t i = start; i < end; i++) { 510 for (uint32_t i = start; i < end; i++) {
517 if (!ElementsAccessorSubclass::HasElementImpl(holder, i, backing_store, 511 if (!ElementsAccessorSubclass::HasElementImpl(holder, i, backing_store,
518 ALL_PROPERTIES)) { 512 ALL_PROPERTIES)) {
519 return false; 513 return false;
520 } 514 }
521 } 515 }
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
591 ElementsAccessorSubclass::AddImpl(object, index, value, attributes, 585 ElementsAccessorSubclass::AddImpl(object, index, value, attributes,
592 new_capacity); 586 new_capacity);
593 } 587 }
594 588
595 static void AddImpl(Handle<JSObject> object, uint32_t index, 589 static void AddImpl(Handle<JSObject> object, uint32_t index,
596 Handle<Object> value, PropertyAttributes attributes, 590 Handle<Object> value, PropertyAttributes attributes,
597 uint32_t new_capacity) { 591 uint32_t new_capacity) {
598 UNREACHABLE(); 592 UNREACHABLE();
599 } 593 }
600 594
601 uint32_t Push(Handle<JSArray> receiver, Handle<FixedArrayBase> backing_store, 595 uint32_t Push(Handle<JSArray> receiver, Arguments* args,
602 Arguments* args, uint32_t push_size) final { 596 uint32_t push_size) final {
603 return ElementsAccessorSubclass::PushImpl(receiver, backing_store, args, 597 return ElementsAccessorSubclass::PushImpl(receiver, args, push_size);
604 push_size);
605 } 598 }
606 599
607 static uint32_t PushImpl(Handle<JSArray> receiver, 600 static uint32_t PushImpl(Handle<JSArray> receiver, Arguments* args,
608 Handle<FixedArrayBase> elms_obj, Arguments* args,
609 uint32_t push_sized) { 601 uint32_t push_sized) {
610 UNREACHABLE(); 602 UNREACHABLE();
611 return 0; 603 return 0;
612 } 604 }
613 605
614 uint32_t Unshift(Handle<JSArray> receiver, 606 uint32_t Unshift(Handle<JSArray> receiver, Arguments* args,
615 Handle<FixedArrayBase> backing_store, Arguments* args,
616 uint32_t unshift_size) final { 607 uint32_t unshift_size) final {
617 return ElementsAccessorSubclass::UnshiftImpl(receiver, backing_store, args, 608 return ElementsAccessorSubclass::UnshiftImpl(receiver, args, unshift_size);
618 unshift_size);
619 } 609 }
620 610
621 static uint32_t UnshiftImpl(Handle<JSArray> receiver, 611 static uint32_t UnshiftImpl(Handle<JSArray> receiver, Arguments* args,
622 Handle<FixedArrayBase> elms_obj, Arguments* args,
623 uint32_t unshift_size) { 612 uint32_t unshift_size) {
624 UNREACHABLE(); 613 UNREACHABLE();
625 return 0; 614 return 0;
626 } 615 }
627 616
628 Handle<JSArray> Slice(Handle<JSObject> receiver, 617 Handle<JSArray> Slice(Handle<JSObject> receiver, uint32_t start,
629 Handle<FixedArrayBase> backing_store, uint32_t start,
630 uint32_t end) final { 618 uint32_t end) final {
631 return ElementsAccessorSubclass::SliceImpl(receiver, backing_store, start, 619 return ElementsAccessorSubclass::SliceImpl(receiver, start, end);
632 end);
633 } 620 }
634 621
635 static Handle<JSArray> SliceImpl(Handle<JSObject> receiver, 622 static Handle<JSArray> SliceImpl(Handle<JSObject> receiver,
636 Handle<FixedArrayBase> backing_store,
637 uint32_t start, uint32_t end) { 623 uint32_t start, uint32_t end) {
638 UNREACHABLE(); 624 UNREACHABLE();
639 return Handle<JSArray>(); 625 return Handle<JSArray>();
640 } 626 }
641 627
642 Handle<JSArray> Splice(Handle<JSArray> receiver, 628 Handle<JSArray> Splice(Handle<JSArray> receiver, uint32_t start,
643 Handle<FixedArrayBase> backing_store, uint32_t start,
644 uint32_t delete_count, Arguments* args, 629 uint32_t delete_count, Arguments* args,
645 uint32_t add_count) final { 630 uint32_t add_count) final {
646 return ElementsAccessorSubclass::SpliceImpl(receiver, backing_store, start, 631 return ElementsAccessorSubclass::SpliceImpl(receiver, start, delete_count,
647 delete_count, args, add_count); 632 args, add_count);
648 } 633 }
649 634
650 static Handle<JSArray> SpliceImpl(Handle<JSArray> receiver, 635 static Handle<JSArray> SpliceImpl(Handle<JSArray> receiver,
651 Handle<FixedArrayBase> backing_store,
652 uint32_t start, uint32_t delete_count, 636 uint32_t start, uint32_t delete_count,
653 Arguments* args, uint32_t add_count) { 637 Arguments* args, uint32_t add_count) {
654 UNREACHABLE(); 638 UNREACHABLE();
655 return Handle<JSArray>(); 639 return Handle<JSArray>();
656 } 640 }
657 641
658 Handle<Object> Pop(Handle<JSArray> receiver, 642 Handle<Object> Pop(Handle<JSArray> receiver) final {
659 Handle<FixedArrayBase> backing_store) final { 643 return ElementsAccessorSubclass::PopImpl(receiver);
660 return ElementsAccessorSubclass::PopImpl(receiver, backing_store);
661 } 644 }
662 645
663 static Handle<Object> PopImpl(Handle<JSArray> receiver, 646 static Handle<Object> PopImpl(Handle<JSArray> receiver) {
664 Handle<FixedArrayBase> backing_store) {
665 UNREACHABLE(); 647 UNREACHABLE();
666 return Handle<Object>(); 648 return Handle<Object>();
667 } 649 }
668 650
669 Handle<Object> Shift(Handle<JSArray> receiver, 651 Handle<Object> Shift(Handle<JSArray> receiver) final {
670 Handle<FixedArrayBase> backing_store) final { 652 return ElementsAccessorSubclass::ShiftImpl(receiver);
671 return ElementsAccessorSubclass::ShiftImpl(receiver, backing_store);
672 } 653 }
673 654
674 static Handle<Object> ShiftImpl(Handle<JSArray> receiver, 655 static Handle<Object> ShiftImpl(Handle<JSArray> receiver) {
675 Handle<FixedArrayBase> backing_store) {
676 UNREACHABLE(); 656 UNREACHABLE();
677 return Handle<Object>(); 657 return Handle<Object>();
678 } 658 }
679 659
680 void SetLength(Handle<JSArray> array, uint32_t length) final { 660 void SetLength(Handle<JSArray> array, uint32_t length) final {
681 ElementsAccessorSubclass::SetLengthImpl(array->GetIsolate(), array, length, 661 ElementsAccessorSubclass::SetLengthImpl(array->GetIsolate(), array, length,
682 handle(array->elements())); 662 handle(array->elements()));
683 } 663 }
684 664
685 static void SetLengthImpl(Isolate* isolate, Handle<JSArray> array, 665 static void SetLengthImpl(Isolate* isolate, Handle<JSArray> array,
(...skipping 11 matching lines...) Expand all
697 JSObject::TransitionElementsKind(array, kind); 677 JSObject::TransitionElementsKind(array, kind);
698 } 678 }
699 } 679 }
700 680
701 // Check whether the backing store should be shrunk. 681 // Check whether the backing store should be shrunk.
702 uint32_t capacity = backing_store->length(); 682 uint32_t capacity = backing_store->length();
703 old_length = Min(old_length, capacity); 683 old_length = Min(old_length, capacity);
704 if (length == 0) { 684 if (length == 0) {
705 array->initialize_elements(); 685 array->initialize_elements();
706 } else if (length <= capacity) { 686 } else if (length <= capacity) {
707 if (array->HasFastSmiOrObjectElements()) { 687 if (IsFastSmiOrObjectElementsKind(kind())) {
708 JSObject::EnsureWritableFastElements(array); 688 JSObject::EnsureWritableFastElements(array);
709 if (array->elements() != *backing_store) { 689 if (array->elements() != *backing_store) {
710 backing_store = handle(array->elements(), isolate); 690 backing_store = handle(array->elements(), isolate);
711 } 691 }
712 } 692 }
713 if (2 * length <= capacity) { 693 if (2 * length <= capacity) {
714 // If more than half the elements won't be used, trim the array. 694 // If more than half the elements won't be used, trim the array.
715 isolate->heap()->RightTrimFixedArray<Heap::CONCURRENT_TO_SWEEPER>( 695 isolate->heap()->RightTrimFixedArray<Heap::CONCURRENT_TO_SWEEPER>(
716 *backing_store, capacity - length); 696 *backing_store, capacity - length);
717 } else { 697 } else {
(...skipping 633 matching lines...) Expand 10 before | Expand all | Expand 10 after
1351 if (IsFastSmiElementsKind(KindTraits::Kind)) { 1331 if (IsFastSmiElementsKind(KindTraits::Kind)) {
1352 for (int i = 0; i < length; i++) { 1332 for (int i = 0; i < length; i++) {
1353 DCHECK(BackingStore::get(*backing_store, i, isolate)->IsSmi() || 1333 DCHECK(BackingStore::get(*backing_store, i, isolate)->IsSmi() ||
1354 (IsFastHoleyElementsKind(KindTraits::Kind) && 1334 (IsFastHoleyElementsKind(KindTraits::Kind) &&
1355 backing_store->is_the_hole(i))); 1335 backing_store->is_the_hole(i)));
1356 } 1336 }
1357 } 1337 }
1358 #endif 1338 #endif
1359 } 1339 }
1360 1340
1361 static Handle<Object> PopImpl(Handle<JSArray> receiver, 1341 static Handle<Object> PopImpl(Handle<JSArray> receiver) {
1362 Handle<FixedArrayBase> backing_store) { 1342 return FastElementsAccessorSubclass::RemoveElement(receiver, AT_END);
1363 return FastElementsAccessorSubclass::RemoveElement(receiver, backing_store,
1364 AT_END);
1365 } 1343 }
1366 1344
1367 static Handle<Object> ShiftImpl(Handle<JSArray> receiver, 1345 static Handle<Object> ShiftImpl(Handle<JSArray> receiver) {
1368 Handle<FixedArrayBase> backing_store) { 1346 return FastElementsAccessorSubclass::RemoveElement(receiver, AT_START);
1369 return FastElementsAccessorSubclass::RemoveElement(receiver, backing_store,
1370 AT_START);
1371 } 1347 }
1372 1348
1373 static uint32_t PushImpl(Handle<JSArray> receiver, 1349 static uint32_t PushImpl(Handle<JSArray> receiver,
1374 Handle<FixedArrayBase> backing_store,
1375 Arguments* args, uint32_t push_size) { 1350 Arguments* args, uint32_t push_size) {
1351 Handle<FixedArrayBase> backing_store(receiver->elements());
1376 return FastElementsAccessorSubclass::AddArguments(receiver, backing_store, 1352 return FastElementsAccessorSubclass::AddArguments(receiver, backing_store,
1377 args, push_size, AT_END); 1353 args, push_size, AT_END);
1378 } 1354 }
1379 1355
1380 static uint32_t UnshiftImpl(Handle<JSArray> receiver, 1356 static uint32_t UnshiftImpl(Handle<JSArray> receiver,
1381 Handle<FixedArrayBase> backing_store,
1382 Arguments* args, uint32_t unshift_size) { 1357 Arguments* args, uint32_t unshift_size) {
1358 Handle<FixedArrayBase> backing_store(receiver->elements());
1383 return FastElementsAccessorSubclass::AddArguments( 1359 return FastElementsAccessorSubclass::AddArguments(
1384 receiver, backing_store, args, unshift_size, AT_START); 1360 receiver, backing_store, args, unshift_size, AT_START);
1385 } 1361 }
1386 1362
1387 static void MoveElements(Isolate* isolate, Handle<JSArray> receiver, 1363 static void MoveElements(Isolate* isolate, Handle<JSArray> receiver,
1388 Handle<FixedArrayBase> backing_store, int dst_index, 1364 Handle<FixedArrayBase> backing_store, int dst_index,
1389 int src_index, int len, int hole_start, 1365 int src_index, int len, int hole_start,
1390 int hole_end) { 1366 int hole_end) {
1391 UNREACHABLE(); 1367 UNREACHABLE();
1392 } 1368 }
1393 1369
1394 static Handle<JSArray> SliceImpl(Handle<JSObject> receiver, 1370 static Handle<JSArray> SliceImpl(Handle<JSObject> receiver,
1395 Handle<FixedArrayBase> backing_store,
1396 uint32_t start, uint32_t end) { 1371 uint32_t start, uint32_t end) {
1397 DCHECK(start < end);
1398 Isolate* isolate = receiver->GetIsolate(); 1372 Isolate* isolate = receiver->GetIsolate();
1399 int result_len = end - start; 1373 Handle<FixedArrayBase> backing_store(receiver->elements(), isolate);
1374 int result_len = end < start ? 0u : end - start;
1400 Handle<JSArray> result_array = isolate->factory()->NewJSArray( 1375 Handle<JSArray> result_array = isolate->factory()->NewJSArray(
1401 KindTraits::Kind, result_len, result_len); 1376 KindTraits::Kind, result_len, result_len);
1402 DisallowHeapAllocation no_gc; 1377 DisallowHeapAllocation no_gc;
1403 FastElementsAccessorSubclass::CopyElementsImpl( 1378 FastElementsAccessorSubclass::CopyElementsImpl(
1404 *backing_store, start, result_array->elements(), KindTraits::Kind, 0, 1379 *backing_store, start, result_array->elements(), KindTraits::Kind, 0,
1405 kPackedSizeNotKnown, result_len); 1380 kPackedSizeNotKnown, result_len);
1406 FastElementsAccessorSubclass::TryTransitionResultArrayToPacked( 1381 FastElementsAccessorSubclass::TryTransitionResultArrayToPacked(
1407 result_array); 1382 result_array);
1408 return result_array; 1383 return result_array;
1409 } 1384 }
1410 1385
1411 static Handle<JSArray> SpliceImpl(Handle<JSArray> receiver, 1386 static Handle<JSArray> SpliceImpl(Handle<JSArray> receiver,
1412 Handle<FixedArrayBase> backing_store,
1413 uint32_t start, uint32_t delete_count, 1387 uint32_t start, uint32_t delete_count,
1414 Arguments* args, uint32_t add_count) { 1388 Arguments* args, uint32_t add_count) {
1415 Isolate* isolate = receiver->GetIsolate(); 1389 Isolate* isolate = receiver->GetIsolate();
1416 Heap* heap = isolate->heap(); 1390 Heap* heap = isolate->heap();
1417 uint32_t length = Smi::cast(receiver->length())->value(); 1391 uint32_t length = Smi::cast(receiver->length())->value();
1418 uint32_t new_length = length - delete_count + add_count; 1392 uint32_t new_length = length - delete_count + add_count;
1419 1393
1394 ElementsKind kind = KindTraits::Kind;
1395 if (new_length <= static_cast<uint32_t>(receiver->elements()->length()) &&
1396 IsFastSmiOrObjectElementsKind(kind)) {
1397 HandleScope scope(isolate);
1398 JSObject::EnsureWritableFastElements(receiver);
1399 }
1400
1401 Handle<FixedArrayBase> backing_store(receiver->elements(), isolate);
1402
1420 if (new_length == 0) { 1403 if (new_length == 0) {
1421 receiver->set_elements(heap->empty_fixed_array()); 1404 receiver->set_elements(heap->empty_fixed_array());
1422 receiver->set_length(Smi::FromInt(0)); 1405 receiver->set_length(Smi::FromInt(0));
1423 return isolate->factory()->NewJSArrayWithElements( 1406 return isolate->factory()->NewJSArrayWithElements(
1424 backing_store, KindTraits::Kind, delete_count); 1407 backing_store, KindTraits::Kind, delete_count);
1425 } 1408 }
1426 1409
1427 // Construct the result array which holds the deleted elements. 1410 // Construct the result array which holds the deleted elements.
1428 Handle<JSArray> deleted_elements = isolate->factory()->NewJSArray( 1411 Handle<JSArray> deleted_elements = isolate->factory()->NewJSArray(
1429 KindTraits::Kind, delete_count, delete_count); 1412 KindTraits::Kind, delete_count, delete_count);
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
1494 // Copy the trailing elements after start + delete_count 1477 // Copy the trailing elements after start + delete_count
1495 FastElementsAccessorSubclass::CopyElementsImpl( 1478 FastElementsAccessorSubclass::CopyElementsImpl(
1496 *backing_store, start + delete_count, *new_elms, KindTraits::Kind, 1479 *backing_store, start + delete_count, *new_elms, KindTraits::Kind,
1497 start + add_count, kPackedSizeNotKnown, 1480 start + add_count, kPackedSizeNotKnown,
1498 ElementsAccessor::kCopyToEndAndInitializeToHole); 1481 ElementsAccessor::kCopyToEndAndInitializeToHole);
1499 receiver->set_elements(*new_elms); 1482 receiver->set_elements(*new_elms);
1500 return new_elms; 1483 return new_elms;
1501 } 1484 }
1502 1485
1503 static Handle<Object> RemoveElement(Handle<JSArray> receiver, 1486 static Handle<Object> RemoveElement(Handle<JSArray> receiver,
1504 Handle<FixedArrayBase> backing_store,
1505 Where remove_position) { 1487 Where remove_position) {
1506 Isolate* isolate = receiver->GetIsolate(); 1488 Isolate* isolate = receiver->GetIsolate();
1489 ElementsKind kind = KindTraits::Kind;
1490 if (IsFastSmiOrObjectElementsKind(kind)) {
1491 HandleScope scope(isolate);
1492 JSObject::EnsureWritableFastElements(receiver);
1493 }
1494 Handle<FixedArrayBase> backing_store(receiver->elements(), isolate);
1507 uint32_t length = 1495 uint32_t length =
1508 static_cast<uint32_t>(Smi::cast(receiver->length())->value()); 1496 static_cast<uint32_t>(Smi::cast(receiver->length())->value());
1509 DCHECK(length > 0); 1497 DCHECK(length > 0);
1510 int new_length = length - 1; 1498 int new_length = length - 1;
1511 int remove_index = remove_position == AT_START ? 0 : new_length; 1499 int remove_index = remove_position == AT_START ? 0 : new_length;
1512 Handle<Object> result = 1500 Handle<Object> result =
1513 FastElementsAccessorSubclass::GetImpl(*backing_store, remove_index); 1501 FastElementsAccessorSubclass::GetImpl(*backing_store, remove_index);
1514 if (remove_position == AT_START) { 1502 if (remove_position == AT_START) {
1515 FastElementsAccessorSubclass::MoveElements( 1503 FastElementsAccessorSubclass::MoveElements(
1516 isolate, receiver, backing_store, 0, 1, new_length, 0, 0); 1504 isolate, receiver, backing_store, 0, 1, new_length, 0, 0);
1517 } 1505 }
1518 FastElementsAccessorSubclass::SetLengthImpl(isolate, receiver, new_length, 1506 FastElementsAccessorSubclass::SetLengthImpl(isolate, receiver, new_length,
1519 backing_store); 1507 backing_store);
1520 1508
1521 if (IsHoleyElementsKind(KindTraits::Kind) && result->IsTheHole()) { 1509 if (IsHoleyElementsKind(kind) && result->IsTheHole()) {
1522 return receiver->GetIsolate()->factory()->undefined_value(); 1510 return isolate->factory()->undefined_value();
1523 } 1511 }
1524 return result; 1512 return result;
1525 } 1513 }
1526 1514
1527 static uint32_t AddArguments(Handle<JSArray> receiver, 1515 static uint32_t AddArguments(Handle<JSArray> receiver,
1528 Handle<FixedArrayBase> backing_store, 1516 Handle<FixedArrayBase> backing_store,
1529 Arguments* args, uint32_t add_size, 1517 Arguments* args, uint32_t add_size,
1530 Where remove_position) { 1518 Where remove_position) {
1531 uint32_t length = Smi::cast(receiver->length())->value(); 1519 uint32_t length = Smi::cast(receiver->length())->value();
1532 DCHECK(add_size > 0); 1520 DCHECK(0 < add_size);
1533 uint32_t elms_len = backing_store->length(); 1521 uint32_t elms_len = backing_store->length();
1534 // Check we do not overflow the new_length. 1522 // Check we do not overflow the new_length.
1535 DCHECK(add_size <= static_cast<uint32_t>(Smi::kMaxValue - length)); 1523 DCHECK(add_size <= static_cast<uint32_t>(Smi::kMaxValue - length));
1536 uint32_t new_length = length + add_size; 1524 uint32_t new_length = length + add_size;
1537 1525
1538 if (new_length > elms_len) { 1526 if (new_length > elms_len) {
1539 // New backing storage is needed. 1527 // New backing storage is needed.
1540 uint32_t capacity = JSObject::NewElementsCapacity(new_length); 1528 uint32_t capacity = JSObject::NewElementsCapacity(new_length);
1541 // If we add arguments to the start we have to shift the existing objects. 1529 // If we add arguments to the start we have to shift the existing objects.
1542 int copy_dst_index = remove_position == AT_START ? add_size : 0; 1530 int copy_dst_index = remove_position == AT_START ? add_size : 0;
(...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after
1931 static uint32_t GetCapacityImpl(JSObject* holder, 1919 static uint32_t GetCapacityImpl(JSObject* holder,
1932 FixedArrayBase* backing_store) { 1920 FixedArrayBase* backing_store) {
1933 JSArrayBufferView* view = JSArrayBufferView::cast(holder); 1921 JSArrayBufferView* view = JSArrayBufferView::cast(holder);
1934 if (view->WasNeutered()) return 0; 1922 if (view->WasNeutered()) return 0;
1935 return backing_store->length(); 1923 return backing_store->length();
1936 } 1924 }
1937 1925
1938 static void AddElementsToKeyAccumulatorImpl(Handle<JSObject> receiver, 1926 static void AddElementsToKeyAccumulatorImpl(Handle<JSObject> receiver,
1939 KeyAccumulator* accumulator, 1927 KeyAccumulator* accumulator,
1940 AddKeyConversion convert) { 1928 AddKeyConversion convert) {
1941 Handle<FixedArrayBase> elements(receiver->elements(), 1929 Handle<FixedArrayBase> elements(receiver->elements());
1942 receiver->GetIsolate());
1943 uint32_t length = AccessorClass::GetCapacityImpl(*receiver, *elements); 1930 uint32_t length = AccessorClass::GetCapacityImpl(*receiver, *elements);
1944 for (uint32_t i = 0; i < length; i++) { 1931 for (uint32_t i = 0; i < length; i++) {
1945 Handle<Object> value = AccessorClass::GetImpl(*elements, i); 1932 Handle<Object> value = AccessorClass::GetImpl(*elements, i);
1946 accumulator->AddKey(value, convert); 1933 accumulator->AddKey(value, convert);
1947 } 1934 }
1948 } 1935 }
1949 }; 1936 };
1950 1937
1951 1938
1952 1939
(...skipping 727 matching lines...) Expand 10 before | Expand all | Expand 10 after
2680 } 2667 }
2681 } 2668 }
2682 2669
2683 DCHECK(j == result_len); 2670 DCHECK(j == result_len);
2684 return result_array; 2671 return result_array;
2685 } 2672 }
2686 2673
2687 ElementsAccessor** ElementsAccessor::elements_accessors_ = NULL; 2674 ElementsAccessor** ElementsAccessor::elements_accessors_ = NULL;
2688 } // namespace internal 2675 } // namespace internal
2689 } // namespace v8 2676 } // namespace v8
OLDNEW
« no previous file with comments | « src/elements.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698