Index: src/assembler.h |
diff --git a/src/assembler.h b/src/assembler.h |
index e8cecc3fdb941cbf02081ba5d60a8462b6c0e974..918de62a4239c2cd5b00f2e1dafa9b0a7ad9d2c5 100644 |
--- a/src/assembler.h |
+++ b/src/assembler.h |
@@ -42,7 +42,7 @@ |
namespace v8 { |
namespace internal { |
- |
+const unsigned kNoASTId = -1; |
// ----------------------------------------------------------------------------- |
// Platform independent assembler base class. |
@@ -209,10 +209,11 @@ class RelocInfo BASE_EMBEDDED { |
enum Mode { |
// Please note the order is important (see IsCodeTarget, IsGCRelocMode). |
+ CODE_TARGET, // Code target which is not any of the above. |
+ CODE_TARGET_WITH_ID, |
CONSTRUCT_CALL, // code target that is a call to a JavaScript constructor. |
CODE_TARGET_CONTEXT, // Code target used for contextual loads and stores. |
DEBUG_BREAK, // Code target for the debugger statement. |
- CODE_TARGET, // Code target which is not any of the above. |
EMBEDDED_OBJECT, |
GLOBAL_PROPERTY_CELL, |
@@ -228,10 +229,12 @@ class RelocInfo BASE_EMBEDDED { |
// add more as needed |
// Pseudo-types |
- NUMBER_OF_MODES, // must be no greater than 14 - see RelocInfoWriter |
+ NUMBER_OF_MODES, // There are at most 14 modes with noncompact encoding. |
NONE, // never recorded |
- LAST_CODE_ENUM = CODE_TARGET, |
- LAST_GCED_ENUM = GLOBAL_PROPERTY_CELL |
+ LAST_CODE_ENUM = DEBUG_BREAK, |
+ LAST_GCED_ENUM = GLOBAL_PROPERTY_CELL, |
+ // Modes <= LAST_COMPACT_ENUM are guaranteed to have compact encoding. |
+ LAST_COMPACT_ENUM = CODE_TARGET_WITH_ID |
}; |
@@ -361,7 +364,8 @@ class RelocInfo BASE_EMBEDDED { |
static const int kCodeTargetMask = (1 << (LAST_CODE_ENUM + 1)) - 1; |
static const int kPositionMask = 1 << POSITION | 1 << STATEMENT_POSITION; |
- static const int kDebugMask = kPositionMask | 1 << COMMENT; |
+ static const int kDataMask = |
+ (1 << CODE_TARGET_WITH_ID) | kPositionMask | (1 << COMMENT); |
static const int kApplyMask; // Modes affected by apply. Depends on arch. |
private: |
@@ -380,9 +384,14 @@ class RelocInfo BASE_EMBEDDED { |
// lower addresses. |
class RelocInfoWriter BASE_EMBEDDED { |
public: |
- RelocInfoWriter() : pos_(NULL), last_pc_(NULL), last_data_(0) {} |
- RelocInfoWriter(byte* pos, byte* pc) : pos_(pos), last_pc_(pc), |
- last_data_(0) {} |
+ RelocInfoWriter() : pos_(NULL), |
+ last_pc_(NULL), |
+ last_id_(0), |
+ last_position_(0) {} |
+ RelocInfoWriter(byte* pos, byte* pc) : pos_(pos), |
+ last_pc_(pc), |
+ last_id_(0), |
+ last_position_(0) {} |
byte* pos() const { return pos_; } |
byte* last_pc() const { return last_pc_; } |
@@ -407,13 +416,15 @@ class RelocInfoWriter BASE_EMBEDDED { |
inline uint32_t WriteVariableLengthPCJump(uint32_t pc_delta); |
inline void WriteTaggedPC(uint32_t pc_delta, int tag); |
inline void WriteExtraTaggedPC(uint32_t pc_delta, int extra_tag); |
+ inline void WriteExtraTaggedIntData(int data_delta, int top_tag); |
inline void WriteExtraTaggedData(intptr_t data_delta, int top_tag); |
inline void WriteTaggedData(intptr_t data_delta, int tag); |
inline void WriteExtraTag(int extra_tag, int top_tag); |
byte* pos_; |
byte* last_pc_; |
- intptr_t last_data_; |
+ int last_id_; |
+ int last_position_; |
DISALLOW_COPY_AND_ASSIGN(RelocInfoWriter); |
}; |
@@ -455,12 +466,13 @@ class RelocIterator: public Malloced { |
int GetTopTag(); |
void ReadTaggedPC(); |
void AdvanceReadPC(); |
+ void AdvanceReadId(); |
+ void AdvanceReadPosition(); |
void AdvanceReadData(); |
void AdvanceReadVariableLengthPCJump(); |
- int GetPositionTypeTag(); |
- void ReadTaggedData(); |
- |
- static RelocInfo::Mode DebugInfoModeFromTag(int tag); |
+ int GetLocatableTypeTag(); |
+ void ReadTaggedId(); |
+ void ReadTaggedPosition(); |
// If the given mode is wanted, set it in rinfo_ and return true. |
// Else return false. Used for efficiently skipping unwanted modes. |
@@ -473,6 +485,8 @@ class RelocIterator: public Malloced { |
RelocInfo rinfo_; |
bool done_; |
int mode_mask_; |
+ int last_id_; |
+ int last_position_; |
DISALLOW_COPY_AND_ASSIGN(RelocIterator); |
}; |