Index: src/deoptimizer.cc |
diff --git a/src/deoptimizer.cc b/src/deoptimizer.cc |
index 6fe51bb3aff48ead9cde4b6b4139bf093a5c468c..a72e1ae679008470a5a1391b8ede7829f4bdbf5a 100644 |
--- a/src/deoptimizer.cc |
+++ b/src/deoptimizer.cc |
@@ -2722,16 +2722,19 @@ Deoptimizer::DeoptInfo Deoptimizer::GetDeoptInfo(Code* code, Address pc) { |
int last_deopt_id = kNoDeoptimizationId; |
int mask = RelocInfo::ModeMask(RelocInfo::DEOPT_REASON) | |
RelocInfo::ModeMask(RelocInfo::DEOPT_ID) | |
- RelocInfo::ModeMask(RelocInfo::DEOPT_POSITION); |
+ RelocInfo::ModeMask(RelocInfo::DEOPT_SCRIPT_OFFSET) | |
+ RelocInfo::ModeMask(RelocInfo::DEOPT_INLINING_ID); |
for (RelocIterator it(code, mask); !it.done(); it.next()) { |
RelocInfo* info = it.rinfo(); |
if (info->pc() >= pc) { |
return DeoptInfo(last_position, last_reason, last_deopt_id); |
} |
- if (info->rmode() == RelocInfo::DEOPT_POSITION) { |
- int raw_position = static_cast<int>(info->data()); |
- last_position = raw_position ? SourcePosition::FromRaw(raw_position) |
- : SourcePosition::Unknown(); |
+ if (info->rmode() == RelocInfo::DEOPT_SCRIPT_OFFSET) { |
+ int script_offset = static_cast<int>(info->data()); |
+ it.next(); |
+ DCHECK(it.rinfo()->rmode() == RelocInfo::DEOPT_INLINING_ID); |
+ int inlining_id = static_cast<int>(it.rinfo()->data()); |
+ last_position = SourcePosition(script_offset, inlining_id); |
} else if (info->rmode() == RelocInfo::DEOPT_ID) { |
last_deopt_id = static_cast<int>(info->data()); |
} else if (info->rmode() == RelocInfo::DEOPT_REASON) { |