| Index: src/isolate.cc
|
| diff --git a/src/isolate.cc b/src/isolate.cc
|
| index 17222034e51e2f3f23b2fbe99b2e033216a644de..40d4c9fc56587c7b534f68f01fb1e3f5c478b576 100644
|
| --- a/src/isolate.cc
|
| +++ b/src/isolate.cc
|
| @@ -390,8 +390,9 @@ Handle<Object> Isolate::CaptureSimpleStackTrace(Handle<JSObject> error_object,
|
| }
|
| DCHECK(cursor + 4 <= elements->length());
|
|
|
| - Handle<Code> code = frames[i].code();
|
| - Handle<Smi> offset(Smi::FromInt(frames[i].offset()), this);
|
| + Handle<AbstractCode> abstract_code = frames[i].abstract_code();
|
| +
|
| + Handle<Smi> offset(Smi::FromInt(frames[i].code_offset()), this);
|
| // The stack trace API should not expose receivers and function
|
| // objects on frames deeper than the top-most one with a strict
|
| // mode function. The number of sloppy frames is stored as
|
| @@ -405,7 +406,7 @@ Handle<Object> Isolate::CaptureSimpleStackTrace(Handle<JSObject> error_object,
|
| }
|
| elements->set(cursor++, *recv);
|
| elements->set(cursor++, *fun);
|
| - elements->set(cursor++, *code);
|
| + elements->set(cursor++, *abstract_code);
|
| elements->set(cursor++, *offset);
|
| frames_seen++;
|
| }
|
| @@ -594,9 +595,9 @@ int PositionFromStackTrace(Handle<FixedArray> elements, int index) {
|
| if (maybe_code->IsSmi()) {
|
| return Smi::cast(maybe_code)->value();
|
| } else {
|
| - Code* code = Code::cast(maybe_code);
|
| - Address pc = code->address() + Smi::cast(elements->get(index + 3))->value();
|
| - return code->SourcePosition(pc);
|
| + AbstractCode* abstract_code = AbstractCode::cast(maybe_code);
|
| + int code_offset = Smi::cast(elements->get(index + 3))->value();
|
| + return abstract_code->SourcePosition(code_offset);
|
| }
|
| }
|
|
|
| @@ -661,7 +662,8 @@ Handle<JSArray> Isolate::CaptureCurrentStackTrace(
|
| // Filter frames from other security contexts.
|
| if (!(options & StackTrace::kExposeFramesAcrossSecurityOrigins) &&
|
| !this->context()->HasSameSecurityTokenAs(fun->context())) continue;
|
| - int position = frames[i].code()->SourcePosition(frames[i].pc());
|
| + int position =
|
| + frames[i].abstract_code()->SourcePosition(frames[i].code_offset());
|
| Handle<JSObject> stack_frame =
|
| helper.NewStackFrameObject(fun, position, frames[i].is_constructor());
|
|
|
| @@ -1283,7 +1285,9 @@ void Isolate::PrintCurrentStackTrace(FILE* out) {
|
| HandleScope scope(this);
|
| // Find code position if recorded in relocation info.
|
| JavaScriptFrame* frame = it.frame();
|
| - int pos = frame->LookupCode()->SourcePosition(frame->pc());
|
| + Code* code = frame->LookupCode();
|
| + int offset = static_cast<int>(frame->pc() - code->instruction_start());
|
| + int pos = frame->LookupCode()->SourcePosition(offset);
|
| Handle<Object> pos_obj(Smi::FromInt(pos), this);
|
| // Fetch function and receiver.
|
| Handle<JSFunction> fun(frame->function());
|
| @@ -1318,7 +1322,7 @@ bool Isolate::ComputeLocation(MessageLocation* target) {
|
| List<FrameSummary> frames(FLAG_max_inlining_levels + 1);
|
| it.frame()->Summarize(&frames);
|
| FrameSummary& summary = frames.last();
|
| - int pos = summary.code()->SourcePosition(summary.pc());
|
| + int pos = summary.abstract_code()->SourcePosition(summary.code_offset());
|
| *target = MessageLocation(casted_script, pos, pos + 1, handle(fun));
|
| return true;
|
| }
|
|
|