On 11.07.2013 21:08, mugginsoft wrote:
Robert Jordan wrote
Oops, my test actually passes with:

        ":ToList(System.Collections.Generic.IEnumerable`1
<TSource>
)"

Thanks. I thought I had tried all the combinations - I should have been more
methodical! I wonder why the method name querying functions provide a
different sig?

However (one last however):

Calling the method results in:

* Assertion at method-to-ir.c:6281, condition `!sig->has_type_parameters'
not met

You must "inflate" the generic method upon invocation.

IIRC, there is no function in the embedded API which does this.

What I'm doing is:

1) implement a helper method in C#:


public static IntPtr MakeGenericMethod(MethodInfo method, Type[] parms)
{
        // See MSDN's MethodInfo.MakeGenericMethod docs
        return method.MakeGenericMethod (parms).MethodHandle.Value;
}


2) mono_runtime_invoke () this method with the following args:

  arg 1: the result of mono_method_get_object(the_method). This is
         actually a MethodInfo object.
  arg 2: a System.Type array containing MonoReflectionTypes* with the
         types to be substituted. A MonoReflectionType* is obtained
         with mono_type_get_object ().

The helper method returns a MonoMethod* which you can invoke
like a normal non-generic method.


You can do this work solely in C/C++, but using a helper method
would save you some hundred line of convoluted embedded API
invocations. You can save even more code by implementing a couple
of MakeGenericMethod variants that don't need an array argument:

public static IntPtr MakeGenericMethod_1(MethodInfo method, Type parm0)
{
        return method.MakeGenericMethod (parm0).MethodHandle.Value;
}

public static IntPtr MakeGenericMethod_2(MethodInfo method, Type parm0, Type parm1)
{
        return method.MakeGenericMethod (parm0, parm1).MethodHandle.Value;
}

public static IntPtr MakeGenericMethod_3(MethodInfo method, Type parm0, Type parm1, Type parm2)
{
        return method.MakeGenericMethod (parm0, parm1, 
parm2).MethodHandle.Value;
}


Robert

_______________________________________________
Mono-list maillist  -  Mono-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-list

Reply via email to