[前][次][番号順一覧][スレッド一覧]

ruby-changes:1658

From: ko1@a...
Date: 22 Aug 2007 09:38:33 +0900
Subject: [ruby-changes:1658] shyouhei - Ruby:r13148 (ruby_1_8_6): * eval.c (ruby_cleanup): return EXIT_FAILURE if any exceptions occured

shyouhei	2007-08-22 09:38:19 +0900 (Wed, 22 Aug 2007)

  New Revision: 13148

  Modified files:
    branches/ruby_1_8_6/ChangeLog
    branches/ruby_1_8_6/eval.c
    branches/ruby_1_8_6/version.h

  Log:
    * eval.c (ruby_cleanup): return EXIT_FAILURE if any exceptions occured
      in at_exit blocks.  [ruby-core:11263]


  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8_6/ChangeLog?r1=13148&r2=13147
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8_6/version.h?r1=13148&r2=13147
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8_6/eval.c?r1=13148&r2=13147

Index: ruby_1_8_6/ChangeLog
===================================================================
--- ruby_1_8_6/ChangeLog	(revision 13147)
+++ ruby_1_8_6/ChangeLog	(revision 13148)
@@ -1,3 +1,8 @@
+Wed Aug 22 09:00:23 2007  Nobuyoshi Nakada  <nobu@r...>
+
+	* eval.c (ruby_cleanup): return EXIT_FAILURE if any exceptions occured
+	  in at_exit blocks.  [ruby-core:11263]
+
 Wed Aug 22 08:52:02 2007  Nobuyoshi Nakada  <nobu@r...>
 
 	* variable.c (rb_path2class): get rid of dangling pointer caused by
Index: ruby_1_8_6/version.h
===================================================================
--- ruby_1_8_6/version.h	(revision 13147)
+++ ruby_1_8_6/version.h	(revision 13148)
@@ -2,7 +2,7 @@
 #define RUBY_RELEASE_DATE "2007-08-22"
 #define RUBY_VERSION_CODE 186
 #define RUBY_RELEASE_CODE 20070822
-#define RUBY_PATCHLEVEL 48
+#define RUBY_PATCHLEVEL 49
 
 #define RUBY_VERSION_MAJOR 1
 #define RUBY_VERSION_MINOR 8
Index: ruby_1_8_6/eval.c
===================================================================
--- ruby_1_8_6/eval.c	(revision 13147)
+++ ruby_1_8_6/eval.c	(revision 13148)
@@ -1565,15 +1565,14 @@
     int ex;
 {
     int state;
-    VALUE err;
     volatile VALUE errs[2];
     int nerr;
 
-    errs[0] = ruby_errinfo;
+    errs[1] = ruby_errinfo;
     ruby_safe_level = 0;
-    Init_stack((void*)&state);
+    Init_stack((void *)&state);
     ruby_finalize_0();
-    errs[1] = ruby_errinfo;
+    errs[0] = ruby_errinfo;
     PUSH_TAG(PROT_NONE);
     PUSH_ITER(ITER_NOT);
     if ((state = EXEC_TAG()) == 0) {
@@ -1584,13 +1583,16 @@
 	ex = state;
     }
     POP_ITER();
-    ruby_errinfo = errs[0];
+    ruby_errinfo = errs[1];
     ex = error_handle(ex);
     ruby_finalize_1();
     POP_TAG();
 
-    for (nerr = sizeof(errs) / sizeof(errs[0]); nerr;) {
-	if (!(err = errs[--nerr])) continue;
+    for (nerr = 0; nerr < sizeof(errs) / sizeof(errs[0]); ++nerr) {
+	VALUE err = errs[nerr];
+
+	if (!RTEST(err)) continue;
+
 	if (rb_obj_is_kind_of(err, rb_eSystemExit)) {
 	    return sysexit_status(err);
 	}
@@ -1598,7 +1600,22 @@
 	    VALUE sig = rb_iv_get(err, "signo");
 	    ruby_default_signal(NUM2INT(sig));
 	}
+	else if (ex == 0) {
+	    ex = 1;
+	}
     }
+
+#if EXIT_SUCCESS != 0 || EXIT_FAILURE != 1
+    switch (ex) {
+#if EXIT_SUCCESS != 0
+      case 0: return EXIT_SUCCESS;
+#endif
+#if EXIT_FAILURE != 1
+      case 1: return EXIT_FAILURE;
+#endif
+    }
+#endif
+
     return ex;
 }
 

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧]