diff options
author | knu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-05-24 17:49:34 +0000 |
---|---|---|
committer | knu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-05-24 17:49:34 +0000 |
commit | 072673ee41bf10822d44a88a21818e255ddfedbb (patch) | |
tree | 6bcc647423c55e74ac3f257beac14b0fc38d6080 /error.c | |
parent | fd4364d087bea81744aaf635985320014b8e1a78 (diff) | |
download | ruby-072673ee41bf10822d44a88a21818e255ddfedbb.tar.gz |
Merge from ruby_1_8.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@16575 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'error.c')
-rw-r--r-- | error.c | 16 |
1 files changed, 7 insertions, 9 deletions
@@ -952,18 +952,16 @@ syserr_eqq(self, exc) VALUE self, exc; { VALUE num, e; + ID en = rb_intern("errno"); - if (!rb_obj_is_kind_of(exc, rb_eSystemCallError)) return Qfalse; - if (self == rb_eSystemCallError) return Qtrue; + if (!rb_obj_is_kind_of(exc, rb_eSystemCallError)) { + 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, en); if (NIL_P(num)) { - VALUE klass = CLASS_OF(exc); - - while (TYPE(klass) == T_ICLASS || FL_TEST(klass, FL_SINGLETON)) { - klass = (VALUE)RCLASS(klass)->super; - } - num = rb_const_get(klass, rb_intern("Errno")); + num = rb_funcall(exc, en, 0, 0); } e = rb_const_get(self, rb_intern("Errno")); if (FIXNUM_P(num) ? num == e : rb_equal(num, e)) |