summaryrefslogtreecommitdiffstats
path: root/eval.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-09-03 09:00:52 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-09-03 09:00:52 +0000
commitc29e1b147e52ad81554d94a422210f1c1ff97d9e (patch)
treeb169cc7c3b4f2dd17e6a0d768ba75e1a982632bd /eval.c
parente5ff3095ddac2d15b49b8beb24d412d167d7f053 (diff)
downloadruby-c29e1b147e52ad81554d94a422210f1c1ff97d9e.tar.gz
ruby-c29e1b147e52ad81554d94a422210f1c1ff97d9e.tar.xz
ruby-c29e1b147e52ad81554d94a422210f1c1ff97d9e.zip
* struct.c (make_struct): remove redefining constant when
conflict. [ruby-dev:24210] git-svn-id: http://svn.ruby-lang.org/repos/ruby/branches/ruby_1_8@6854 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c34
1 files changed, 2 insertions, 32 deletions
diff --git a/eval.c b/eval.c
index 541ea8580..e1599fe5d 100644
--- a/eval.c
+++ b/eval.c
@@ -1715,37 +1715,6 @@ rb_eval_cmd(cmd, arg, level)
return val;
}
-static VALUE
-superclass(self, node)
- VALUE self;
- NODE *node;
-{
- VALUE val = Qnil; /* OK */
- int state;
-
- PUSH_TAG(PROT_NONE);
- if ((state = EXEC_TAG()) == 0) {
- val = rb_eval(self, node);
- }
- POP_TAG();
- if (state) {
- switch (nd_type(node)) {
- case NODE_COLON2:
- rb_raise(rb_eTypeError, "undefined superclass `%s'",
- rb_id2name(node->nd_mid));
- case NODE_CONST:
- rb_raise(rb_eTypeError, "undefined superclass `%s'",
- rb_id2name(node->nd_vid));
- default:
- break;
- }
- JUMP_TAG(state);
- }
- rb_check_inheritable(val);
-
- return val;
-}
-
#define ruby_cbase (ruby_cref->nd_clss)
static VALUE
@@ -3792,7 +3761,8 @@ rb_eval(self, n)
rb_raise(rb_eTypeError, "no outer class/module");
}
if (node->nd_super) {
- super = superclass(self, node->nd_super);
+ super = rb_eval(self, node->nd_super);
+ rb_check_inheritable(super);
}
else {
super = 0;