summaryrefslogtreecommitdiffstats
path: root/vm_eval.c
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-11-25 11:47:19 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-11-25 11:47:19 +0000
commit7caf67d1997821c965b6c461308c47be90c733e8 (patch)
treea3ec7baed3c42258187fdff3b11f5a41cee15ff5 /vm_eval.c
parent26c3611480ec30128a95ff943b9403e4fb5aa7ea (diff)
downloadruby-7caf67d1997821c965b6c461308c47be90c733e8.tar.gz
ruby-7caf67d1997821c965b6c461308c47be90c733e8.tar.xz
ruby-7caf67d1997821c965b6c461308c47be90c733e8.zip
* vm_eval.c (rb_search_method_entry): refine error message.
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@25922 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'vm_eval.c')
-rw-r--r--vm_eval.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/vm_eval.c b/vm_eval.c
index d975809f3..8d1054c8a 100644
--- a/vm_eval.c
+++ b/vm_eval.c
@@ -336,33 +336,38 @@ rb_search_method_entry(VALUE recv, ID mid)
VALUE klass = CLASS_OF(recv);
if (!klass) {
+ VALUE flags, klass;
if (IMMEDIATE_P(recv)) {
rb_raise(rb_eNotImpError,
"method `%s' called on unexpected immediate object (%p)",
rb_id2name(mid), (void *)recv);
}
- if (RBASIC(recv)->flags == 0) {
+ flags = RBASIC(recv)->flags;
+ klass = RBASIC(recv)->klass;
+ if (flags == 0) {
rb_raise(rb_eNotImpError,
"method `%s' called on terminated object"
" (%p flags=0x%"PRIxVALUE" klass=0x%"PRIxVALUE")",
- rb_id2name(mid), (void *)recv,
- RBASIC(recv)->flags, RBASIC(recv)->klass);
+ rb_id2name(mid), (void *)recv, flags, klass);
}
else {
int type = BUILTIN_TYPE(recv);
const char *typestr = rb_type_str(type);
- if (typestr)
+ if (typestr && T_OBJECT <= type && type < T_NIL)
rb_raise(rb_eNotImpError,
"method `%s' called on hidden %s object"
" (%p flags=0x%"PRIxVALUE" klass=0x%"PRIxVALUE")",
- rb_id2name(mid), typestr, (void *)recv,
- RBASIC(recv)->flags, RBASIC(recv)->klass);
+ rb_id2name(mid), typestr, (void *)recv, flags, klass);
+ if (typestr)
+ rb_raise(rb_eNotImpError,
+ "method `%s' called on unexpected %s object"
+ " (%p flags=0x%"PRIxVALUE" klass=0x%"PRIxVALUE")",
+ rb_id2name(mid), typestr, (void *)recv, flags, klass);
else
rb_raise(rb_eNotImpError,
- "method `%s' called on hidden T_???" "(0x%02x) object"
+ "method `%s' called on broken T_???" "(0x%02x) object"
" (%p flags=0x%"PRIxVALUE" klass=0x%"PRIxVALUE")",
- rb_id2name(mid), type, (void *)recv,
- RBASIC(recv)->flags, RBASIC(recv)->klass);
+ rb_id2name(mid), type, (void *)recv, flags, klass);
}
}
return rb_method_entry(klass, mid);