* marshal.c (w_object): TYPE_USERDEF assigns id for ivars first.
[ruby-dev:34159] by nagachika. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@15949 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
1d63f4eead
commit
7132a4f979
@ -1,3 +1,8 @@
|
|||||||
|
Thu Apr 10 16:58:44 2008 Tanaka Akira <akr@fsij.org>
|
||||||
|
|
||||||
|
* marshal.c (w_object): TYPE_USERDEF assigns id for ivars first.
|
||||||
|
[ruby-dev:34159] by nagachika.
|
||||||
|
|
||||||
Thu Apr 10 15:03:47 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
|
Thu Apr 10 15:03:47 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
* lib/generator.rb: removed obsolete library. [ruby-core:16233]
|
* lib/generator.rb: removed obsolete library. [ruby-core:16233]
|
||||||
|
33
marshal.c
33
marshal.c
@ -574,24 +574,11 @@ w_object(VALUE obj, struct dump_arg *arg, int limit)
|
|||||||
else {
|
else {
|
||||||
if (OBJ_TAINTED(obj)) arg->taint = Qtrue;
|
if (OBJ_TAINTED(obj)) arg->taint = Qtrue;
|
||||||
|
|
||||||
st_add_direct(arg->data, obj, arg->data->num_entries);
|
|
||||||
|
|
||||||
{
|
|
||||||
st_data_t compat_data;
|
|
||||||
rb_alloc_func_t allocator = rb_get_alloc_func(RBASIC(obj)->klass);
|
|
||||||
if (st_lookup(compat_allocator_tbl,
|
|
||||||
(st_data_t)allocator,
|
|
||||||
&compat_data)) {
|
|
||||||
marshal_compat_t *compat = (marshal_compat_t*)compat_data;
|
|
||||||
VALUE real_obj = obj;
|
|
||||||
obj = compat->dumper(real_obj);
|
|
||||||
st_insert(arg->compat_tbl, (st_data_t)obj, (st_data_t)real_obj);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rb_respond_to(obj, s_mdump)) {
|
if (rb_respond_to(obj, s_mdump)) {
|
||||||
VALUE v;
|
VALUE v;
|
||||||
|
|
||||||
|
st_add_direct(arg->data, obj, arg->data->num_entries);
|
||||||
|
|
||||||
v = rb_funcall(obj, s_mdump, 0, 0);
|
v = rb_funcall(obj, s_mdump, 0, 0);
|
||||||
w_class(TYPE_USRMARSHAL, obj, arg, Qfalse);
|
w_class(TYPE_USRMARSHAL, obj, arg, Qfalse);
|
||||||
w_object(v, arg, limit);
|
w_object(v, arg, limit);
|
||||||
@ -618,9 +605,25 @@ w_object(VALUE obj, struct dump_arg *arg, int limit)
|
|||||||
else if (hasiv) {
|
else if (hasiv) {
|
||||||
w_ivar(obj, ivtbl, &c_arg);
|
w_ivar(obj, ivtbl, &c_arg);
|
||||||
}
|
}
|
||||||
|
st_add_direct(arg->data, obj, arg->data->num_entries);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
st_add_direct(arg->data, obj, arg->data->num_entries);
|
||||||
|
|
||||||
|
{
|
||||||
|
st_data_t compat_data;
|
||||||
|
rb_alloc_func_t allocator = rb_get_alloc_func(RBASIC(obj)->klass);
|
||||||
|
if (st_lookup(compat_allocator_tbl,
|
||||||
|
(st_data_t)allocator,
|
||||||
|
&compat_data)) {
|
||||||
|
marshal_compat_t *compat = (marshal_compat_t*)compat_data;
|
||||||
|
VALUE real_obj = obj;
|
||||||
|
obj = compat->dumper(real_obj);
|
||||||
|
st_insert(arg->compat_tbl, (st_data_t)obj, (st_data_t)real_obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
switch (BUILTIN_TYPE(obj)) {
|
switch (BUILTIN_TYPE(obj)) {
|
||||||
case T_CLASS:
|
case T_CLASS:
|
||||||
if (FL_TEST(obj, FL_SINGLETON)) {
|
if (FL_TEST(obj, FL_SINGLETON)) {
|
||||||
|
@ -383,6 +383,11 @@ module MarshalTestLib
|
|||||||
marshal_equal(o1) {|o| o.instance_eval { @iv }}
|
marshal_equal(o1) {|o| o.instance_eval { @iv }}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_time_in_array
|
||||||
|
t = Time.now
|
||||||
|
assert_equal([t,t], Marshal.load(Marshal.dump([t, t])), "[ruby-dev:34159]")
|
||||||
|
end
|
||||||
|
|
||||||
def test_true
|
def test_true
|
||||||
marshal_equal(true)
|
marshal_equal(true)
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user