Index: runtime/vm/object.h |
diff --git a/runtime/vm/object.h b/runtime/vm/object.h |
index f62859b23a36944cbf3c2fc5a3906e4aefb7990a..69dc8146685755d55607dc1a7175e4df918de61e 100644 |
--- a/runtime/vm/object.h |
+++ b/runtime/vm/object.h |
@@ -4401,66 +4401,17 @@ class CodeSourceMap : public Object { |
return RoundedAllocationSize(sizeof(RawCodeSourceMap) + len); |
} |
- static RawCodeSourceMap* New(GrowableArray<uint8_t>* delta_encoded_data); |
- |
- void PrintToJSONObject(JSONObject* jsobj, bool ref) const; |
- |
- // Encode integer in SLEB128 format. |
- static void EncodeInteger(GrowableArray<uint8_t>* data, intptr_t value); |
- |
- // Decode SLEB128 encoded integer. Update byte_index to the next integer. |
- intptr_t DecodeInteger(intptr_t* byte_index) const; |
- |
- TokenPosition TokenPositionForPCOffset(uword pc_offset) const; |
- RawFunction* FunctionForPCOffset(const Code& code, |
- const Function& function, |
- uword pc_offset) const; |
- RawScript* ScriptForPCOffset(const Code& code, |
- const Function& function, |
- uword pc_offset) const; |
- |
- static void Dump(const CodeSourceMap& code_source_map, |
- const Code& code, |
- const Function& function); |
- |
- class Iterator : ValueObject { |
- public: |
- explicit Iterator(const CodeSourceMap& code_source_map) |
- : code_source_map_(code_source_map), |
- byte_index_(0), |
- cur_pc_offset_(0), |
- cur_token_pos_(0) {} |
- |
- bool MoveNext() { |
- // Moves to the next record. |
- while (byte_index_ < code_source_map_.Length()) { |
- cur_pc_offset_ += code_source_map_.DecodeInteger(&byte_index_); |
- cur_token_pos_ += code_source_map_.DecodeInteger(&byte_index_); |
- |
- return true; |
- } |
- return false; |
- } |
- |
- uword PcOffset() const { return cur_pc_offset_; } |
- TokenPosition TokenPos() const { return TokenPosition(cur_token_pos_); } |
- |
- private: |
- friend class CodeSourceMap; |
+ static RawCodeSourceMap* New(intptr_t length); |
- const CodeSourceMap& code_source_map_; |
- intptr_t byte_index_; |
+ intptr_t Length() const { return raw_ptr()->length_; } |
+ uint8_t* Data() const { |
+ return UnsafeMutableNonPointer(&raw_ptr()->data()[0]); |
+ } |
- intptr_t cur_pc_offset_; |
- intptr_t cur_token_pos_; |
- }; |
+ void PrintToJSONObject(JSONObject* jsobj, bool ref) const; |
private: |
- static RawCodeSourceMap* New(intptr_t length); |
- |
- intptr_t Length() const; |
void SetLength(intptr_t value) const; |
- void CopyData(GrowableArray<uint8_t>* data); |
FINAL_HEAP_OBJECT_IMPLEMENTATION(CodeSourceMap, Object); |
friend class Class; |
@@ -4730,8 +4681,6 @@ class Code : public Object { |
// that are embedded inside the Code object. |
void ResetICDatas(Zone* zone) const; |
- TokenPosition GetTokenPositionAt(intptr_t offset) const; |
- |
// Array of DeoptInfo objects. |
RawArray* deopt_info_array() const { |
#if defined(DART_PRECOMPILED_RUNTIME) |
@@ -4826,32 +4775,23 @@ class Code : public Object { |
// Returns -1 if no prologue offset is available. |
intptr_t GetPrologueOffset() const; |
- enum InlinedIntervalEntries { |
- kInlIntStart = 0, |
- kInlIntInliningId = 1, |
- kInlIntNumEntries = 2, |
- }; |
+ RawArray* inlined_id_to_function() const; |
+ void set_inlined_id_to_function(const Array& value) const; |
- RawArray* GetInlinedIntervals() const; |
- void SetInlinedIntervals(const Array& value) const; |
- |
- RawArray* GetInlinedIdToFunction() const; |
- void SetInlinedIdToFunction(const Array& value) const; |
- |
- RawArray* GetInlinedIdToTokenPos() const; |
- void SetInlinedIdToTokenPos(const Array& value) const; |
- |
- RawArray* GetInlinedCallerIdMap() const; |
- void SetInlinedCallerIdMap(const Array& value) const; |
- |
- // If |token_positions| is not NULL it will be populated with the token |
- // positions of the inlined calls. |
+ // Provides the call stack at the given pc offset, with the top-of-stack in |
+ // the last element and the root function (this) as the first element, along |
+ // with the corresponding source positions. Note the token position for each |
+ // function except the top-of-stack is the position of the call to the next |
+ // function. The stack will be empty if we lack the metadata to produce it, |
+ // which happens for stub code. |
void GetInlinedFunctionsAt( |
- intptr_t offset, |
- GrowableArray<Function*>* fs, |
- GrowableArray<TokenPosition>* token_positions = NULL) const; |
+ intptr_t pc_offset, |
+ GrowableArray<const Function*>* functions, |
+ GrowableArray<TokenPosition>* token_positions) const; |
- void DumpInlinedIntervals() const; |
+ NOT_IN_PRODUCT(void PrintJSONInlineIntervals(JSONObject* object) const); |
+ void DumpInlineIntervals() const; |
+ void DumpSourcePositions() const; |
RawLocalVarDescriptors* var_descriptors() const { |
#if defined(DART_PRECOMPILED_RUNTIME) |
@@ -5036,9 +4976,6 @@ class Code : public Object { |
*PointerOffsetAddrAt(index) = offset_in_instructions; |
} |
- // Currently slow, as it searches linearly through inlined_intervals(). |
- intptr_t GetCallerId(intptr_t inlined_id) const; |
- |
intptr_t BinarySearchInSCallTable(uword pc) const; |
static RawCode* LookupCodeInIsolate(Isolate* isolate, uword pc); |