diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-10-12 10:48:35 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-10-12 10:48:35 +0000 |
commit | 511e757cd868a4207bddeffbdf127ad483fcfa80 (patch) | |
tree | 9d2fd568fc9fb4b226e82e37ae35233c6916d971 | |
parent | bd2a1db5af92ffc53d0125611b18ad0df7d8fa72 (diff) | |
download | ruby-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-- | ChangeLog | 5 | ||||
-rw-r--r-- | eval.c | 28 |
2 files changed, 24 insertions, 9 deletions
@@ -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 @@ -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); } |