summaryrefslogtreecommitdiff
path: root/marshal.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2001-08-23 06:00:31 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2001-08-23 06:00:31 +0000
commit91866217e79574e43e130a462db25a81a976ef61 (patch)
treebcfdbd826fa9bed6a84553f28d9d67370faa6758 /marshal.c
parent3b0216fd901c61f278f5cf46a0f14f86d1f0151f (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.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/marshal.c b/marshal.c
index 87f65b2d57..af62919f41 100644
--- a/marshal.c
+++ b/marshal.c
@@ -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");
}