Index: src/objects-inl.h |
diff --git a/src/objects-inl.h b/src/objects-inl.h |
index ecf821f2e7ca0d02d3f8e79b0f15b4a72362647e..963160b8f8f313cf445c4a34c11b1e41a549400a 100644 |
--- a/src/objects-inl.h |
+++ b/src/objects-inl.h |
@@ -178,6 +178,7 @@ TYPE_CHECKER(MutableHeapNumber, MUTABLE_HEAP_NUMBER_TYPE) |
TYPE_CHECKER(Oddball, ODDBALL_TYPE) |
TYPE_CHECKER(PropertyCell, PROPERTY_CELL_TYPE) |
TYPE_CHECKER(SharedFunctionInfo, SHARED_FUNCTION_INFO_TYPE) |
+TYPE_CHECKER(SourcePositionTableWithFrameCache, TUPLE2_TYPE) |
TYPE_CHECKER(Symbol, SYMBOL_TYPE) |
TYPE_CHECKER(TransitionArray, TRANSITION_ARRAY_TYPE) |
TYPE_CHECKER(WeakCell, WEAK_CELL_TYPE) |
@@ -684,6 +685,7 @@ CAST_ACCESSOR(SeqOneByteString) |
CAST_ACCESSOR(SeqString) |
CAST_ACCESSOR(SeqTwoByteString) |
CAST_ACCESSOR(SharedFunctionInfo) |
+CAST_ACCESSOR(SourcePositionTableWithFrameCache) |
CAST_ACCESSOR(SlicedString) |
CAST_ACCESSOR(Smi) |
CAST_ACCESSOR(String) |
@@ -4025,13 +4027,20 @@ int BytecodeArray::parameter_count() const { |
ACCESSORS(BytecodeArray, constant_pool, FixedArray, kConstantPoolOffset) |
ACCESSORS(BytecodeArray, handler_table, FixedArray, kHandlerTableOffset) |
-ACCESSORS(BytecodeArray, source_position_table, ByteArray, |
+ACCESSORS(BytecodeArray, source_position_table, Object, |
kSourcePositionTableOffset) |
Address BytecodeArray::GetFirstBytecodeAddress() { |
return reinterpret_cast<Address>(this) - kHeapObjectTag + kHeaderSize; |
} |
+ByteArray* BytecodeArray::SourcePositionTable() { |
+ Object* maybe_table = source_position_table(); |
+ if (maybe_table->IsByteArray()) return ByteArray::cast(maybe_table); |
+ DCHECK(maybe_table->IsSourcePositionTableWithFrameCache()); |
+ return SourcePositionTableWithFrameCache::cast(maybe_table) |
+ ->source_position_table(); |
+} |
int BytecodeArray::BytecodeArraySize() { return SizeFor(this->length()); } |
@@ -4039,7 +4048,7 @@ int BytecodeArray::SizeIncludingMetadata() { |
int size = BytecodeArraySize(); |
size += constant_pool()->Size(); |
size += handler_table()->Size(); |
- size += source_position_table()->Size(); |
+ size += SourcePositionTable()->Size(); |
return size; |
} |
@@ -5239,9 +5248,9 @@ int AbstractCode::instruction_size() { |
ByteArray* AbstractCode::source_position_table() { |
if (IsCode()) { |
- return GetCode()->source_position_table(); |
+ return GetCode()->SourcePositionTable(); |
} else { |
- return GetBytecodeArray()->source_position_table(); |
+ return GetBytecodeArray()->SourcePositionTable(); |
} |
} |
@@ -5253,6 +5262,20 @@ void AbstractCode::set_source_position_table(ByteArray* source_position_table) { |
} |
} |
+Object* AbstractCode::stack_frame_cache() { |
+ Object* maybe_table; |
+ if (IsCode()) { |
+ maybe_table = GetCode()->source_position_table(); |
+ } else { |
+ maybe_table = GetBytecodeArray()->source_position_table(); |
+ } |
+ if (maybe_table->IsSourcePositionTableWithFrameCache()) { |
+ return SourcePositionTableWithFrameCache::cast(maybe_table) |
+ ->stack_frame_cache(); |
+ } |
+ return Smi::kZero; |
+} |
+ |
int AbstractCode::SizeIncludingMetadata() { |
if (IsCode()) { |
return GetCode()->SizeIncludingMetadata(); |
@@ -5825,6 +5848,11 @@ BOOL_ACCESSORS(StackFrameInfo, flag, is_eval, kIsEvalBit) |
BOOL_ACCESSORS(StackFrameInfo, flag, is_constructor, kIsConstructorBit) |
BOOL_ACCESSORS(StackFrameInfo, flag, is_wasm, kIsWasmBit) |
+ACCESSORS(SourcePositionTableWithFrameCache, source_position_table, ByteArray, |
+ kSourcePositionTableIndex) |
+ACCESSORS(SourcePositionTableWithFrameCache, stack_frame_cache, |
+ UnseededNumberDictionary, kStackFrameCacheIndex) |
+ |
ACCESSORS(SharedFunctionInfo, name, Object, kNameOffset) |
ACCESSORS(SharedFunctionInfo, optimized_code_map, FixedArray, |
kOptimizedCodeMapOffset) |
@@ -6651,7 +6679,7 @@ INT_ACCESSORS(Code, constant_pool_offset, kConstantPoolOffset) |
CODE_ACCESSORS(relocation_info, ByteArray, kRelocationInfoOffset) |
CODE_ACCESSORS(handler_table, FixedArray, kHandlerTableOffset) |
CODE_ACCESSORS(deoptimization_data, FixedArray, kDeoptimizationDataOffset) |
-CODE_ACCESSORS(source_position_table, ByteArray, kSourcePositionTableOffset) |
+CODE_ACCESSORS(source_position_table, Object, kSourcePositionTableOffset) |
CODE_ACCESSORS(trap_handler_index, Smi, kTrapHandlerIndex) |
CODE_ACCESSORS(raw_type_feedback_info, Object, kTypeFeedbackInfoOffset) |
CODE_ACCESSORS(next_code_link, Object, kNextCodeLinkOffset) |
@@ -6684,6 +6712,13 @@ void Code::set_type_feedback_info(Object* value, WriteBarrierMode mode) { |
value, mode); |
} |
+ByteArray* Code::SourcePositionTable() { |
+ Object* maybe_table = source_position_table(); |
+ if (maybe_table->IsByteArray()) return ByteArray::cast(maybe_table); |
+ DCHECK(maybe_table->IsSourcePositionTableWithFrameCache()); |
+ return SourcePositionTableWithFrameCache::cast(maybe_table) |
+ ->source_position_table(); |
+} |
uint32_t Code::stub_key() { |
DCHECK(IsCodeStubOrIC()); |
@@ -6750,7 +6785,9 @@ int Code::SizeIncludingMetadata() { |
size += relocation_info()->Size(); |
size += deoptimization_data()->Size(); |
size += handler_table()->Size(); |
- if (kind() == FUNCTION) size += source_position_table()->Size(); |
+ if (kind() == FUNCTION) { |
+ size += SourcePositionTable()->Size(); |
+ } |
return size; |
} |