@@ -1079,9 +1079,10 @@ void JavaScriptFrame::Summarize(std::vector<FrameSummary>* functions) const {
10791079 Code code = LookupCode ();
10801080 int offset = static_cast <int >(pc () - code->InstructionStart ());
10811081 AbstractCode abstract_code = AbstractCode::cast (code);
1082- FrameSummary::JavaScriptFrameSummary summary (isolate (), receiver (),
1083- function (), abstract_code,
1084- offset, IsConstructor ());
1082+ Handle<FixedArray> params = GetParameters ();
1083+ FrameSummary::JavaScriptFrameSummary summary (
1084+ isolate (), receiver (), function (), abstract_code, offset, IsConstructor (),
1085+ *params);
10851086 functions->push_back (summary);
10861087}
10871088
@@ -1241,6 +1242,20 @@ int JavaScriptFrame::ComputeParametersCount() const {
12411242 return function ()->shared ()->internal_formal_parameter_count ();
12421243}
12431244
1245+ Handle<FixedArray> JavaScriptFrame::GetParameters () const {
1246+ if (V8_LIKELY (!FLAG_detailed_error_stack_trace)) {
1247+ return isolate ()->factory ()->empty_fixed_array ();
1248+ }
1249+ int param_count = ComputeParametersCount ();
1250+ Handle<FixedArray> parameters =
1251+ isolate ()->factory ()->NewFixedArray (param_count);
1252+ for (int i = 0 ; i < param_count; i++) {
1253+ parameters->set (i, GetParameter (i));
1254+ }
1255+
1256+ return parameters;
1257+ }
1258+
12441259int JavaScriptBuiltinContinuationFrame::ComputeParametersCount () const {
12451260 // Assert that the first allocatable register is also the argument count
12461261 // register.
@@ -1277,13 +1292,15 @@ void JavaScriptBuiltinContinuationWithCatchFrame::SetException(
12771292
12781293FrameSummary::JavaScriptFrameSummary::JavaScriptFrameSummary (
12791294 Isolate* isolate, Object receiver, JSFunction function,
1280- AbstractCode abstract_code, int code_offset, bool is_constructor)
1295+ AbstractCode abstract_code, int code_offset, bool is_constructor,
1296+ FixedArray parameters)
12811297 : FrameSummaryBase(isolate, FrameSummary::JAVA_SCRIPT),
12821298 receiver_(receiver, isolate),
12831299 function_(function, isolate),
12841300 abstract_code_(abstract_code, isolate),
12851301 code_offset_(code_offset),
1286- is_constructor_(is_constructor) {
1302+ is_constructor_(is_constructor),
1303+ parameters_(parameters, isolate) {
12871304 DCHECK (abstract_code->IsBytecodeArray () ||
12881305 Code::cast (abstract_code)->kind () != Code::OPTIMIZED_FUNCTION);
12891306}
@@ -1529,9 +1546,10 @@ void OptimizedFrame::Summarize(std::vector<FrameSummary>* frames) const {
15291546 }
15301547
15311548 // Append full summary of the encountered JS frame.
1532- FrameSummary::JavaScriptFrameSummary summary (isolate (), *receiver,
1533- *function, *abstract_code,
1534- code_offset, is_constructor);
1549+ Handle<FixedArray> params = GetParameters ();
1550+ FrameSummary::JavaScriptFrameSummary summary (
1551+ isolate (), *receiver, *function, *abstract_code, code_offset,
1552+ is_constructor, *params);
15351553 frames->push_back (summary);
15361554 is_constructor = false ;
15371555 } else if (it->kind () == TranslatedFrame::kConstructStub ) {
@@ -1742,9 +1760,10 @@ void InterpretedFrame::WriteInterpreterRegister(int register_index,
17421760void InterpretedFrame::Summarize (std::vector<FrameSummary>* functions) const {
17431761 DCHECK (functions->empty ());
17441762 AbstractCode abstract_code = AbstractCode::cast (GetBytecodeArray ());
1763+ Handle<FixedArray> params = GetParameters ();
17451764 FrameSummary::JavaScriptFrameSummary summary (
17461765 isolate (), receiver (), function (), abstract_code, GetBytecodeOffset (),
1747- IsConstructor ());
1766+ IsConstructor (), *params );
17481767 functions->push_back (summary);
17491768}
17501769
0 commit comments