From 5a1e96b22aa6759bde56ff9667759b44e9f6fa28 Mon Sep 17 00:00:00 2001 From: matz Date: Mon, 20 Apr 1998 05:55:38 +0000 Subject: *** empty log message *** git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/v1_1r@175 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- class.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'class.c') diff --git a/class.c b/class.c index 40db68beb2..1f8bccc109 100644 --- a/class.c +++ b/class.c @@ -217,31 +217,34 @@ rb_include_module(klass, module) VALUE p; if (NIL_P(module)) return; + if (klass == module) return; switch (TYPE(module)) { case T_MODULE: case T_CLASS: + case T_ICLASS: break; default: Check_Type(module, T_MODULE); } - if (klass == module) return; - rb_clear_cache(); - while (module) { /* ignore if the module included already in superclasses */ for (p = RCLASS(klass)->super; p; p = RCLASS(p)->super) { if (BUILTIN_TYPE(p) == T_ICLASS && - RCLASS(p)->m_tbl == RCLASS(module)->m_tbl) + RCLASS(p)->m_tbl == RCLASS(module)->m_tbl) { + if (RCLASS(module)->super) { + rb_include_module(p, RCLASS(module)->super); + } return; + } } - RCLASS(klass)->super = include_class_new(module, RCLASS(klass)->super); klass = RCLASS(klass)->super; module = RCLASS(module)->super; } + rb_clear_cache(); } VALUE -- cgit v1.2.3