mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	* 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
					
				
					 3 changed files with 28 additions and 15 deletions
				
			
		| 
						 | 
				
			
			@ -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>
 | 
			
		||||
 | 
			
		||||
	* 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 {
 | 
			
		||||
	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 @@ w_object(VALUE obj, struct dump_arg *arg, int limit)
 | 
			
		|||
            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)) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -383,6 +383,11 @@ module MarshalTestLib
 | 
			
		|||
    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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue