From 26cb406afbd0d8c8be08168422d52126c6ed56ed Mon Sep 17 00:00:00 2001 From: nobu Date: Tue, 29 Oct 2002 19:11:17 +0000 Subject: * 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: http://svn.ruby-lang.org/repos/ruby/trunk@3012 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 13 +++++++++++++ eval.c | 32 ++++++++++++++++++++++++-------- intern.h | 2 ++ 3 files changed, 39 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5d860fcd7..2ac65691f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +Wed Oct 30 04:07:33 2002 Nobuyoshi Nakada + + * 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 + Tue Oct 29 02:00:08 2002 Nobuyoshi Nakada * ext/extmk.rb (extmake): use dummy_makefile to create dummy diff --git a/eval.c b/eval.c index 5374e4158..098b1809e 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; diff --git a/intern.h b/intern.h index 6be47ed8b..4244a33b7 100644 --- a/intern.h +++ b/intern.h @@ -173,6 +173,8 @@ void rb_mark_end_proc _((void)); void rb_exec_end_proc _((void)); void ruby_finalize _((void)); void ruby_stop _((int)); +int ruby_cleanup _((int)); +int ruby_exec _((void)); void rb_gc_mark_threads _((void)); void rb_thread_start_timer _((void)); void rb_thread_stop_timer _((void)); -- cgit