summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2002-02-09 14:47:52 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2002-02-09 14:47:52 +0000
commit73ebde194314225266e33d69aee1ec11d34b78b5 (patch)
treeae3713c1eb45ef1aedf821100c4781caf12d838d /eval.c
parentd0657a53a1b6abbd3e3fb21dab9f0d107e44aa4d (diff)
* 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
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c39
1 files changed, 22 insertions, 17 deletions
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);