OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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 <iomanip> | 5 #include <iomanip> |
6 #include <sstream> | 6 #include <sstream> |
7 | 7 |
8 #include "src/v8.h" | 8 #include "src/v8.h" |
9 | 9 |
10 #include "src/accessors.h" | 10 #include "src/accessors.h" |
(...skipping 11831 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11842 SetFastElementsCapacitySmiMode smi_mode) { | 11842 SetFastElementsCapacitySmiMode smi_mode) { |
11843 Handle<FixedArray> new_elements = | 11843 Handle<FixedArray> new_elements = |
11844 SetFastElementsCapacity(object, capacity, smi_mode); | 11844 SetFastElementsCapacity(object, capacity, smi_mode); |
11845 if (object->IsJSArray()) { | 11845 if (object->IsJSArray()) { |
11846 Handle<JSArray>::cast(object)->set_length(Smi::FromInt(length)); | 11846 Handle<JSArray>::cast(object)->set_length(Smi::FromInt(length)); |
11847 } | 11847 } |
11848 return new_elements; | 11848 return new_elements; |
11849 } | 11849 } |
11850 | 11850 |
11851 | 11851 |
11852 Handle<FixedArrayBase> JSObject::SetFastDoubleElementsCapacity( | 11852 void JSObject::SetFastDoubleElementsCapacityAndLength(Handle<JSObject> object, |
11853 Handle<JSObject> object, int capacity) { | 11853 int capacity, |
11854 // We should never end in here with a pixel or external array. | 11854 int length) { |
11855 DCHECK(!object->HasExternalArrayElements()); | 11855 ElementsAccessor* accessor = ElementsAccessor::ForKind(FAST_DOUBLE_ELEMENTS); |
11856 | 11856 accessor->GrowCapacityAndConvert(object, capacity); |
11857 Handle<FixedArrayBase> elems = | 11857 if (object->IsJSArray()) { |
11858 object->GetIsolate()->factory()->NewFixedDoubleArray(capacity); | 11858 Handle<JSArray>::cast(object)->set_length(Smi::FromInt(length)); |
11859 | |
11860 ElementsKind elements_kind = object->GetElementsKind(); | |
11861 CHECK(elements_kind != SLOPPY_ARGUMENTS_ELEMENTS); | |
11862 ElementsKind new_elements_kind = elements_kind; | |
11863 if (IsHoleyElementsKind(elements_kind)) { | |
11864 new_elements_kind = FAST_HOLEY_DOUBLE_ELEMENTS; | |
11865 } else { | |
11866 new_elements_kind = FAST_DOUBLE_ELEMENTS; | |
11867 } | 11859 } |
11868 | |
11869 Handle<Map> new_map = GetElementsTransitionMap(object, new_elements_kind); | |
11870 | |
11871 Handle<FixedArrayBase> old_elements(object->elements()); | |
11872 ElementsAccessor* accessor = ElementsAccessor::ForKind(FAST_DOUBLE_ELEMENTS); | |
11873 accessor->CopyElements(object, elems, elements_kind); | |
11874 | |
11875 JSObject::ValidateElements(object); | |
11876 JSObject::SetMapAndElements(object, new_map, elems); | |
11877 | |
11878 if (FLAG_trace_elements_transitions) { | |
11879 PrintElementsTransition(stdout, object, elements_kind, old_elements, | |
11880 object->GetElementsKind(), elems); | |
11881 } | |
11882 | |
11883 return elems; | |
11884 } | 11860 } |
11885 | 11861 |
11886 | 11862 |
11887 Handle<FixedArrayBase> JSObject::SetFastDoubleElementsCapacityAndLength( | |
11888 Handle<JSObject> object, int capacity, int length) { | |
11889 Handle<FixedArrayBase> new_elements = | |
11890 SetFastDoubleElementsCapacity(object, capacity); | |
11891 if (object->IsJSArray()) { | |
11892 Handle<JSArray>::cast(object)->set_length(Smi::FromInt(length)); | |
11893 } | |
11894 return new_elements; | |
11895 } | |
11896 | |
11897 | |
11898 // static | 11863 // static |
11899 void JSArray::Initialize(Handle<JSArray> array, int capacity, int length) { | 11864 void JSArray::Initialize(Handle<JSArray> array, int capacity, int length) { |
11900 DCHECK(capacity >= 0); | 11865 DCHECK(capacity >= 0); |
11901 array->GetIsolate()->factory()->NewJSArrayStorage( | 11866 array->GetIsolate()->factory()->NewJSArrayStorage( |
11902 array, length, capacity, INITIALIZE_ARRAY_ELEMENTS_WITH_HOLE); | 11867 array, length, capacity, INITIALIZE_ARRAY_ELEMENTS_WITH_HOLE); |
11903 } | 11868 } |
11904 | 11869 |
11905 | 11870 |
11906 // Returns false if the passed-in index is marked non-configurable, which will | 11871 // Returns false if the passed-in index is marked non-configurable, which will |
11907 // cause the truncation operation to halt, and thus no further old values need | 11872 // cause the truncation operation to halt, and thus no further old values need |
(...skipping 4743 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
16651 Handle<Object> new_value) { | 16616 Handle<Object> new_value) { |
16652 if (cell->value() != *new_value) { | 16617 if (cell->value() != *new_value) { |
16653 cell->set_value(*new_value); | 16618 cell->set_value(*new_value); |
16654 Isolate* isolate = cell->GetIsolate(); | 16619 Isolate* isolate = cell->GetIsolate(); |
16655 cell->dependent_code()->DeoptimizeDependentCodeGroup( | 16620 cell->dependent_code()->DeoptimizeDependentCodeGroup( |
16656 isolate, DependentCode::kPropertyCellChangedGroup); | 16621 isolate, DependentCode::kPropertyCellChangedGroup); |
16657 } | 16622 } |
16658 } | 16623 } |
16659 } // namespace internal | 16624 } // namespace internal |
16660 } // namespace v8 | 16625 } // namespace v8 |
OLD | NEW |