summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2002-10-29 19:11:17 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2002-10-29 19:11:17 +0000
commit088276ac843067132a94889a139fe96bfe3021a7 (patch)
tree23795fd77b7d995d44193980b87cb5b63f13c428 /eval.c
parent97eafefb4ad0ca1477a5a596362fc8616bd4bc25 (diff)
* eval.c (error_print, rb_longjmp, rb_thread_schedule): flush
error message. [ruby-dev:18582] * eval.c (ruby_cleanup): added. just clean up without exit. [ruby-dev:18582] * eval.c (ruby_exec): added. execute main evaluation tree without exit. [ruby-dev:18582] * intern.h: prototypes; ruby_cleanup, ruby_exec git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3012 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c32
1 files changed, 24 insertions, 8 deletions
diff --git a/eval.c b/eval.c
index 5374e41580..098b1809e1 100644
--- a/eval.c
+++ b/eval.c
@@ -1044,6 +1044,7 @@ error_print()
}
}
}
+ fflush(stderr);
}
#if defined(__APPLE__)
@@ -1229,8 +1230,8 @@ ruby_finalize()
POP_TAG();
}
-void
-ruby_stop(ex)
+int
+ruby_cleanup(ex)
int ex;
{
int state;
@@ -1251,18 +1252,15 @@ ruby_stop(ex)
ex = error_handle(ex);
POP_TAG();
ruby_finalize();
- exit(ex);
+ return ex;
}
-void
-ruby_run()
+int
+ruby_exec()
{
int state;
- static int ex;
volatile NODE *tmp;
- if (ruby_nerrs > 0) exit(ruby_nerrs);
-
Init_stack((void*)&tmp);
PUSH_TAG(PROT_NONE);
PUSH_ITER(ITER_NOT);
@@ -1273,7 +1271,23 @@ ruby_run()
}
POP_ITER();
POP_TAG();
+ return state;
+}
+void
+ruby_stop(ex)
+ int ex;
+{
+ exit(ruby_cleanup(ex));
+}
+
+void
+ruby_run()
+{
+ int state;
+ static int ex;
+ if (ruby_nerrs > 0) exit(ruby_nerrs);
+ state = ruby_exec();
if (state && !ex) ex = state;
ruby_stop(ex);
}
@@ -3611,6 +3625,7 @@ rb_longjmp(tag, mesg)
rb_class2name(CLASS_OF(ruby_errinfo)),
ruby_sourcefile, ruby_sourceline,
RSTRING(e)->ptr);
+ fflush(stderr);
}
rb_trap_restore_mask();
@@ -8120,6 +8135,7 @@ rb_thread_schedule()
th->node->nd_file, nd_line(th->node));
}
END_FOREACH_FROM(curr, th);
+ fflush(stderr);
next = main_thread;
rb_thread_ready(next);
next->status = THREAD_TO_KILL;