From 2b6ab941234426b8891f1bad036fd75611038312 Mon Sep 17 00:00:00 2001 From: matz Date: Mon, 9 Mar 1998 07:57:00 +0000 Subject: 1.1b9_00 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/v1_1r@109 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- eval.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'eval.c') 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); -- cgit v1.2.3