From 73ebde194314225266e33d69aee1ec11d34b78b5 Mon Sep 17 00:00:00 2001 From: matz Date: Sat, 9 Feb 2002 14:47:52 +0000 Subject: * eval.c (rb_eval): singleton chech should be moved from yycompile to here. * eval.c (is_defined): check should be added here too. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_6@2060 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- eval.c | 39 ++++++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 17 deletions(-) (limited to 'eval.c') diff --git a/eval.c b/eval.c index 670a9889a6..82f0a06f87 100644 --- a/eval.c +++ b/eval.c @@ -1835,17 +1835,20 @@ is_defined(self, node, buf) break; case NODE_CVAR: - if (NIL_P(ruby_cbase)) { - if (rb_cvar_defined(CLASS_OF(self), node->nd_vid)) { - return "class variable"; + if (!ruby_frame || !ruby_frame->last_class || + !FL_TEST(ruby_frame->last_class, FL_SINGLETON)) { + if (NIL_P(ruby_cbase)) { + if (rb_cvar_defined(CLASS_OF(self), node->nd_vid)) { + return "class variable"; + } + break; } - break; - } - if (!FL_TEST(ruby_cbase, FL_SINGLETON)) { - if (rb_cvar_defined(ruby_cbase, node->nd_vid)) { - return "class variable"; + if (!FL_TEST(ruby_cbase, FL_SINGLETON)) { + if (rb_cvar_defined(ruby_cbase, node->nd_vid)) { + return "class variable"; + } + break; } - break; } /* fall through */ case NODE_CVAR2: @@ -2761,15 +2764,17 @@ rb_eval(self, n) break; case NODE_CVAR: /* normal method */ - if (NIL_P(ruby_cbase)) { - result = rb_cvar_get(CLASS_OF(self), node->nd_vid); - break; - } - if (!FL_TEST(ruby_cbase, FL_SINGLETON)) { - result = rb_cvar_get(ruby_cbase, node->nd_vid); - break; + if (!ruby_frame || !ruby_frame->last_class || + !FL_TEST(ruby_frame->last_class, FL_SINGLETON)) { + if (NIL_P(ruby_cbase)) { + result = rb_cvar_get(CLASS_OF(self), node->nd_vid); + break; + } + if (!FL_TEST(ruby_cbase, FL_SINGLETON)) { + result = rb_cvar_get(ruby_cbase, node->nd_vid); + break; + } } - self = rb_iv_get(ruby_cbase, "__attached__"); /* fall through */ case NODE_CVAR2: /* singleton method */ result = rb_cvar_get(rb_cvar_singleton(self), node->nd_vid); -- cgit v1.2.3