2007-01-11 Jonathan Chambers <joncham@gmail.com>
authorJonathan Chambers <joncham@gmail.com>
Thu, 11 Jan 2007 21:26:54 +0000 (21:26 -0000)
committerJonathan Chambers <joncham@gmail.com>
Thu, 11 Jan 2007 21:26:54 +0000 (21:26 -0000)
* marshal.c (emit_marshal_variant): Fix conv_arg
type in last commit, based on whether parameter is byref.

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

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

index cc5c80bf768e52831fdefef24f4a46011fe8aac0..66be45b06a545ca9f552d4793f6e14acc8b3163d 100644 (file)
@@ -1,3 +1,8 @@
+2007-01-11  Jonathan Chambers  <joncham@gmail.com>
+
+       * marshal.c (emit_marshal_variant): Fix conv_arg
+       type in last commit, based on whether parameter is byref.
+       
 2007-01-11  Jonathan Chambers  <joncham@gmail.com>
 
        * marshal.c (emit_marshal_variant): Handle unmanaged->managed
index 83ce990a09fbf4a1e6c1bea927af7d6496a72b97..e6b9b6628bc5326608872431e9d34d2799defef4 100644 (file)
@@ -6802,8 +6802,12 @@ emit_marshal_variant (EmitMarshalContext *m, int argnum, MonoType *t,
 
        switch (action) {
        case MARSHAL_ACTION_CONV_IN: {
-               *conv_arg_type = &mono_defaults.variant_class->byval_arg;
                conv_arg = mono_mb_add_local (mb, &mono_defaults.variant_class->byval_arg);
+               
+               if (t->byref)
+                       *conv_arg_type = &mono_defaults.variant_class->this_arg;
+               else
+                       *conv_arg_type = &mono_defaults.variant_class->byval_arg;
 
                if (t->byref && t->attrs & PARAM_ATTRIBUTE_OUT)
                        break;
@@ -6850,9 +6854,13 @@ emit_marshal_variant (EmitMarshalContext *m, int argnum, MonoType *t,
        }
 
        case MARSHAL_ACTION_MANAGED_CONV_IN: {
-               *conv_arg_type = &mono_defaults.variant_class->this_arg;
                conv_arg = mono_mb_add_local (mb, &mono_defaults.object_class->byval_arg);
 
+               if (t->byref)
+                       *conv_arg_type = &mono_defaults.variant_class->this_arg;
+               else
+                       *conv_arg_type = &mono_defaults.variant_class->byval_arg;
+
                if (t->byref && t->attrs & PARAM_ATTRIBUTE_OUT)
                        break;