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 7838 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
7849 UNREACHABLE(); | 7849 UNREACHABLE(); |
7850 } | 7850 } |
7851 | 7851 |
7852 | 7852 |
7853 // static | 7853 // static |
7854 Handle<WeakFixedArray> WeakFixedArray::Allocate( | 7854 Handle<WeakFixedArray> WeakFixedArray::Allocate( |
7855 Isolate* isolate, int size, Handle<WeakFixedArray> initialize_from) { | 7855 Isolate* isolate, int size, Handle<WeakFixedArray> initialize_from) { |
7856 DCHECK(0 <= size); | 7856 DCHECK(0 <= size); |
7857 Handle<FixedArray> result = | 7857 Handle<FixedArray> result = |
7858 isolate->factory()->NewUninitializedFixedArray(size + kFirstIndex); | 7858 isolate->factory()->NewUninitializedFixedArray(size + kFirstIndex); |
7859 Handle<WeakFixedArray> casted_result = Handle<WeakFixedArray>::cast(result); | 7859 int index = 0; |
7860 if (initialize_from.is_null()) { | 7860 if (!initialize_from.is_null()) { |
7861 for (int i = 0; i < result->length(); ++i) { | |
7862 result->set(i, Smi::FromInt(0)); | |
7863 } | |
7864 } else { | |
7865 DCHECK(initialize_from->Length() <= size); | 7861 DCHECK(initialize_from->Length() <= size); |
7866 Handle<FixedArray> raw_source = Handle<FixedArray>::cast(initialize_from); | 7862 Handle<FixedArray> raw_source = Handle<FixedArray>::cast(initialize_from); |
7867 int target_index = kFirstIndex; | 7863 // Copy the entries without compacting, since the PrototypeInfo relies on |
7868 for (int source_index = kFirstIndex; source_index < raw_source->length(); | 7864 // the index of the entries not to change. |
7869 ++source_index) { | 7865 while (index < raw_source->length()) { |
7870 // The act of allocating might have caused entries in the source array | 7866 result->set(index, raw_source->get(index)); |
7871 // to be cleared. Copy only what's needed. | 7867 index++; |
7872 if (initialize_from->IsEmptySlot(source_index - kFirstIndex)) continue; | |
7873 result->set(target_index++, raw_source->get(source_index)); | |
7874 } | |
7875 casted_result->set_last_used_index(target_index - 1 - kFirstIndex); | |
7876 for (; target_index < result->length(); ++target_index) { | |
7877 result->set(target_index, Smi::FromInt(0)); | |
7878 } | 7868 } |
mvstanton
2015/08/19 13:52:12
How about calling set_last_used_index(index); here
| |
7879 } | 7869 } |
7880 return casted_result; | 7870 while (index < result->length()) { |
7871 result->set(index, Smi::FromInt(0)); | |
7872 index++; | |
7873 } | |
7874 return Handle<WeakFixedArray>::cast(result); | |
7881 } | 7875 } |
7882 | 7876 |
7883 | 7877 |
7884 Handle<ArrayList> ArrayList::Add(Handle<ArrayList> array, Handle<Object> obj, | 7878 Handle<ArrayList> ArrayList::Add(Handle<ArrayList> array, Handle<Object> obj, |
7885 AddMode mode) { | 7879 AddMode mode) { |
7886 int length = array->Length(); | 7880 int length = array->Length(); |
7887 array = EnsureSpace(array, length + 1); | 7881 array = EnsureSpace(array, length + 1); |
7888 if (mode == kReloadLengthAfterAllocation) { | 7882 if (mode == kReloadLengthAfterAllocation) { |
7889 DCHECK(array->Length() <= length); | 7883 DCHECK(array->Length() <= length); |
7890 length = array->Length(); | 7884 length = array->Length(); |
(...skipping 7826 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
15717 if (cell->value() != *new_value) { | 15711 if (cell->value() != *new_value) { |
15718 cell->set_value(*new_value); | 15712 cell->set_value(*new_value); |
15719 Isolate* isolate = cell->GetIsolate(); | 15713 Isolate* isolate = cell->GetIsolate(); |
15720 cell->dependent_code()->DeoptimizeDependentCodeGroup( | 15714 cell->dependent_code()->DeoptimizeDependentCodeGroup( |
15721 isolate, DependentCode::kPropertyCellChangedGroup); | 15715 isolate, DependentCode::kPropertyCellChangedGroup); |
15722 } | 15716 } |
15723 } | 15717 } |
15724 | 15718 |
15725 } // namespace internal | 15719 } // namespace internal |
15726 } // namespace v8 | 15720 } // namespace v8 |
OLD | NEW |