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 625 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
636 MUST_USE_RESULT virtual Handle<Object> Get( | 636 MUST_USE_RESULT virtual Handle<Object> Get( |
637 Handle<Object> receiver, | 637 Handle<Object> receiver, |
638 Handle<JSObject> holder, | 638 Handle<JSObject> holder, |
639 uint32_t key, | 639 uint32_t key, |
640 Handle<FixedArrayBase> backing_store) V8_FINAL V8_OVERRIDE { | 640 Handle<FixedArrayBase> backing_store) V8_FINAL V8_OVERRIDE { |
641 CALL_HEAP_FUNCTION(holder->GetIsolate(), | 641 CALL_HEAP_FUNCTION(holder->GetIsolate(), |
642 Get(*receiver, *holder, key, *backing_store), | 642 Get(*receiver, *holder, key, *backing_store), |
643 Object); | 643 Object); |
644 } | 644 } |
645 | 645 |
646 // TODO(ishell): Temporary wrapper until handlified. | |
647 MUST_USE_RESULT virtual Handle<Object> Get( | |
648 Handle<Object> receiver, | |
649 Handle<JSObject> holder, | |
650 uint32_t key) V8_FINAL V8_OVERRIDE { | |
651 CALL_HEAP_FUNCTION(holder->GetIsolate(), | |
652 Get(*receiver, *holder, key, NULL), | |
653 Object); | |
654 } | |
655 | |
656 MUST_USE_RESULT virtual MaybeObject* Get( | 646 MUST_USE_RESULT virtual MaybeObject* Get( |
657 Object* receiver, | 647 Object* receiver, |
658 JSObject* holder, | 648 JSObject* holder, |
659 uint32_t key, | 649 uint32_t key, |
660 FixedArrayBase* backing_store) V8_FINAL V8_OVERRIDE { | 650 FixedArrayBase* backing_store) V8_FINAL V8_OVERRIDE { |
661 if (backing_store == NULL) { | |
662 backing_store = holder->elements(); | |
663 } | |
664 | |
665 if (!IsExternalArrayElementsKind(ElementsTraits::Kind) && | 651 if (!IsExternalArrayElementsKind(ElementsTraits::Kind) && |
666 FLAG_trace_js_array_abuse) { | 652 FLAG_trace_js_array_abuse) { |
667 CheckArrayAbuse(holder, "elements read", key); | 653 CheckArrayAbuse(holder, "elements read", key); |
668 } | 654 } |
669 | 655 |
670 if (IsExternalArrayElementsKind(ElementsTraits::Kind) && | 656 if (IsExternalArrayElementsKind(ElementsTraits::Kind) && |
671 FLAG_trace_external_array_abuse) { | 657 FLAG_trace_external_array_abuse) { |
672 CheckArrayAbuse(holder, "external elements read", key); | 658 CheckArrayAbuse(holder, "external elements read", key); |
673 } | 659 } |
674 | 660 |
675 return ElementsAccessorSubclass::GetImpl( | 661 return ElementsAccessorSubclass::GetImpl( |
676 receiver, holder, key, backing_store); | 662 receiver, holder, key, backing_store); |
677 } | 663 } |
678 | 664 |
679 MUST_USE_RESULT static MaybeObject* GetImpl(Object* receiver, | 665 MUST_USE_RESULT static MaybeObject* GetImpl(Object* receiver, |
680 JSObject* obj, | 666 JSObject* obj, |
681 uint32_t key, | 667 uint32_t key, |
682 FixedArrayBase* backing_store) { | 668 FixedArrayBase* backing_store) { |
683 return (key < ElementsAccessorSubclass::GetCapacityImpl(backing_store)) | 669 return (key < ElementsAccessorSubclass::GetCapacityImpl(backing_store)) |
684 ? BackingStore::cast(backing_store)->get(key) | 670 ? BackingStore::cast(backing_store)->get(key) |
685 : backing_store->GetHeap()->the_hole_value(); | 671 : backing_store->GetHeap()->the_hole_value(); |
686 } | 672 } |
687 | 673 |
688 MUST_USE_RESULT virtual PropertyAttributes GetAttributes( | 674 MUST_USE_RESULT virtual PropertyAttributes GetAttributes( |
| 675 Handle<Object> receiver, |
| 676 Handle<JSObject> holder, |
| 677 uint32_t key, |
| 678 Handle<FixedArrayBase> backing_store) V8_FINAL V8_OVERRIDE { |
| 679 return ElementsAccessorSubclass::GetAttributesImpl( |
| 680 *receiver, *holder, key, *backing_store); |
| 681 } |
| 682 |
| 683 // TODO(ishell): To be removed once elements.cc is handlified. |
| 684 MUST_USE_RESULT virtual PropertyAttributes GetAttributes( |
689 Object* receiver, | 685 Object* receiver, |
690 JSObject* holder, | 686 JSObject* holder, |
691 uint32_t key, | 687 uint32_t key, |
692 FixedArrayBase* backing_store) V8_FINAL V8_OVERRIDE { | 688 FixedArrayBase* backing_store) V8_FINAL V8_OVERRIDE { |
693 if (backing_store == NULL) { | |
694 backing_store = holder->elements(); | |
695 } | |
696 return ElementsAccessorSubclass::GetAttributesImpl( | 689 return ElementsAccessorSubclass::GetAttributesImpl( |
697 receiver, holder, key, backing_store); | 690 receiver, holder, key, backing_store); |
698 } | 691 } |
699 | 692 |
700 MUST_USE_RESULT static PropertyAttributes GetAttributesImpl( | 693 MUST_USE_RESULT static PropertyAttributes GetAttributesImpl( |
701 Object* receiver, | 694 Object* receiver, |
702 JSObject* obj, | 695 JSObject* obj, |
703 uint32_t key, | 696 uint32_t key, |
704 FixedArrayBase* backing_store) { | 697 FixedArrayBase* backing_store) { |
705 if (key >= ElementsAccessorSubclass::GetCapacityImpl(backing_store)) { | 698 if (key >= ElementsAccessorSubclass::GetCapacityImpl(backing_store)) { |
706 return ABSENT; | 699 return ABSENT; |
707 } | 700 } |
708 return BackingStore::cast(backing_store)->is_the_hole(key) ? ABSENT : NONE; | 701 return BackingStore::cast(backing_store)->is_the_hole(key) ? ABSENT : NONE; |
709 } | 702 } |
710 | 703 |
711 MUST_USE_RESULT virtual PropertyType GetType( | 704 MUST_USE_RESULT virtual PropertyType GetType( |
| 705 Handle<Object> receiver, |
| 706 Handle<JSObject> holder, |
| 707 uint32_t key, |
| 708 Handle<FixedArrayBase> backing_store) V8_FINAL V8_OVERRIDE { |
| 709 return ElementsAccessorSubclass::GetTypeImpl( |
| 710 *receiver, *holder, key, *backing_store); |
| 711 } |
| 712 |
| 713 // TODO(ishell): To be removed once elements.cc is handlified. |
| 714 MUST_USE_RESULT virtual PropertyType GetType( |
712 Object* receiver, | 715 Object* receiver, |
713 JSObject* holder, | 716 JSObject* holder, |
714 uint32_t key, | 717 uint32_t key, |
715 FixedArrayBase* backing_store) V8_FINAL V8_OVERRIDE { | 718 FixedArrayBase* backing_store) V8_FINAL V8_OVERRIDE { |
716 if (backing_store == NULL) { | |
717 backing_store = holder->elements(); | |
718 } | |
719 return ElementsAccessorSubclass::GetTypeImpl( | 719 return ElementsAccessorSubclass::GetTypeImpl( |
720 receiver, holder, key, backing_store); | 720 receiver, holder, key, backing_store); |
721 } | 721 } |
722 | 722 |
723 MUST_USE_RESULT static PropertyType GetTypeImpl( | 723 MUST_USE_RESULT static PropertyType GetTypeImpl( |
724 Object* receiver, | 724 Object* receiver, |
725 JSObject* obj, | 725 JSObject* obj, |
726 uint32_t key, | 726 uint32_t key, |
727 FixedArrayBase* backing_store) { | 727 FixedArrayBase* backing_store) { |
728 if (key >= ElementsAccessorSubclass::GetCapacityImpl(backing_store)) { | 728 if (key >= ElementsAccessorSubclass::GetCapacityImpl(backing_store)) { |
(...skipping 1336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2065 UNREACHABLE(); | 2065 UNREACHABLE(); |
2066 break; | 2066 break; |
2067 } | 2067 } |
2068 | 2068 |
2069 array->set_elements(*elms); | 2069 array->set_elements(*elms); |
2070 array->set_length(Smi::FromInt(number_of_elements)); | 2070 array->set_length(Smi::FromInt(number_of_elements)); |
2071 return array; | 2071 return array; |
2072 } | 2072 } |
2073 | 2073 |
2074 } } // namespace v8::internal | 2074 } } // namespace v8::internal |
OLD | NEW |