| Index: src/assembler-ia32.cc
|
| ===================================================================
|
| --- src/assembler-ia32.cc (revision 330)
|
| +++ src/assembler-ia32.cc (working copy)
|
| @@ -317,7 +317,7 @@
|
| last_pc_ = NULL;
|
| last_bound_pos_ = 0;
|
| last_position_ = kNoPosition;
|
| - last_position_is_statement_ = false;
|
| + last_statement_position_ = kNoPosition;
|
| }
|
|
|
|
|
| @@ -1306,6 +1306,7 @@
|
|
|
|
|
| void Assembler::call(Handle<Code> code, RelocMode rmode) {
|
| + WriteRecordedPositions();
|
| EnsureSpace ensure_space(this);
|
| last_pc_ = pc_;
|
| ASSERT(is_code_target(rmode));
|
| @@ -1844,6 +1845,7 @@
|
|
|
|
|
| void Assembler::RecordJSReturn() {
|
| + WriteRecordedPositions();
|
| EnsureSpace ensure_space(this);
|
| RecordRelocInfo(js_return);
|
| }
|
| @@ -1859,26 +1861,33 @@
|
|
|
| void Assembler::RecordPosition(int pos) {
|
| if (pos == kNoPosition) return;
|
| - ASSERT(position >= 0);
|
| - if (pos == last_position_) return;
|
| - EnsureSpace ensure_space(this);
|
| - RecordRelocInfo(position, pos);
|
| + ASSERT(pos >= 0);
|
| last_position_ = pos;
|
| - last_position_is_statement_ = false;
|
| }
|
|
|
|
|
| void Assembler::RecordStatementPosition(int pos) {
|
| if (pos == kNoPosition) return;
|
| - ASSERT(position >= 0);
|
| - if (pos == last_position_) return;
|
| - EnsureSpace ensure_space(this);
|
| - RecordRelocInfo(statement_position, pos);
|
| - last_position_ = pos;
|
| - last_position_is_statement_ = true;
|
| + ASSERT(pos >= 0);
|
| + last_statement_position_ = pos;
|
| }
|
|
|
|
|
| +void Assembler::WriteRecordedPositions() {
|
| + if (last_statement_position_ != kNoPosition) {
|
| + EnsureSpace ensure_space(this);
|
| + RecordRelocInfo(statement_position, last_statement_position_);
|
| + }
|
| + if ((last_position_ != kNoPosition) &&
|
| + (last_position_ != last_statement_position_)) {
|
| + EnsureSpace ensure_space(this);
|
| + RecordRelocInfo(position, last_position_);
|
| + }
|
| + last_statement_position_ = kNoPosition;
|
| + last_position_ = kNoPosition;
|
| +}
|
| +
|
| +
|
| void Assembler::GrowBuffer() {
|
| ASSERT(overflow()); // should not call this otherwise
|
| if (!own_buffer_) FATAL("external code buffer is too small");
|
|
|