Skip to content

Commit 66bc206

Browse files
Benjamin Coedanielleadams
authored andcommitted
deps: V8: cherry-pick 86991d0587a1
Adds methods for fetching stack trace information about enclosing function. Refs #36042 Original commit message: Reland "stack-trace-api: implement getEnclosingLine/Column" This reverts commit 5557a63beb5a53c93e9b590eaf2933e21bcb3768. Reason for revert: Sheriff's mistake, failing test was previously flaking. Original change's description: > Revert "stack-trace-api: implement getEnclosingLine/Column" > > This reverts commit c48ae2d96cbfdc2216706a5e9a79ae1dce5a638b. > > Reason for revert: Breaks a profiling test: > https://ci.chromium.org/p/v8/builders/ci/V8%20Win32/30010 > > Original change's description: > > stack-trace-api: implement getEnclosingLine/Column > > > > Introduces getEnclosingColumn and getEnclosingLine on CallSite > > so that the position can be used to lookup the original symbol > > for function when source maps are used. > > > > BUG=v8:11157 > > > > Change-Id: I06c4c374d172d206579abb170c7b7a2bd3bb159f > > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2547218 > > Reviewed-by: Jakob Kummerow <[email protected]> > > Commit-Queue: Benjamin Coe <[email protected]> > > Cr-Commit-Position: refs/heads/master@{#71343} > > [email protected],[email protected],[email protected] > > Change-Id: Iab5c250c1c4fbdab86971f4a7e40abc8f87cf79c > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Bug: v8:11157 > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2555384 > Reviewed-by: Bill Budge <[email protected]> > Commit-Queue: Bill Budge <[email protected]> > Cr-Commit-Position: refs/heads/master@{#71345} [email protected],[email protected],[email protected],[email protected] # Not skipping CQ checks because this is a reland. Bug: v8:11157 Change-Id: I8dba19ceb29a24594469d2cf79626f741dc4cad3 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2555499 Reviewed-by: Bill Budge <[email protected]> Commit-Queue: Bill Budge <[email protected]> Cr-Commit-Position: refs/heads/master@{#71348} Refs: v8/v8@86991d0 PR-URL: #36254 Reviewed-By: Benjamin Gruenbaum <[email protected]> Reviewed-By: Antoine du Hamel <[email protected]>
1 parent 03cf8db commit 66bc206

File tree

7 files changed

+114
-0
lines changed

7 files changed

+114
-0
lines changed

‎deps/v8/src/builtins/builtins-callsite.cc‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,22 @@ BUILTIN(CallSitePrototypeGetColumnNumber){
5353
returnPositiveNumberOrNull(it.Frame()->GetColumnNumber(), isolate);
5454
}
5555

