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, |
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 { |