summaryrefslogtreecommitdiff
path: root/ruby.c
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2023-07-13 17:59:19 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2023-07-13 22:59:26 +0900
commitdb3b8f84f5b4d5357576a9ecd7ba81ccfe02b8ec (patch)
tree0bca4db6533c41a4e3d0aa1f0a4a6c066d101286 /ruby.c
parentdbbc3583ba432c279f07b1fa0afb0a8a9ba50c91 (diff)
Set backtrace length limit at last
Command line options should have higher precedence than the same options in shebang and `RUBYOPT`.
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/8068
Diffstat (limited to 'ruby.c')
-rw-r--r--ruby.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/ruby.c b/ruby.c
index b63b330b01..28579022fe 100644
--- a/ruby.c
+++ b/ruby.c
@@ -217,6 +217,7 @@ cmdline_options_init(ruby_cmdline_options_t *opt)
#elif defined(YJIT_FORCE_ENABLE)
opt->features.set |= FEATURE_BIT(yjit);
#endif
+ opt->backtrace_length_limit = -1;
return opt;
}
@@ -892,6 +893,7 @@ moreswitches(const char *s, ruby_cmdline_options_t *opt, int envopt)
VALUE int_enc_name = opt->intern.enc.name;
ruby_features_t feat = opt->features;
ruby_features_t warn = opt->warn;
+ int backtrace_length_limit = opt->backtrace_length_limit;
opt->src.enc.name = opt->ext.enc.name = opt->intern.enc.name = 0;
@@ -941,6 +943,9 @@ moreswitches(const char *s, ruby_cmdline_options_t *opt, int envopt)
}
FEATURE_SET_RESTORE(opt->features, feat);
FEATURE_SET_RESTORE(opt->warn, warn);
+ if (backtrace_length_limit >= 0) {
+ opt->backtrace_length_limit = backtrace_length_limit;
+ }
ruby_xfree(ptr);
/* get rid of GC */
@@ -1445,7 +1450,7 @@ proc_long_options(ruby_cmdline_options_t *opt, const char *s, long argc, char **
char *e;
long n = strtol(s, &e, 10);
if (errno == ERANGE || n < 0 || *e) rb_raise(rb_eRuntimeError, "wrong limit for backtrace length");
- rb_backtrace_length_limit = n;
+ opt->backtrace_length_limit = (int)n;
}
else {
rb_raise(rb_eRuntimeError,
@@ -2329,6 +2334,10 @@ process_options(int argc, char **argv, ruby_cmdline_options_t *opt)
}
if (opt->dump & dump_exit_bits) return Qtrue;
+ if (opt->backtrace_length_limit >= 0) {
+ rb_backtrace_length_limit = opt->backtrace_length_limit;
+ }
+
rb_define_readonly_boolean("$-p", opt->do_print);
rb_define_readonly_boolean("$-l", opt->do_line);
rb_define_readonly_boolean("$-a", opt->do_split);