Index: src/assembler.h |
diff --git a/src/assembler.h b/src/assembler.h |
index 4cf843a2a0ebddb29e558edc4b568dffe34034fe..da4ab21359aabf5fee61ee4790516bf10e7faa23 100644 |
--- a/src/assembler.h |
+++ b/src/assembler.h |
@@ -587,23 +587,27 @@ class ExternalReference BASE_EMBEDDED { |
// ----------------------------------------------------------------------------- |
// Position recording support |
-enum PositionRecordingType { FORCED_POSITION, NORMAL_POSITION }; |
+struct PositionState { |
+ PositionState() : current_position(RelocInfo::kNoPosition), |
+ written_position(RelocInfo::kNoPosition), |
+ current_statement_position(RelocInfo::kNoPosition), |
+ written_statement_position(RelocInfo::kNoPosition) {} |
+ |
+ int current_position; |
+ int written_position; |
+ |
+ int current_statement_position; |
+ int written_statement_position; |
+}; |
+ |
class PositionsRecorder BASE_EMBEDDED { |
public: |
explicit PositionsRecorder(Assembler* assembler) |
- : assembler_(assembler), |
- current_position_(RelocInfo::kNoPosition), |
- current_position_recording_type_(NORMAL_POSITION), |
- written_position_(RelocInfo::kNoPosition), |
- current_statement_position_(RelocInfo::kNoPosition), |
- written_statement_position_(RelocInfo::kNoPosition) { } |
- |
- // Set current position to pos. If recording_type is FORCED_POSITION then |
- // WriteRecordedPositions will write this position even if it is equal to |
- // statement position previously written for another pc. |
- void RecordPosition(int pos, |
- PositionRecordingType recording_type = NORMAL_POSITION); |
+ : assembler_(assembler) {} |
+ |
+ // Set current position to pos. |
+ void RecordPosition(int pos); |
// Set current statement position to pos. |
void RecordStatementPosition(int pos); |
@@ -611,37 +615,37 @@ class PositionsRecorder BASE_EMBEDDED { |
// Write recorded positions to relocation information. |
bool WriteRecordedPositions(); |
- int current_position() const { return current_position_; } |
+ int current_position() const { return state_.current_position; } |
- int current_statement_position() const { return current_statement_position_; } |
+ int current_statement_position() const { |
+ return state_.current_statement_position; |
+ } |
private: |
Assembler* assembler_; |
+ PositionState state_; |
- int current_position_; |
- PositionRecordingType current_position_recording_type_; |
- int written_position_; |
+ friend class PreservePositionScope; |
- int current_statement_position_; |
- int written_statement_position_; |
+ DISALLOW_COPY_AND_ASSIGN(PositionsRecorder); |
}; |
-class PreserveStatementPositionScope BASE_EMBEDDED { |
+class PreservePositionScope BASE_EMBEDDED { |
public: |
- explicit PreserveStatementPositionScope(PositionsRecorder* positions_recorder) |
+ explicit PreservePositionScope(PositionsRecorder* positions_recorder) |
: positions_recorder_(positions_recorder), |
- statement_position_(positions_recorder->current_statement_position()) {} |
+ saved_state_(positions_recorder->state_) {} |
- ~PreserveStatementPositionScope() { |
- if (statement_position_ != RelocInfo::kNoPosition) { |
- positions_recorder_->RecordStatementPosition(statement_position_); |
- } |
+ ~PreservePositionScope() { |
+ positions_recorder_->state_ = saved_state_; |
} |
private: |
PositionsRecorder* positions_recorder_; |
- int statement_position_; |
+ const PositionState saved_state_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(PreservePositionScope); |
}; |