Index: src/interpreter/bytecode-array-builder.cc |
diff --git a/src/interpreter/bytecode-array-builder.cc b/src/interpreter/bytecode-array-builder.cc |
index 4a1602a1d6ea6c3749cc74b30111c53a4cd1e730..d64a892c566491a0f5a499fb2c7a1fd912d75ce1 100644 |
--- a/src/interpreter/bytecode-array-builder.cc |
+++ b/src/interpreter/bytecode-array-builder.cc |
@@ -71,6 +71,7 @@ BytecodeArrayBuilder::BytecodeArrayBuilder(Isolate* isolate, Zone* zone) |
bytecode_generated_(false), |
constant_array_builder_(isolate, zone), |
handler_table_builder_(isolate, zone), |
+ source_position_table_builder_(isolate, zone), |
last_block_end_(0), |
last_bytecode_start_(~0), |
exit_seen_in_block_(false), |
@@ -153,10 +154,13 @@ Handle<BytecodeArray> BytecodeArrayBuilder::ToBytecodeArray() { |
int frame_size = register_count * kPointerSize; |
Handle<FixedArray> constant_pool = constant_array_builder()->ToFixedArray(); |
Handle<FixedArray> handler_table = handler_table_builder()->ToHandlerTable(); |
+ Handle<FixedArray> source_position_table = |
+ source_position_table_builder()->ToFixedArray(); |
Handle<BytecodeArray> output = isolate_->factory()->NewBytecodeArray( |
bytecode_size, &bytecodes_.front(), frame_size, parameter_count(), |
constant_pool); |
output->set_handler_table(*handler_table); |
+ output->set_source_position_table(*source_position_table); |
bytecode_generated_ = true; |
return output; |
} |
@@ -1208,6 +1212,18 @@ size_t BytecodeArrayBuilder::GetConstantPoolEntry(Handle<Object> object) { |
return constant_array_builder()->Insert(object); |
} |
+void BytecodeArrayBuilder::SetStatementPosition(Statement* stmt) { |
+ if (stmt->position() == RelocInfo::kNoPosition) return; |
+ source_position_table_builder_.AddStatementPosition(bytecodes_.size(), |
+ stmt->position()); |
+} |
+ |
+void BytecodeArrayBuilder::SetExpressionPosition(Expression* expr) { |
+ if (expr->position() == RelocInfo::kNoPosition) return; |
+ source_position_table_builder_.AddExpressionPosition(bytecodes_.size(), |
+ expr->position()); |
+} |
+ |
void BytecodeArrayBuilder::ForgeTemporaryRegister() { |
temporary_register_count_++; |
} |