Chromium Code Reviews| OLD | NEW |
|---|---|
| 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/elements.h" | 5 #include "src/elements.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/factory.h" | 9 #include "src/factory.h" |
| 10 #include "src/isolate-inl.h" | 10 #include "src/isolate-inl.h" |
| (...skipping 873 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 884 | 884 |
| 885 void TransitionElementsKind(Handle<JSObject> object, Handle<Map> map) final { | 885 void TransitionElementsKind(Handle<JSObject> object, Handle<Map> map) final { |
| 886 Subclass::TransitionElementsKindImpl(object, map); | 886 Subclass::TransitionElementsKindImpl(object, map); |
| 887 } | 887 } |
| 888 | 888 |
| 889 void GrowCapacityAndConvert(Handle<JSObject> object, | 889 void GrowCapacityAndConvert(Handle<JSObject> object, |
| 890 uint32_t capacity) final { | 890 uint32_t capacity) final { |
| 891 Subclass::GrowCapacityAndConvertImpl(object, capacity); | 891 Subclass::GrowCapacityAndConvertImpl(object, capacity); |
| 892 } | 892 } |
| 893 | 893 |
| 894 bool GrowCapacity(Handle<JSObject> object, uint32_t capacity) final { | |
| 895 if (object->map()->is_prototype_map() || | |
|
Jakob Kummerow
2016/08/16 15:15:01
To explain why this code does what it's doing, ple
| |
| 896 object->WouldConvertToSlowElements(capacity)) { | |
| 897 return false; | |
| 898 } | |
| 899 Handle<FixedArrayBase> old_elements(object->elements()); | |
| 900 DCHECK(static_cast<uint32_t>(old_elements->length()) < capacity); | |
| 901 Handle<FixedArrayBase> elements = | |
| 902 ConvertElementsWithCapacity(object, old_elements, kind(), capacity); | |
| 903 | |
| 904 DCHECK_EQ(object->GetElementsKind(), kind()); | |
| 905 // Transition through the allocation site as well if present. | |
| 906 if (JSObject::UpdateAllocationSite<AllocationSiteUpdateMode::kCheckOnly>( | |
| 907 object, kind())) { | |
| 908 return false; | |
| 909 } | |
| 910 | |
| 911 object->set_elements(*elements); | |
| 912 return true; | |
| 913 } | |
| 914 | |
| 894 void Delete(Handle<JSObject> obj, uint32_t entry) final { | 915 void Delete(Handle<JSObject> obj, uint32_t entry) final { |
| 895 Subclass::DeleteImpl(obj, entry); | 916 Subclass::DeleteImpl(obj, entry); |
| 896 } | 917 } |
| 897 | 918 |
| 898 static void CopyElementsImpl(FixedArrayBase* from, uint32_t from_start, | 919 static void CopyElementsImpl(FixedArrayBase* from, uint32_t from_start, |
| 899 FixedArrayBase* to, ElementsKind from_kind, | 920 FixedArrayBase* to, ElementsKind from_kind, |
| 900 uint32_t to_start, int packed_size, | 921 uint32_t to_start, int packed_size, |
| 901 int copy_size) { | 922 int copy_size) { |
| 902 UNREACHABLE(); | 923 UNREACHABLE(); |
| 903 } | 924 } |
| (...skipping 2565 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3469 insertion_index += len; | 3490 insertion_index += len; |
| 3470 } | 3491 } |
| 3471 | 3492 |
| 3472 DCHECK_EQ(insertion_index, result_len); | 3493 DCHECK_EQ(insertion_index, result_len); |
| 3473 return result_array; | 3494 return result_array; |
| 3474 } | 3495 } |
| 3475 | 3496 |
| 3476 ElementsAccessor** ElementsAccessor::elements_accessors_ = NULL; | 3497 ElementsAccessor** ElementsAccessor::elements_accessors_ = NULL; |
| 3477 } // namespace internal | 3498 } // namespace internal |
| 3478 } // namespace v8 | 3499 } // namespace v8 |
| OLD | NEW |