internal static bool RefersToGenericParameterCLRSemantics(Type ReferringType, Type Typ) { if (ReferringType.IsByRef) { ReferringType = Symbols.GetElementType(ReferringType); } if (Symbols.IsGenericParameter(ReferringType)) { if (ReferringType.DeclaringType == Typ) { return(true); } } else if (Symbols.IsGeneric(ReferringType)) { Type[] typeArguments = Symbols.GetTypeArguments(ReferringType); int index = 0; while (index < typeArguments.Length) { if (Symbols.RefersToGenericParameterCLRSemantics(typeArguments[index], Typ)) { return(true); } checked { ++index; } } } else if (Symbols.IsArrayType(ReferringType)) { return(Symbols.RefersToGenericParameterCLRSemantics(ReferringType.GetElementType(), Typ)); } return(false); }
internal static bool RefersToGenericParameter(Type ReferringType, MethodBase Method) { if (!Symbols.IsRawGeneric(Method)) { return(false); } if (ReferringType.IsByRef) { ReferringType = Symbols.GetElementType(ReferringType); } if (Symbols.IsGenericParameter(ReferringType)) { if (Symbols.AreGenericMethodDefsEqual(ReferringType.DeclaringMethod, Method)) { return(true); } } else if (Symbols.IsGeneric(ReferringType)) { Type[] typeArguments = Symbols.GetTypeArguments(ReferringType); int index = 0; while (index < typeArguments.Length) { if (Symbols.RefersToGenericParameter(typeArguments[index], Method)) { return(true); } checked { ++index; } } } else if (Symbols.IsArrayType(ReferringType)) { return(Symbols.RefersToGenericParameter(ReferringType.GetElementType(), Method)); } return(false); }
internal static bool IsParamArray(ParameterInfo Parameter) { return(Symbols.IsArrayType(Parameter.ParameterType) && Parameter.IsDefined(typeof(ParamArrayAttribute), false)); }