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

Side by Side Diff: src/elements.cc

Issue 1088993003: Replace OVERRIDE->override and FINAL->final since we now require C++11. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 8 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/d8.cc ('k') | src/execution.h » ('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 ElementsKind kind() const FINAL { return ElementsTraits::Kind; } 563 ElementsKind kind() const final { return ElementsTraits::Kind; }
564 564
565 static void ValidateContents(Handle<JSObject> holder, int length) { 565 static void ValidateContents(Handle<JSObject> holder, int length) {
566 } 566 }
567 567
568 static void ValidateImpl(Handle<JSObject> holder) { 568 static void ValidateImpl(Handle<JSObject> holder) {
569 Handle<FixedArrayBase> fixed_array_base(holder->elements()); 569 Handle<FixedArrayBase> fixed_array_base(holder->elements());
570 if (!fixed_array_base->IsHeapObject()) return; 570 if (!fixed_array_base->IsHeapObject()) return;
571 // Arrays that have been shifted in place can't be verified. 571 // Arrays that have been shifted in place can't be verified.
572 if (fixed_array_base->IsFiller()) return; 572 if (fixed_array_base->IsFiller()) return;
573 int length = 0; 573 int length = 0;
574 if (holder->IsJSArray()) { 574 if (holder->IsJSArray()) {
575 Object* length_obj = Handle<JSArray>::cast(holder)->length(); 575 Object* length_obj = Handle<JSArray>::cast(holder)->length();
576 if (length_obj->IsSmi()) { 576 if (length_obj->IsSmi()) {
577 length = Smi::cast(length_obj)->value(); 577 length = Smi::cast(length_obj)->value();
578 } 578 }
579 } else { 579 } else {
580 length = fixed_array_base->length(); 580 length = fixed_array_base->length();
581 } 581 }
582 ElementsAccessorSubclass::ValidateContents(holder, length); 582 ElementsAccessorSubclass::ValidateContents(holder, length);
583 } 583 }
584 584
585 void Validate(Handle<JSObject> holder) FINAL { 585 void Validate(Handle<JSObject> holder) final {
586 DisallowHeapAllocation no_gc; 586 DisallowHeapAllocation no_gc;
587 ElementsAccessorSubclass::ValidateImpl(holder); 587 ElementsAccessorSubclass::ValidateImpl(holder);
588 } 588 }
589 589
590 static bool HasElementImpl(Handle<JSObject> holder, uint32_t key, 590 static bool HasElementImpl(Handle<JSObject> holder, uint32_t key,
591 Handle<FixedArrayBase> backing_store) { 591 Handle<FixedArrayBase> backing_store) {
592 return ElementsAccessorSubclass::GetAttributesImpl(holder, key, 592 return ElementsAccessorSubclass::GetAttributesImpl(holder, key,
593 backing_store) != ABSENT; 593 backing_store) != ABSENT;
594 } 594 }
595 595
596 virtual bool HasElement(Handle<JSObject> holder, uint32_t key, 596 virtual bool HasElement(Handle<JSObject> holder, uint32_t key,
597 Handle<FixedArrayBase> backing_store) FINAL { 597 Handle<FixedArrayBase> backing_store) final {
598 return ElementsAccessorSubclass::HasElementImpl(holder, key, backing_store); 598 return ElementsAccessorSubclass::HasElementImpl(holder, key, backing_store);
599 } 599 }
600 600
601 MUST_USE_RESULT virtual MaybeHandle<Object> Get( 601 MUST_USE_RESULT virtual MaybeHandle<Object> Get(
602 Handle<Object> receiver, Handle<JSObject> holder, uint32_t key, 602 Handle<Object> receiver, Handle<JSObject> holder, uint32_t key,
603 Handle<FixedArrayBase> backing_store) FINAL { 603 Handle<FixedArrayBase> backing_store) final {
604 if (!IsExternalArrayElementsKind(ElementsTraits::Kind) && 604 if (!IsExternalArrayElementsKind(ElementsTraits::Kind) &&
605 FLAG_trace_js_array_abuse) { 605 FLAG_trace_js_array_abuse) {
606 CheckArrayAbuse(holder, "elements read", key); 606 CheckArrayAbuse(holder, "elements read", key);
607 } 607 }
608 608
609 if (IsExternalArrayElementsKind(ElementsTraits::Kind) && 609 if (IsExternalArrayElementsKind(ElementsTraits::Kind) &&
610 FLAG_trace_external_array_abuse) { 610 FLAG_trace_external_array_abuse) {
611 CheckArrayAbuse(holder, "external elements read", key); 611 CheckArrayAbuse(holder, "external elements read", key);
612 } 612 }
613 613
614 return ElementsAccessorSubclass::GetImpl( 614 return ElementsAccessorSubclass::GetImpl(
615 receiver, holder, key, backing_store); 615 receiver, holder, key, backing_store);
616 } 616 }
617 617
618 MUST_USE_RESULT static MaybeHandle<Object> GetImpl( 618 MUST_USE_RESULT static MaybeHandle<Object> GetImpl(
619 Handle<Object> receiver, 619 Handle<Object> receiver,
620 Handle<JSObject> obj, 620 Handle<JSObject> obj,
621 uint32_t key, 621 uint32_t key,
622 Handle<FixedArrayBase> backing_store) { 622 Handle<FixedArrayBase> backing_store) {
623 if (key < ElementsAccessorSubclass::GetCapacityImpl(backing_store)) { 623 if (key < ElementsAccessorSubclass::GetCapacityImpl(backing_store)) {
624 return BackingStore::get(Handle<BackingStore>::cast(backing_store), key); 624 return BackingStore::get(Handle<BackingStore>::cast(backing_store), key);
625 } else { 625 } else {
626 return backing_store->GetIsolate()->factory()->the_hole_value(); 626 return backing_store->GetIsolate()->factory()->the_hole_value();
627 } 627 }
628 } 628 }
629 629
630 MUST_USE_RESULT virtual PropertyAttributes GetAttributes( 630 MUST_USE_RESULT virtual PropertyAttributes GetAttributes(
631 Handle<JSObject> holder, uint32_t key, 631 Handle<JSObject> holder, uint32_t key,
632 Handle<FixedArrayBase> backing_store) FINAL { 632 Handle<FixedArrayBase> backing_store) final {
633 return ElementsAccessorSubclass::GetAttributesImpl(holder, key, 633 return ElementsAccessorSubclass::GetAttributesImpl(holder, key,
634 backing_store); 634 backing_store);
635 } 635 }
636 636
637 MUST_USE_RESULT static PropertyAttributes GetAttributesImpl( 637 MUST_USE_RESULT static PropertyAttributes GetAttributesImpl(
638 Handle<JSObject> obj, 638 Handle<JSObject> obj,
639 uint32_t key, 639 uint32_t key,
640 Handle<FixedArrayBase> backing_store) { 640 Handle<FixedArrayBase> backing_store) {
641 if (key >= ElementsAccessorSubclass::GetCapacityImpl(backing_store)) { 641 if (key >= ElementsAccessorSubclass::GetCapacityImpl(backing_store)) {
642 return ABSENT; 642 return ABSENT;
643 } 643 }
644 return 644 return
645 Handle<BackingStore>::cast(backing_store)->is_the_hole(key) 645 Handle<BackingStore>::cast(backing_store)->is_the_hole(key)
646 ? ABSENT : NONE; 646 ? ABSENT : NONE;
647 } 647 }
648 648
649 MUST_USE_RESULT virtual MaybeHandle<AccessorPair> GetAccessorPair( 649 MUST_USE_RESULT virtual MaybeHandle<AccessorPair> GetAccessorPair(
650 Handle<JSObject> holder, uint32_t key, 650 Handle<JSObject> holder, uint32_t key,
651 Handle<FixedArrayBase> backing_store) FINAL { 651 Handle<FixedArrayBase> backing_store) final {
652 return ElementsAccessorSubclass::GetAccessorPairImpl(holder, key, 652 return ElementsAccessorSubclass::GetAccessorPairImpl(holder, key,
653 backing_store); 653 backing_store);
654 } 654 }
655 655
656 MUST_USE_RESULT static MaybeHandle<AccessorPair> GetAccessorPairImpl( 656 MUST_USE_RESULT static MaybeHandle<AccessorPair> GetAccessorPairImpl(
657 Handle<JSObject> obj, 657 Handle<JSObject> obj,
658 uint32_t key, 658 uint32_t key,
659 Handle<FixedArrayBase> backing_store) { 659 Handle<FixedArrayBase> backing_store) {
660 return MaybeHandle<AccessorPair>(); 660 return MaybeHandle<AccessorPair>();
661 } 661 }
662 662
663 MUST_USE_RESULT virtual MaybeHandle<Object> SetLength( 663 MUST_USE_RESULT virtual MaybeHandle<Object> SetLength(
664 Handle<JSArray> array, Handle<Object> length) FINAL { 664 Handle<JSArray> array, Handle<Object> length) final {
665 return ElementsAccessorSubclass::SetLengthImpl( 665 return ElementsAccessorSubclass::SetLengthImpl(
666 array, length, handle(array->elements())); 666 array, length, handle(array->elements()));
667 } 667 }
668 668
669 MUST_USE_RESULT static MaybeHandle<Object> SetLengthImpl( 669 MUST_USE_RESULT static MaybeHandle<Object> SetLengthImpl(
670 Handle<JSObject> obj, 670 Handle<JSObject> obj,
671 Handle<Object> length, 671 Handle<Object> length,
672 Handle<FixedArrayBase> backing_store); 672 Handle<FixedArrayBase> backing_store);
673 673
674 virtual void SetCapacityAndLength(Handle<JSArray> array, int capacity, 674 virtual void SetCapacityAndLength(Handle<JSArray> array, int capacity,
675 int length) FINAL { 675 int length) final {
676 ElementsAccessorSubclass:: 676 ElementsAccessorSubclass::
677 SetFastElementsCapacityAndLength(array, capacity, length); 677 SetFastElementsCapacityAndLength(array, capacity, length);
678 } 678 }
679 679
680 static void SetFastElementsCapacityAndLength( 680 static void SetFastElementsCapacityAndLength(
681 Handle<JSObject> obj, 681 Handle<JSObject> obj,
682 int capacity, 682 int capacity,
683 int length) { 683 int length) {
684 UNIMPLEMENTED(); 684 UNIMPLEMENTED();
685 } 685 }
686 686
687 MUST_USE_RESULT virtual MaybeHandle<Object> Delete( 687 MUST_USE_RESULT virtual MaybeHandle<Object> Delete(
688 Handle<JSObject> obj, uint32_t key, 688 Handle<JSObject> obj, uint32_t key,
689 LanguageMode language_mode) OVERRIDE = 0; 689 LanguageMode language_mode) override = 0;
690 690
691 static void CopyElementsImpl(FixedArrayBase* from, uint32_t from_start, 691 static void CopyElementsImpl(FixedArrayBase* from, uint32_t from_start,
692 FixedArrayBase* to, ElementsKind from_kind, 692 FixedArrayBase* to, ElementsKind from_kind,
693 uint32_t to_start, int packed_size, 693 uint32_t to_start, int packed_size,
694 int copy_size) { 694 int copy_size) {
695 UNREACHABLE(); 695 UNREACHABLE();
696 } 696 }
697 697
698 virtual void CopyElements(Handle<FixedArrayBase> from, uint32_t from_start, 698 virtual void CopyElements(Handle<FixedArrayBase> from, uint32_t from_start,
699 ElementsKind from_kind, Handle<FixedArrayBase> to, 699 ElementsKind from_kind, Handle<FixedArrayBase> to,
700 uint32_t to_start, int copy_size) FINAL { 700 uint32_t to_start, int copy_size) final {
701 DCHECK(!from.is_null()); 701 DCHECK(!from.is_null());
702 // NOTE: the ElementsAccessorSubclass::CopyElementsImpl() methods 702 // NOTE: the ElementsAccessorSubclass::CopyElementsImpl() methods
703 // violate the handlified function signature convention: 703 // violate the handlified function signature convention:
704 // raw pointer parameters in the function that allocates. This is done 704 // raw pointer parameters in the function that allocates. This is done
705 // intentionally to avoid ArrayConcat() builtin performance degradation. 705 // intentionally to avoid ArrayConcat() builtin performance degradation.
706 // See the comment in another ElementsAccessorBase::CopyElements() for 706 // See the comment in another ElementsAccessorBase::CopyElements() for
707 // details. 707 // details.
708 ElementsAccessorSubclass::CopyElementsImpl(*from, from_start, *to, 708 ElementsAccessorSubclass::CopyElementsImpl(*from, from_start, *to,
709 from_kind, to_start, 709 from_kind, to_start,
710 kPackedSizeNotKnown, copy_size); 710 kPackedSizeNotKnown, copy_size);
711 } 711 }
712 712
713 virtual void CopyElements(JSObject* from_holder, uint32_t from_start, 713 virtual void CopyElements(JSObject* from_holder, uint32_t from_start,
714 ElementsKind from_kind, Handle<FixedArrayBase> to, 714 ElementsKind from_kind, Handle<FixedArrayBase> to,
715 uint32_t to_start, int copy_size) FINAL { 715 uint32_t to_start, int copy_size) final {
716 int packed_size = kPackedSizeNotKnown; 716 int packed_size = kPackedSizeNotKnown;
717 bool is_packed = IsFastPackedElementsKind(from_kind) && 717 bool is_packed = IsFastPackedElementsKind(from_kind) &&
718 from_holder->IsJSArray(); 718 from_holder->IsJSArray();
719 if (is_packed) { 719 if (is_packed) {
720 packed_size = 720 packed_size =
721 Smi::cast(JSArray::cast(from_holder)->length())->value(); 721 Smi::cast(JSArray::cast(from_holder)->length())->value();
722 if (copy_size >= 0 && packed_size > copy_size) { 722 if (copy_size >= 0 && packed_size > copy_size) {
723 packed_size = copy_size; 723 packed_size = copy_size;
724 } 724 }
725 } 725 }
726 FixedArrayBase* from = from_holder->elements(); 726 FixedArrayBase* from = from_holder->elements();
727 // NOTE: the ElementsAccessorSubclass::CopyElementsImpl() methods 727 // NOTE: the ElementsAccessorSubclass::CopyElementsImpl() methods
728 // violate the handlified function signature convention: 728 // violate the handlified function signature convention:
729 // raw pointer parameters in the function that allocates. This is done 729 // raw pointer parameters in the function that allocates. This is done
730 // intentionally to avoid ArrayConcat() builtin performance degradation. 730 // intentionally to avoid ArrayConcat() builtin performance degradation.
731 // 731 //
732 // Details: The idea is that allocations actually happen only in case of 732 // Details: The idea is that allocations actually happen only in case of
733 // copying from object with fast double elements to object with object 733 // copying from object with fast double elements to object with object
734 // elements. In all the other cases there are no allocations performed and 734 // elements. In all the other cases there are no allocations performed and
735 // handle creation causes noticeable performance degradation of the builtin. 735 // handle creation causes noticeable performance degradation of the builtin.
736 ElementsAccessorSubclass::CopyElementsImpl( 736 ElementsAccessorSubclass::CopyElementsImpl(
737 from, from_start, *to, from_kind, to_start, packed_size, copy_size); 737 from, from_start, *to, from_kind, to_start, packed_size, copy_size);
738 } 738 }
739 739
740 virtual MaybeHandle<FixedArray> AddElementsToFixedArray( 740 virtual MaybeHandle<FixedArray> AddElementsToFixedArray(
741 Handle<Object> receiver, Handle<JSObject> holder, Handle<FixedArray> to, 741 Handle<Object> receiver, Handle<JSObject> holder, Handle<FixedArray> to,
742 Handle<FixedArrayBase> from, FixedArray::KeyFilter filter) FINAL { 742 Handle<FixedArrayBase> from, FixedArray::KeyFilter filter) final {
743 int len0 = to->length(); 743 int len0 = to->length();
744 #ifdef ENABLE_SLOW_DCHECKS 744 #ifdef ENABLE_SLOW_DCHECKS
745 if (FLAG_enable_slow_asserts) { 745 if (FLAG_enable_slow_asserts) {
746 for (int i = 0; i < len0; i++) { 746 for (int i = 0; i < len0; i++) {
747 DCHECK(!to->get(i)->IsTheHole()); 747 DCHECK(!to->get(i)->IsTheHole());
748 } 748 }
749 } 749 }
750 #endif 750 #endif
751 751
752 // Optimize if 'other' is empty. 752 // Optimize if 'other' is empty.
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
814 } 814 }
815 DCHECK(extra == index); 815 DCHECK(extra == index);
816 return result; 816 return result;
817 } 817 }
818 818
819 protected: 819 protected:
820 static uint32_t GetCapacityImpl(Handle<FixedArrayBase> backing_store) { 820 static uint32_t GetCapacityImpl(Handle<FixedArrayBase> backing_store) {
821 return backing_store->length(); 821 return backing_store->length();
822 } 822 }
823 823
824 uint32_t GetCapacity(Handle<FixedArrayBase> backing_store) FINAL { 824 uint32_t GetCapacity(Handle<FixedArrayBase> backing_store) final {
825 return ElementsAccessorSubclass::GetCapacityImpl(backing_store); 825 return ElementsAccessorSubclass::GetCapacityImpl(backing_store);
826 } 826 }
827 827
828 static uint32_t GetKeyForIndexImpl(Handle<FixedArrayBase> backing_store, 828 static uint32_t GetKeyForIndexImpl(Handle<FixedArrayBase> backing_store,
829 uint32_t index) { 829 uint32_t index) {
830 return index; 830 return index;
831 } 831 }
832 832
833 virtual uint32_t GetKeyForIndex(Handle<FixedArrayBase> backing_store, 833 virtual uint32_t GetKeyForIndex(Handle<FixedArrayBase> backing_store,
834 uint32_t index) FINAL { 834 uint32_t index) final {
835 return ElementsAccessorSubclass::GetKeyForIndexImpl(backing_store, index); 835 return ElementsAccessorSubclass::GetKeyForIndexImpl(backing_store, index);
836 } 836 }
837 837
838 private: 838 private:
839 DISALLOW_COPY_AND_ASSIGN(ElementsAccessorBase); 839 DISALLOW_COPY_AND_ASSIGN(ElementsAccessorBase);
840 }; 840 };
841 841
842 842
843 // Super class for all fast element arrays. 843 // Super class for all fast element arrays.
844 template<typename FastElementsAccessorSubclass, 844 template<typename FastElementsAccessorSubclass,
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
958 } 958 }
959 if (4 * num_used <= backing_store->length()) { 959 if (4 * num_used <= backing_store->length()) {
960 JSObject::NormalizeElements(obj); 960 JSObject::NormalizeElements(obj);
961 } 961 }
962 } 962 }
963 } 963 }
964 return isolate->factory()->true_value(); 964 return isolate->factory()->true_value();
965 } 965 }
966 966
967 virtual MaybeHandle<Object> Delete(Handle<JSObject> obj, uint32_t key, 967 virtual MaybeHandle<Object> Delete(Handle<JSObject> obj, uint32_t key,
968 LanguageMode language_mode) FINAL { 968 LanguageMode language_mode) final {
969 return DeleteCommon(obj, key, language_mode); 969 return DeleteCommon(obj, key, language_mode);
970 } 970 }
971 971
972 static bool HasElementImpl( 972 static bool HasElementImpl(
973 Handle<JSObject> holder, 973 Handle<JSObject> holder,
974 uint32_t key, 974 uint32_t key,
975 Handle<FixedArrayBase> backing_store) { 975 Handle<FixedArrayBase> backing_store) {
976 if (key >= static_cast<uint32_t>(backing_store->length())) { 976 if (key >= static_cast<uint32_t>(backing_store->length())) {
977 return false; 977 return false;
978 } 978 }
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
1279 MUST_USE_RESULT static MaybeHandle<Object> SetLengthImpl( 1279 MUST_USE_RESULT static MaybeHandle<Object> SetLengthImpl(
1280 Handle<JSObject> obj, 1280 Handle<JSObject> obj,
1281 Handle<Object> length, 1281 Handle<Object> length,
1282 Handle<FixedArrayBase> backing_store) { 1282 Handle<FixedArrayBase> backing_store) {
1283 // External arrays do not support changing their length. 1283 // External arrays do not support changing their length.
1284 UNREACHABLE(); 1284 UNREACHABLE();
1285 return obj; 1285 return obj;
1286 } 1286 }
1287 1287
1288 MUST_USE_RESULT virtual MaybeHandle<Object> Delete( 1288 MUST_USE_RESULT virtual MaybeHandle<Object> Delete(
1289 Handle<JSObject> obj, uint32_t key, LanguageMode language_mode) FINAL { 1289 Handle<JSObject> obj, uint32_t key, LanguageMode language_mode) final {
1290 // External arrays always ignore deletes. 1290 // External arrays always ignore deletes.
1291 return obj->GetIsolate()->factory()->true_value(); 1291 return obj->GetIsolate()->factory()->true_value();
1292 } 1292 }
1293 1293
1294 static bool HasElementImpl(Handle<JSObject> holder, uint32_t key, 1294 static bool HasElementImpl(Handle<JSObject> holder, uint32_t key,
1295 Handle<FixedArrayBase> backing_store) { 1295 Handle<FixedArrayBase> backing_store) {
1296 uint32_t capacity = 1296 uint32_t capacity =
1297 AccessorClass::GetCapacityImpl(backing_store); 1297 AccessorClass::GetCapacityImpl(backing_store);
1298 return key < capacity; 1298 return key < capacity;
1299 } 1299 }
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
1427 int copy_size) { 1427 int copy_size) {
1428 UNREACHABLE(); 1428 UNREACHABLE();
1429 } 1429 }
1430 1430
1431 1431
1432 protected: 1432 protected:
1433 friend class ElementsAccessorBase<DictionaryElementsAccessor, 1433 friend class ElementsAccessorBase<DictionaryElementsAccessor,
1434 ElementsKindTraits<DICTIONARY_ELEMENTS> >; 1434 ElementsKindTraits<DICTIONARY_ELEMENTS> >;
1435 1435
1436 MUST_USE_RESULT virtual MaybeHandle<Object> Delete( 1436 MUST_USE_RESULT virtual MaybeHandle<Object> Delete(
1437 Handle<JSObject> obj, uint32_t key, LanguageMode language_mode) FINAL { 1437 Handle<JSObject> obj, uint32_t key, LanguageMode language_mode) final {
1438 return DeleteCommon(obj, key, language_mode); 1438 return DeleteCommon(obj, key, language_mode);
1439 } 1439 }
1440 1440
1441 MUST_USE_RESULT static MaybeHandle<Object> GetImpl( 1441 MUST_USE_RESULT static MaybeHandle<Object> GetImpl(
1442 Handle<Object> receiver, 1442 Handle<Object> receiver,
1443 Handle<JSObject> obj, 1443 Handle<JSObject> obj,
1444 uint32_t key, 1444 uint32_t key,
1445 Handle<FixedArrayBase> store) { 1445 Handle<FixedArrayBase> store) {
1446 Handle<SeededNumberDictionary> backing_store = 1446 Handle<SeededNumberDictionary> backing_store =
1447 Handle<SeededNumberDictionary>::cast(store); 1447 Handle<SeededNumberDictionary>::cast(store);
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
1593 Handle<JSObject> obj, 1593 Handle<JSObject> obj,
1594 Handle<Object> length, 1594 Handle<Object> length,
1595 Handle<FixedArrayBase> parameter_map) { 1595 Handle<FixedArrayBase> parameter_map) {
1596 // TODO(mstarzinger): This was never implemented but will be used once we 1596 // TODO(mstarzinger): This was never implemented but will be used once we
1597 // correctly implement [[DefineOwnProperty]] on arrays. 1597 // correctly implement [[DefineOwnProperty]] on arrays.
1598 UNIMPLEMENTED(); 1598 UNIMPLEMENTED();
1599 return obj; 1599 return obj;
1600 } 1600 }
1601 1601
1602 MUST_USE_RESULT virtual MaybeHandle<Object> Delete( 1602 MUST_USE_RESULT virtual MaybeHandle<Object> Delete(
1603 Handle<JSObject> obj, uint32_t key, LanguageMode language_mode) FINAL { 1603 Handle<JSObject> obj, uint32_t key, LanguageMode language_mode) final {
1604 Isolate* isolate = obj->GetIsolate(); 1604 Isolate* isolate = obj->GetIsolate();
1605 Handle<FixedArray> parameter_map(FixedArray::cast(obj->elements())); 1605 Handle<FixedArray> parameter_map(FixedArray::cast(obj->elements()));
1606 Handle<Object> probe = GetParameterMapArg(obj, parameter_map, key); 1606 Handle<Object> probe = GetParameterMapArg(obj, parameter_map, key);
1607 if (!probe->IsTheHole()) { 1607 if (!probe->IsTheHole()) {
1608 // TODO(kmillikin): We could check if this was the last aliased 1608 // TODO(kmillikin): We could check if this was the last aliased
1609 // parameter, and revert to normal elements in that case. That 1609 // parameter, and revert to normal elements in that case. That
1610 // would enable GC of the context. 1610 // would enable GC of the context.
1611 parameter_map->set_the_hole(key + 2); 1611 parameter_map->set_the_hole(key + 2);
1612 } else { 1612 } else {
1613 Handle<FixedArray> arguments(FixedArray::cast(parameter_map->get(1))); 1613 Handle<FixedArray> arguments(FixedArray::cast(parameter_map->get(1)));
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
1843 UNREACHABLE(); 1843 UNREACHABLE();
1844 break; 1844 break;
1845 } 1845 }
1846 1846
1847 array->set_elements(*elms); 1847 array->set_elements(*elms);
1848 array->set_length(Smi::FromInt(number_of_elements)); 1848 array->set_length(Smi::FromInt(number_of_elements));
1849 return array; 1849 return array;
1850 } 1850 }
1851 1851
1852 } } // namespace v8::internal 1852 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/d8.cc ('k') | src/execution.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698