+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
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;
}
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;