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