@@ -228,7 +228,7 @@ print_errinfo(const VALUE eclass, const VALUE errat, const VALUE emesg, const VA
228
228
}
229
229
230
230
static void
231
- print_backtrace (const VALUE eclass , const VALUE errat , const VALUE str , int reverse )
231
+ print_backtrace (const VALUE eclass , const VALUE errat , const VALUE str , int reverse , long backtrace_limit )
232
232
{
233
233
if (!NIL_P (errat )) {
234
234
long i ;
@@ -253,8 +253,8 @@ print_backtrace(const VALUE eclass, const VALUE errat, const VALUE str, int reve
253
253
}
254
254
255
255
// skip for explicit limit
256
- if (rb_backtrace_length_limit >= 0 && len > rb_backtrace_length_limit + 2 ) {
257
- skip_start = rb_backtrace_length_limit + 1 ;
256
+ if (backtrace_limit >= 0 && len > backtrace_limit + 2 ) {
257
+ skip_start = backtrace_limit + 1 ;
258
258
skip_len = len - skip_start ;
259
259
}
260
260
@@ -289,7 +289,7 @@ shown_cause_p(VALUE cause, VALUE *shown_causes)
289
289
}
290
290
291
291
static void
292
- show_cause (VALUE errinfo , VALUE str , VALUE highlight , VALUE reverse , VALUE * shown_causes )
292
+ show_cause (VALUE errinfo , VALUE str , VALUE highlight , VALUE reverse , long backtrace_limit , VALUE * shown_causes )
293
293
{
294
294
VALUE cause = rb_attr_get (errinfo , id_cause );
295
295
if (!NIL_P (cause ) && rb_obj_is_kind_of (cause , rb_eException ) &&
@@ -298,14 +298,14 @@ show_cause(VALUE errinfo, VALUE str, VALUE highlight, VALUE reverse, VALUE *show
298
298
VALUE errat = rb_get_backtrace (cause );
299
299
VALUE emesg = rb_get_message (cause );
300
300
if (reverse ) {
301
- show_cause (cause , str , highlight , reverse , shown_causes );
302
- print_backtrace (eclass , errat , str , TRUE);
301
+ show_cause (cause , str , highlight , reverse , backtrace_limit , shown_causes );
302
+ print_backtrace (eclass , errat , str , TRUE, backtrace_limit );
303
303
print_errinfo (eclass , errat , emesg , str , highlight != 0 );
304
304
}
305
305
else {
306
306
print_errinfo (eclass , errat , emesg , str , highlight != 0 );
307
- print_backtrace (eclass , errat , str , FALSE);
308
- show_cause (cause , str , highlight , reverse , shown_causes );
307
+ print_backtrace (eclass , errat , str , FALSE, backtrace_limit );
308
+ show_cause (cause , str , highlight , reverse , backtrace_limit , shown_causes );
309
309
}
310
310
}
311
311
}
@@ -315,6 +315,7 @@ rb_error_write(VALUE errinfo, VALUE emesg, VALUE errat, VALUE str, VALUE highlig
315
315
{
316
316
volatile VALUE eclass ;
317
317
VALUE shown_causes = 0 ;
318
+ long backtrace_limit = rb_backtrace_length_limit ;
318
319
319
320
if (NIL_P (errinfo ))
320
321
return ;
@@ -345,14 +346,14 @@ rb_error_write(VALUE errinfo, VALUE emesg, VALUE errat, VALUE str, VALUE highlig
345
346
len = p - (msg = buff );
346
347
}
347
348
write_warn2 (str , msg , len );
348
- show_cause (errinfo , str , highlight , reverse , & shown_causes );
349
- print_backtrace (eclass , errat , str , TRUE);
349
+ show_cause (errinfo , str , highlight , reverse , backtrace_limit , & shown_causes );
350
+ print_backtrace (eclass , errat , str , TRUE, backtrace_limit );
350
351
print_errinfo (eclass , errat , emesg , str , highlight != 0 );
351
352
}
352
353
else {
353
354
print_errinfo (eclass , errat , emesg , str , highlight != 0 );
354
- print_backtrace (eclass , errat , str , FALSE);
355
- show_cause (errinfo , str , highlight , reverse , & shown_causes );
355
+ print_backtrace (eclass , errat , str , FALSE, backtrace_limit );
356
+ show_cause (errinfo , str , highlight , reverse , backtrace_limit , & shown_causes );
356
357
}
357
358
}
358
359
0 commit comments