git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38316 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
kazu 2012-12-11 09:31:26 +00:00
Родитель 52d4a465a8
Коммит 16af9a107e
2 изменённых файлов: 8 добавлений и 8 удалений

Просмотреть файл

@ -68,7 +68,7 @@ Tue Dec 11 00:26:58 2012 Shugo Maeda <shugo@ruby-lang.org>
superclass <M>'.
* vm_insnhelper.c (vm_search_super_method): do not raise a
NotImplementError if current_defind_class is a module included
NotImplementError if current_defined_class is a module included
into a refinement. Because of the change of
vm_search_normal_superclass(), the receiver might not be an
instance of the module('s iclass).

Просмотреть файл

@ -1930,21 +1930,21 @@ vm_search_superclass(rb_control_frame_t *reg_cfp, rb_iseq_t *iseq, VALUE sigval,
static void
vm_search_super_method(rb_thread_t *th, rb_control_frame_t *reg_cfp, rb_call_info_t *ci)
{
VALUE current_defind_class;
VALUE current_defined_class;
rb_iseq_t *iseq = GET_ISEQ();
VALUE sigval = TOPN(ci->orig_argc);
current_defind_class = GET_CFP()->klass;
if (NIL_P(current_defind_class)) {
current_defined_class = GET_CFP()->klass;
if (NIL_P(current_defined_class)) {
vm_super_outside();
}
if (!NIL_P(RCLASS_REFINED_CLASS(current_defind_class))) {
current_defind_class = RCLASS_REFINED_CLASS(current_defind_class);
if (!NIL_P(RCLASS_REFINED_CLASS(current_defined_class))) {
current_defined_class = RCLASS_REFINED_CLASS(current_defined_class);
}
if (!FL_TEST(current_defind_class, RMODULE_INCLUDED_INTO_REFINEMENT) &&
!rb_obj_is_kind_of(ci->recv, current_defind_class)) {
if (!FL_TEST(current_defined_class, RMODULE_INCLUDED_INTO_REFINEMENT) &&
!rb_obj_is_kind_of(ci->recv, current_defined_class)) {
rb_raise(rb_eNotImpError, "super from singleton method that is defined to multiple classes is not supported; this will be fixed in 2.0.0 or later");
}