OLD | NEW |
---|---|
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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/objects.h" | 5 #include "src/objects.h" |
6 | 6 |
7 #include <cmath> | 7 #include <cmath> |
8 #include <iomanip> | 8 #include <iomanip> |
9 #include <memory> | 9 #include <memory> |
10 #include <sstream> | 10 #include <sstream> |
(...skipping 15157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
15168 from->length()); | 15168 from->length()); |
15169 } | 15169 } |
15170 | 15170 |
15171 int BytecodeArray::LookupRangeInHandlerTable( | 15171 int BytecodeArray::LookupRangeInHandlerTable( |
15172 int code_offset, int* data, HandlerTable::CatchPrediction* prediction) { | 15172 int code_offset, int* data, HandlerTable::CatchPrediction* prediction) { |
15173 HandlerTable* table = HandlerTable::cast(handler_table()); | 15173 HandlerTable* table = HandlerTable::cast(handler_table()); |
15174 code_offset++; // Point after current bytecode. | 15174 code_offset++; // Point after current bytecode. |
15175 return table->LookupRange(code_offset, data, prediction); | 15175 return table->LookupRange(code_offset, data, prediction); |
15176 } | 15176 } |
15177 | 15177 |
15178 void BytecodeArray::MakeOlder() { | |
15179 Age age = bytecode_age(); | |
15180 if (age < kLastBytecodeAge) { | |
15181 set_bytecode_age(static_cast<Age>(age + 1)); | |
15182 } | |
15183 DCHECK_GE(age, kFirstBytecodeAge); | |
15184 DCHECK_LE(age, kLastBytecodeAge); | |
Michael Starzinger
2016/11/28 14:21:30
nit: Shouldn't these DCHECKs be applied on the _ne
rmcilroy
2016/11/28 14:29:04
Yes the should, updated to check bytecode_age() in
| |
15185 } | |
15186 | |
15187 bool BytecodeArray::IsOld() const { | |
15188 return bytecode_age() >= kIsOldBytecodeAge; | |
15189 } | |
15190 | |
15178 // static | 15191 // static |
15179 void JSArray::Initialize(Handle<JSArray> array, int capacity, int length) { | 15192 void JSArray::Initialize(Handle<JSArray> array, int capacity, int length) { |
15180 DCHECK(capacity >= 0); | 15193 DCHECK(capacity >= 0); |
15181 array->GetIsolate()->factory()->NewJSArrayStorage( | 15194 array->GetIsolate()->factory()->NewJSArrayStorage( |
15182 array, length, capacity, INITIALIZE_ARRAY_ELEMENTS_WITH_HOLE); | 15195 array, length, capacity, INITIALIZE_ARRAY_ELEMENTS_WITH_HOLE); |
15183 } | 15196 } |
15184 | 15197 |
15185 void JSArray::SetLength(Handle<JSArray> array, uint32_t new_length) { | 15198 void JSArray::SetLength(Handle<JSArray> array, uint32_t new_length) { |
15186 // We should never end in here with a pixel or external array. | 15199 // We should never end in here with a pixel or external array. |
15187 DCHECK(array->AllowsSetLength()); | 15200 DCHECK(array->AllowsSetLength()); |
(...skipping 2775 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
17963 count = Smi::FromInt(count->value() - 1); | 17976 count = Smi::FromInt(count->value() - 1); |
17964 if (count->value() == 0) { | 17977 if (count->value() == 0) { |
17965 NoWriteBarrierSet(this, entry_index, the_hole_value); | 17978 NoWriteBarrierSet(this, entry_index, the_hole_value); |
17966 NoWriteBarrierSet(this, value_index, the_hole_value); | 17979 NoWriteBarrierSet(this, value_index, the_hole_value); |
17967 ElementRemoved(); | 17980 ElementRemoved(); |
17968 } else { | 17981 } else { |
17969 NoWriteBarrierSet(this, value_index, count); | 17982 NoWriteBarrierSet(this, value_index, count); |
17970 } | 17983 } |
17971 } else if (get(entry_index)->IsFixedArray()) { | 17984 } else if (get(entry_index)->IsFixedArray()) { |
17972 SharedFunctionInfo* info = SharedFunctionInfo::cast(get(value_index)); | 17985 SharedFunctionInfo* info = SharedFunctionInfo::cast(get(value_index)); |
17973 if (info->code()->kind() != Code::FUNCTION || info->code()->IsOld()) { | 17986 bool is_old = |
17987 info->IsInterpreted() | |
17988 ? info->bytecode_array()->IsOld() | |
17989 : info->code()->kind() != Code::FUNCTION || info->code()->IsOld(); | |
17990 if (is_old) { | |
17974 NoWriteBarrierSet(this, entry_index, the_hole_value); | 17991 NoWriteBarrierSet(this, entry_index, the_hole_value); |
17975 NoWriteBarrierSet(this, value_index, the_hole_value); | 17992 NoWriteBarrierSet(this, value_index, the_hole_value); |
17976 ElementRemoved(); | 17993 ElementRemoved(); |
17977 } | 17994 } |
17978 } | 17995 } |
17979 } | 17996 } |
17980 } | 17997 } |
17981 | 17998 |
17982 | 17999 |
17983 void CompilationCacheTable::Remove(Object* value) { | 18000 void CompilationCacheTable::Remove(Object* value) { |
(...skipping 2455 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
20439 // depend on this. | 20456 // depend on this. |
20440 return DICTIONARY_ELEMENTS; | 20457 return DICTIONARY_ELEMENTS; |
20441 } | 20458 } |
20442 DCHECK_LE(kind, LAST_ELEMENTS_KIND); | 20459 DCHECK_LE(kind, LAST_ELEMENTS_KIND); |
20443 return kind; | 20460 return kind; |
20444 } | 20461 } |
20445 } | 20462 } |
20446 | 20463 |
20447 } // namespace internal | 20464 } // namespace internal |
20448 } // namespace v8 | 20465 } // namespace v8 |
OLD | NEW |