| 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 617 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 628 | 628 | 
| 629   virtual bool HasElement( | 629   virtual bool HasElement( | 
| 630       Handle<Object> receiver, | 630       Handle<Object> receiver, | 
| 631       Handle<JSObject> holder, | 631       Handle<JSObject> holder, | 
| 632       uint32_t key, | 632       uint32_t key, | 
| 633       Handle<FixedArrayBase> backing_store) V8_FINAL V8_OVERRIDE { | 633       Handle<FixedArrayBase> backing_store) V8_FINAL V8_OVERRIDE { | 
| 634     return ElementsAccessorSubclass::HasElementImpl( | 634     return ElementsAccessorSubclass::HasElementImpl( | 
| 635         receiver, holder, key, backing_store); | 635         receiver, holder, key, backing_store); | 
| 636   } | 636   } | 
| 637 | 637 | 
| 638   // TODO(ishell): Temporary wrapper until handlified. | 638   MUST_USE_RESULT virtual MaybeHandle<Object> Get( | 
| 639   MUST_USE_RESULT virtual Handle<Object> Get( |  | 
| 640       Handle<Object> receiver, | 639       Handle<Object> receiver, | 
| 641       Handle<JSObject> holder, | 640       Handle<JSObject> holder, | 
| 642       uint32_t key, | 641       uint32_t key, | 
| 643       Handle<FixedArrayBase> backing_store) V8_FINAL V8_OVERRIDE { | 642       Handle<FixedArrayBase> backing_store) V8_FINAL V8_OVERRIDE { | 
| 644     if (!IsExternalArrayElementsKind(ElementsTraits::Kind) && | 643     if (!IsExternalArrayElementsKind(ElementsTraits::Kind) && | 
| 645         FLAG_trace_js_array_abuse) { | 644         FLAG_trace_js_array_abuse) { | 
| 646       CheckArrayAbuse(holder, "elements read", key); | 645       CheckArrayAbuse(holder, "elements read", key); | 
| 647     } | 646     } | 
| 648 | 647 | 
| 649     if (IsExternalArrayElementsKind(ElementsTraits::Kind) && | 648     if (IsExternalArrayElementsKind(ElementsTraits::Kind) && | 
| 650         FLAG_trace_external_array_abuse) { | 649         FLAG_trace_external_array_abuse) { | 
| 651       CheckArrayAbuse(holder, "external elements read", key); | 650       CheckArrayAbuse(holder, "external elements read", key); | 
| 652     } | 651     } | 
| 653 | 652 | 
| 654     return ElementsAccessorSubclass::GetImpl( | 653     return ElementsAccessorSubclass::GetImpl( | 
| 655         receiver, holder, key, backing_store); | 654         receiver, holder, key, backing_store); | 
| 656   } | 655   } | 
| 657 | 656 | 
| 658   static Handle<Object> GetImpl(Handle<Object> receiver, | 657   MUST_USE_RESULT static MaybeHandle<Object> GetImpl( | 
| 659                                 Handle<JSObject> obj, | 658       Handle<Object> receiver, | 
| 660                                 uint32_t key, | 659       Handle<JSObject> obj, | 
| 661                                 Handle<FixedArrayBase> backing_store) { | 660       uint32_t key, | 
|  | 661       Handle<FixedArrayBase> backing_store) { | 
| 662     if (key < ElementsAccessorSubclass::GetCapacityImpl(backing_store)) { | 662     if (key < ElementsAccessorSubclass::GetCapacityImpl(backing_store)) { | 
| 663       return BackingStore::get(Handle<BackingStore>::cast(backing_store), key); | 663       return BackingStore::get(Handle<BackingStore>::cast(backing_store), key); | 
| 664     } else { | 664     } else { | 
| 665       return backing_store->GetIsolate()->factory()->the_hole_value(); | 665       return backing_store->GetIsolate()->factory()->the_hole_value(); | 
| 666     } | 666     } | 
| 667   } | 667   } | 
| 668 | 668 | 
| 669   MUST_USE_RESULT virtual PropertyAttributes GetAttributes( | 669   MUST_USE_RESULT virtual PropertyAttributes GetAttributes( | 
| 670       Handle<Object> receiver, | 670       Handle<Object> receiver, | 
| 671       Handle<JSObject> holder, | 671       Handle<JSObject> holder, | 
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 797           Smi::cast(JSArray::cast(from_holder)->length())->value(); | 797           Smi::cast(JSArray::cast(from_holder)->length())->value(); | 
| 798       if (copy_size >= 0 && packed_size > copy_size) { | 798       if (copy_size >= 0 && packed_size > copy_size) { | 
| 799         packed_size = copy_size; | 799         packed_size = copy_size; | 
| 800       } | 800       } | 
| 801     } | 801     } | 
| 802     Handle<FixedArrayBase> from(from_holder->elements()); | 802     Handle<FixedArrayBase> from(from_holder->elements()); | 
| 803     ElementsAccessorSubclass::CopyElementsImpl( | 803     ElementsAccessorSubclass::CopyElementsImpl( | 
| 804         from, from_start, to, from_kind, to_start, packed_size, copy_size); | 804         from, from_start, to, from_kind, to_start, packed_size, copy_size); | 
| 805   } | 805   } | 
| 806 | 806 | 
| 807   virtual Handle<FixedArray> AddElementsToFixedArray( | 807   virtual MaybeHandle<FixedArray> AddElementsToFixedArray( | 
| 808       Handle<Object> receiver, | 808       Handle<Object> receiver, | 
| 809       Handle<JSObject> holder, | 809       Handle<JSObject> holder, | 
| 810       Handle<FixedArray> to, | 810       Handle<FixedArray> to, | 
| 811       Handle<FixedArrayBase> from) V8_FINAL V8_OVERRIDE { | 811       Handle<FixedArrayBase> from) V8_FINAL V8_OVERRIDE { | 
| 812     int len0 = to->length(); | 812     int len0 = to->length(); | 
| 813 #ifdef ENABLE_SLOW_ASSERTS | 813 #ifdef ENABLE_SLOW_ASSERTS | 
| 814     if (FLAG_enable_slow_asserts) { | 814     if (FLAG_enable_slow_asserts) { | 
| 815       for (int i = 0; i < len0; i++) { | 815       for (int i = 0; i < len0; i++) { | 
| 816         ASSERT(!to->get(i)->IsTheHole()); | 816         ASSERT(!to->get(i)->IsTheHole()); | 
| 817       } | 817       } | 
| 818     } | 818     } | 
| 819 #endif | 819 #endif | 
| 820 | 820 | 
| 821     // Optimize if 'other' is empty. | 821     // Optimize if 'other' is empty. | 
| 822     // We cannot optimize if 'this' is empty, as other may have holes. | 822     // We cannot optimize if 'this' is empty, as other may have holes. | 
| 823     uint32_t len1 = ElementsAccessorSubclass::GetCapacityImpl(from); | 823     uint32_t len1 = ElementsAccessorSubclass::GetCapacityImpl(from); | 
| 824     if (len1 == 0) return to; | 824     if (len1 == 0) return to; | 
| 825 | 825 | 
|  | 826     Isolate* isolate = from->GetIsolate(); | 
|  | 827 | 
| 826     // Compute how many elements are not in other. | 828     // Compute how many elements are not in other. | 
| 827     uint32_t extra = 0; | 829     uint32_t extra = 0; | 
| 828     for (uint32_t y = 0; y < len1; y++) { | 830     for (uint32_t y = 0; y < len1; y++) { | 
| 829       uint32_t key = ElementsAccessorSubclass::GetKeyForIndexImpl(from, y); | 831       uint32_t key = ElementsAccessorSubclass::GetKeyForIndexImpl(from, y); | 
| 830       if (ElementsAccessorSubclass::HasElementImpl( | 832       if (ElementsAccessorSubclass::HasElementImpl( | 
| 831               receiver, holder, key, from)) { | 833               receiver, holder, key, from)) { | 
| 832         Handle<Object> value = | 834         Handle<Object> value; | 
| 833             ElementsAccessorSubclass::GetImpl(receiver, holder, key, from); | 835         ASSIGN_RETURN_ON_EXCEPTION( | 
|  | 836             isolate, value, | 
|  | 837             ElementsAccessorSubclass::GetImpl(receiver, holder, key, from), | 
|  | 838             FixedArray); | 
| 834 | 839 | 
| 835         ASSERT(!value->IsTheHole()); | 840         ASSERT(!value->IsTheHole()); | 
| 836         if (!HasKey(to, value)) { | 841         if (!HasKey(to, value)) { | 
| 837           extra++; | 842           extra++; | 
| 838         } | 843         } | 
| 839       } | 844       } | 
| 840     } | 845     } | 
| 841 | 846 | 
| 842     if (extra == 0) return to; | 847     if (extra == 0) return to; | 
| 843 | 848 | 
| 844     // Allocate the result | 849     // Allocate the result | 
| 845     Isolate* isolate = from->GetIsolate(); |  | 
| 846     Handle<FixedArray> result = isolate->factory()->NewFixedArray(len0 + extra); | 850     Handle<FixedArray> result = isolate->factory()->NewFixedArray(len0 + extra); | 
| 847 | 851 | 
| 848     // Fill in the content | 852     // Fill in the content | 
| 849     { | 853     { | 
| 850       DisallowHeapAllocation no_gc; | 854       DisallowHeapAllocation no_gc; | 
| 851       WriteBarrierMode mode = result->GetWriteBarrierMode(no_gc); | 855       WriteBarrierMode mode = result->GetWriteBarrierMode(no_gc); | 
| 852       for (int i = 0; i < len0; i++) { | 856       for (int i = 0; i < len0; i++) { | 
| 853         Object* e = to->get(i); | 857         Object* e = to->get(i); | 
| 854         ASSERT(e->IsString() || e->IsNumber()); | 858         ASSERT(e->IsString() || e->IsNumber()); | 
| 855         result->set(i, e, mode); | 859         result->set(i, e, mode); | 
| 856       } | 860       } | 
| 857     } | 861     } | 
| 858     // Fill in the extra values. | 862     // Fill in the extra values. | 
| 859     uint32_t index = 0; | 863     uint32_t index = 0; | 
| 860     for (uint32_t y = 0; y < len1; y++) { | 864     for (uint32_t y = 0; y < len1; y++) { | 
| 861       uint32_t key = | 865       uint32_t key = | 
| 862           ElementsAccessorSubclass::GetKeyForIndexImpl(from, y); | 866           ElementsAccessorSubclass::GetKeyForIndexImpl(from, y); | 
| 863       if (ElementsAccessorSubclass::HasElementImpl( | 867       if (ElementsAccessorSubclass::HasElementImpl( | 
| 864               receiver, holder, key, from)) { | 868               receiver, holder, key, from)) { | 
| 865         Handle<Object> value = | 869         Handle<Object> value; | 
| 866             ElementsAccessorSubclass::GetImpl(receiver, holder, key, from); | 870         ASSIGN_RETURN_ON_EXCEPTION( | 
|  | 871             isolate, value, | 
|  | 872             ElementsAccessorSubclass::GetImpl(receiver, holder, key, from), | 
|  | 873             FixedArray); | 
| 867         if (!value->IsTheHole() && !HasKey(to, value)) { | 874         if (!value->IsTheHole() && !HasKey(to, value)) { | 
| 868           result->set(len0 + index, *value); | 875           result->set(len0 + index, *value); | 
| 869           index++; | 876           index++; | 
| 870         } | 877         } | 
| 871       } | 878       } | 
| 872     } | 879     } | 
| 873     ASSERT(extra == index); | 880     ASSERT(extra == index); | 
| 874     return result; | 881     return result; | 
| 875   } | 882   } | 
| 876 | 883 | 
| (...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1326       : ElementsAccessorBase<AccessorClass, | 1333       : ElementsAccessorBase<AccessorClass, | 
| 1327                              ElementsKindTraits<Kind> >(name) {} | 1334                              ElementsKindTraits<Kind> >(name) {} | 
| 1328 | 1335 | 
| 1329  protected: | 1336  protected: | 
| 1330   typedef typename ElementsKindTraits<Kind>::BackingStore BackingStore; | 1337   typedef typename ElementsKindTraits<Kind>::BackingStore BackingStore; | 
| 1331   typedef TypedElementsAccessor<Kind> AccessorClass; | 1338   typedef TypedElementsAccessor<Kind> AccessorClass; | 
| 1332 | 1339 | 
| 1333   friend class ElementsAccessorBase<AccessorClass, | 1340   friend class ElementsAccessorBase<AccessorClass, | 
| 1334                                     ElementsKindTraits<Kind> >; | 1341                                     ElementsKindTraits<Kind> >; | 
| 1335 | 1342 | 
| 1336   static Handle<Object> GetImpl(Handle<Object> receiver, | 1343   MUST_USE_RESULT static MaybeHandle<Object> GetImpl( | 
| 1337                                 Handle<JSObject> obj, | 1344       Handle<Object> receiver, | 
| 1338                                 uint32_t key, | 1345       Handle<JSObject> obj, | 
| 1339                                 Handle<FixedArrayBase> backing_store) { | 1346       uint32_t key, | 
|  | 1347       Handle<FixedArrayBase> backing_store) { | 
| 1340     if (key < AccessorClass::GetCapacityImpl(backing_store)) { | 1348     if (key < AccessorClass::GetCapacityImpl(backing_store)) { | 
| 1341       return BackingStore::get(Handle<BackingStore>::cast(backing_store), key); | 1349       return BackingStore::get(Handle<BackingStore>::cast(backing_store), key); | 
| 1342     } else { | 1350     } else { | 
| 1343       return backing_store->GetIsolate()->factory()->undefined_value(); | 1351       return backing_store->GetIsolate()->factory()->undefined_value(); | 
| 1344     } | 1352     } | 
| 1345   } | 1353   } | 
| 1346 | 1354 | 
| 1347   MUST_USE_RESULT static PropertyAttributes GetAttributesImpl( | 1355   MUST_USE_RESULT static PropertyAttributes GetAttributesImpl( | 
| 1348       Handle<Object> receiver, | 1356       Handle<Object> receiver, | 
| 1349       Handle<JSObject> obj, | 1357       Handle<JSObject> obj, | 
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1533   friend class ElementsAccessorBase<DictionaryElementsAccessor, | 1541   friend class ElementsAccessorBase<DictionaryElementsAccessor, | 
| 1534                                     ElementsKindTraits<DICTIONARY_ELEMENTS> >; | 1542                                     ElementsKindTraits<DICTIONARY_ELEMENTS> >; | 
| 1535 | 1543 | 
| 1536   MUST_USE_RESULT virtual MaybeHandle<Object> Delete( | 1544   MUST_USE_RESULT virtual MaybeHandle<Object> Delete( | 
| 1537       Handle<JSObject> obj, | 1545       Handle<JSObject> obj, | 
| 1538       uint32_t key, | 1546       uint32_t key, | 
| 1539       JSReceiver::DeleteMode mode) V8_FINAL V8_OVERRIDE { | 1547       JSReceiver::DeleteMode mode) V8_FINAL V8_OVERRIDE { | 
| 1540     return DeleteCommon(obj, key, mode); | 1548     return DeleteCommon(obj, key, mode); | 
| 1541   } | 1549   } | 
| 1542 | 1550 | 
| 1543   static Handle<Object> GetImpl( | 1551   MUST_USE_RESULT static MaybeHandle<Object> GetImpl( | 
| 1544       Handle<Object> receiver, | 1552       Handle<Object> receiver, | 
| 1545       Handle<JSObject> obj, | 1553       Handle<JSObject> obj, | 
| 1546       uint32_t key, | 1554       uint32_t key, | 
| 1547       Handle<FixedArrayBase> store) { | 1555       Handle<FixedArrayBase> store) { | 
| 1548     Handle<SeededNumberDictionary> backing_store = | 1556     Handle<SeededNumberDictionary> backing_store = | 
| 1549         Handle<SeededNumberDictionary>::cast(store); | 1557         Handle<SeededNumberDictionary>::cast(store); | 
| 1550     Isolate* isolate = backing_store->GetIsolate(); | 1558     Isolate* isolate = backing_store->GetIsolate(); | 
| 1551     int entry = backing_store->FindEntry(key); | 1559     int entry = backing_store->FindEntry(key); | 
| 1552     if (entry != SeededNumberDictionary::kNotFound) { | 1560     if (entry != SeededNumberDictionary::kNotFound) { | 
| 1553       Handle<Object> element(backing_store->ValueAt(entry), isolate); | 1561       Handle<Object> element(backing_store->ValueAt(entry), isolate); | 
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1632  public: | 1640  public: | 
| 1633   explicit SloppyArgumentsElementsAccessor(const char* name) | 1641   explicit SloppyArgumentsElementsAccessor(const char* name) | 
| 1634       : ElementsAccessorBase< | 1642       : ElementsAccessorBase< | 
| 1635           SloppyArgumentsElementsAccessor, | 1643           SloppyArgumentsElementsAccessor, | 
| 1636           ElementsKindTraits<SLOPPY_ARGUMENTS_ELEMENTS> >(name) {} | 1644           ElementsKindTraits<SLOPPY_ARGUMENTS_ELEMENTS> >(name) {} | 
| 1637  protected: | 1645  protected: | 
| 1638   friend class ElementsAccessorBase< | 1646   friend class ElementsAccessorBase< | 
| 1639       SloppyArgumentsElementsAccessor, | 1647       SloppyArgumentsElementsAccessor, | 
| 1640       ElementsKindTraits<SLOPPY_ARGUMENTS_ELEMENTS> >; | 1648       ElementsKindTraits<SLOPPY_ARGUMENTS_ELEMENTS> >; | 
| 1641 | 1649 | 
| 1642   MUST_USE_RESULT static Handle<Object> GetImpl( | 1650   MUST_USE_RESULT static MaybeHandle<Object> GetImpl( | 
| 1643       Handle<Object> receiver, | 1651       Handle<Object> receiver, | 
| 1644       Handle<JSObject> obj, | 1652       Handle<JSObject> obj, | 
| 1645       uint32_t key, | 1653       uint32_t key, | 
| 1646       Handle<FixedArrayBase> parameters) { | 1654       Handle<FixedArrayBase> parameters) { | 
| 1647     Isolate* isolate = obj->GetIsolate(); | 1655     Isolate* isolate = obj->GetIsolate(); | 
| 1648     Handle<FixedArray> parameter_map = Handle<FixedArray>::cast(parameters); | 1656     Handle<FixedArray> parameter_map = Handle<FixedArray>::cast(parameters); | 
| 1649     Handle<Object> probe = GetParameterMapArg(obj, parameter_map, key); | 1657     Handle<Object> probe = GetParameterMapArg(obj, parameter_map, key); | 
| 1650     if (!probe->IsTheHole()) { | 1658     if (!probe->IsTheHole()) { | 
| 1651       DisallowHeapAllocation no_gc; | 1659       DisallowHeapAllocation no_gc; | 
| 1652       Context* context = Context::cast(parameter_map->get(0)); | 1660       Context* context = Context::cast(parameter_map->get(0)); | 
| 1653       int context_index = Handle<Smi>::cast(probe)->value(); | 1661       int context_index = Handle<Smi>::cast(probe)->value(); | 
| 1654       ASSERT(!context->get(context_index)->IsTheHole()); | 1662       ASSERT(!context->get(context_index)->IsTheHole()); | 
| 1655       return handle(context->get(context_index), isolate); | 1663       return handle(context->get(context_index), isolate); | 
| 1656     } else { | 1664     } else { | 
| 1657       // Object is not mapped, defer to the arguments. | 1665       // Object is not mapped, defer to the arguments. | 
| 1658       Handle<FixedArray> arguments(FixedArray::cast(parameter_map->get(1)), | 1666       Handle<FixedArray> arguments(FixedArray::cast(parameter_map->get(1)), | 
| 1659                                    isolate); | 1667                                    isolate); | 
| 1660       Handle<Object> result = ElementsAccessor::ForArray(arguments)->Get( | 1668       Handle<Object> result; | 
| 1661           receiver, obj, key, arguments); | 1669       ASSIGN_RETURN_ON_EXCEPTION( | 
|  | 1670           isolate, result, | 
|  | 1671           ElementsAccessor::ForArray(arguments)->Get( | 
|  | 1672               receiver, obj, key, arguments), | 
|  | 1673           Object); | 
| 1662       // Elements of the arguments object in slow mode might be slow aliases. | 1674       // Elements of the arguments object in slow mode might be slow aliases. | 
| 1663       if (result->IsAliasedArgumentsEntry()) { | 1675       if (result->IsAliasedArgumentsEntry()) { | 
| 1664         DisallowHeapAllocation no_gc; | 1676         DisallowHeapAllocation no_gc; | 
| 1665         AliasedArgumentsEntry* entry = AliasedArgumentsEntry::cast(*result); | 1677         AliasedArgumentsEntry* entry = AliasedArgumentsEntry::cast(*result); | 
| 1666         Context* context = Context::cast(parameter_map->get(0)); | 1678         Context* context = Context::cast(parameter_map->get(0)); | 
| 1667         int context_index = entry->aliased_context_slot(); | 1679         int context_index = entry->aliased_context_slot(); | 
| 1668         ASSERT(!context->get(context_index)->IsTheHole()); | 1680         ASSERT(!context->get(context_index)->IsTheHole()); | 
| 1669         return handle(context->get(context_index), isolate); | 1681         return handle(context->get(context_index), isolate); | 
| 1670       } else { | 1682       } else { | 
| 1671         return result; | 1683         return result; | 
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1785 | 1797 | 
| 1786   static bool HasElementImpl(Handle<Object> receiver, | 1798   static bool HasElementImpl(Handle<Object> receiver, | 
| 1787                              Handle<JSObject> holder, | 1799                              Handle<JSObject> holder, | 
| 1788                              uint32_t key, | 1800                              uint32_t key, | 
| 1789                              Handle<FixedArrayBase> parameters) { | 1801                              Handle<FixedArrayBase> parameters) { | 
| 1790     Handle<FixedArray> parameter_map = Handle<FixedArray>::cast(parameters); | 1802     Handle<FixedArray> parameter_map = Handle<FixedArray>::cast(parameters); | 
| 1791     Handle<Object> probe = GetParameterMapArg(holder, parameter_map, key); | 1803     Handle<Object> probe = GetParameterMapArg(holder, parameter_map, key); | 
| 1792     if (!probe->IsTheHole()) { | 1804     if (!probe->IsTheHole()) { | 
| 1793       return true; | 1805       return true; | 
| 1794     } else { | 1806     } else { | 
|  | 1807       Isolate* isolate = holder->GetIsolate(); | 
| 1795       Handle<FixedArrayBase> arguments(FixedArrayBase::cast( | 1808       Handle<FixedArrayBase> arguments(FixedArrayBase::cast( | 
| 1796           Handle<FixedArray>::cast(parameter_map)->get(1))); | 1809           Handle<FixedArray>::cast(parameter_map)->get(1)), isolate); | 
| 1797       ElementsAccessor* accessor = ElementsAccessor::ForArray(arguments); | 1810       ElementsAccessor* accessor = ElementsAccessor::ForArray(arguments); | 
| 1798       return !accessor->Get(receiver, holder, key, arguments)->IsTheHole(); | 1811       Handle<Object> value; | 
|  | 1812       ASSIGN_RETURN_ON_EXCEPTION_VALUE( | 
|  | 1813           isolate, value, | 
|  | 1814           accessor->Get(receiver, holder, key, arguments), | 
|  | 1815           false); | 
|  | 1816       return !value->IsTheHole(); | 
| 1799     } | 1817     } | 
| 1800   } | 1818   } | 
| 1801 | 1819 | 
| 1802  private: | 1820  private: | 
| 1803   static Handle<Object> GetParameterMapArg(Handle<JSObject> holder, | 1821   static Handle<Object> GetParameterMapArg(Handle<JSObject> holder, | 
| 1804                                            Handle<FixedArray> parameter_map, | 1822                                            Handle<FixedArray> parameter_map, | 
| 1805                                            uint32_t key) { | 1823                                            uint32_t key) { | 
| 1806     Isolate* isolate = holder->GetIsolate(); | 1824     Isolate* isolate = holder->GetIsolate(); | 
| 1807     uint32_t length = holder->IsJSArray() | 1825     uint32_t length = holder->IsJSArray() | 
| 1808         ? Smi::cast(Handle<JSArray>::cast(holder)->length())->value() | 1826         ? Smi::cast(Handle<JSArray>::cast(holder)->length())->value() | 
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1995       UNREACHABLE(); | 2013       UNREACHABLE(); | 
| 1996       break; | 2014       break; | 
| 1997   } | 2015   } | 
| 1998 | 2016 | 
| 1999   array->set_elements(*elms); | 2017   array->set_elements(*elms); | 
| 2000   array->set_length(Smi::FromInt(number_of_elements)); | 2018   array->set_length(Smi::FromInt(number_of_elements)); | 
| 2001   return array; | 2019   return array; | 
| 2002 } | 2020 } | 
| 2003 | 2021 | 
| 2004 } }  // namespace v8::internal | 2022 } }  // namespace v8::internal | 
| OLD | NEW | 
|---|