summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog17
-rw-r--r--array.c34
-rw-r--r--eval.c6
-rw-r--r--signal.c2
4 files changed, 49 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index 61fd052333..39da25a694 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -11,6 +11,23 @@ Mon May 19 08:08:51 2003 Tadayoshi Funaba <tadf@dotrb.org>
* sample/cal.rb: ditto.
+Sat May 17 12:02:25 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * 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 <matz@ruby-lang.org>
+
+ * eval.c (rb_f_abort): call exit(1) if exception is raised. This
+ patch was made by Nobuyoshi Nakada <nobu.nokada@softhome.net> 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 <nobu.nokada@softhome.net>
* lib/rational.rb (Integer::denominator): fixed typo.
diff --git a/array.c b/array.c
index adb511311e..3331daa70f 100644
--- a/array.c
+++ b/array.c
@@ -930,13 +930,35 @@ inspect_call(arg)
}
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 516357aab4..241e4dcf49 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 3477abb0f5..9815bd4bcd 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()