Abort in rescue

e$B1sF#$G$9!#e(B

1.8 e$B$G$Oe(B rescue e$B$NCf$Ge(B abort
e$B$9$k$H%9%?%C%/%H%l!<%9$r=P$9$h$&$G$9$,!"e(B
1.9 e$B$G$O2?$bI=<($5$l$J$/$J$C$F$$$^$9!#e(B

$ ruby18 -e ‘begin; raise; rescue; abort; end’
-e:1: unhandled exception

$ ruby19 -e ‘begin; raise; rescue; abort; end’

rb_f_abort
e$B$r8+$k$H%9%?%C%/%H%l!<%9$r=P$=$&$H$9$k%3!<%I$,;D$C$F$$j!"e(B
e$B0U?^E
$J5sF0JQ99$K$O8+$($^$;$s$G$7$?!#e(B

e$B%9%?%C%/%H%l!<%9$r=P$9$h$&$K$9$k$N$O4JC1$G$9$,!“e(B1.9 e$B$G$Oe(B $!
= nil e$B$,e(B
e$B6X;$5$l$F$$$k$?$a!"$3$N5sF0$rM^;$9$kJ}K!$,$”$j$^$;$s!#e(B

$ ruby18 -e ‘begin; raise; rescue; $! = nil; abort; end’

$ ruby19 -e ‘begin; raise; rescue; $! = nil; abort; end’
-e:1:in rescue in <main>': $! is a read-only variable (NameError) from -e:1:in

e$B$I$&$7$?$b$s$G$7$g$&$+!#e(B
e$B0J2<$O%9%?%C%/%H%l!<%9$r=P$9$h$&$K$7!"e(B$!
e$B$X$NBeF~$r5v2D$9$k$h$&$Ke(B
e$B$9$k%Q%C%A$G$9!#e(B

Index: eval.c

— eval.c (revision 19769)
+++ eval.c (working copy)
@@ -426,7 +426,7 @@
rb_raise(rb_eInterrupt, “%s”, “”);
}

-static VALUE get_errinfo(void);
+VALUE get_errinfo(void);

/*

  • call-seq:
    @@ -953,7 +953,7 @@
    return 0;
    }

-static VALUE
+VALUE
get_errinfo(void)
{
VALUE *ptr = errinfo_place();
@@ -971,7 +971,6 @@
return get_errinfo();
}

-#if 0
static void
errinfo_setter(VALUE val, ID id, VALUE *var)
{
@@ -988,7 +987,6 @@
}
}
}
-#endif

VALUE
rb_errinfo(void)
@@ -1119,7 +1117,7 @@
Init_eval(void)
{
rb_define_virtual_variable("$@", errat_getter, errat_setter);

  • rb_define_virtual_variable("$!", errinfo_getter, 0);
  • rb_define_virtual_variable("$!", errinfo_getter, errinfo_setter);

    rb_define_global_function(“iterator?”, rb_f_block_given_p, 0);
    rb_define_global_function(“block_given?”, rb_f_block_given_p, 0);
    Index: process.c
    ===================================================================
    — process.c (revision 19769)
    +++ process.c (working copy)
    @@ -2534,10 +2534,12 @@
    rb_f_abort(int argc, VALUE *argv)
    {
    extern void ruby_error_print(void);

  • extern VALUE get_errinfo(void);

    rb_secure(4);
    if (argc == 0) {

  • if (!NIL_P(GET_THREAD()->errinfo)) {
  • VALUE errinfo = GET_THREAD()->errinfo = get_errinfo();
  • if (!NIL_P(errinfo)) {
    ruby_error_print();
    }
    rb_exit(EXIT_FAILURE);

e$B1sF#$G$9!#e(B

e$B$3$N7o!"H?1~$r$*4j$$$7$^$9!#e(B > e$B$5$5$@$5$se(B

2008/10/13 17:41 Yusuke ENDOH [email protected]:

e$B1sF#$G$9!#e(B

2008/10/21 20:43 SASADA Koichi [email protected]:

rb_f_abort e$B$r8+$k$H%9%?%C%/%H%l!<%9$r=P$=$&$H$9$k%3!<%I$,;D$C$F$$j!"e(B
e$B0U?^E
$J5sF0JQ99$K$O8+$($^$;$s$G$7$?!#e(B

e$B!!$3$C$A$O%P%0$H$7$F9M$($k$H$7$F!%e(B

e$B$O$$!#e(B

e$B%9%?%C%/%H%l!<%9$r=P$9$h$&$K$9$k$N$O4JC1$G$9$,!“e(B1.9 e$B$G$Oe(B $! = nil e$B$,e(B
e$B6X;$5$l$F$$$k$?$a!"$3$N5sF0$rM^;$9$kJ}K!$,$”$j$^$;$s!#e(B

e$B!!$3$C$A$O!$;EMMJQ99$K$J$j$^$9!%e(B

e$B;d$O!$e(B[ruby-dev:31473] setter of $! e$B$K$F!$e(BYARV e$B$Ne$7$s$I$=$&e(B
e$B$@$C$?!J$I$&$$$&<BAu$r$9$l$P$h$/$o$+$i$J$+$C$?!K$N$G!$!V;H$C$F$$$J$$e(B
e$B$J$i>C$7$F$$$$!)!W$HJ9$-$^$7$?!%e(B[ruby-dev:31484] e$B$G$^$D$b$H$5$s$be(B
e$B!V$$$$$s$8$c$J$$$G$7$g$&$+!#!W$H$$$&H?1~$r$5$l$F$$$^$9!%$G!$$H$/$KH?e(B
e$BO@$b$J$+$C$?$N$GL58z$K$7$?$s$@$H;W$$$^$9!%e(B

$! e$B$X$N=q$-9~$6X;$,e(B ML
e$B$G5DO@$5$l$?>e$G$NJQ99$H$OCN$j$^$;$s$G$7$?!#e(B

ChangeLog e$B$KJQ99M}M3$de(B ML

e$B$X$N;2>H$,=q$+$l$F$$$J$+$C$?$N$G!#e(B

e$B%U%j!<%:8e$G$9$N$G!"$=$&$$$&$3$H$J$iLa$5$J$/$F$$$$$G$9!#e(B
abort e$B$,%9%?%C%/%H%l!<%9$r=P$9$N$,7y$J$i!"e(Bexit(false)
e$B$G2sHr$G$-$k!“e(B
e$B$H$$$&@b$b$”$j$^$9$7!#e(B

e$B!!$5$5$@$G$9!%e(B

e$B!!JV;v$,CY$/$J$C$F$9$_$^$;$s!%e(B

Yusuke ENDOH wrote:

rb_f_abort e$B$r8+$k$H%9%?%C%/%H%l!<%9$r=P$=$&$H$9$k%3!<%I$,;D$C$F$$j!"e(B
e$B0U?^E
$J5sF0JQ99$K$O8+$($^$;$s$G$7$?!#e(B

e$B!!$3$C$A$O%P%0$H$7$F9M$($k$H$7$F!%e(B

e$B$I$&$7$?$b$s$G$7$g$&$+!#e(B

e$B!!$3$C$A$O!$;EMMJQ99$K$J$j$^$9!%e(B

e$B!!;d$O!$e(B[ruby-dev:31473] setter of $! e$B$K$F!$e(BYARV
e$B$Ne$7$s$I$=$&e(B
e$B$@$C$?!J$I$&$$$&<BAu$r$9$l$P$h$/$o$+$i$J$+$C$?!K$N$G!$!V;H$C$F$$$J$$e(B
e$B$J$i>C$7$F$$$$!)!W$HJ9$-$^$7$?!%e(B[ruby-dev:31484]
e$B$G$^$D$b$H$5$s$be(B
e$B!V$$$$$s$8$c$J$$$G$7$g$&$+!#!W$H$$$&H?1~$r$5$l$F$$$^$9!%$G!$$H$/$KH?e(B
e$BO@$b$J$+$C$?$N$GL58z$K$7$?$s$@$H;W$$$^$9!%e(B

e$B!!$5$F!$$3$l$O$I$&$9$k$Y$-$G$7$g$&$+!%<BAu$K$D$$$F$O!$$"$^$j;n$7$F$$e(B
e$B$J$$$N$G$9$,!$$3$&$9$l$P$$$$$N$+$J$!!$$H$$$&8+Ev$O$D$$$F$O$$$^$9!%e(B
e$B$,!$K\Ev$K$=$l$G$$$$$N$+;n$7$F$_$J$$$H$h$/$o$+$j$^$;$s!%e(B

e$B!!;EMMJQ99$K$J$k$N$G!$0N$$?M$KH=CG$r6D$.$?$$$H;W$$$^$9!%e(B

e$B!!$5$5$@$G$9!%e(B

Yusuke ENDOH wrote:

2008/10/21 20:43 SASADA Koichi [email protected]:

rb_f_abort e$B$r8+$k$H%9%?%C%/%H%l!<%9$r=P$=$&$H$9$k%3!<%I$,;D$C$F$$j!"e(B
e$B0U?^E
$J5sF0JQ99$K$O8+$($^$;$s$G$7$?!#e(B
e$B!!$3$C$A$O%P%0$H$7$F9M$($k$H$7$F!%e(B

e$B$O$$!#e(B

e$B!!$3$l$K4X$7$F$O!$!V%9%?%C%/%H%l!<%9$r=P$9$Y$-$G$O$J$$$N$G$O$J$$$+!We(B
e$B$H$$$&0U8+$,e(B IRC e$B$G=P$F$$$^$7$?!%$I$&$9$k$Y$-$G$7$g$&$+!%e(B

e$B!!=P$5$J$$$h$&$K$9$k$H!$:#2s$N!V=P$5$J$$$h$&$K$9$k$?$a$K$O!A!W$H$$$&e(B
e$BA0Ds$,Jx$l$k$+$H;W$$$^$9!%e(B