Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(356)

Unified Diff: src/isolate.cc

Issue 2275233002: Refactor call site handling for stack formatting (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Address comments Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/heap-symbols.h ('k') | src/messages.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/isolate.cc
diff --git a/src/isolate.cc b/src/isolate.cc
index 5876af004fc56d7be5cccb9e1d9b360e43c71f20..888d39e9231387e0a14655b2429ef19488236526 100644
--- a/src/isolate.cc
+++ b/src/isolate.cc
@@ -501,7 +501,7 @@ Handle<Object> Isolate::CaptureSimpleStackTrace(Handle<JSReceiver> error_object,
Handle<Object> recv(exit_frame->receiver(), this);
Handle<Code> code(exit_frame->LookupCode(), this);
- int offset =
+ const int offset =
static_cast<int>(exit_frame->pc() - code->instruction_start());
int flags = 0;
@@ -1395,36 +1395,20 @@ Object* Isolate::PromoteScheduledException() {
void Isolate::PrintCurrentStackTrace(FILE* out) {
- StackTraceFrameIterator it(this);
- while (!it.done()) {
+ for (StackTraceFrameIterator it(this); !it.done(); it.Advance()) {
+ if (!it.is_javascript()) continue;
+
HandleScope scope(this);
- // Find code position if recorded in relocation info.
- StandardFrame* frame = it.frame();
- AbstractCode* abstract_code;
- int code_offset;
- if (frame->is_interpreted()) {
- InterpretedFrame* iframe = reinterpret_cast<InterpretedFrame*>(frame);
- abstract_code = AbstractCode::cast(iframe->GetBytecodeArray());
- code_offset = iframe->GetBytecodeOffset();
- } else {
- DCHECK(frame->is_java_script() || frame->is_wasm());
- Code* code = frame->LookupCode();
- abstract_code = AbstractCode::cast(code);
- code_offset = static_cast<int>(frame->pc() - code->instruction_start());
- }
- int pos = abstract_code->SourcePosition(code_offset);
- JavaScriptFrame* js_frame = JavaScriptFrame::cast(frame);
- Handle<Object> pos_obj(Smi::FromInt(pos), this);
- // Fetch function and receiver.
- Handle<JSFunction> fun(js_frame->function(), this);
- Handle<Object> recv(js_frame->receiver(), this);
- // Advance to the next JavaScript frame and determine if the
- // current frame is the top-level frame.
- it.Advance();
- Handle<Object> is_top_level = factory()->ToBoolean(it.done());
- // Generate and print stack trace line.
- Handle<String> line =
- Execution::GetStackTraceLine(recv, fun, pos_obj, is_top_level);
+ JavaScriptFrame* frame = it.javascript_frame();
+
+ Handle<Object> receiver(frame->receiver(), this);
+ Handle<JSFunction> function(frame->function(), this);
+ Handle<AbstractCode> code(AbstractCode::cast(frame->LookupCode()), this);
+ const int offset =
+ static_cast<int>(frame->pc() - code->instruction_start());
+
+ JSStackFrame site(this, receiver, function, code, offset);
+ Handle<String> line = site.ToString().ToHandleChecked();
if (line->length() > 0) {
line->PrintOn(out);
PrintF(out, "\n");
« no previous file with comments | « src/heap-symbols.h ('k') | src/messages.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698