From 38ada9fe878c649e80bf8c1ae835bc855240192c Mon Sep 17 00:00:00 2001 From: matz Date: Tue, 30 Nov 2004 04:01:17 +0000 Subject: [PATCH] * eval.c (rb_eval): [ruby-core:03856] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@7421 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 2 ++ env.h | 3 +-- eval.c | 4 ++++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1aeb4d1691..13af04d607 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ Tue Nov 30 00:49:08 2004 Yukihiro Matsumoto + * eval.c (rb_eval): [ruby-core:03856] + * io.c (rb_io_sysread): use temporary lock. [ruby-dev:24992] Tue Nov 30 00:12:57 2004 Kazuo Saito diff --git a/env.h b/env.h index c8aba37448..1019e6b567 100644 --- a/env.h +++ b/env.h @@ -29,8 +29,7 @@ RUBY_EXTERN struct FRAME { void rb_gc_mark_frame _((struct FRAME *)); -#define FRAME_ALLOCA 0 -#define FRAME_MALLOC 1 +#define FRAME_DMETH 1 RUBY_EXTERN struct SCOPE { struct RBasic super; diff --git a/eval.c b/eval.c index bb4ffba4cf..c718e79b6e 100644 --- a/eval.c +++ b/eval.c @@ -3250,6 +3250,9 @@ rb_eval(self, n) } } if (nd_type(node) == NODE_ZSUPER) { + if (ruby_frame->flags & FRAME_DMETH) { + rb_raise(rb_eRuntimeError, "super: specify arguments explicitly"); + } argc = ruby_frame->argc; argv = ruby_scope->local_vars + 2; } @@ -5550,6 +5553,7 @@ rb_call0(klass, recv, id, oid, argc, argv, body, nosuper) break; case NODE_BMETHOD: + ruby_frame->flags |= FRAME_DMETH; result = proc_invoke(body->nd_cval, rb_ary_new4(argc, argv), recv, klass); break;