* error.c (exit_initialize): deal with true and false as well as
Kernel#exit. [ruby-dev:44951] [Bug #5728] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34008 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
c5fc4da7a2
commit
ea82d4809d
@ -1,3 +1,8 @@
|
|||||||
|
Sun Dec 11 10:48:16 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
|
* error.c (exit_initialize): deal with true and false as well as
|
||||||
|
Kernel#exit. [ruby-dev:44951] [Bug #5728]
|
||||||
|
|
||||||
Sun Dec 11 10:37:47 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
Sun Dec 11 10:37:47 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
* object.c (rb_check_to_int): new function to convert a VALUE to
|
* object.c (rb_check_to_int): new function to convert a VALUE to
|
||||||
|
38
error.c
38
error.c
@ -749,16 +749,46 @@ exc_equal(VALUE exc, VALUE obj)
|
|||||||
* SystemExit.new(msg) -> system_exit
|
* SystemExit.new(msg) -> system_exit
|
||||||
*
|
*
|
||||||
* Create a new +SystemExit+ exception with the given status and message.
|
* Create a new +SystemExit+ exception with the given status and message.
|
||||||
* If status is not given, EXIT_SUCCESS is used.
|
* Status is true, false, or an integer.
|
||||||
|
* If status is not given, true is used.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
exit_initialize(int argc, VALUE *argv, VALUE exc)
|
exit_initialize(int argc, VALUE *argv, VALUE exc)
|
||||||
{
|
{
|
||||||
VALUE status = INT2FIX(EXIT_SUCCESS);
|
VALUE status;
|
||||||
if (argc > 0 && FIXNUM_P(argv[0])) {
|
if (argc > 0) {
|
||||||
status = *argv++;
|
status = *argv;
|
||||||
|
|
||||||
|
switch (status) {
|
||||||
|
case Qtrue:
|
||||||
|
status = INT2FIX(EXIT_SUCCESS);
|
||||||
|
++argv;
|
||||||
--argc;
|
--argc;
|
||||||
|
break;
|
||||||
|
case Qfalse:
|
||||||
|
status = INT2FIX(EXIT_FAILURE);
|
||||||
|
++argv;
|
||||||
|
--argc;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
status = rb_check_to_int(status);
|
||||||
|
if (NIL_P(status)) {
|
||||||
|
status = INT2FIX(EXIT_SUCCESS);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
#if EXIT_SUCCESS != 0
|
||||||
|
if (status == INT2FIX(0))
|
||||||
|
status = INT2FIX(EXIT_SUCCESS);
|
||||||
|
#endif
|
||||||
|
++argv;
|
||||||
|
--argc;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
status = INT2FIX(EXIT_SUCCESS);
|
||||||
}
|
}
|
||||||
rb_call_super(argc, argv);
|
rb_call_super(argc, argv);
|
||||||
rb_iv_set(exc, "status", status);
|
rb_iv_set(exc, "status", status);
|
||||||
|
@ -348,5 +348,19 @@ end.join
|
|||||||
eis = SystemExit.new(7, "msg")
|
eis = SystemExit.new(7, "msg")
|
||||||
assert_equal(7, eis.status)
|
assert_equal(7, eis.status)
|
||||||
assert_equal("msg", eis.message)
|
assert_equal("msg", eis.message)
|
||||||
|
|
||||||
|
bug5728 = '[ruby-dev:44951]'
|
||||||
|
et = SystemExit.new(true)
|
||||||
|
assert_equal(true, et.success?, bug5728)
|
||||||
|
assert_equal("SystemExit", et.message, bug5728)
|
||||||
|
ef = SystemExit.new(false)
|
||||||
|
assert_equal(false, ef.success?, bug5728)
|
||||||
|
assert_equal("SystemExit", ef.message, bug5728)
|
||||||
|
ets = SystemExit.new(true, "msg")
|
||||||
|
assert_equal(true, ets.success?, bug5728)
|
||||||
|
assert_equal("msg", ets.message, bug5728)
|
||||||
|
efs = SystemExit.new(false, "msg")
|
||||||
|
assert_equal(false, efs.success?, bug5728)
|
||||||
|
assert_equal("msg", efs.message, bug5728)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user