diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-03-28 08:43:25 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-03-28 08:43:25 +0000 |
commit | 62261ccb47fce9c4728cfbeb84f81d23369ab910 (patch) | |
tree | 3f1464728d4c6d3ba1e64bbe22e1f00672a8690a /class.c | |
parent | 6771ffa97125d57a48378daed460ec22db7dd835 (diff) | |
download | ruby-62261ccb47fce9c4728cfbeb84f81d23369ab910.tar.gz |
* 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.
* ruby.h: all Check_SafeStr()'s are replaced by SafeStr() to
ensure 'to_str' be always effective.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@1288 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'class.c')
-rw-r--r-- | class.c | 11 |
1 files changed, 8 insertions, 3 deletions
@@ -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 |