summaryrefslogtreecommitdiff
path: root/marshal.c
diff options
context:
space:
mode:
Diffstat (limited to 'marshal.c')
-rw-r--r--marshal.c32
1 files changed, 15 insertions, 17 deletions
diff --git a/marshal.c b/marshal.c
index b8319dcdce..27d038a8b1 100644
--- a/marshal.c
+++ b/marshal.c
@@ -505,13 +505,12 @@ w_object(obj, arg, limit)
break;
case T_STRUCT:
- w_byte(TYPE_STRUCT, arg);
+ w_class(TYPE_STRUCT, obj, arg);
{
long len = RSTRUCT(obj)->len;
VALUE mem;
long i;
- w_unique(rb_obj_classname(obj), arg);
w_long(len, arg);
mem = rb_struct_iv_get(rb_obj_class(obj), "__member__");
if (mem == Qnil) {
@@ -529,20 +528,20 @@ w_object(obj, arg, limit)
w_ivar(ROBJECT(obj)->iv_tbl, &c_arg);
break;
- case T_DATA:
- {
- VALUE v;
-
- w_class(TYPE_DATA, obj, arg);
- if (!rb_respond_to(obj, s_dump_data)) {
- rb_raise(rb_eTypeError,
- "class %s needs to have instance method `_dump_data'",
- rb_obj_classname(obj));
- }
- v = rb_funcall(obj, s_dump_data, 0);
- w_object(v, arg, limit);
- }
- break;
+ case T_DATA:
+ {
+ VALUE v;
+
+ w_class(TYPE_DATA, obj, arg);
+ if (!rb_respond_to(obj, s_dump_data)) {
+ rb_raise(rb_eTypeError,
+ "class %s needs to have instance method `_dump_data'",
+ rb_obj_classname(obj));
+ }
+ v = rb_funcall(obj, s_dump_data, 0);
+ w_object(v, arg, limit);
+ }
+ break;
default:
rb_raise(rb_eTypeError, "can't dump %s",
@@ -1185,7 +1184,6 @@ marshal_load(argc, argv)
VALUE port, proc;
int major, minor;
VALUE v;
- OpenFile *fptr;
struct load_arg arg;
volatile VALUE hash; /* protect from GC */