зеркало из https://github.com/github/ruby.git
* 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:
Родитель
c5fc4da7a2
Коммит
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>
|
||||
|
||||
* object.c (rb_check_to_int): new function to convert a VALUE to
|
||||
|
|
40
error.c
40
error.c
|
@ -749,16 +749,46 @@ exc_equal(VALUE exc, VALUE obj)
|
|||
* SystemExit.new(msg) -> system_exit
|
||||
*
|
||||
* 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
|
||||
exit_initialize(int argc, VALUE *argv, VALUE exc)
|
||||
{
|
||||
VALUE status = INT2FIX(EXIT_SUCCESS);
|
||||
if (argc > 0 && FIXNUM_P(argv[0])) {
|
||||
status = *argv++;
|
||||
--argc;
|
||||
VALUE status;
|
||||
if (argc > 0) {
|
||||
status = *argv;
|
||||
|
||||
switch (status) {
|
||||
case Qtrue:
|
||||
status = INT2FIX(EXIT_SUCCESS);
|
||||
++argv;
|
||||
--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_iv_set(exc, "status", status);
|
||||
|
|
|
@ -348,5 +348,19 @@ end.join
|
|||
eis = SystemExit.new(7, "msg")
|
||||
assert_equal(7, eis.status)
|
||||
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
|
||||
|
|
Загрузка…
Ссылка в новой задаче