mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Change Kernel#warn to call Warning.warn
This allows Warning.warn to filter/process warning messages generated by Kernel#warn. Currently, Warning.warn can only handle messages generated by the rb_warn/rb_warning C functions. The Kernel#warn API is different than the Warning.warn API, this tries to get similar behavior, but there are probably corner cases where the behavior is different. This makes str_end_with_asciichar in io.c no longer static so it can be called from error.c. [Feature #12944] Author: Jeremy Evans <code@jeremyevans.net> git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57370 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
00ed779cb0
commit
50db992a6a
2 changed files with 18 additions and 7 deletions
19
error.c
19
error.c
|
@ -42,6 +42,7 @@
|
|||
|
||||
VALUE rb_iseqw_local_variables(VALUE iseqval);
|
||||
VALUE rb_iseqw_new(const rb_iseq_t *);
|
||||
int rb_str_end_with_asciichar(VALUE str, int c);
|
||||
|
||||
VALUE rb_eEAGAIN;
|
||||
VALUE rb_eEWOULDBLOCK;
|
||||
|
@ -280,9 +281,11 @@ rb_enc_warning(rb_encoding *enc, const char *fmt, ...)
|
|||
* call-seq:
|
||||
* warn(msg, ...) -> nil
|
||||
*
|
||||
* Displays each of the given messages followed by a record separator on
|
||||
* STDERR unless warnings have been disabled (for example with the
|
||||
* <code>-W0</code> flag).
|
||||
* If warnings have been disabled (for example with the
|
||||
* <code>-W0</code> flag), does nothing. Otherwise,
|
||||
* converts each of the messages to strings, appends a newline
|
||||
* character to the string if the string does not end in a newline,
|
||||
* and calls <code>Warning.warn</code> with the string.
|
||||
*
|
||||
* warn("warning 1", "warning 2")
|
||||
*
|
||||
|
@ -296,7 +299,15 @@ static VALUE
|
|||
rb_warn_m(int argc, VALUE *argv, VALUE exc)
|
||||
{
|
||||
if (!NIL_P(ruby_verbose) && argc > 0) {
|
||||
rb_io_puts(argc, argv, rb_stderr);
|
||||
int i;
|
||||
VALUE str;
|
||||
for (i = 0; i < argc; i++) {
|
||||
str = rb_obj_as_string(argv[i]);
|
||||
if (RSTRING_LEN(str) == 0 || !rb_str_end_with_asciichar(str, '\n')) {
|
||||
str = rb_str_cat(rb_str_dup(str), "\n", 1);
|
||||
}
|
||||
rb_write_warning_str(str);
|
||||
}
|
||||
}
|
||||
return Qnil;
|
||||
}
|
||||
|
|
6
io.c
6
io.c
|
@ -7124,8 +7124,8 @@ rb_f_putc(VALUE recv, VALUE ch)
|
|||
}
|
||||
|
||||
|
||||
static int
|
||||
str_end_with_asciichar(VALUE str, int c)
|
||||
int
|
||||
rb_str_end_with_asciichar(VALUE str, int c)
|
||||
{
|
||||
long len = RSTRING_LEN(str);
|
||||
const char *ptr = RSTRING_PTR(str);
|
||||
|
@ -7202,7 +7202,7 @@ rb_io_puts(int argc, const VALUE *argv, VALUE out)
|
|||
string:
|
||||
rb_io_write(out, line);
|
||||
if (RSTRING_LEN(line) == 0 ||
|
||||
!str_end_with_asciichar(line, '\n')) {
|
||||
!rb_str_end_with_asciichar(line, '\n')) {
|
||||
rb_io_write(out, rb_default_rs);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue