* error.c (exc_equal): == operator should be transitional.
[ruby-dev:34808] * error.c (syserr_eqq): === should be able to handle delegated objects as well. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@16572 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
8707a6ff4b
commit
582da7dac7
@ -34,6 +34,14 @@ Fri May 23 12:23:05 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
|||||||
tool/instruction.rb (RubyVM::VmBodyGenerator#make_header_operands):
|
tool/instruction.rb (RubyVM::VmBodyGenerator#make_header_operands):
|
||||||
omit unused variables.
|
omit unused variables.
|
||||||
|
|
||||||
|
Fri May 23 08:47:02 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
|
* error.c (exc_equal): == operator should be transitional.
|
||||||
|
[ruby-dev:34808]
|
||||||
|
|
||||||
|
* error.c (syserr_eqq): === should be able to handle delegated
|
||||||
|
objects as well.
|
||||||
|
|
||||||
Fri May 23 06:15:20 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
Fri May 23 06:15:20 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
* iseq.c (rb_iseq_compile_with_option): get rid of segv.
|
* iseq.c (rb_iseq_compile_with_option): get rid of segv.
|
||||||
|
16
error.c
16
error.c
@ -556,7 +556,7 @@ exc_equal(VALUE exc, VALUE obj)
|
|||||||
|
|
||||||
if (exc == obj) return Qtrue;
|
if (exc == obj) return Qtrue;
|
||||||
if (rb_obj_class(exc) != rb_obj_class(obj))
|
if (rb_obj_class(exc) != rb_obj_class(obj))
|
||||||
return Qfalse;
|
return rb_equal(obj, exc);
|
||||||
if (!rb_equal(rb_attr_get(exc, id_mesg), rb_attr_get(obj, id_mesg)))
|
if (!rb_equal(rb_attr_get(exc, id_mesg), rb_attr_get(obj, id_mesg)))
|
||||||
return Qfalse;
|
return Qfalse;
|
||||||
if (!rb_equal(exc_backtrace(exc), exc_backtrace(obj)))
|
if (!rb_equal(exc_backtrace(exc), exc_backtrace(obj)))
|
||||||
@ -963,18 +963,16 @@ static VALUE
|
|||||||
syserr_eqq(VALUE self, VALUE exc)
|
syserr_eqq(VALUE self, VALUE exc)
|
||||||
{
|
{
|
||||||
VALUE num, e;
|
VALUE num, e;
|
||||||
|
ID en = rb_intern("errno");
|
||||||
|
|
||||||
if (!rb_obj_is_kind_of(exc, rb_eSystemCallError)) return Qfalse;
|
if (!rb_obj_is_kind_of(exc, rb_eSystemCallError)) {
|
||||||
if (self == rb_eSystemCallError) return Qtrue;
|
if (!rb_respond_to(exc, en)) return Qfalse;
|
||||||
|
}
|
||||||
|
else if (self == rb_eSystemCallError) return Qtrue;
|
||||||
|
|
||||||
num = rb_attr_get(exc, rb_intern("errno"));
|
num = rb_attr_get(exc, rb_intern("errno"));
|
||||||
if (NIL_P(num)) {
|
if (NIL_P(num)) {
|
||||||
VALUE klass = CLASS_OF(exc);
|
num = rb_funcall(exc, en, 0, 0);
|
||||||
|
|
||||||
while (TYPE(klass) == T_ICLASS || FL_TEST(klass, FL_SINGLETON)) {
|
|
||||||
klass = (VALUE)RCLASS_SUPER(klass);
|
|
||||||
}
|
|
||||||
num = rb_const_get(klass, rb_intern("Errno"));
|
|
||||||
}
|
}
|
||||||
e = rb_const_get(self, rb_intern("Errno"));
|
e = rb_const_get(self, rb_intern("Errno"));
|
||||||
if (FIXNUM_P(num) ? num == e : rb_equal(num, e))
|
if (FIXNUM_P(num) ? num == e : rb_equal(num, e))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user