56+
BUILTIN(CallSitePrototypeGetEnclosingColumnNumber){
57+
HandleScope scope(isolate);
58+
CHECK_CALLSITE(recv, "getEnclosingColumnNumber");
59+
FrameArrayIterator it(isolate, GetFrameArray(isolate, recv),
60+
GetFrameIndex(isolate, recv));
61+
returnPositiveNumberOrNull(it.Frame()->GetEnclosingColumnNumber(), isolate);
62+
}
63+
64+
BUILTIN(CallSitePrototypeGetEnclosingLineNumber){
65+
HandleScope scope(isolate);
66+
CHECK_CALLSITE(recv, "getEnclosingLineNumber");
67+
FrameArrayIterator it(isolate, GetFrameArray(isolate, recv),
68+
GetFrameIndex(isolate, recv));
69+
returnPositiveNumberOrNull(it.Frame()->GetEnclosingLineNumber(), isolate);
70+
}
71+
5672
BUILTIN(CallSitePrototypeGetEvalOrigin){
5773
HandleScope scope(isolate);
5874
CHECK_CALLSITE(recv, "getEvalOrigin");

‎deps/v8/src/builtins/builtins-definitions.h‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -365,6 +365,8 @@ namespace internal{
365365
\
366366
/* CallSite */ \
367367
CPP(CallSitePrototypeGetColumnNumber) \
368+
CPP(CallSitePrototypeGetEnclosingColumnNumber) \
369+
CPP(CallSitePrototypeGetEnclosingLineNumber) \
368370
CPP(CallSitePrototypeGetEvalOrigin) \
369371
CPP(CallSitePrototypeGetFileName) \
370372
CPP(CallSitePrototypeGetFunction) \

‎deps/v8/src/execution/messages.cc‎

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -514,6 +514,26 @@ int JSStackFrame::GetColumnNumber(){
514514
returnkNone;
515515
}
516516

517+
intJSStackFrame::GetEnclosingLineNumber(){
518+
if (HasScript()){
519+
Handle<SharedFunctionInfo> shared = handle(function_->shared(), isolate_);
520+
returnScript::GetLineNumber(GetScript(),
521+
shared->function_token_position()) + 1;
522+
} else{
523+
returnkNone;
524+
}
525+
}
526+
527+
intJSStackFrame::GetEnclosingColumnNumber(){
528+
if (HasScript()){
529+
Handle<SharedFunctionInfo> shared = handle(function_->shared(), isolate_);
530+
returnScript::GetColumnNumber(GetScript(),
531+
shared->function_token_position()) + 1;
532+
} else{
533+
returnkNone;
534+
}
535+
}
536+
517537
intJSStackFrame::GetPromiseIndex() const{
518538
return (is_promise_all_ || is_promise_any_) ? offset_ : kNone;
519539
}
@@ -602,6 +622,12 @@ int WasmStackFrame::GetPosition() const{
602622

603623
intWasmStackFrame::GetColumnNumber(){returnGetModuleOffset()}
604624

625+
intWasmStackFrame::GetEnclosingColumnNumber(){
626+
constint function_offset =
627+
GetWasmFunctionOffset(wasm_instance_->module(), wasm_func_index_);
628+
return function_offset;
629+
}
630+
605631
intWasmStackFrame::GetModuleOffset() const{
606632
constint function_offset =
607633
GetWasmFunctionOffset(wasm_instance_->module(), wasm_func_index_);
@@ -672,6 +698,26 @@ int AsmJsWasmStackFrame::GetColumnNumber(){
672698
returnScript::GetColumnNumber(script, GetPosition()) + 1;
673699
}
674700

701+
intAsmJsWasmStackFrame::GetEnclosingLineNumber(){
702+
DCHECK_LE(0, GetPosition());
703+
Handle<Script> script(wasm_instance_->module_object().script(), isolate_);
704+
DCHECK(script->IsUserJavaScript());
705+
int byte_offset = GetSourcePosition(wasm_instance_->module(),
706+
wasm_func_index_, 0,
707+
is_at_number_conversion_);
708+
returnScript::GetLineNumber(script, byte_offset) + 1;
709+
}
710+
711+
intAsmJsWasmStackFrame::GetEnclosingColumnNumber(){
712+
DCHECK_LE(0, GetPosition());
713+
Handle<Script> script(wasm_instance_->module_object().script(), isolate_);
714+
DCHECK(script->IsUserJavaScript());
715+
int byte_offset = GetSourcePosition(wasm_instance_->module(),
716+
wasm_func_index_, 0,
717+
is_at_number_conversion_);
718+
returnScript::GetColumnNumber(script, byte_offset) + 1;
719+
}
720+
675721
FrameArrayIterator::FrameArrayIterator(Isolate* isolate,
676722
Handle<FrameArray> array, int frame_ix)
677723
: isolate_(isolate), array_(array), frame_ix_(frame_ix){}

‎deps/v8/src/execution/messages.h‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,9 @@ class StackFrameBase{
8787
// Return 0-based Wasm function index. Returns -1 for non-Wasm frames.
8888
virtualintGetWasmFunctionIndex();
8989

90+
virtualintGetEnclosingColumnNumber() = 0;
91+
virtualintGetEnclosingLineNumber() = 0;
92+
9093
// Returns the index of the rejected promise in the Promise combinator input,
9194
// or -1 if this frame is not a Promise combinator frame.
9295
virtualintGetPromiseIndex() const = 0;
@@ -133,6 +136,9 @@ class JSStackFrame : public StackFrameBase{
133136
intGetLineNumber() override;
134137
intGetColumnNumber() override;
135138

139+
intGetEnclosingColumnNumber() override;
140+
intGetEnclosingLineNumber() override;
141+
136142
intGetPromiseIndex() constoverride;
137143

138144
boolIsNative() override;
@@ -183,6 +189,8 @@ class WasmStackFrame : public StackFrameBase{
183189
intGetPosition() constoverride;
184190
intGetLineNumber() override{return0}
185191
intGetColumnNumber() override;
192+
intGetEnclosingColumnNumber() override;
193+
intGetEnclosingLineNumber() override{return0}
186194
intGetWasmFunctionIndex() override{return wasm_func_index_}
187195

188196
intGetPromiseIndex() constoverride{returnGetPosition()}
@@ -231,6 +239,9 @@ class AsmJsWasmStackFrame : public WasmStackFrame{
231239
intGetLineNumber() override;
232240
intGetColumnNumber() override;
233241

242+
intGetEnclosingColumnNumber() override;
243+
intGetEnclosingLineNumber() override;
244+
234245
private:
235246
friendclassFrameArrayIterator;
236247
AsmJsWasmStackFrame() = default;

‎deps/v8/src/init/bootstrapper.cc‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4090,6 +4090,10 @@ void Genesis::InitializeCallSiteBuiltins(){
40904090

40914091
FunctionInfo infos[] ={
40924092
{"getColumnNumber", Builtins::kCallSitePrototypeGetColumnNumber},
4093+
{"getEnclosingColumnNumber",
4094+
Builtins::kCallSitePrototypeGetEnclosingColumnNumber},
4095+
{"getEnclosingLineNumber",
4096+
Builtins::kCallSitePrototypeGetEnclosingLineNumber},
40934097
{"getEvalOrigin", Builtins::kCallSitePrototypeGetEvalOrigin},
40944098
{"getFileName", Builtins::kCallSitePrototypeGetFileName},
40954099
{"getFunction", Builtins::kCallSitePrototypeGetFunction},

‎deps/v8/test/mjsunit/stack-traces.js‎

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -439,3 +439,23 @@ var constructor = new Error().stack[0].constructor;
439439
assertThrows(()=>constructor.call());
440440
assertThrows(()=>constructor.call(
441441
null,{},()=>undefined,{valueOf(){return0}},false));
442+
443+
// Test stack frames populated with line/column information for both call site
444+
// and enclosing function:
445+
Error.prepareStackTrace=function(e,frames){
446+
assertMatches(/stack-traces\.js/,frames[0].getFileName());
447+
assertEquals(3,frames[0].getEnclosingColumnNumber());
448+
assertEquals(11,frames[0].getColumnNumber());
449+
assertTrue(frames[0].getEnclosingLineNumber()<frames[0].getLineNumber());
450+
}
451+
try{
452+
functiona(){
453+
b();
454+
}
455+
functionb(){
456+
throwError('hello world');
457+
}
458+
a();
459+
}catch(err){
460+
err.stack;
461+
}

‎deps/v8/test/mjsunit/wasm/asm-wasm-stack.js‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,3 +154,18 @@ function generateOverflowWasmFromAsmJs(){
154154
['f',135,12]// --
155155
]);
156156
})();
157+
158+
(functionEnclosingFunctionOffsets(){
159+
constfun=generateWasmFromAsmJs(this,{throwFunc: throwException});
160+
assertTrue(%IsWasmCode(fun));
161+
lete=null;
162+
try{
163+
fun(0);
164+
}catch(ex){
165+
e=ex;
166+
}
167+
assertEquals(68,e.stack[2].getLineNumber());
168+
assertEquals(15,e.stack[2].getColumnNumber());
169+
assertEquals(65,e.stack[2].getEnclosingLineNumber());
170+
assertEquals(3,e.stack[2].getEnclosingColumnNumber());
171+
})();

0 commit comments

Comments
(0)