From 0cf6e773be4ab563decd19c6a285568e489e80ea Mon Sep 17 00:00:00 2001 From: matz Date: Fri, 14 May 2004 12:26:22 +0000 Subject: * eval.c (eval): warning during eval should not cause deadlock. [ruby-talk:98651] * eval.c (rb_eval): raise TypeError exception for superclass mismatch. [ruby-dev:39567] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@6310 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- eval.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'eval.c') diff --git a/eval.c b/eval.c index 0c4f60a5eb..f42d8bea2c 100644 --- a/eval.c +++ b/eval.c @@ -3796,7 +3796,8 @@ rb_eval(self, n) if (super) { tmp = rb_class_real(RCLASS(klass)->super); if (tmp != super) { - goto override_class; + rb_raise(rb_eTypeError, "superclass mismatch for class %s", + rb_id2name(cname)); } super = 0; } @@ -3805,7 +3806,6 @@ rb_eval(self, n) } } else { - override_class: if (!super) super = rb_cObject; klass = rb_define_class_id(cname, super); rb_set_class_path(klass, cbase, rb_id2name(cname)); @@ -6029,6 +6029,7 @@ eval(self, src, scope, file, line) struct FRAME frame; NODE *nodesave = ruby_current_node; volatile int iter = ruby_frame->iter; + volatile int safe = ruby_safe_level; int state; if (!NIL_P(scope)) { @@ -6082,6 +6083,7 @@ eval(self, src, scope, file, line) if ((state = EXEC_TAG()) == 0) { NODE *node; + ruby_safe_level = 0; result = ruby_errinfo; ruby_errinfo = Qnil; node = compile(src, file, line); @@ -6094,6 +6096,7 @@ eval(self, src, scope, file, line) POP_TAG(); POP_CLASS(); ruby_in_eval--; + ruby_safe_level = safe; if (!NIL_P(scope)) { int dont_recycle = ruby_scope->flags & SCOPE_DONT_RECYCLE; -- cgit v1.2.3