mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* eval.c (rb_clear_trace_func, rb_thread_stop_timer_thread):
declarations for forward refernces. * eval.c (rb_longjmp, eval): use local variable. * eval.c (rb_longjmp): string object not to be optimized. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@12927 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
8a25f09d6c
commit
f5da26fc34
2 changed files with 26 additions and 12 deletions
|
@ -1,3 +1,12 @@
|
||||||
|
Mon Aug 13 17:23:10 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
|
* eval.c (rb_clear_trace_func, rb_thread_stop_timer_thread):
|
||||||
|
declarations for forward refernces.
|
||||||
|
|
||||||
|
* eval.c (rb_longjmp, eval): use local variable.
|
||||||
|
|
||||||
|
* eval.c (rb_longjmp): string object not to be optimized.
|
||||||
|
|
||||||
Mon Aug 13 13:21:58 2007 Tanaka Akira <akr@fsij.org>
|
Mon Aug 13 13:21:58 2007 Tanaka Akira <akr@fsij.org>
|
||||||
|
|
||||||
* lib/open-uri.rb: make ftp passive mode to avoid NAT problem.
|
* lib/open-uri.rb: make ftp passive mode to avoid NAT problem.
|
||||||
|
|
29
eval.c
29
eval.c
|
@ -105,6 +105,8 @@ ruby_init(void)
|
||||||
ruby_running = 1;
|
ruby_running = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern void rb_clear_trace_func(void);
|
||||||
|
|
||||||
void *
|
void *
|
||||||
ruby_options(int argc, char **argv)
|
ruby_options(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
@ -151,6 +153,8 @@ ruby_finalize(void)
|
||||||
ruby_finalize_1();
|
ruby_finalize_1();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void rb_thread_stop_timer_thread(void);
|
||||||
|
|
||||||
int
|
int
|
||||||
ruby_cleanup(int ex)
|
ruby_cleanup(int ex)
|
||||||
{
|
{
|
||||||
|
@ -645,6 +649,7 @@ static void
|
||||||
rb_longjmp(int tag, VALUE mesg)
|
rb_longjmp(int tag, VALUE mesg)
|
||||||
{
|
{
|
||||||
VALUE at;
|
VALUE at;
|
||||||
|
VALUE e;
|
||||||
rb_thread_t *th = GET_THREAD();
|
rb_thread_t *th = GET_THREAD();
|
||||||
const char *file;
|
const char *file;
|
||||||
int line = 0;
|
int line = 0;
|
||||||
|
@ -655,7 +660,7 @@ rb_longjmp(int tag, VALUE mesg)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NIL_P(mesg))
|
if (NIL_P(mesg))
|
||||||
mesg = GET_THREAD()->errinfo;
|
mesg = th->errinfo;
|
||||||
if (NIL_P(mesg)) {
|
if (NIL_P(mesg)) {
|
||||||
mesg = rb_exc_new(rb_eRuntimeError, 0, 0);
|
mesg = rb_exc_new(rb_eRuntimeError, 0, 0);
|
||||||
}
|
}
|
||||||
|
@ -670,24 +675,23 @@ rb_longjmp(int tag, VALUE mesg)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!NIL_P(mesg)) {
|
if (!NIL_P(mesg)) {
|
||||||
GET_THREAD()->errinfo = mesg;
|
th->errinfo = mesg;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (RTEST(ruby_debug) && !NIL_P(GET_THREAD()->errinfo)
|
if (RTEST(ruby_debug) && !NIL_P(e = th->errinfo) &&
|
||||||
&& !rb_obj_is_kind_of(GET_THREAD()->errinfo, rb_eSystemExit)) {
|
!rb_obj_is_kind_of(e, rb_eSystemExit)) {
|
||||||
VALUE e = GET_THREAD()->errinfo;
|
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
PUSH_TAG();
|
PUSH_TAG();
|
||||||
if ((status = EXEC_TAG()) == 0) {
|
if ((status = EXEC_TAG()) == 0) {
|
||||||
e = rb_obj_as_string(e);
|
RB_GC_GUARD(e) = rb_obj_as_string(e);
|
||||||
warn_printf("Exception `%s' at %s:%d - %s\n",
|
warn_printf("Exception `%s' at %s:%d - %s\n",
|
||||||
rb_obj_classname(GET_THREAD()->errinfo),
|
rb_obj_classname(th->errinfo),
|
||||||
file, line, RSTRING_PTR(e));
|
file, line, RSTRING_PTR(e));
|
||||||
}
|
}
|
||||||
POP_TAG();
|
POP_TAG();
|
||||||
if (status == TAG_FATAL && GET_THREAD()->errinfo == exception_error) {
|
if (status == TAG_FATAL && th->errinfo == exception_error) {
|
||||||
GET_THREAD()->errinfo = mesg;
|
th->errinfo = mesg;
|
||||||
}
|
}
|
||||||
else if (status) {
|
else if (status) {
|
||||||
thread_reset_raised(th);
|
thread_reset_raised(th);
|
||||||
|
@ -1713,11 +1717,12 @@ eval(VALUE self, VALUE src, VALUE scope, const char *file, int line)
|
||||||
|
|
||||||
if (state) {
|
if (state) {
|
||||||
if (state == TAG_RAISE) {
|
if (state == TAG_RAISE) {
|
||||||
|
VALUE errinfo = th->errinfo;
|
||||||
if (strcmp(file, "(eval)") == 0) {
|
if (strcmp(file, "(eval)") == 0) {
|
||||||
VALUE mesg, errat;
|
VALUE mesg, errat;
|
||||||
|
|
||||||
errat = get_backtrace(GET_THREAD()->errinfo);
|
errat = get_backtrace(errinfo);
|
||||||
mesg = rb_attr_get(GET_THREAD()->errinfo, rb_intern("mesg"));
|
mesg = rb_attr_get(errinfo, rb_intern("mesg"));
|
||||||
if (!NIL_P(errat) && TYPE(errat) == T_ARRAY) {
|
if (!NIL_P(errat) && TYPE(errat) == T_ARRAY) {
|
||||||
if (!NIL_P(mesg) && TYPE(mesg) == T_STRING) {
|
if (!NIL_P(mesg) && TYPE(mesg) == T_STRING) {
|
||||||
rb_str_update(mesg, 0, 0, rb_str_new2(": "));
|
rb_str_update(mesg, 0, 0, rb_str_new2(": "));
|
||||||
|
@ -1726,7 +1731,7 @@ eval(VALUE self, VALUE src, VALUE scope, const char *file, int line)
|
||||||
RARRAY_PTR(errat)[0] = RARRAY_PTR(backtrace(-2))[0];
|
RARRAY_PTR(errat)[0] = RARRAY_PTR(backtrace(-2))[0];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rb_exc_raise(GET_THREAD()->errinfo);
|
rb_exc_raise(errinfo);
|
||||||
}
|
}
|
||||||
JUMP_TAG(state);
|
JUMP_TAG(state);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue