if (!frame->runtime_method->transformed) {
context->managed_code = 0;
#if DEBUG_INTERP
- char *mn = mono_method_full_name (frame->runtime_method->method, FALSE);
+ char *mn = mono_method_full_name (frame->runtime_method->method, TRUE);
g_print ("(%p) Transforming %s\n", mono_thread_internal_current (), mn);
g_free (mn);
#endif
op = MINT_ARRAY_RANK;
else if (strcmp (target_method->name, "get_Length") == 0)
op = MINT_LDLEN;
+ } else if (target_method && generic_context) {
+ csignature = mono_inflate_generic_signature (csignature, generic_context, &error);
+ mono_error_cleanup (&error); /* FIXME: don't swallow the error */
+ target_method = mono_class_inflate_generic_method_checked (target_method, generic_context, &error);
+ mono_error_cleanup (&error); /* FIXME: don't swallow the error */
}
}
} else {
csignature = mono_method_signature (target_method);
}
- /* TODO: that's oddly specific? */
- if (generic_context && target_method && !strcmp ("Invoke", target_method->name) && target_method->klass->parent == mono_defaults.multicastdelegate_class) {
- csignature = mono_inflate_generic_signature (csignature, generic_context, &error);
- mono_error_cleanup (&error); /* FIXME: don't swallow the error */
- }
-
if (constrained_class) {
if (constrained_class->enumtype && !strcmp (target_method->name, "GetHashCode")) {
/* Use the corresponding method from the base type to avoid boxing */