summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1998-03-09 07:57:00 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1998-03-09 07:57:00 +0000
commit2b6ab941234426b8891f1bad036fd75611038312 (patch)
tree22ae6172fcc75cb8073529cb7f2719b11f0cf036 /eval.c
parent6a3fdf70f18a7b67808f23ddbd28e9631f7f905a (diff)
1.1b9_00
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/v1_1r@109 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/eval.c b/eval.c
index 73faf7fb91..4cbe54a445 100644
--- a/eval.c
+++ b/eval.c
@@ -2165,8 +2165,8 @@ rb_eval(self, node)
1, INT2FIX(node->nd_mid));
}
if (FL_TEST(the_class, FL_SINGLETON)) {
- VALUE recv = rb_iv_get(the_class, "__attached__");
- rb_funcall(recv, rb_intern("singleton_method_added"),
+ rb_funcall(rb_iv_get(the_class, "__attached__"),
+ rb_intern("singleton_method_added"),
1, INT2FIX(node->nd_mid));
}
else {
@@ -2215,8 +2215,20 @@ rb_eval(self, node)
body = search_method(the_class, node->nd_mid, &origin);
if (!body || !body->nd_body) {
- NameError("undefined method `%s' for class `%s'",
- rb_id2name(node->nd_mid), rb_class2name(the_class));
+ char *s0 = " class";
+ VALUE klass = the_class;
+
+ if (FL_TEST(the_class, FL_SINGLETON)) {
+ VALUE obj = rb_iv_get(the_class, "__attached__");
+ switch (TYPE(obj)) {
+ case T_MODULE:
+ case T_CLASS:
+ klass = obj;
+ s0 = "";
+ }
+ }
+ NameError("undefined method `%s' for%s `%s'",
+ rb_id2name(node->nd_mid),s0,rb_class2name(klass));
}
rb_clear_cache_by_id(node->nd_mid);
rb_add_method(the_class, node->nd_mid, 0, NOEX_PUBLIC);