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

Unified Diff: src/objects.cc

Issue 2451853002: Uniform and precise source positions for inlining (Closed)
Patch Set: fixed PodArray::copy_out Created 4 years, 1 month 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
Index: src/objects.cc
diff --git a/src/objects.cc b/src/objects.cc
index 921bb8f7bcac572114d18bf7aeb1e55780cbdf15..50ebc2dff63f99c6d1d4081c836449c801ed5922 100644
--- a/src/objects.cc
+++ b/src/objects.cc
@@ -13370,8 +13370,12 @@ void Script::InitLineEnds(Handle<Script> script) {
#define SMI_VALUE(x) (Smi::cast(x)->value())
bool Script::GetPositionInfo(int position, PositionInfo* info,
Michael Starzinger 2016/11/03 12:41:44 Note that it inherently unsafe to transition from
OffsetFlag offset_flag) {
- Handle<Script> script(this);
- InitLineEnds(script);
+ Script* script = this;
+ if (script->line_ends()->IsUndefined(GetIsolate())) {
+ Handle<Script> script_handle(script);
+ InitLineEnds(script_handle);
+ script = *script_handle;
+ }
DisallowHeapAllocation no_allocation;
@@ -13420,7 +13424,7 @@ bool Script::GetPositionInfo(int position, PositionInfo* info,
info->line_end = SMI_VALUE(ends->get(info->line));
if (info->line_end > 0) {
DCHECK(script->source()->IsString());
- Handle<String> src(String::cast(script->source()));
+ String* src = String::cast(script->source());
if (src->length() >= info->line_end &&
src->Get(info->line_end - 1) == '\r') {
info->line_end--;
@@ -14239,7 +14243,7 @@ int AbstractCode::SourcePosition(int offset) {
for (SourcePositionTableIterator iterator(source_position_table());
!iterator.done() && iterator.code_offset() <= offset;
iterator.Advance()) {
- position = iterator.source_position();
+ position = iterator.source_position().ScriptOffset();
}
return position;
}
@@ -14252,7 +14256,7 @@ int AbstractCode::SourceStatementPosition(int offset) {
for (SourcePositionTableIterator it(source_position_table()); !it.done();
it.Advance()) {
if (it.is_statement()) {
- int p = it.source_position();
+ int p = it.source_position().ScriptOffset();
if (statement_position < p && p <= position) {
statement_position = p;
}
@@ -14472,12 +14476,13 @@ void Code::PrintDeoptLocation(FILE* out, Address pc) {
class SourcePosition pos = info.position;
if (info.deopt_reason != DeoptimizeReason::kNoReason || !pos.IsUnknown()) {
if (FLAG_hydrogen_track_positions) {
- PrintF(out, " ;;; deoptimize at %d_%d: %s\n",
- pos.inlining_id(), pos.position(),
- DeoptimizeReasonToString(info.deopt_reason));
+ PrintF(out, " ;;; deoptimize at %d_%d: %s\n", pos.InliningId(),
+ pos.ScriptOffset(), DeoptimizeReasonToString(info.deopt_reason));
} else {
- PrintF(out, " ;;; deoptimize at %d: %s\n", pos.raw(),
- DeoptimizeReasonToString(info.deopt_reason));
+ PrintF(out, " ;;; deoptimize at ");
+ OFStream outstr(out);
+ pos.Print(outstr, this);
+ PrintF(out, ", %s\n", DeoptimizeReasonToString(info.deopt_reason));
}
}
}
@@ -14916,8 +14921,8 @@ void Code::Disassemble(const char* name, std::ostream& os) { // NOLINT
os << "Source positions:\n pc offset position\n";
for (; !it.done(); it.Advance()) {
os << std::setw(10) << it.code_offset() << std::setw(10)
- << it.source_position() << (it.is_statement() ? " statement" : "")
- << "\n";
+ << it.source_position().ScriptOffset()
+ << (it.is_statement() ? " statement" : "") << "\n";
}
os << "\n";
}
@@ -15019,7 +15024,7 @@ void BytecodeArray::Disassemble(std::ostream& os) {
while (!iterator.done()) {
if (!source_positions.done() &&
iterator.current_offset() == source_positions.code_offset()) {
- os << std::setw(5) << source_positions.source_position();
+ os << std::setw(5) << source_positions.source_position().ScriptOffset();
os << (source_positions.is_statement() ? " S> " : " E> ");
source_positions.Advance();
} else {

Powered by Google App Engine
This is Rietveld 408576698