summaryrefslogtreecommitdiffstats
path: root/eval.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2000-11-20 07:31:55 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2000-11-20 07:31:55 +0000
commit676e14b8437e49f54de307d55261474812ce4174 (patch)
tree5844d64e2d5e0b5a7b9dfc259037778db84b12aa /eval.c
parent9b82cee79ef2577f943c3fd43fd414449a0ddb82 (diff)
downloadruby-676e14b8437e49f54de307d55261474812ce4174.tar.gz
ruby-676e14b8437e49f54de307d55261474812ce4174.tar.xz
ruby-676e14b8437e49f54de307d55261474812ce4174.zip
matz
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@1049 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/eval.c b/eval.c
index c0d47bf4f..03ae3775e 100644
--- a/eval.c
+++ b/eval.c
@@ -2594,17 +2594,19 @@ rb_eval(self, n)
rb_const_set(ruby_class, node->nd_vid, result);
break;
- case NODE_CVASGN2:
- result = rb_eval(self, node->nd_value);
- rb_cvar_set_singleton(self, node->nd_vid, result);
- break;
-
case NODE_CVDECL:
if (NIL_P(ruby_cbase)) {
rb_raise(rb_eTypeError, "no class/module to define class variable");
}
+ if (!FL_TEST(ruby_cbase, FL_SINGLETON)) {
+ result = rb_eval(self, node->nd_value);
+ rb_cvar_declare(ruby_cbase, node->nd_vid, result);
+ break;
+ }
+ /* fall through */
+ case NODE_CVASGN2:
result = rb_eval(self, node->nd_value);
- rb_cvar_declare(ruby_cbase, node->nd_vid, result);
+ rb_cvar_set_singleton(self, node->nd_vid, result);
break;
case NODE_LVAR: