| 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_++;
|
| }
|
|
|