зеркало из https://github.com/github/ruby.git
* insns.def (invokesuper): check consistency between class of self and
class of method being invoked by super. This is temporary measure for YARV. See [ruby-core:30313] in detail. See [ruby-dev:40959] [ruby-dev:39772] [ruby-core:27000] [ruby-core:27230] * vm_insnhelper.c (vm_search_superclass): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28043 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
97c175fa19
Коммит
b18fcd6a7c
|
@ -1,3 +1,12 @@
|
|||
Fri May 28 00:32:25 2010 Yusuke Endoh <mame@tsg.ne.jp>
|
||||
|
||||
* insns.def (invokesuper): check consistency between class of self and
|
||||
class of method being invoked by super. This is temporary measure
|
||||
for YARV. See [ruby-core:30313] in detail. See [ruby-dev:40959]
|
||||
[ruby-dev:39772] [ruby-core:27000] [ruby-core:27230]
|
||||
|
||||
* vm_insnhelper.c (vm_search_superclass): ditto.
|
||||
|
||||
Thu May 27 23:38:31 2010 NARUSE, Yui <naruse@ruby-lang.org>
|
||||
|
||||
* file.c (rb_home_dir): set filesystem encoding.
|
||||
|
|
|
@ -1022,6 +1022,12 @@ invokesuper
|
|||
|
||||
recv = GET_SELF();
|
||||
vm_search_superclass(GET_CFP(), GET_ISEQ(), recv, TOPN(num), &id, &klass);
|
||||
|
||||
/* temporary measure for [Bug #2402] [Bug #2502] [Bug #3136] */
|
||||
if (!rb_obj_is_kind_of(recv, klass)) {
|
||||
rb_raise(rb_eNotImpError, "super from singleton method that is defined to multiple classes is not supported; this will be fixed in 1.9.3 or later");
|
||||
}
|
||||
|
||||
me = rb_method_entry(klass, id);
|
||||
|
||||
CALL_METHOD(num, blockptr, flag, id, me, recv);
|
||||
|
|
|
@ -1402,6 +1402,11 @@ vm_search_superclass(rb_control_frame_t *reg_cfp, rb_iseq_t *ip,
|
|||
}
|
||||
}
|
||||
|
||||
/* temporary measure for [Bug #2420] [Bug #3136] */
|
||||
if (!lcfp->me) {
|
||||
rb_raise(rb_eNoMethodError, "super called outside of method");
|
||||
}
|
||||
|
||||
id = lcfp->me->def->original_id;
|
||||
klass = vm_search_normal_superclass(lcfp->me->klass, recv);
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче