summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-10-01 01:52:32 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-10-01 01:52:32 +0000
commitb9b34059a6f7eaa63aa0b7764db6eacb77531315 (patch)
tree7426057d206790c6d49bbd4b579589e22a3f852b /eval.c
parenteb64f5de06ff378c3efe17504a1b57df9f4985f9 (diff)
* eval.c (ruby_options), ruby.c (proc_options, process_options): not
call exit(2) directly. [ruby-dev:31912] * eval.c (ruby_run_node): deal with direct exit code. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13579 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/eval.c b/eval.c
index 49c6f5213d..cddf518adf 100644
--- a/eval.c
+++ b/eval.c
@@ -121,7 +121,8 @@ ruby_options(int argc, char **argv)
}
else {
rb_clear_trace_func();
- exit(error_handle(state));
+ state = error_handle(state);
+ tree = (void *)INT2FIX(state);
}
POP_TAG();
return tree;
@@ -249,8 +250,13 @@ int
ruby_run_node(void *n)
{
NODE *node = (NODE *)n;
- if (!n) {
- return EXIT_FAILURE;
+
+ switch ((VALUE)n) {
+ case Qtrue: return EXIT_SUCCESS;
+ case Qfalse: return EXIT_FAILURE;
+ }
+ if (FIXNUM_P((VALUE)n)) {
+ return FIX2INT((VALUE)n);
}
Init_stack((void *)&n);
return ruby_cleanup(ruby_exec_node(node, node->nd_file));
@@ -964,6 +970,7 @@ loop_i()
for (;;) {
rb_yield_0(0, 0);
}
+ return Qnil;
}
/*