[前][次][番号順一覧][スレッド一覧]

ruby-changes:59237

From: Nobuyoshi <ko1@a...>
Date: Fri, 13 Dec 2019 23:51:56 +0900 (JST)
Subject: [ruby-changes:59237] f3b1b645ed (master): Create backtrace location array directly

https://git.ruby-lang.org/ruby.git/commit/?id=f3b1b645ed

From f3b1b645edfc5a8c938da74a5ed44564b9e2fc08 Mon Sep 17 00:00:00 2001
From: Nobuyoshi Nakada <nobu@r...>
Date: Tue, 10 Dec 2019 20:54:01 +0900
Subject: Create backtrace location array directly


diff --git a/common.mk b/common.mk
index debc6d5..b2e5b2b 100644
--- a/common.mk
+++ b/common.mk
@@ -1980,6 +1980,7 @@ error.$(OBJEXT): {$(VPATH)}config.h https://github.com/ruby/ruby/blob/trunk/common.mk#L1980
 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
diff --git a/error.c b/error.c
index 14114fc..b2f6565 100644
--- a/error.c
+++ b/error.c
@@ -292,6 +292,7 @@ warning_write(int argc, VALUE *argv, VALUE buf) https://github.com/ruby/ruby/blob/trunk/error.c#L292
     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) https://github.com/ruby/ruby/blob/trunk/error.c#L303
     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 1ab049d..aa07ce3 100644
--- a/eval_intern.h
+++ b/eval_intern.h
@@ -287,6 +287,7 @@ VALUE rb_vm_cbase(void); https://github.com/ruby/ruby/blob/trunk/eval_intern.h#L287
 /* 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 5b79e3d..2c9649a 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) https://github.com/ruby/ruby/blob/trunk/vm_backtrace.c#L716
     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) https://github.com/ruby/ruby/blob/trunk/vm_backtrace.c#L1240
 
     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);
 
-- 
cgit v0.10.2


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]