summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-05-19 04:52:55 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-05-19 04:52:55 +0000
commitf4ff7ccddf1f7090e23234d6cb37c17c617b4cd2 (patch)
tree78b5f63a80951b6dd111eefdf3789bc5d95d7ac9
parentf50984366b923176b4e5f10efd87e0a85829afa8 (diff)
* 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 <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) git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3817 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-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()