diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2002-09-03 05:20:14 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2002-09-03 05:20:14 +0000 |
commit | 411216201eb3e8c79b9ae29f42b51b03b3e7b1d8 (patch) | |
tree | 324b1dbdf4149be943eb3cbff26ad7f377e53dc0 /variable.c | |
parent | 81ba2325bd19cd99c79937cc53a6c19770f62b84 (diff) | |
download | ruby-411216201eb3e8c79b9ae29f42b51b03b3e7b1d8.tar.gz ruby-411216201eb3e8c79b9ae29f42b51b03b3e7b1d8.tar.xz ruby-411216201eb3e8c79b9ae29f42b51b03b3e7b1d8.zip |
* variable.c (rb_copy_generic_ivar): remove old generic instance
variable table if it existes.
* class.c (rb_make_metaclass): metaclass of a metaclass is a
metaclass itself.
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@2784 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'variable.c')
-rw-r--r-- | variable.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/variable.c b/variable.c index 0b2c8ebe0..c37548fb9 100644 --- a/variable.c +++ b/variable.c @@ -924,7 +924,15 @@ rb_copy_generic_ivar(clone, obj) if (!generic_iv_tbl) return; if (st_lookup(generic_iv_tbl, obj, &tbl)) { - st_add_direct(generic_iv_tbl, clone, st_copy(tbl)); + st_table *old; + + if (st_lookup(generic_iv_tbl, clone, &old)) { + st_free_table(old); + st_insert(generic_iv_tbl, clone, st_copy(tbl)); + } + else { + st_add_direct(generic_iv_tbl, clone, st_copy(tbl)); + } } } |