2005-02-09 Zoltan Varga <vargaz@freemail.hu>
authorZoltan Varga <vargaz@gmail.com>
Wed, 9 Feb 2005 16:19:12 +0000 (16:19 -0000)
committerZoltan Varga <vargaz@gmail.com>
Wed, 9 Feb 2005 16:19:12 +0000 (16:19 -0000)
* marshal.c (emit_marshal_vtype): Don't do managed->native conversion
for out arguments.

svn path=/trunk/mono/; revision=40340

mono/metadata/ChangeLog
mono/metadata/marshal.c

index b7c916300971d9c169089d617ac6eeb95a851c27..bc09da5ea6189723ca4edb27f56cafdba79612dc 100644 (file)
@@ -1,3 +1,8 @@
+2005-02-09  Zoltan Varga  <vargaz@freemail.hu>
+
+       * marshal.c (emit_marshal_vtype): Don't do managed->native conversion
+       for out arguments.
+       
 2005-02-09  Lluis Sanchez Gual  <lluis@novell.com>
 
        * object.c: In release_type_locks(), don't release the cctor lock
index 0a5a5546095fe656efaee52e45220ee0d532771f..2386862b31e60582191c0628cfae04c71bc7e08a 100644 (file)
@@ -4930,13 +4930,15 @@ emit_marshal_vtype (EmitMarshalContext *m, int argnum, MonoType *t,
                        mono_mb_emit_i4 (mb, 0);
                }
 
-               /* set dst_ptr */
-               mono_mb_emit_ldloc (mb, conv_arg);
-               mono_mb_emit_byte (mb, CEE_STLOC_1);
+               if (!(t->byref && (t->attrs & PARAM_ATTRIBUTE_OUT))) {
+                       /* set dst_ptr */
+                       mono_mb_emit_ldloc (mb, conv_arg);
+                       mono_mb_emit_byte (mb, CEE_STLOC_1);
+
+                       /* emit valuetype conversion code */
+                       emit_struct_conv (mb, klass, FALSE);
+               }
 
-               /* emit valuetype conversion code */
-               emit_struct_conv (mb, klass, FALSE);
-                       
                if (t->byref)
                        mono_mb_patch_addr (mb, pos, mb->pos - (pos + 4));
                break;