diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-12-31 13:15:52 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-12-31 13:15:52 +0000 |
commit | d0080708c02cafbefd205b527899f51e323c9500 (patch) | |
tree | 5ff0bf11a8fac779508a032d7e944c9b7ae52179 /error.c | |
parent | c1b9545199be9f9f2fa32d5ecbf0b369e38d81a0 (diff) | |
download | ruby-d0080708c02cafbefd205b527899f51e323c9500.tar.gz |
error.c: limit depth
* error.c (rb_warn_m): limit backtrace depth to reduce objects to
be created but not used.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61527 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'error.c')
-rw-r--r-- | error.c | 8 |
1 files changed, 5 insertions, 3 deletions
@@ -342,12 +342,14 @@ rb_warn_m(int argc, VALUE *argv, VALUE exc) uplevel = Qnil; } else if (!NIL_P(uplevel)) { + VALUE args[2]; long lev = NUM2LONG(uplevel); if (lev < 0) { rb_raise(rb_eArgError, "negative level (%ld)", lev); } - uplevel = LONG2NUM(lev + 1); - uplevel = rb_vm_thread_backtrace_locations(1, &uplevel, GET_THREAD()->self); + args[0] = LONG2NUM(lev + 1); + args[1] = INT2FIX(1); + uplevel = rb_vm_thread_backtrace_locations(2, args, GET_THREAD()->self); if (!NIL_P(uplevel)) { uplevel = rb_ary_entry(uplevel, 0); } @@ -360,7 +362,7 @@ rb_warn_m(int argc, VALUE *argv, VALUE exc) else { VALUE path; path = rb_funcall(uplevel, rb_intern("path"), 0); - str = rb_sprintf("%s:%li: warning: ", + str = rb_sprintf("%s:%ld: warning: ", rb_string_value_ptr(&path), NUM2LONG(rb_funcall(uplevel, rb_intern("lineno"), 0))); } |