ruby-changes:4458
From: ko1@a...
Date: Thu, 10 Apr 2008 17:42:07 +0900 (JST)
Subject: [ruby-changes:4458] akr - Ruby:r15949 (trunk): * marshal.c (w_object): TYPE_USERDEF assigns id for ivars first.
akr 2008-04-10 17:41:46 +0900 (Thu, 10 Apr 2008)
New Revision: 15949
Modified files:
trunk/ChangeLog
trunk/marshal.c
trunk/test/ruby/marshaltestlib.rb
Log:
* marshal.c (w_object): TYPE_USERDEF assigns id for ivars first.
[ruby-dev:34159] by nagachika.
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/test/ruby/marshaltestlib.rb?r1=15949&r2=15948&diff_format=u
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=15949&r2=15948&diff_format=u
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/marshal.c?r1=15949&r2=15948&diff_format=u
Index: ChangeLog
===================================================================
--- ChangeLog (revision 15948)
+++ ChangeLog (revision 15949)
@@ -1,3 +1,8 @@
+Thu Apr 10 16:58:44 2008 Tanaka Akira <akr@f...>
+
+ * 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@r...>
* lib/generator.rb: removed obsolete library. [ruby-core:16233]
Index: marshal.c
===================================================================
--- marshal.c (revision 15948)
+++ marshal.c (revision 15949)
@@ -574,24 +574,11 @@
else {
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)) {
VALUE v;
+ st_add_direct(arg->data, obj, arg->data->num_entries);
+
v = rb_funcall(obj, s_mdump, 0, 0);
w_class(TYPE_USRMARSHAL, obj, arg, Qfalse);
w_object(v, arg, limit);
@@ -618,9 +605,25 @@
else if (hasiv) {
w_ivar(obj, ivtbl, &c_arg);
}
+ st_add_direct(arg->data, obj, arg->data->num_entries);
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)) {
case T_CLASS:
if (FL_TEST(obj, FL_SINGLETON)) {
Index: test/ruby/marshaltestlib.rb
===================================================================
--- test/ruby/marshaltestlib.rb (revision 15948)
+++ test/ruby/marshaltestlib.rb (revision 15949)
@@ -383,6 +383,11 @@
marshal_equal(o1) {|o| o.instance_eval { @iv }}
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
marshal_equal(true)
end
--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/