From 5bf245eeb90bf77bdee86c147789a1288e2648b4 Mon Sep 17 00:00:00 2001 From: nobu Date: Tue, 26 Nov 2002 22:32:11 +0000 Subject: * error.c (exit_initialize): add SystemExit#initialize to set instance variable status. (ruby-bugs-ja:PR#362) Now accepts status as optional first argument. * eval.c (error_handle): now SystemExit have status always. * eval.c (system_exit): just instantiate SystemExit without raise. * eval.c (rb_thread_start_0): initialize SystemExit properly. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3087 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- error.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'error.c') diff --git a/error.c b/error.c index edd86f065f..0c7d2bc69d 100644 --- a/error.c +++ b/error.c @@ -28,8 +28,9 @@ int ruby_nerrs; static void err_snprintf(buf, len, fmt, args) - char *buf, *fmt; + char *buf; long len; + const char *fmt; va_list args; { long n; @@ -399,6 +400,22 @@ exc_set_backtrace(exc, bt) return rb_iv_set(exc, "bt", check_backtrace(bt)); } +static VALUE +exit_initialize(argc, argv, exc) + int argc; + VALUE *argv; + VALUE exc; +{ + VALUE status = INT2NUM(0); + if (argc > 0 && FIXNUM_P(argv[0])) { + status = *argv++; + --argc; + } + exc_initialize(argc, argv, exc); + rb_iv_set(exc, "status", status); + return exc; +} + static VALUE exit_status(exc) VALUE exc; @@ -530,6 +547,7 @@ Init_Exception() rb_define_method(rb_eException, "set_backtrace", exc_set_backtrace, 1); rb_eSystemExit = rb_define_class("SystemExit", rb_eException); + rb_define_method(rb_eSystemExit, "initialize", exit_initialize, -1); rb_define_method(rb_eSystemExit, "status", exit_status, 0); rb_eFatal = rb_define_class("fatal", rb_eException); -- cgit v1.2.3