diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-08-23 06:00:31 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-08-23 06:00:31 +0000 |
commit | 91866217e79574e43e130a462db25a81a976ef61 (patch) | |
tree | bcfdbd826fa9bed6a84553f28d9d67370faa6758 /marshal.c | |
parent | 3b0216fd901c61f278f5cf46a0f14f86d1f0151f (diff) |
* eval.c (is_defined): should not dump core for "defined?(())".
* eval.c (umethod_bind): recv can be an instance of descender of
oklass if oklass is a Module.
* hash.c (rb_hash_equal): check identiry equality first.
* variable.c (mod_av_set): detect constant overriding for built-in
classes/modules.
* marshal.c (w_object): should retrieve __member__ data from
non-singleton class.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_6@1706 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'marshal.c')
-rw-r--r-- | marshal.c | 12 |
1 files changed, 7 insertions, 5 deletions
@@ -144,7 +144,7 @@ w_long(x, arg) int i, len = 0; #if SIZEOF_LONG > 4 - if (!(RSHIFT(x, 32) == 0 || RSHIFT(x, 32) == -1)) { + if (!(RSHIFT(x, 31) == 0 || RSHIFT(x, 31) == -1)) { /* big long does not fit in 4 bytes */ rb_raise(rb_eTypeError, "long too big to dump"); } @@ -443,13 +443,15 @@ w_object(obj, arg, limit) w_byte(TYPE_STRUCT, arg); { long len = RSTRUCT(obj)->len; - char *path = rb_class2name(CLASS_OF(obj)); - VALUE mem; + VALUE c, mem; long i; - w_unique(path, arg); + c = CLASS_OF(obj); + w_unique(rb_class2name(c), arg); w_long(len, arg); - mem = rb_ivar_get(CLASS_OF(obj), rb_intern("__member__")); + if (FL_TEST(c, FL_SINGLETON)) + c = RCLASS(c)->super; + mem = rb_ivar_get(c, rb_intern("__member__")); if (mem == Qnil) { rb_raise(rb_eTypeError, "uninitialized struct"); } |