From 49ca331157138f89a11cd50bdef733ca9f215da9 Mon Sep 17 00:00:00 2001 From: matz Date: Mon, 19 May 2003 04:52:55 +0000 Subject: * array.c (get_inspect_tbl): check whether inspect_tbl value is a valid array. (ruby-bugs-ja PR#65) * array.c (inspect_ensure,rb_protect_inspect,rb_inspecting_p): use get_inspect_tbl(). * eval.c (rb_f_abort): call exit(1) if exception is raised. This patch was made by Nobuyoshi Nakada on 2002-05-30. (ruby-bugs-ja PR#236) * signal.c: disable Ruby's interrupt handler at the beginning. (ruby-bugs-ja PR#236) git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@3817 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 17 +++++++++++++++++ array.c | 34 ++++++++++++++++++++++++++-------- eval.c | 6 +++++- signal.c | 2 +- 4 files changed, 49 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index 61fd05233..39da25a69 100644 --- a/ChangeLog +++ b/ChangeLog @@ -11,6 +11,23 @@ Mon May 19 08:08:51 2003 Tadayoshi Funaba * sample/cal.rb: ditto. +Sat May 17 12:02:25 2003 Yukihiro Matsumoto + + * array.c (get_inspect_tbl): check whether inspect_tbl value is a + valid array. (ruby-bugs-ja PR#65) + + * array.c (inspect_ensure,rb_protect_inspect,rb_inspecting_p): + use get_inspect_tbl(). + +Sat May 17 11:50:26 2003 Yukihiro Matsumoto + + * eval.c (rb_f_abort): call exit(1) if exception is raised. This + patch was made by Nobuyoshi Nakada on + 2002-05-30. (ruby-bugs-ja PR#236) + + * signal.c: disable Ruby's interrupt handler at the beginning. + (ruby-bugs-ja PR#236) + Sat May 17 02:17:42 2003 Nobuyoshi Nakada * lib/rational.rb (Integer::denominator): fixed typo. diff --git a/array.c b/array.c index adb511311..3331daa70 100644 --- a/array.c +++ b/array.c @@ -929,14 +929,36 @@ inspect_call(arg) return (*arg->func)(arg->arg1, arg->arg2); } +static VALUE +get_inspect_tbl(create) + int create; +{ + VALUE inspect_tbl = rb_thread_local_aref(rb_thread_current(), inspect_key); + + if (create && NIL_P(inspect_tbl)) { + tbl_init: + inspect_tbl = rb_ary_new(); + rb_thread_local_aset(rb_thread_current(), inspect_key, inspect_tbl); + } + else if (TYPE(inspect_tbl) != T_ARRAY) { + rb_warn("invalid inspect_tbl value"); + if (create) goto tbl_init; + rb_thread_local_aset(rb_thread_current(), inspect_key, Qnil); + return Qnil; + } + return inspect_tbl; +} + static VALUE inspect_ensure(obj) VALUE obj; { VALUE inspect_tbl; - inspect_tbl = rb_thread_local_aref(rb_thread_current(), inspect_key); - rb_ary_pop(inspect_tbl); + inspect_tbl = get_inspect_tbl(Qfalse); + if (!NIL_P(inspect_tbl)) { + rb_ary_pop(inspect_tbl); + } return 0; } @@ -949,11 +971,7 @@ rb_protect_inspect(func, obj, arg) VALUE inspect_tbl; VALUE id; - inspect_tbl = rb_thread_local_aref(rb_thread_current(), inspect_key); - if (NIL_P(inspect_tbl)) { - inspect_tbl = rb_ary_new(); - rb_thread_local_aset(rb_thread_current(), inspect_key, inspect_tbl); - } + inspect_tbl = get_inspect_tbl(Qtrue); id = rb_obj_id(obj); if (rb_ary_includes(inspect_tbl, id)) { return (*func)(obj, arg); @@ -972,7 +990,7 @@ rb_inspecting_p(obj) { VALUE inspect_tbl; - inspect_tbl = rb_thread_local_aref(rb_thread_current(), inspect_key); + inspect_tbl = get_inspect_tbl(Qfalse); if (NIL_P(inspect_tbl)) return Qfalse; return rb_ary_includes(inspect_tbl, rb_obj_id(obj)); } diff --git a/eval.c b/eval.c index 516357aab..241e4dcf4 100644 --- a/eval.c +++ b/eval.c @@ -1185,9 +1185,13 @@ ruby_init() _macruby_init(); #endif ruby_prog_init(); + ALLOW_INTS; } POP_TAG(); - if (state) error_print(); + if (state) { + error_print(); + exit(1); + } POP_SCOPE(); ruby_scope = top_scope; } diff --git a/signal.c b/signal.c index 3477abb0f..9815bd4bc 100644 --- a/signal.c +++ b/signal.c @@ -271,7 +271,7 @@ static VALUE trap_list[NSIG]; static rb_atomic_t trap_pending_list[NSIG]; rb_atomic_t rb_trap_pending; rb_atomic_t rb_trap_immediate; -int rb_prohibit_interrupt; +int rb_prohibit_interrupt = 1; void rb_gc_mark_trap_list() -- cgit