int ResolvePredefinedMethods (ResolveContext rc)
{
if (TypeManager.void_monitor_enter_object == null || TypeManager.void_monitor_exit_object == null) {
TypeSpec monitor_type = rc.Module.PredefinedTypes.Monitor.Resolve (loc);
if (monitor_type == null)
return 0;
// Try 4.0 Monitor.Enter (object, ref bool) overload first
var filter = MemberFilter.Method ("Enter", 0, new ParametersImported (
new[] {
new ParameterData (null, Parameter.Modifier.NONE),
new ParameterData (null, Parameter.Modifier.REF)
},
new[] {
TypeManager.object_type,
TypeManager.bool_type
}, false), null);
TypeManager.void_monitor_enter_object = TypeManager.GetPredefinedMethod (monitor_type, filter, true, loc);
if (TypeManager.void_monitor_enter_object == null) {
TypeManager.void_monitor_enter_object = TypeManager.GetPredefinedMethod (
monitor_type, "Enter", loc, TypeManager.object_type);
}
TypeManager.void_monitor_exit_object = TypeManager.GetPredefinedMethod (
monitor_type, "Exit", loc, TypeManager.object_type);
}
return TypeManager.void_monitor_enter_object.Parameters.Count;
}