diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-11-01 13:04:35 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-11-01 13:04:35 +0000 |
commit | 9974cb96d3c2ca18ab27aa37081fa4a8b37cb074 (patch) | |
tree | 8e3ffba4898afc1d4b9f82162d46157d0cf0a93f /eval.c | |
parent | cc1b72bc22453ac85b9308eb1c0e985b6e53cb7a (diff) |
* 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.
* configure.in: use proper option for Sun linker. A patch from
Shinya Kuwamura <[email protected]>. [ruby-dev:27603]
* numeric.c (fix_rshift): RDoc fix. [ruby-core:6351]
* util.h (strtod): add #undef for platforms defines strtod()
macro. [ruby-dev:27563]
* ext/etc/etc.c: document update from mathew <[email protected]>.
[ruby-core:06473]
* ext/fcntl/fcntl.c: ditto.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9490 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 14 |
1 files changed, 9 insertions, 5 deletions
@@ -5914,6 +5914,9 @@ rb_call_super(int argc, const VALUE *argv) self = ruby_frame->self; klass = ruby_frame->this_class; + if (RCLASS(klass)->super == 0) { + return method_missing(self, ruby_frame->this_func, argc, argv, CSTAT_SUPER); + } PUSH_ITER(ruby_iter->iter ? ITER_PRE : ITER_NOT); result = rb_call(RCLASS(klass)->super, self, ruby_frame->this_func, argc, argv, 3); @@ -6256,14 +6259,15 @@ exec_under(VALUE (*func) (VALUE), VALUE under, VALUE cbase, VALUE args) VALUE val = Qnil; /* OK */ int state; int mode; + struct FRAME *f = ruby_frame->prev; PUSH_CLASS(under); PUSH_FRAME(); - ruby_frame->self = _frame.prev->self; - ruby_frame->callee = _frame.prev->callee; - ruby_frame->this_func = _frame.prev->this_func; - ruby_frame->this_class = _frame.prev->this_class; - ruby_frame->argc = _frame.prev->argc; + ruby_frame->self = f->self; + ruby_frame->callee = f->callee; + ruby_frame->this_func = f->this_func; + ruby_frame->this_class = f->this_class; + ruby_frame->argc = f->argc; if (cbase) { PUSH_CREF(cbase); } |