From 5e8a9873a2c7d40444af807d3a5aa374a2514d48 Mon Sep 17 00:00:00 2001 From: matz Date: Tue, 13 May 2003 05:53:08 +0000 Subject: * eval.c (error_pos): use $deferr for output instead of stderr directly. * eval.c (error_print,error_handle,rb_longjmp,rb_thread_schedule): ditto. * io.c (Init_IO): new variable $deferr which is default output port of error messages. * io.c (rb_warn_m): new method "warn". [new] * error.c (warn_print): use $deferr. * error.c (rb_bug): ditto. * error.c (err_append): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3782 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- io.c | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) (limited to 'io.c') diff --git a/io.c b/io.c index f44a78944c..1b2a9d51b2 100644 --- a/io.c +++ b/io.c @@ -94,7 +94,7 @@ VALUE rb_cIO; VALUE rb_eEOFError; VALUE rb_eIOError; -VALUE rb_stdin, rb_stdout, rb_stderr, rb_defout; +VALUE rb_stdin, rb_stdout, rb_stderr, rb_defout, rb_deferr; static VALUE orig_stdin, orig_stdout, orig_stderr; static int saved_fd[3] = {0, 1, 2}; @@ -2714,6 +2714,30 @@ rb_obj_display(argc, argv, self) return Qnil; } +void +rb_write_deferr2(mesg, len) + const char *mesg; + long len; +{ + rb_io_write(rb_deferr, rb_str_new(mesg, len)); +} + +void +rb_write_deferr(mesg) + const char *mesg; +{ + rb_write_deferr2(mesg, strlen(mesg)); +} + +static VALUE +rb_warn_m(self, mesg) + VALUE self, mesg; +{ + rb_io_write(rb_deferr, mesg); + rb_io_write(rb_deferr, rb_default_rs); + return mesg; +} + static void must_respond_to(mid, val, id) ID mid; @@ -2728,12 +2752,13 @@ must_respond_to(mid, val, id) } static void -rb_io_defset(val, id) +rb_io_defset(val, id, variable) VALUE val; ID id; + VALUE *variable; { must_respond_to(id_write, val, id); - rb_defout = val; + *variable = val; } static void @@ -4044,6 +4069,8 @@ Init_IO() rb_defout = rb_stdout; rb_define_hooked_variable("$>", &rb_defout, 0, rb_io_defset); rb_define_hooked_variable("$defout", &rb_defout, 0, rb_io_defset); + rb_deferr = rb_stderr; + rb_define_hooked_variable("$deferr", &rb_deferr, 0, rb_io_defset); rb_define_global_const("STDIN", rb_stdin); rb_define_global_const("STDOUT", rb_stdout); @@ -4125,4 +4152,6 @@ Init_IO() #ifdef O_SYNC rb_file_const("SYNC", INT2FIX(O_SYNC)); #endif + + rb_define_global_function("warn", rb_warn_m, 1); } -- cgit v1.2.3