summaryrefslogtreecommitdiff
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
commitf2f74e91bf9c4fb9f839ea7ad3330053484b62bf (patch)
treebebf9e8ab2323f3b31be854a880d3f65db80be0a
parent3d44db882bc40c5258f340bb770f30c6ada98bbd (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/trunk@2060 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog7
-rw-r--r--eval.c40
-rw-r--r--parse.y4
3 files changed, 30 insertions, 21 deletions
diff --git a/ChangeLog b/ChangeLog
index 6d0e335367..a44ee19ac6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Fri Feb 8 23:07:23 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval): singleton chech should be moved from yycompile
+ to here.
+
+ * eval.c (is_defined): check should be added here too.
+
Fri Feb 8 05:31:48 2002 Minero Aoki <aamine@loveruby.net>
* lib/net/http.rb: HTTP.Proxy should use self for proxy-class's
diff --git a/eval.c b/eval.c
index 63953757f2..18dedb61b3 100644
--- a/eval.c
+++ b/eval.c
@@ -1899,19 +1899,21 @@ 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;
}
- self = rb_iv_get(ruby_cbase, "__attached__");
/* fall through */
case NODE_CVAR2:
if (rb_cvar_defined(rb_cvar_singleton(self), node->nd_vid)) {
@@ -2901,13 +2903,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)) {
+ /* non singleton 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;
+ }
}
/* fall through */
case NODE_CVAR2: /* singleton method */
diff --git a/parse.y b/parse.y
index d4229547f8..0081e9fa81 100644
--- a/parse.y
+++ b/parse.y
@@ -2145,10 +2145,6 @@ yycompile(f, line)
heredoc_end = 0;
ruby_sourcefile = strdup(f);
ruby_in_compile = 1;
- if (ruby_frame && ruby_frame->last_class &&
- FL_TEST(ruby_frame->last_class, FL_SINGLETON)) {
- in_single = 1;
- }
n = yyparse();
ruby_debug_lines = 0;
compile_for_eval = 0;