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 714 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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)) { |
729 return NONEXISTENT; | 729 return NONEXISTENT; |
730 } | 730 } |
731 return BackingStore::cast(backing_store)->is_the_hole(key) | 731 return BackingStore::cast(backing_store)->is_the_hole(key) |
732 ? NONEXISTENT : FIELD; | 732 ? NONEXISTENT : FIELD; |
733 } | 733 } |
734 | 734 |
735 MUST_USE_RESULT virtual AccessorPair* GetAccessorPair( | 735 MUST_USE_RESULT virtual MaybeHandle<AccessorPair> GetAccessorPair( |
736 Object* receiver, | 736 Handle<Object> receiver, |
737 JSObject* holder, | 737 Handle<JSObject> holder, |
738 uint32_t key, | 738 uint32_t key, |
739 FixedArrayBase* backing_store) V8_FINAL V8_OVERRIDE { | 739 Handle<FixedArrayBase> backing_store) V8_FINAL V8_OVERRIDE { |
740 if (backing_store == NULL) { | |
741 backing_store = holder->elements(); | |
742 } | |
743 return ElementsAccessorSubclass::GetAccessorPairImpl( | 740 return ElementsAccessorSubclass::GetAccessorPairImpl( |
744 receiver, holder, key, backing_store); | 741 receiver, holder, key, backing_store); |
745 } | 742 } |
746 | 743 |
747 MUST_USE_RESULT static AccessorPair* GetAccessorPairImpl( | 744 MUST_USE_RESULT static MaybeHandle<AccessorPair> GetAccessorPairImpl( |
748 Object* receiver, | 745 Handle<Object> receiver, |
749 JSObject* obj, | 746 Handle<JSObject> obj, |
750 uint32_t key, | 747 uint32_t key, |
751 FixedArrayBase* backing_store) { | 748 Handle<FixedArrayBase> backing_store) { |
752 return NULL; | 749 return MaybeHandle<AccessorPair>(); |
753 } | 750 } |
754 | 751 |
755 MUST_USE_RESULT virtual Handle<Object> SetLength( | 752 MUST_USE_RESULT virtual Handle<Object> SetLength( |
756 Handle<JSArray> array, | 753 Handle<JSArray> array, |
757 Handle<Object> length) V8_FINAL V8_OVERRIDE { | 754 Handle<Object> length) V8_FINAL V8_OVERRIDE { |
758 return ElementsAccessorSubclass::SetLengthImpl( | 755 return ElementsAccessorSubclass::SetLengthImpl( |
759 array, length, handle(array->elements())); | 756 array, length, handle(array->elements())); |
760 } | 757 } |
761 | 758 |
762 MUST_USE_RESULT static Handle<Object> SetLengthImpl( | 759 MUST_USE_RESULT static Handle<Object> SetLengthImpl( |
(...skipping 885 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1648 uint32_t key, | 1645 uint32_t key, |
1649 FixedArrayBase* store) { | 1646 FixedArrayBase* store) { |
1650 SeededNumberDictionary* backing_store = SeededNumberDictionary::cast(store); | 1647 SeededNumberDictionary* backing_store = SeededNumberDictionary::cast(store); |
1651 int entry = backing_store->FindEntry(key); | 1648 int entry = backing_store->FindEntry(key); |
1652 if (entry != SeededNumberDictionary::kNotFound) { | 1649 if (entry != SeededNumberDictionary::kNotFound) { |
1653 return backing_store->DetailsAt(entry).type(); | 1650 return backing_store->DetailsAt(entry).type(); |
1654 } | 1651 } |
1655 return NONEXISTENT; | 1652 return NONEXISTENT; |
1656 } | 1653 } |
1657 | 1654 |
1658 MUST_USE_RESULT static AccessorPair* GetAccessorPairImpl( | 1655 MUST_USE_RESULT static MaybeHandle<AccessorPair> GetAccessorPairImpl( |
1659 Object* receiver, | 1656 Handle<Object> receiver, |
1660 JSObject* obj, | 1657 Handle<JSObject> obj, |
1661 uint32_t key, | 1658 uint32_t key, |
1662 FixedArrayBase* store) { | 1659 Handle<FixedArrayBase> store) { |
1663 SeededNumberDictionary* backing_store = SeededNumberDictionary::cast(store); | 1660 Handle<SeededNumberDictionary> backing_store = |
| 1661 Handle<SeededNumberDictionary>::cast(store); |
1664 int entry = backing_store->FindEntry(key); | 1662 int entry = backing_store->FindEntry(key); |
1665 if (entry != SeededNumberDictionary::kNotFound && | 1663 if (entry != SeededNumberDictionary::kNotFound && |
1666 backing_store->DetailsAt(entry).type() == CALLBACKS && | 1664 backing_store->DetailsAt(entry).type() == CALLBACKS && |
1667 backing_store->ValueAt(entry)->IsAccessorPair()) { | 1665 backing_store->ValueAt(entry)->IsAccessorPair()) { |
1668 return AccessorPair::cast(backing_store->ValueAt(entry)); | 1666 return handle(AccessorPair::cast(backing_store->ValueAt(entry))); |
1669 } | 1667 } |
1670 return NULL; | 1668 return MaybeHandle<AccessorPair>(); |
1671 } | 1669 } |
1672 | 1670 |
1673 static bool HasElementImpl(Object* receiver, | 1671 static bool HasElementImpl(Object* receiver, |
1674 JSObject* holder, | 1672 JSObject* holder, |
1675 uint32_t key, | 1673 uint32_t key, |
1676 FixedArrayBase* backing_store) { | 1674 FixedArrayBase* backing_store) { |
1677 return SeededNumberDictionary::cast(backing_store)->FindEntry(key) != | 1675 return SeededNumberDictionary::cast(backing_store)->FindEntry(key) != |
1678 SeededNumberDictionary::kNotFound; | 1676 SeededNumberDictionary::kNotFound; |
1679 } | 1677 } |
1680 | 1678 |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1759 if (!probe->IsTheHole()) { | 1757 if (!probe->IsTheHole()) { |
1760 return FIELD; | 1758 return FIELD; |
1761 } else { | 1759 } else { |
1762 // If not aliased, check the arguments. | 1760 // If not aliased, check the arguments. |
1763 FixedArray* arguments = FixedArray::cast(parameter_map->get(1)); | 1761 FixedArray* arguments = FixedArray::cast(parameter_map->get(1)); |
1764 return ElementsAccessor::ForArray(arguments)->GetType( | 1762 return ElementsAccessor::ForArray(arguments)->GetType( |
1765 receiver, obj, key, arguments); | 1763 receiver, obj, key, arguments); |
1766 } | 1764 } |
1767 } | 1765 } |
1768 | 1766 |
1769 MUST_USE_RESULT static AccessorPair* GetAccessorPairImpl( | 1767 MUST_USE_RESULT static MaybeHandle<AccessorPair> GetAccessorPairImpl( |
1770 Object* receiver, | 1768 Handle<Object> receiver, |
1771 JSObject* obj, | 1769 Handle<JSObject> obj, |
1772 uint32_t key, | 1770 uint32_t key, |
1773 FixedArrayBase* parameters) { | 1771 Handle<FixedArrayBase> parameters) { |
1774 FixedArray* parameter_map = FixedArray::cast(parameters); | 1772 Handle<FixedArray> parameter_map = Handle<FixedArray>::cast(parameters); |
1775 Object* probe = GetParameterMapArg(obj, parameter_map, key); | 1773 Handle<Object> probe = GetParameterMapArg(obj, parameter_map, key); |
1776 if (!probe->IsTheHole()) { | 1774 if (!probe->IsTheHole()) { |
1777 return NULL; | 1775 return MaybeHandle<AccessorPair>(); |
1778 } else { | 1776 } else { |
1779 // If not aliased, check the arguments. | 1777 // If not aliased, check the arguments. |
1780 FixedArray* arguments = FixedArray::cast(parameter_map->get(1)); | 1778 Handle<FixedArray> arguments(FixedArray::cast(parameter_map->get(1))); |
1781 return ElementsAccessor::ForArray(arguments)->GetAccessorPair( | 1779 return ElementsAccessor::ForArray(arguments)->GetAccessorPair( |
1782 receiver, obj, key, arguments); | 1780 receiver, obj, key, arguments); |
1783 } | 1781 } |
1784 } | 1782 } |
1785 | 1783 |
1786 MUST_USE_RESULT static Handle<Object> SetLengthImpl( | 1784 MUST_USE_RESULT static Handle<Object> SetLengthImpl( |
1787 Handle<JSObject> obj, | 1785 Handle<JSObject> obj, |
1788 Handle<Object> length, | 1786 Handle<Object> length, |
1789 Handle<FixedArrayBase> parameter_map) { | 1787 Handle<FixedArrayBase> parameter_map) { |
1790 // TODO(mstarzinger): This was never implemented but will be used once we | 1788 // TODO(mstarzinger): This was never implemented but will be used once we |
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2065 UNREACHABLE(); | 2063 UNREACHABLE(); |
2066 break; | 2064 break; |
2067 } | 2065 } |
2068 | 2066 |
2069 array->set_elements(*elms); | 2067 array->set_elements(*elms); |
2070 array->set_length(Smi::FromInt(number_of_elements)); | 2068 array->set_length(Smi::FromInt(number_of_elements)); |
2071 return array; | 2069 return array; |
2072 } | 2070 } |
2073 | 2071 |
2074 } } // namespace v8::internal | 2072 } } // namespace v8::internal |
OLD | NEW |