Chromium Code Reviews| 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 { |