From 9a2bb2ae34e5bdea77cc24d1f4fc063204b15389 Mon Sep 17 00:00:00 2001 From: "Frank A. Krueger" Date: Thu, 2 Jun 2011 20:55:17 -0700 Subject: [PATCH] Corrected handling of [In,Out] ByRef parameters in ConvertArguments and UpdateByRefArguments --- src/ObjCRuntime/NativeImplementationBuilder.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ObjCRuntime/NativeImplementationBuilder.cs b/src/ObjCRuntime/NativeImplementationBuilder.cs index cf49084ef..9b7025292 100644 --- a/src/ObjCRuntime/NativeImplementationBuilder.cs +++ b/src/ObjCRuntime/NativeImplementationBuilder.cs @@ -190,7 +190,7 @@ protected void DeclareLocals (ILGenerator il) { protected void ConvertArguments (ILGenerator il, int locoffset) { #if !MONOMAC_BOOTSTRAP for (int i = ArgumentOffset, j = 0; i < ParameterTypes.Length; i++) { - if (Parameters [i-ArgumentOffset].ParameterType.IsByRef && (Attribute.GetCustomAttribute (Parameters [i-ArgumentOffset], typeof (OutAttribute)) == null) && IsWrappedType (Parameters[i-ArgumentOffset].ParameterType.GetElementType ())) { + if (Parameters [i-ArgumentOffset].ParameterType.IsByRef && (Attribute.GetCustomAttribute (Parameters [i-ArgumentOffset], typeof (InAttribute)) != null) && IsWrappedType (Parameters[i-ArgumentOffset].ParameterType.GetElementType ())) { il.Emit (OpCodes.Ldarg, i); il.Emit (OpCodes.Ldind_I); il.Emit (OpCodes.Call, getobject); @@ -237,7 +237,7 @@ protected void LoadArguments (ILGenerator il, int locoffset) { protected void UpdateByRefArguments (ILGenerator il, int locoffset) { #if !MONOMAC_BOOTSTRAP for (int i = ArgumentOffset, j = 0; i < ParameterTypes.Length; i++) { - if (Parameters [i-ArgumentOffset].ParameterType.IsByRef && IsWrappedType (Parameters[i-ArgumentOffset].ParameterType.GetElementType ())) { + if (Parameters [i-ArgumentOffset].ParameterType.IsByRef && (Attribute.GetCustomAttribute (Parameters [i-ArgumentOffset], typeof (OutAttribute)) != null) && IsWrappedType (Parameters[i-ArgumentOffset].ParameterType.GetElementType ())) { Label nullout = il.DefineLabel (); Label done = il.DefineLabel (); il.Emit (OpCodes.Ldloc, j+locoffset);