aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-10-12 10:48:35 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-10-12 10:48:35 +0000
commit511e757cd868a4207bddeffbdf127ad483fcfa80 (patch)
tree9d2fd568fc9fb4b226e82e37ae35233c6916d971
parentbd2a1db5af92ffc53d0125611b18ad0df7d8fa72 (diff)
downloadruby-511e757cd868a4207bddeffbdf127ad483fcfa80.tar.gz
* eval.c (ruby_run_node): if an exception occurred in ruby_option,
the result is not executable. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25308 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--eval.c28
2 files changed, 24 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index 63ac6b9c31..0dc8b80ecd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Mon Oct 12 19:48:33 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (ruby_run_node): if an exception occurred in ruby_option,
+ the result is not executable.
+
Mon Oct 12 05:51:11 2009 NARUSE, Yui <naruse@ruby-lang.org>
* regparse.c (fetch_token): warn invalid back reference
diff --git a/eval.c b/eval.c
index 9b5e015b35..26c10c16c8 100644
--- a/eval.c
+++ b/eval.c
@@ -216,23 +216,33 @@ ruby_stop(int ex)
}
int
+ruby_executable_node(void *n, int *status)
+{
+ VALUE v = (VALUE)n;
+ int s;
+
+ switch (v) {
+ case Qtrue: s = EXIT_SUCCESS; break;
+ case Qfalse: s = EXIT_FAILURE; break;
+ default:
+ if (!FIXNUM_P(v)) return TRUE;
+ s = FIX2INT(v);
+ }
+ if (status) *status = s;
+ return FALSE;
+}
+
+int
ruby_run_node(void *n)
{
+ int status;
+ if (!ruby_executable_node(n, &status)) return status;
return ruby_cleanup(ruby_exec_node(n));
}
int
ruby_exec_node(void *n)
{
- VALUE v = (VALUE)n;
-
- switch (v) {
- case Qtrue: return EXIT_SUCCESS;
- case Qfalse: return EXIT_FAILURE;
- }
- if (FIXNUM_P(v)) {
- return FIX2INT(v);
- }
ruby_init_stack((void *)&n);
return ruby_exec_internal(n);
}