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 | 6f484e4930be69c58462dd11c97663e6c8488b8e (patch) | |
tree | 324b1dbdf4149be943eb3cbff26ad7f377e53dc0 /struct.c | |
parent | 20254d4e133331e69e6aa7514e1e72ad7d14d496 (diff) |
* 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: svn+ssh://ci.ruby-lang.org/ruby/trunk@2784 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'struct.c')
-rw-r--r-- | struct.c | 16 |
1 files changed, 9 insertions, 7 deletions
@@ -421,17 +421,19 @@ rb_struct_to_a(s) } static VALUE -rb_struct_become(clone, s) - VALUE clone, s; +rb_struct_become(copy, s) + VALUE copy, s; { - if (!rb_obj_is_instance_of(s, rb_obj_class(clone))) { + if (copy == s) return copy; + rb_check_frozen(copy); + if (!rb_obj_is_instance_of(s, rb_obj_class(copy))) { rb_raise(rb_eTypeError, "wrong argument class"); } - RSTRUCT(clone)->ptr = ALLOC_N(VALUE, RSTRUCT(s)->len); - RSTRUCT(clone)->len = RSTRUCT(s)->len; - MEMCPY(RSTRUCT(clone)->ptr, RSTRUCT(s)->ptr, VALUE, RSTRUCT(clone)->len); + RSTRUCT(copy)->ptr = ALLOC_N(VALUE, RSTRUCT(s)->len); + RSTRUCT(copy)->len = RSTRUCT(s)->len; + MEMCPY(RSTRUCT(copy)->ptr, RSTRUCT(s)->ptr, VALUE, RSTRUCT(copy)->len); - return clone; + return copy; } static VALUE |