* 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
This commit is contained in:
matz 2003-05-19 04:52:55 +00:00
Родитель f50984366b
Коммит f4ff7ccddf
4 изменённых файлов: 49 добавлений и 10 удалений

Просмотреть файл

@ -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.

34
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));
}

6
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;
}

Просмотреть файл

@ -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()