From 19ee1d0e5596c710e3d0b14dfd9a9faacd19e907 Mon Sep 17 00:00:00 2001 From: matz Date: Wed, 28 Mar 2001 08:44:37 +0000 Subject: * object.c (rb_str2cstr): warn if string contains \0 and length value is ignored. * class.c (rb_singleton_class_clone): should copy class constant table as well. * class.c (rb_include_module): sometimes cache was mistakenly left uncleared - based on the patch by K.Kosako. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_6@1289 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- class.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'class.c') diff --git a/class.c b/class.c index 2eedb262dc..b5a9a21e42 100644 --- a/class.c +++ b/class.c @@ -67,6 +67,9 @@ rb_singleton_class_clone(klass) clone->super = RCLASS(klass)->super; clone->iv_tbl = 0; clone->m_tbl = 0; + if (RCLASS(klass)->iv_tbl) { + clone->iv_tbl = st_copy(RCLASS(klass)->iv_tbl); + } clone->m_tbl = st_init_numtable(); st_foreach(RCLASS(klass)->m_tbl, clone_method, clone->m_tbl); FL_SET(clone, FL_SINGLETON); @@ -217,6 +220,7 @@ rb_include_module(klass, module) VALUE klass, module; { VALUE p; + int changed = 0; if (NIL_P(module)) return; if (klass == module) return; @@ -238,16 +242,17 @@ rb_include_module(klass, module) if (RCLASS(module)->super) { rb_include_module(p, RCLASS(module)->super); } + if (changed) rb_clear_cache(); return; } } rb_frozen_class_p(klass); - RCLASS(klass)->super = - include_class_new(module, RCLASS(klass)->super); + RCLASS(klass)->super = include_class_new(module, RCLASS(klass)->super); klass = RCLASS(klass)->super; module = RCLASS(module)->super; + changed = 1; } - rb_clear_cache(); + if (changed) rb_clear_cache(); } VALUE -- cgit v1.2.3