mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* eval.c (rb_call_super): should call method_missing if super is
called from Kernel method. * eval.c (exec_under): frame during eval should preserve external information. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@9491 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
cdcfcef20f
commit
90509da425
3 changed files with 19 additions and 5 deletions
|
|
@ -1,3 +1,11 @@
|
||||||
|
Tue Nov 1 14:20:11 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
|
* eval.c (rb_call_super): should call method_missing if super is
|
||||||
|
called from Kernel method.
|
||||||
|
|
||||||
|
* eval.c (exec_under): frame during eval should preserve external
|
||||||
|
information.
|
||||||
|
|
||||||
Tue Nov 01 10:50:17 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
|
Tue Nov 01 10:50:17 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
|
||||||
|
|
||||||
* ext/openssl/extconf.rb: should check ERR_peek_last_error().
|
* ext/openssl/extconf.rb: should check ERR_peek_last_error().
|
||||||
|
|
|
||||||
15
eval.c
15
eval.c
|
|
@ -6080,6 +6080,9 @@ rb_call_super(argc, argv)
|
||||||
|
|
||||||
self = ruby_frame->self;
|
self = ruby_frame->self;
|
||||||
klass = ruby_frame->last_class;
|
klass = ruby_frame->last_class;
|
||||||
|
if (RCLASS(klass)->super == 0) {
|
||||||
|
return method_missing(self, ruby_frame->last_func, argc, argv, CSTAT_SUPER);
|
||||||
|
}
|
||||||
|
|
||||||
PUSH_ITER(ruby_iter->iter ? ITER_PRE : ITER_NOT);
|
PUSH_ITER(ruby_iter->iter ? ITER_PRE : ITER_NOT);
|
||||||
result = rb_call(RCLASS(klass)->super, self, ruby_frame->orig_func, argc, argv, 3);
|
result = rb_call(RCLASS(klass)->super, self, ruby_frame->orig_func, argc, argv, 3);
|
||||||
|
|
@ -6439,14 +6442,16 @@ exec_under(func, under, cbase, args)
|
||||||
VALUE val = Qnil; /* OK */
|
VALUE val = Qnil; /* OK */
|
||||||
int state;
|
int state;
|
||||||
int mode;
|
int mode;
|
||||||
|
struct FRAME *f = ruby_frame->prev;
|
||||||
|
|
||||||
PUSH_CLASS(under);
|
PUSH_CLASS(under);
|
||||||
PUSH_FRAME();
|
PUSH_FRAME();
|
||||||
ruby_frame->self = _frame.prev->self;
|
ruby_frame->self = f->self;
|
||||||
ruby_frame->last_func = _frame.prev->last_func;
|
ruby_frame->last_func = f->last_func;
|
||||||
ruby_frame->last_class = _frame.prev->last_class;
|
ruby_frame->orig_func = f->orig_func;
|
||||||
ruby_frame->argc = _frame.prev->argc;
|
ruby_frame->last_class = f->last_class;
|
||||||
ruby_frame->argv = _frame.prev->argv;
|
ruby_frame->argc = f->argc;
|
||||||
|
ruby_frame->argv = f->argv;
|
||||||
if (cbase) {
|
if (cbase) {
|
||||||
PUSH_CREF(cbase);
|
PUSH_CREF(cbase);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -436,6 +436,7 @@ class RubyLex
|
||||||
def_exception(:SyntaxError, "%s")
|
def_exception(:SyntaxError, "%s")
|
||||||
|
|
||||||
include RubyToken
|
include RubyToken
|
||||||
|
include IRB
|
||||||
|
|
||||||
attr_reader :continue
|
attr_reader :continue
|
||||||
attr_reader :lex_state
|
attr_reader :lex_state
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue