diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2002-11-26 22:32:11 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2002-11-26 22:32:11 +0000 |
commit | 5bf245eeb90bf77bdee86c147789a1288e2648b4 (patch) | |
tree | 4c86c5a2a27a370663e90ad078b5195f92cba0e4 /error.c | |
parent | dc260404fe1287517ce1fca8e41f2f7935ccfe01 (diff) |
* 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
Diffstat (limited to 'error.c')
-rw-r--r-- | error.c | 20 |
1 files changed, 19 insertions, 1 deletions
@@ -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; @@ -400,6 +401,22 @@ exc_set_backtrace(exc, 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); |