mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
error.c: send as a single string
* error.c (rb_warn_m): send the arguments as a single string concatenated with a newline, so it can be filtered easily. [ruby-core:80875] [Feature #12944] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58490 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
6a4061ce30
commit
d249b047c2
2 changed files with 23 additions and 2 deletions
21
error.c
21
error.c
|
@ -48,6 +48,7 @@ VALUE rb_eEAGAIN;
|
||||||
VALUE rb_eEWOULDBLOCK;
|
VALUE rb_eEWOULDBLOCK;
|
||||||
VALUE rb_eEINPROGRESS;
|
VALUE rb_eEINPROGRESS;
|
||||||
VALUE rb_mWarning;
|
VALUE rb_mWarning;
|
||||||
|
VALUE rb_cWarningBuffer;
|
||||||
|
|
||||||
static ID id_warn;
|
static ID id_warn;
|
||||||
|
|
||||||
|
@ -279,6 +280,13 @@ rb_enc_warning(rb_encoding *enc, const char *fmt, ...)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static inline int
|
||||||
|
end_with_asciichar(VALUE str, int c)
|
||||||
|
{
|
||||||
|
return RB_TYPE_P(str, T_STRING) &&
|
||||||
|
rb_str_end_with_asciichar(str, c);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* call-seq:
|
* call-seq:
|
||||||
* warn(msg, ...) -> nil
|
* warn(msg, ...) -> nil
|
||||||
|
@ -301,7 +309,14 @@ static VALUE
|
||||||
rb_warn_m(int argc, VALUE *argv, VALUE exc)
|
rb_warn_m(int argc, VALUE *argv, VALUE exc)
|
||||||
{
|
{
|
||||||
if (!NIL_P(ruby_verbose) && argc > 0) {
|
if (!NIL_P(ruby_verbose) && argc > 0) {
|
||||||
rb_io_puts(argc, argv, rb_mWarning);
|
VALUE str = argv[0];
|
||||||
|
if (argc > 1 || !end_with_asciichar(str, '\n')) {
|
||||||
|
str = rb_str_tmp_new(0);
|
||||||
|
RBASIC_SET_CLASS(str, rb_cWarningBuffer);
|
||||||
|
rb_io_puts(argc, argv, str);
|
||||||
|
RBASIC_SET_CLASS(str, rb_cString);
|
||||||
|
}
|
||||||
|
rb_write_warning_str(str);
|
||||||
}
|
}
|
||||||
return Qnil;
|
return Qnil;
|
||||||
}
|
}
|
||||||
|
@ -2175,9 +2190,11 @@ Init_Exception(void)
|
||||||
|
|
||||||
rb_mWarning = rb_define_module("Warning");
|
rb_mWarning = rb_define_module("Warning");
|
||||||
rb_define_method(rb_mWarning, "warn", rb_warning_s_warn, 1);
|
rb_define_method(rb_mWarning, "warn", rb_warning_s_warn, 1);
|
||||||
rb_define_method(rb_mWarning, "write", rb_warning_s_warn, 1);
|
|
||||||
rb_extend_object(rb_mWarning, rb_mWarning);
|
rb_extend_object(rb_mWarning, rb_mWarning);
|
||||||
|
|
||||||
|
rb_cWarningBuffer = rb_define_class_under(rb_mWarning, "buffer", rb_cString);
|
||||||
|
rb_define_method(rb_cWarningBuffer, "write", rb_str_append, 1);
|
||||||
|
|
||||||
rb_define_global_function("warn", rb_warn_m, -1);
|
rb_define_global_function("warn", rb_warn_m, -1);
|
||||||
|
|
||||||
id_new = rb_intern_const("new");
|
id_new = rb_intern_const("new");
|
||||||
|
|
|
@ -973,6 +973,10 @@ $stderr = $stdout; raise "\x82\xa0"') do |outs, errs, status|
|
||||||
def test_warning_warn
|
def test_warning_warn
|
||||||
warning = capture_warning_warn {@a}
|
warning = capture_warning_warn {@a}
|
||||||
assert_match(/instance variable @a not initialized/, warning[0])
|
assert_match(/instance variable @a not initialized/, warning[0])
|
||||||
|
|
||||||
|
assert_equal(["a\nz\n"], capture_warning_warn {warn "a\n", "z"})
|
||||||
|
assert_equal([], capture_warning_warn {warn})
|
||||||
|
assert_equal(["\n"], capture_warning_warn {warn ""})
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_warning_warn_invalid_argument
|
def test_warning_warn_invalid_argument
|
||||||
|
|
Loading…
Reference in a new issue