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

Side by Side Diff: src/elements.cc

Issue 797943002: Consistently use only one of virtual/OVERRIDE/FINAL. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Removed temporary hack. Created 6 years 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/d8.cc ('k') | src/heap/mark-compact.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 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/v8.h" 5 #include "src/v8.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/elements.h" 9 #include "src/elements.h"
10 #include "src/objects.h" 10 #include "src/objects.h"
(...skipping 542 matching lines...) Expand 10 before | Expand all | Expand 10 after
553 template <typename ElementsAccessorSubclass, 553 template <typename ElementsAccessorSubclass,
554 typename ElementsTraitsParam> 554 typename ElementsTraitsParam>
555 class ElementsAccessorBase : public ElementsAccessor { 555 class ElementsAccessorBase : public ElementsAccessor {
556 protected: 556 protected:
557 explicit ElementsAccessorBase(const char* name) 557 explicit ElementsAccessorBase(const char* name)
558 : ElementsAccessor(name) { } 558 : ElementsAccessor(name) { }
559 559
560 typedef ElementsTraitsParam ElementsTraits; 560 typedef ElementsTraitsParam ElementsTraits;
561 typedef typename ElementsTraitsParam::BackingStore BackingStore; 561 typedef typename ElementsTraitsParam::BackingStore BackingStore;
562 562
563 virtual ElementsKind kind() const FINAL OVERRIDE { 563 ElementsKind kind() const FINAL { return ElementsTraits::Kind; }
564 return ElementsTraits::Kind;
565 }
566 564
567 static void ValidateContents(Handle<JSObject> holder, int length) { 565 static void ValidateContents(Handle<JSObject> holder, int length) {
568 } 566 }
569 567
570 static void ValidateImpl(Handle<JSObject> holder) { 568 static void ValidateImpl(Handle<JSObject> holder) {
571 Handle<FixedArrayBase> fixed_array_base(holder->elements()); 569 Handle<FixedArrayBase> fixed_array_base(holder->elements());
572 if (!fixed_array_base->IsHeapObject()) return; 570 if (!fixed_array_base->IsHeapObject()) return;
573 // Arrays that have been shifted in place can't be verified. 571 // Arrays that have been shifted in place can't be verified.
574 if (fixed_array_base->IsFiller()) return; 572 if (fixed_array_base->IsFiller()) return;
575 int length = 0; 573 int length = 0;
576 if (holder->IsJSArray()) { 574 if (holder->IsJSArray()) {
577 Object* length_obj = Handle<JSArray>::cast(holder)->length(); 575 Object* length_obj = Handle<JSArray>::cast(holder)->length();
578 if (length_obj->IsSmi()) { 576 if (length_obj->IsSmi()) {
579 length = Smi::cast(length_obj)->value(); 577 length = Smi::cast(length_obj)->value();
580 } 578 }
581 } else { 579 } else {
582 length = fixed_array_base->length(); 580 length = fixed_array_base->length();
583 } 581 }
584 ElementsAccessorSubclass::ValidateContents(holder, length); 582 ElementsAccessorSubclass::ValidateContents(holder, length);
585 } 583 }
586 584
587 virtual void Validate(Handle<JSObject> holder) FINAL OVERRIDE { 585 void Validate(Handle<JSObject> holder) FINAL {
588 DisallowHeapAllocation no_gc; 586 DisallowHeapAllocation no_gc;
589 ElementsAccessorSubclass::ValidateImpl(holder); 587 ElementsAccessorSubclass::ValidateImpl(holder);
590 } 588 }
591 589
592 static bool HasElementImpl(Handle<Object> receiver, 590 static bool HasElementImpl(Handle<Object> receiver,
593 Handle<JSObject> holder, 591 Handle<JSObject> holder,
594 uint32_t key, 592 uint32_t key,
595 Handle<FixedArrayBase> backing_store) { 593 Handle<FixedArrayBase> backing_store) {
596 return ElementsAccessorSubclass::GetAttributesImpl( 594 return ElementsAccessorSubclass::GetAttributesImpl(
597 receiver, holder, key, backing_store) != ABSENT; 595 receiver, holder, key, backing_store) != ABSENT;
598 } 596 }
599 597
600 virtual bool HasElement( 598 virtual bool HasElement(Handle<Object> receiver, Handle<JSObject> holder,
601 Handle<Object> receiver, 599 uint32_t key,
602 Handle<JSObject> holder, 600 Handle<FixedArrayBase> backing_store) FINAL {
603 uint32_t key,
604 Handle<FixedArrayBase> backing_store) FINAL OVERRIDE {
605 return ElementsAccessorSubclass::HasElementImpl( 601 return ElementsAccessorSubclass::HasElementImpl(
606 receiver, holder, key, backing_store); 602 receiver, holder, key, backing_store);
607 } 603 }
608 604
609 MUST_USE_RESULT virtual MaybeHandle<Object> Get( 605 MUST_USE_RESULT virtual MaybeHandle<Object> Get(
610 Handle<Object> receiver, 606 Handle<Object> receiver, Handle<JSObject> holder, uint32_t key,
611 Handle<JSObject> holder, 607 Handle<FixedArrayBase> backing_store) FINAL {
612 uint32_t key,
613 Handle<FixedArrayBase> backing_store) FINAL OVERRIDE {
614 if (!IsExternalArrayElementsKind(ElementsTraits::Kind) && 608 if (!IsExternalArrayElementsKind(ElementsTraits::Kind) &&
615 FLAG_trace_js_array_abuse) { 609 FLAG_trace_js_array_abuse) {
616 CheckArrayAbuse(holder, "elements read", key); 610 CheckArrayAbuse(holder, "elements read", key);
617 } 611 }
618 612
619 if (IsExternalArrayElementsKind(ElementsTraits::Kind) && 613 if (IsExternalArrayElementsKind(ElementsTraits::Kind) &&
620 FLAG_trace_external_array_abuse) { 614 FLAG_trace_external_array_abuse) {
621 CheckArrayAbuse(holder, "external elements read", key); 615 CheckArrayAbuse(holder, "external elements read", key);
622 } 616 }
623 617
624 return ElementsAccessorSubclass::GetImpl( 618 return ElementsAccessorSubclass::GetImpl(
625 receiver, holder, key, backing_store); 619 receiver, holder, key, backing_store);
626 } 620 }
627 621
628 MUST_USE_RESULT static MaybeHandle<Object> GetImpl( 622 MUST_USE_RESULT static MaybeHandle<Object> GetImpl(
629 Handle<Object> receiver, 623 Handle<Object> receiver,
630 Handle<JSObject> obj, 624 Handle<JSObject> obj,
631 uint32_t key, 625 uint32_t key,
632 Handle<FixedArrayBase> backing_store) { 626 Handle<FixedArrayBase> backing_store) {
633 if (key < ElementsAccessorSubclass::GetCapacityImpl(backing_store)) { 627 if (key < ElementsAccessorSubclass::GetCapacityImpl(backing_store)) {
634 return BackingStore::get(Handle<BackingStore>::cast(backing_store), key); 628 return BackingStore::get(Handle<BackingStore>::cast(backing_store), key);
635 } else { 629 } else {
636 return backing_store->GetIsolate()->factory()->the_hole_value(); 630 return backing_store->GetIsolate()->factory()->the_hole_value();
637 } 631 }
638 } 632 }
639 633
640 MUST_USE_RESULT virtual PropertyAttributes GetAttributes( 634 MUST_USE_RESULT virtual PropertyAttributes GetAttributes(
641 Handle<Object> receiver, 635 Handle<Object> receiver, Handle<JSObject> holder, uint32_t key,
642 Handle<JSObject> holder, 636 Handle<FixedArrayBase> backing_store) FINAL {
643 uint32_t key,
644 Handle<FixedArrayBase> backing_store) FINAL OVERRIDE {
645 return ElementsAccessorSubclass::GetAttributesImpl( 637 return ElementsAccessorSubclass::GetAttributesImpl(
646 receiver, holder, key, backing_store); 638 receiver, holder, key, backing_store);
647 } 639 }
648 640
649 MUST_USE_RESULT static PropertyAttributes GetAttributesImpl( 641 MUST_USE_RESULT static PropertyAttributes GetAttributesImpl(
650 Handle<Object> receiver, 642 Handle<Object> receiver,
651 Handle<JSObject> obj, 643 Handle<JSObject> obj,
652 uint32_t key, 644 uint32_t key,
653 Handle<FixedArrayBase> backing_store) { 645 Handle<FixedArrayBase> backing_store) {
654 if (key >= ElementsAccessorSubclass::GetCapacityImpl(backing_store)) { 646 if (key >= ElementsAccessorSubclass::GetCapacityImpl(backing_store)) {
655 return ABSENT; 647 return ABSENT;
656 } 648 }
657 return 649 return
658 Handle<BackingStore>::cast(backing_store)->is_the_hole(key) 650 Handle<BackingStore>::cast(backing_store)->is_the_hole(key)
659 ? ABSENT : NONE; 651 ? ABSENT : NONE;
660 } 652 }
661 653
662 MUST_USE_RESULT virtual MaybeHandle<AccessorPair> GetAccessorPair( 654 MUST_USE_RESULT virtual MaybeHandle<AccessorPair> GetAccessorPair(
663 Handle<Object> receiver, 655 Handle<Object> receiver, Handle<JSObject> holder, uint32_t key,
664 Handle<JSObject> holder, 656 Handle<FixedArrayBase> backing_store) FINAL {
665 uint32_t key,
666 Handle<FixedArrayBase> backing_store) FINAL OVERRIDE {
667 return ElementsAccessorSubclass::GetAccessorPairImpl( 657 return ElementsAccessorSubclass::GetAccessorPairImpl(
668 receiver, holder, key, backing_store); 658 receiver, holder, key, backing_store);
669 } 659 }
670 660
671 MUST_USE_RESULT static MaybeHandle<AccessorPair> GetAccessorPairImpl( 661 MUST_USE_RESULT static MaybeHandle<AccessorPair> GetAccessorPairImpl(
672 Handle<Object> receiver, 662 Handle<Object> receiver,
673 Handle<JSObject> obj, 663 Handle<JSObject> obj,
674 uint32_t key, 664 uint32_t key,
675 Handle<FixedArrayBase> backing_store) { 665 Handle<FixedArrayBase> backing_store) {
676 return MaybeHandle<AccessorPair>(); 666 return MaybeHandle<AccessorPair>();
677 } 667 }
678 668
679 MUST_USE_RESULT virtual MaybeHandle<Object> SetLength( 669 MUST_USE_RESULT virtual MaybeHandle<Object> SetLength(
680 Handle<JSArray> array, 670 Handle<JSArray> array, Handle<Object> length) FINAL {
681 Handle<Object> length) FINAL OVERRIDE {
682 return ElementsAccessorSubclass::SetLengthImpl( 671 return ElementsAccessorSubclass::SetLengthImpl(
683 array, length, handle(array->elements())); 672 array, length, handle(array->elements()));
684 } 673 }
685 674
686 MUST_USE_RESULT static MaybeHandle<Object> SetLengthImpl( 675 MUST_USE_RESULT static MaybeHandle<Object> SetLengthImpl(
687 Handle<JSObject> obj, 676 Handle<JSObject> obj,
688 Handle<Object> length, 677 Handle<Object> length,
689 Handle<FixedArrayBase> backing_store); 678 Handle<FixedArrayBase> backing_store);
690 679
691 virtual void SetCapacityAndLength( 680 virtual void SetCapacityAndLength(Handle<JSArray> array, int capacity,
692 Handle<JSArray> array, 681 int length) FINAL {
693 int capacity,
694 int length) FINAL OVERRIDE {
695 ElementsAccessorSubclass:: 682 ElementsAccessorSubclass::
696 SetFastElementsCapacityAndLength(array, capacity, length); 683 SetFastElementsCapacityAndLength(array, capacity, length);
697 } 684 }
698 685
699 static void SetFastElementsCapacityAndLength( 686 static void SetFastElementsCapacityAndLength(
700 Handle<JSObject> obj, 687 Handle<JSObject> obj,
701 int capacity, 688 int capacity,
702 int length) { 689 int length) {
703 UNIMPLEMENTED(); 690 UNIMPLEMENTED();
704 } 691 }
705 692
706 MUST_USE_RESULT virtual MaybeHandle<Object> Delete( 693 MUST_USE_RESULT virtual MaybeHandle<Object> Delete(
707 Handle<JSObject> obj, 694 Handle<JSObject> obj,
708 uint32_t key, 695 uint32_t key,
709 JSReceiver::DeleteMode mode) OVERRIDE = 0; 696 JSReceiver::DeleteMode mode) OVERRIDE = 0;
710 697
711 static void CopyElementsImpl(FixedArrayBase* from, uint32_t from_start, 698 static void CopyElementsImpl(FixedArrayBase* from, uint32_t from_start,
712 FixedArrayBase* to, ElementsKind from_kind, 699 FixedArrayBase* to, ElementsKind from_kind,
713 uint32_t to_start, int packed_size, 700 uint32_t to_start, int packed_size,
714 int copy_size) { 701 int copy_size) {
715 UNREACHABLE(); 702 UNREACHABLE();
716 } 703 }
717 704
718 virtual void CopyElements( 705 virtual void CopyElements(Handle<FixedArrayBase> from, uint32_t from_start,
719 Handle<FixedArrayBase> from, 706 ElementsKind from_kind, Handle<FixedArrayBase> to,
720 uint32_t from_start, 707 uint32_t to_start, int copy_size) FINAL {
721 ElementsKind from_kind,
722 Handle<FixedArrayBase> to,
723 uint32_t to_start,
724 int copy_size) FINAL OVERRIDE {
725 DCHECK(!from.is_null()); 708 DCHECK(!from.is_null());
726 // NOTE: the ElementsAccessorSubclass::CopyElementsImpl() methods 709 // NOTE: the ElementsAccessorSubclass::CopyElementsImpl() methods
727 // violate the handlified function signature convention: 710 // violate the handlified function signature convention:
728 // raw pointer parameters in the function that allocates. This is done 711 // raw pointer parameters in the function that allocates. This is done
729 // intentionally to avoid ArrayConcat() builtin performance degradation. 712 // intentionally to avoid ArrayConcat() builtin performance degradation.
730 // See the comment in another ElementsAccessorBase::CopyElements() for 713 // See the comment in another ElementsAccessorBase::CopyElements() for
731 // details. 714 // details.
732 ElementsAccessorSubclass::CopyElementsImpl(*from, from_start, *to, 715 ElementsAccessorSubclass::CopyElementsImpl(*from, from_start, *to,
733 from_kind, to_start, 716 from_kind, to_start,
734 kPackedSizeNotKnown, copy_size); 717 kPackedSizeNotKnown, copy_size);
735 } 718 }
736 719
737 virtual void CopyElements( 720 virtual void CopyElements(JSObject* from_holder, uint32_t from_start,
738 JSObject* from_holder, 721 ElementsKind from_kind, Handle<FixedArrayBase> to,
739 uint32_t from_start, 722 uint32_t to_start, int copy_size) FINAL {
740 ElementsKind from_kind,
741 Handle<FixedArrayBase> to,
742 uint32_t to_start,
743 int copy_size) FINAL OVERRIDE {
744 int packed_size = kPackedSizeNotKnown; 723 int packed_size = kPackedSizeNotKnown;
745 bool is_packed = IsFastPackedElementsKind(from_kind) && 724 bool is_packed = IsFastPackedElementsKind(from_kind) &&
746 from_holder->IsJSArray(); 725 from_holder->IsJSArray();
747 if (is_packed) { 726 if (is_packed) {
748 packed_size = 727 packed_size =
749 Smi::cast(JSArray::cast(from_holder)->length())->value(); 728 Smi::cast(JSArray::cast(from_holder)->length())->value();
750 if (copy_size >= 0 && packed_size > copy_size) { 729 if (copy_size >= 0 && packed_size > copy_size) {
751 packed_size = copy_size; 730 packed_size = copy_size;
752 } 731 }
753 } 732 }
754 FixedArrayBase* from = from_holder->elements(); 733 FixedArrayBase* from = from_holder->elements();
755 // NOTE: the ElementsAccessorSubclass::CopyElementsImpl() methods 734 // NOTE: the ElementsAccessorSubclass::CopyElementsImpl() methods
756 // violate the handlified function signature convention: 735 // violate the handlified function signature convention:
757 // raw pointer parameters in the function that allocates. This is done 736 // raw pointer parameters in the function that allocates. This is done
758 // intentionally to avoid ArrayConcat() builtin performance degradation. 737 // intentionally to avoid ArrayConcat() builtin performance degradation.
759 // 738 //
760 // Details: The idea is that allocations actually happen only in case of 739 // Details: The idea is that allocations actually happen only in case of
761 // copying from object with fast double elements to object with object 740 // copying from object with fast double elements to object with object
762 // elements. In all the other cases there are no allocations performed and 741 // elements. In all the other cases there are no allocations performed and
763 // handle creation causes noticeable performance degradation of the builtin. 742 // handle creation causes noticeable performance degradation of the builtin.
764 ElementsAccessorSubclass::CopyElementsImpl( 743 ElementsAccessorSubclass::CopyElementsImpl(
765 from, from_start, *to, from_kind, to_start, packed_size, copy_size); 744 from, from_start, *to, from_kind, to_start, packed_size, copy_size);
766 } 745 }
767 746
768 virtual MaybeHandle<FixedArray> AddElementsToFixedArray( 747 virtual MaybeHandle<FixedArray> AddElementsToFixedArray(
769 Handle<Object> receiver, Handle<JSObject> holder, Handle<FixedArray> to, 748 Handle<Object> receiver, Handle<JSObject> holder, Handle<FixedArray> to,
770 Handle<FixedArrayBase> from, 749 Handle<FixedArrayBase> from, FixedArray::KeyFilter filter) FINAL {
771 FixedArray::KeyFilter filter) FINAL OVERRIDE {
772 int len0 = to->length(); 750 int len0 = to->length();
773 #ifdef ENABLE_SLOW_DCHECKS 751 #ifdef ENABLE_SLOW_DCHECKS
774 if (FLAG_enable_slow_asserts) { 752 if (FLAG_enable_slow_asserts) {
775 for (int i = 0; i < len0; i++) { 753 for (int i = 0; i < len0; i++) {
776 DCHECK(!to->get(i)->IsTheHole()); 754 DCHECK(!to->get(i)->IsTheHole());
777 } 755 }
778 } 756 }
779 #endif 757 #endif
780 758
781 // Optimize if 'other' is empty. 759 // Optimize if 'other' is empty.
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
845 } 823 }
846 DCHECK(extra == index); 824 DCHECK(extra == index);
847 return result; 825 return result;
848 } 826 }
849 827
850 protected: 828 protected:
851 static uint32_t GetCapacityImpl(Handle<FixedArrayBase> backing_store) { 829 static uint32_t GetCapacityImpl(Handle<FixedArrayBase> backing_store) {
852 return backing_store->length(); 830 return backing_store->length();
853 } 831 }
854 832
855 virtual uint32_t GetCapacity(Handle<FixedArrayBase> backing_store) 833 uint32_t GetCapacity(Handle<FixedArrayBase> backing_store) FINAL {
856 FINAL OVERRIDE {
857 return ElementsAccessorSubclass::GetCapacityImpl(backing_store); 834 return ElementsAccessorSubclass::GetCapacityImpl(backing_store);
858 } 835 }
859 836
860 static uint32_t GetKeyForIndexImpl(Handle<FixedArrayBase> backing_store, 837 static uint32_t GetKeyForIndexImpl(Handle<FixedArrayBase> backing_store,
861 uint32_t index) { 838 uint32_t index) {
862 return index; 839 return index;
863 } 840 }
864 841
865 virtual uint32_t GetKeyForIndex(Handle<FixedArrayBase> backing_store, 842 virtual uint32_t GetKeyForIndex(Handle<FixedArrayBase> backing_store,
866 uint32_t index) FINAL OVERRIDE { 843 uint32_t index) FINAL {
867 return ElementsAccessorSubclass::GetKeyForIndexImpl(backing_store, index); 844 return ElementsAccessorSubclass::GetKeyForIndexImpl(backing_store, index);
868 } 845 }
869 846
870 private: 847 private:
871 DISALLOW_COPY_AND_ASSIGN(ElementsAccessorBase); 848 DISALLOW_COPY_AND_ASSIGN(ElementsAccessorBase);
872 }; 849 };
873 850
874 851
875 // Super class for all fast element arrays. 852 // Super class for all fast element arrays.
876 template<typename FastElementsAccessorSubclass, 853 template<typename FastElementsAccessorSubclass,
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
990 if (4 * num_used > backing_store->length()) break; 967 if (4 * num_used > backing_store->length()) break;
991 } 968 }
992 if (4 * num_used <= backing_store->length()) { 969 if (4 * num_used <= backing_store->length()) {
993 JSObject::NormalizeElements(obj); 970 JSObject::NormalizeElements(obj);
994 } 971 }
995 } 972 }
996 } 973 }
997 return isolate->factory()->true_value(); 974 return isolate->factory()->true_value();
998 } 975 }
999 976
1000 virtual MaybeHandle<Object> Delete( 977 virtual MaybeHandle<Object> Delete(Handle<JSObject> obj, uint32_t key,
1001 Handle<JSObject> obj, 978 JSReceiver::DeleteMode mode) FINAL {
1002 uint32_t key,
1003 JSReceiver::DeleteMode mode) FINAL OVERRIDE {
1004 return DeleteCommon(obj, key, mode); 979 return DeleteCommon(obj, key, mode);
1005 } 980 }
1006 981
1007 static bool HasElementImpl( 982 static bool HasElementImpl(
1008 Handle<Object> receiver, 983 Handle<Object> receiver,
1009 Handle<JSObject> holder, 984 Handle<JSObject> holder,
1010 uint32_t key, 985 uint32_t key,
1011 Handle<FixedArrayBase> backing_store) { 986 Handle<FixedArrayBase> backing_store) {
1012 if (key >= static_cast<uint32_t>(backing_store->length())) { 987 if (key >= static_cast<uint32_t>(backing_store->length())) {
1013 return false; 988 return false;
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after
1316 MUST_USE_RESULT static MaybeHandle<Object> SetLengthImpl( 1291 MUST_USE_RESULT static MaybeHandle<Object> SetLengthImpl(
1317 Handle<JSObject> obj, 1292 Handle<JSObject> obj,
1318 Handle<Object> length, 1293 Handle<Object> length,
1319 Handle<FixedArrayBase> backing_store) { 1294 Handle<FixedArrayBase> backing_store) {
1320 // External arrays do not support changing their length. 1295 // External arrays do not support changing their length.
1321 UNREACHABLE(); 1296 UNREACHABLE();
1322 return obj; 1297 return obj;
1323 } 1298 }
1324 1299
1325 MUST_USE_RESULT virtual MaybeHandle<Object> Delete( 1300 MUST_USE_RESULT virtual MaybeHandle<Object> Delete(
1326 Handle<JSObject> obj, 1301 Handle<JSObject> obj, uint32_t key, JSReceiver::DeleteMode mode) FINAL {
1327 uint32_t key,
1328 JSReceiver::DeleteMode mode) FINAL OVERRIDE {
1329 // External arrays always ignore deletes. 1302 // External arrays always ignore deletes.
1330 return obj->GetIsolate()->factory()->true_value(); 1303 return obj->GetIsolate()->factory()->true_value();
1331 } 1304 }
1332 1305
1333 static bool HasElementImpl(Handle<Object> receiver, 1306 static bool HasElementImpl(Handle<Object> receiver,
1334 Handle<JSObject> holder, 1307 Handle<JSObject> holder,
1335 uint32_t key, 1308 uint32_t key,
1336 Handle<FixedArrayBase> backing_store) { 1309 Handle<FixedArrayBase> backing_store) {
1337 uint32_t capacity = 1310 uint32_t capacity =
1338 AccessorClass::GetCapacityImpl(backing_store); 1311 AccessorClass::GetCapacityImpl(backing_store);
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
1470 int copy_size) { 1443 int copy_size) {
1471 UNREACHABLE(); 1444 UNREACHABLE();
1472 } 1445 }
1473 1446
1474 1447
1475 protected: 1448 protected:
1476 friend class ElementsAccessorBase<DictionaryElementsAccessor, 1449 friend class ElementsAccessorBase<DictionaryElementsAccessor,
1477 ElementsKindTraits<DICTIONARY_ELEMENTS> >; 1450 ElementsKindTraits<DICTIONARY_ELEMENTS> >;
1478 1451
1479 MUST_USE_RESULT virtual MaybeHandle<Object> Delete( 1452 MUST_USE_RESULT virtual MaybeHandle<Object> Delete(
1480 Handle<JSObject> obj, 1453 Handle<JSObject> obj, uint32_t key, JSReceiver::DeleteMode mode) FINAL {
1481 uint32_t key,
1482 JSReceiver::DeleteMode mode) FINAL OVERRIDE {
1483 return DeleteCommon(obj, key, mode); 1454 return DeleteCommon(obj, key, mode);
1484 } 1455 }
1485 1456
1486 MUST_USE_RESULT static MaybeHandle<Object> GetImpl( 1457 MUST_USE_RESULT static MaybeHandle<Object> GetImpl(
1487 Handle<Object> receiver, 1458 Handle<Object> receiver,
1488 Handle<JSObject> obj, 1459 Handle<JSObject> obj,
1489 uint32_t key, 1460 uint32_t key,
1490 Handle<FixedArrayBase> store) { 1461 Handle<FixedArrayBase> store) {
1491 Handle<SeededNumberDictionary> backing_store = 1462 Handle<SeededNumberDictionary> backing_store =
1492 Handle<SeededNumberDictionary>::cast(store); 1463 Handle<SeededNumberDictionary>::cast(store);
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
1644 Handle<JSObject> obj, 1615 Handle<JSObject> obj,
1645 Handle<Object> length, 1616 Handle<Object> length,
1646 Handle<FixedArrayBase> parameter_map) { 1617 Handle<FixedArrayBase> parameter_map) {
1647 // TODO(mstarzinger): This was never implemented but will be used once we 1618 // TODO(mstarzinger): This was never implemented but will be used once we
1648 // correctly implement [[DefineOwnProperty]] on arrays. 1619 // correctly implement [[DefineOwnProperty]] on arrays.
1649 UNIMPLEMENTED(); 1620 UNIMPLEMENTED();
1650 return obj; 1621 return obj;
1651 } 1622 }
1652 1623
1653 MUST_USE_RESULT virtual MaybeHandle<Object> Delete( 1624 MUST_USE_RESULT virtual MaybeHandle<Object> Delete(
1654 Handle<JSObject> obj, 1625 Handle<JSObject> obj, uint32_t key, JSReceiver::DeleteMode mode) FINAL {
1655 uint32_t key,
1656 JSReceiver::DeleteMode mode) FINAL OVERRIDE {
1657 Isolate* isolate = obj->GetIsolate(); 1626 Isolate* isolate = obj->GetIsolate();
1658 Handle<FixedArray> parameter_map(FixedArray::cast(obj->elements())); 1627 Handle<FixedArray> parameter_map(FixedArray::cast(obj->elements()));
1659 Handle<Object> probe = GetParameterMapArg(obj, parameter_map, key); 1628 Handle<Object> probe = GetParameterMapArg(obj, parameter_map, key);
1660 if (!probe->IsTheHole()) { 1629 if (!probe->IsTheHole()) {
1661 // TODO(kmillikin): We could check if this was the last aliased 1630 // TODO(kmillikin): We could check if this was the last aliased
1662 // parameter, and revert to normal elements in that case. That 1631 // parameter, and revert to normal elements in that case. That
1663 // would enable GC of the context. 1632 // would enable GC of the context.
1664 parameter_map->set_the_hole(key + 2); 1633 parameter_map->set_the_hole(key + 2);
1665 } else { 1634 } else {
1666 Handle<FixedArray> arguments(FixedArray::cast(parameter_map->get(1))); 1635 Handle<FixedArray> arguments(FixedArray::cast(parameter_map->get(1)));
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after
1916 UNREACHABLE(); 1885 UNREACHABLE();
1917 break; 1886 break;
1918 } 1887 }
1919 1888
1920 array->set_elements(*elms); 1889 array->set_elements(*elms);
1921 array->set_length(Smi::FromInt(number_of_elements)); 1890 array->set_length(Smi::FromInt(number_of_elements));
1922 return array; 1891 return array;
1923 } 1892 }
1924 1893
1925 } } // namespace v8::internal 1894 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/d8.cc ('k') | src/heap/mark-compact.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698