Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(200)

Unified Diff: src/full-codegen/full-codegen.cc

Issue 2095893002: Use source position table for unoptimized code. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: fix gc mole Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/full-codegen/full-codegen.h ('k') | src/interpreter/bytecode-array-writer.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/full-codegen/full-codegen.cc
diff --git a/src/full-codegen/full-codegen.cc b/src/full-codegen/full-codegen.cc
index 03140c9b0e87d545ed18ab84623ba7e8e879f0d3..3578e1503c8092ae879054a09fbcf0fb66409ed0 100644
--- a/src/full-codegen/full-codegen.cc
+++ b/src/full-codegen/full-codegen.cc
@@ -45,10 +45,9 @@ bool FullCodeGenerator::MakeCode(CompilationInfo* info) {
CodeObjectRequired::kYes);
if (info->will_serialize()) masm.enable_serializer();
- LOG_CODE_EVENT(isolate,
- CodeStartLinePosInfoRecordEvent(masm.positions_recorder()));
-
FullCodeGenerator cgen(&masm, info);
+ LOG_CODE_EVENT(isolate, CodeStartLinePosInfoRecordEvent(
+ &cgen.source_position_table_builder_));
cgen.Generate();
if (cgen.HasStackOverflow()) {
DCHECK(!isolate->has_pending_exception());
@@ -65,9 +64,12 @@ bool FullCodeGenerator::MakeCode(CompilationInfo* info) {
code->set_allow_osr_at_loop_nesting_level(0);
code->set_profiler_ticks(0);
code->set_back_edge_table_offset(table_offset);
+ Handle<ByteArray> source_positions =
+ cgen.source_position_table_builder_.ToSourcePositionTable();
+ code->set_source_position_table(*source_positions);
CodeGenerator::PrintCode(code, info);
info->SetCode(code);
- void* line_info = masm.positions_recorder()->DetachJITHandlerData();
+ void* line_info = cgen.source_position_table_builder_.DetachJITHandlerData();
LOG_CODE_EVENT(isolate, CodeEndLinePosInfoRecordEvent(
AbstractCode::cast(*code), line_info));
@@ -615,19 +617,19 @@ void FullCodeGenerator::EmitHasProperty() {
RestoreContext();
}
-void RecordStatementPosition(MacroAssembler* masm, int pos) {
- if (pos == RelocInfo::kNoPosition) return;
- masm->positions_recorder()->RecordStatementPosition(pos);
+void FullCodeGenerator::RecordStatementPosition(int pos) {
+ DCHECK_NE(RelocInfo::kNoPosition, pos);
+ source_position_table_builder_.AddPosition(masm_->pc_offset(), pos, true);
}
-void RecordPosition(MacroAssembler* masm, int pos) {
- if (pos == RelocInfo::kNoPosition) return;
- masm->positions_recorder()->RecordPosition(pos);
+void FullCodeGenerator::RecordPosition(int pos) {
+ DCHECK_NE(RelocInfo::kNoPosition, pos);
+ source_position_table_builder_.AddPosition(masm_->pc_offset(), pos, false);
}
void FullCodeGenerator::SetFunctionPosition(FunctionLiteral* fun) {
- RecordPosition(masm_, fun->start_position());
+ RecordPosition(fun->start_position());
}
@@ -635,7 +637,7 @@ void FullCodeGenerator::SetReturnPosition(FunctionLiteral* fun) {
// For default constructors, start position equals end position, and there
// is no source code besides the class literal.
int pos = std::max(fun->start_position(), fun->end_position() - 1);
- RecordStatementPosition(masm_, pos);
+ RecordStatementPosition(pos);
if (info_->is_debug()) {
// Always emit a debug break slot before a return.
DebugCodegen::GenerateSlot(masm_, RelocInfo::DEBUG_BREAK_SLOT_AT_RETURN);
@@ -646,7 +648,7 @@ void FullCodeGenerator::SetReturnPosition(FunctionLiteral* fun) {
void FullCodeGenerator::SetStatementPosition(
Statement* stmt, FullCodeGenerator::InsertBreak insert_break) {
if (stmt->position() == RelocInfo::kNoPosition) return;
- RecordStatementPosition(masm_, stmt->position());
+ RecordStatementPosition(stmt->position());
if (insert_break == INSERT_BREAK && info_->is_debug() &&
!stmt->IsDebuggerStatement()) {
DebugCodegen::GenerateSlot(masm_, RelocInfo::DEBUG_BREAK_SLOT_AT_POSITION);
@@ -655,13 +657,13 @@ void FullCodeGenerator::SetStatementPosition(
void FullCodeGenerator::SetExpressionPosition(Expression* expr) {
if (expr->position() == RelocInfo::kNoPosition) return;
- RecordPosition(masm_, expr->position());
+ RecordPosition(expr->position());
}
void FullCodeGenerator::SetExpressionAsStatementPosition(Expression* expr) {
if (expr->position() == RelocInfo::kNoPosition) return;
- RecordStatementPosition(masm_, expr->position());
+ RecordStatementPosition(expr->position());
if (info_->is_debug()) {
DebugCodegen::GenerateSlot(masm_, RelocInfo::DEBUG_BREAK_SLOT_AT_POSITION);
}
@@ -670,7 +672,7 @@ void FullCodeGenerator::SetExpressionAsStatementPosition(Expression* expr) {
void FullCodeGenerator::SetCallPosition(Expression* expr,
TailCallMode tail_call_mode) {
if (expr->position() == RelocInfo::kNoPosition) return;
- RecordPosition(masm_, expr->position());
+ RecordPosition(expr->position());
if (info_->is_debug()) {
RelocInfo::Mode mode = (tail_call_mode == TailCallMode::kAllow)
? RelocInfo::DEBUG_BREAK_SLOT_AT_TAIL_CALL
« no previous file with comments | « src/full-codegen/full-codegen.h ('k') | src/interpreter/bytecode-array-writer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698