From 76ca2d1feaa2ae920e66a9bbf52f23f2baaf2209 Mon Sep 17 00:00:00 2001 From: denfromufa Date: Wed, 8 Jun 2016 11:16:53 -0500 Subject: [PATCH] Update methodbinder.cs byref handling --- src/runtime/methodbinder.cs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/runtime/methodbinder.cs b/src/runtime/methodbinder.cs index 22aaf33e4..720a303e2 100644 --- a/src/runtime/methodbinder.cs +++ b/src/runtime/methodbinder.cs @@ -344,9 +344,13 @@ internal Binding Bind(IntPtr inst, IntPtr args, IntPtr kw, if (clrtype != null) { bool typematch = false; - if (pi[n].ParameterType != clrtype) + Type paramtype = pi[n].ParameterType; + if (pi[n].ParameterType.IsByRef) { + paramtype = pi[n].ParameterType.GetElementType(); + } + if (paramtype != clrtype) { - IntPtr pytype = Converter.GetPythonTypeByAlias(pi[n].ParameterType); + IntPtr pytype = Converter.GetPythonTypeByAlias(paramtype); pyoptype = Runtime.PyObject_Type(op); Exceptions.Clear(); if (pyoptype != IntPtr.Zero) @@ -364,7 +368,7 @@ internal Binding Bind(IntPtr inst, IntPtr args, IntPtr kw, if (!typematch) { // this takes care of enum values - TypeCode argtypecode = Type.GetTypeCode(pi[n].ParameterType); + TypeCode argtypecode = Type.GetTypeCode(paramtype); TypeCode paramtypecode = Type.GetTypeCode(clrtype); if (argtypecode == paramtypecode) { @@ -603,4 +607,4 @@ internal Binding(MethodBase info, Object inst, Object[] args, this.outs = outs; } } -} \ No newline at end of file +}