diff options
author | Nobuyoshi Nakada <[email protected]> | 2019-12-10 20:54:01 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <[email protected]> | 2019-12-13 20:47:07 +0900 |
commit | f3b1b645edfc5a8c938da74a5ed44564b9e2fc08 (patch) | |
tree | 179e4a63909d91df39894e98728baf92cc1d8765 | |
parent | 0b5268afbcf11c299e11102c366e836ae55cc39f (diff) |
Create backtrace location array directly
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/2739
-rw-r--r-- | common.mk | 1 | ||||
-rw-r--r-- | error.c | 6 | ||||
-rw-r--r-- | eval_intern.h | 1 | ||||
-rw-r--r-- | vm_backtrace.c | 6 |
4 files changed, 7 insertions, 7 deletions
@@ -1980,6 +1980,7 @@ error.$(OBJEXT): {$(VPATH)}config.h error.$(OBJEXT): {$(VPATH)}defines.h error.$(OBJEXT): {$(VPATH)}encoding.h error.$(OBJEXT): {$(VPATH)}error.c +error.$(OBJEXT): {$(VPATH)}eval_intern.h error.$(OBJEXT): {$(VPATH)}id.h error.$(OBJEXT): {$(VPATH)}intern.h error.$(OBJEXT): {$(VPATH)}internal.h @@ -292,6 +292,7 @@ warning_write(int argc, VALUE *argv, VALUE buf) return buf; } +VALUE rb_ec_backtrace_location_ary(rb_execution_context_t *ec, long lev, long n); static VALUE rb_warn_m(rb_execution_context_t *ec, VALUE exc, VALUE msgs, VALUE uplevel) { @@ -302,14 +303,11 @@ rb_warn_m(rb_execution_context_t *ec, VALUE exc, VALUE msgs, VALUE uplevel) if (!NIL_P(ruby_verbose) && argc > 0) { VALUE str = argv[0]; if (!NIL_P(uplevel)) { - VALUE args[2]; long lev = NUM2LONG(uplevel); if (lev < 0) { rb_raise(rb_eArgError, "negative level (%ld)", lev); } - args[0] = LONG2NUM(lev + 1); - args[1] = INT2FIX(1); - location = rb_vm_thread_backtrace_locations(2, args, GET_THREAD()->self); + location = rb_ec_backtrace_location_ary(ec, lev + 1, 1); if (!NIL_P(location)) { location = rb_ary_entry(location, 0); } diff --git a/eval_intern.h b/eval_intern.h index 1ab049d327..aa07ce30ed 100644 --- a/eval_intern.h +++ b/eval_intern.h @@ -287,6 +287,7 @@ VALUE rb_vm_cbase(void); /* vm_backtrace.c */ VALUE rb_ec_backtrace_object(const rb_execution_context_t *ec); VALUE rb_ec_backtrace_str_ary(const rb_execution_context_t *ec, long lev, long n); +VALUE rb_ec_backtrace_location_ary(const rb_execution_context_t *ec, long lev, long n); #ifndef CharNext /* defined as CharNext[AW] on Windows. */ # ifdef HAVE_MBLEN diff --git a/vm_backtrace.c b/vm_backtrace.c index 5b79e3d274..2c9649a7c2 100644 --- a/vm_backtrace.c +++ b/vm_backtrace.c @@ -716,8 +716,8 @@ rb_ec_backtrace_str_ary(const rb_execution_context_t *ec, long lev, long n) return backtrace_to_str_ary(rb_ec_backtrace_object(ec), lev, n); } -static VALUE -ec_backtrace_location_ary(const rb_execution_context_t *ec, long lev, long n) +VALUE +rb_ec_backtrace_location_ary(const rb_execution_context_t *ec, long lev, long n) { return backtrace_to_location_ary(rb_ec_backtrace_object(ec), lev, n); } @@ -1240,7 +1240,7 @@ rb_debug_inspector_open(rb_debug_inspector_func_t func, void *data) dbg_context.ec = ec; dbg_context.cfp = dbg_context.ec->cfp; - dbg_context.backtrace = ec_backtrace_location_ary(ec, 0, 0); + dbg_context.backtrace = rb_ec_backtrace_location_ary(ec, 0, 0); dbg_context.backtrace_size = RARRAY_LEN(dbg_context.backtrace); dbg_context.contexts = collect_caller_bindings(ec); |