protected static Type[][][] BindTypeParameters(IGenericBinder binder, Type[][][] types) { if (types == null) { return(null); } Type[][][] expanded = new Type[types.Length][][]; for (int i = 0; i < types.Length; i++) { expanded[i] = BindTypeParameters(binder, types[i]); } return(expanded); }
internal override Type BindTypeParameters(IGenericBinder binder) { int owner = module.GenericParam.records[index].Owner; if ((owner >> 24) == MethodDefTable.Index) { return(binder.BindMethodParameter(this)); } else { return(binder.BindTypeParameter(this)); } }
protected static Type[] BindTypeParameters(IGenericBinder binder, Type[] types) { if (types == null || types.Length == 0) { return(Type.EmptyTypes); } Type[] expanded = new Type[types.Length]; for (int i = 0; i < types.Length; i++) { expanded[i] = types[i].BindTypeParameters(binder); } return(expanded); }
internal PackedCustomModifiers Bind(IGenericBinder binder) { if (customModifiers == null) { return(new PackedCustomModifiers()); } CustomModifiers[] expanded = new CustomModifiers[customModifiers.Length]; for (int i = 0; i < customModifiers.Length; i++) { expanded[i] = customModifiers[i].Bind(binder); } return(new PackedCustomModifiers(expanded)); }
private static int MatchSignatures(MethodBase mb1, MethodBase mb2, Type[] types) { MethodSignature sig1 = mb1.MethodSignature; MethodSignature sig2 = mb2.MethodSignature; IGenericBinder gb1 = mb1 as IGenericBinder ?? mb1.DeclaringType; IGenericBinder gb2 = mb2 as IGenericBinder ?? mb2.DeclaringType; for (int i = 0; i < sig1.GetParameterCount(); i++) { Type type1 = sig1.GetParameterType(gb1, i); Type type2 = sig2.GetParameterType(gb2, i); if (type1 != type2) { return(MatchTypes(type1, type2, types[i])); } } return(0); }
internal Type GetParameterType(IGenericBinder binder, int index) { return parameterTypes[index].BindTypeParameters(binder); }
internal Type[] GetReturnTypeOptionalCustomModifiers(IGenericBinder binder) { return BindTypeParameters(binder, modifiers, 0, 0); }
internal override Type BindTypeParameters(IGenericBinder binder) { if (owner is MethodBase) { return binder.BindMethodParameter(this); } else { return binder.BindTypeParameter(this); } }
internal override Type BindTypeParameters(IGenericBinder binder) { return(binder.BindMethodParameter(this)); }
internal PackedCustomModifiers Bind(IGenericBinder binder) { if (customModifiers == null) { return new PackedCustomModifiers(); } CustomModifiers[] expanded = new CustomModifiers[customModifiers.Length]; for (int i = 0; i < customModifiers.Length; i++) { expanded[i] = customModifiers[i].Bind(binder); } return new PackedCustomModifiers(expanded); }
internal static void InplaceBindTypeParameters(IGenericBinder binder, Type[] types) { for (int i = 0; i < types.Length; i++) { types[i] = types[i].BindTypeParameters(binder); } }
internal override Type BindTypeParameters(IGenericBinder binder) { int owner = module.GenericParam.records[index].Owner; if ((owner >> 24) == MethodDefTable.Index) { return binder.BindMethodParameter(this); } else { return binder.BindTypeParameter(this); } }
internal override Type BindTypeParameters(IGenericBinder binder) { return binder.BindMethodParameter(this); }
internal sealed override Type BindTypeParameters(IGenericBinder binder) { Type type = elementType.BindTypeParameters(binder); CustomModifiers mods = this.mods.Bind(binder); if (ReferenceEquals(type, elementType) && mods.Equals(this.mods)) { return this; } return Wrap(type, mods); }
internal Type[] GetParameterRequiredCustomModifiers(IGenericBinder binder, int index) { return BindTypeParameters(binder, modifiers, index + 1, 1); }
internal override Type BindTypeParameters(IGenericBinder binder) { if (type != null) { return binder.BindTypeParameter(this); } else { return binder.BindMethodParameter(this); } }
internal Type GetReturnType(IGenericBinder binder) { return(returnType.BindTypeParameters(binder)); }
private static Type[] BindArray(Type[] array, IGenericBinder binder) { if (array ==null || array.Length == 0) { return array; } Type[] result = array; for (int i = 0; i < array.Length; i++) { Type type = array[i].BindTypeParameters(binder); if (!ReferenceEquals(type, array[i])) { if (result == array) { result = (Type[])array.Clone(); } result[i] = type; } } return result; }
internal CustomModifiers GetReturnTypeCustomModifiers(IGenericBinder binder) { return(modifiers.GetReturnTypeCustomModifiers().Bind(binder)); }
internal CustomModifiers GetParameterCustomModifiers(IGenericBinder binder, int index) { return modifiers.GetParameterCustomModifiers(index).Bind(binder); }
internal CustomModifiers GetParameterCustomModifiers(IGenericBinder binder, int index) { return(modifiers.GetParameterCustomModifiers(index).Bind(binder)); }
protected static Type[] BindTypeParameters(IGenericBinder binder, Type[] types) { if (types == null || types.Length == 0) { return Type.EmptyTypes; } Type[] expanded = new Type[types.Length]; for (int i = 0; i < types.Length; i++) { expanded[i] = types[i].BindTypeParameters(binder); } return expanded; }
protected static Type[][][] BindTypeParameters(IGenericBinder binder, Type[][][] types) { if (types == null) { return null; } Type[][][] expanded = new Type[types.Length][][]; for (int i = 0; i < types.Length; i++) { expanded[i] = BindTypeParameters(binder, types[i]); } return expanded; }
internal override Type BindTypeParameters(IGenericBinder binder) { return this; }
protected static Type[] BindTypeParameters(IGenericBinder binder, Type[][][] types, int index, int optOrReq) { if (types == null || types[index] == null) { return null; } return BindTypeParameters(binder, types[index][optOrReq]); }
internal Type GetReturnType(IGenericBinder binder) { return returnType.BindTypeParameters(binder); }
internal Type[] GetReturnTypeOptionalCustomModifiers(IGenericBinder binder) { return(BindTypeParameters(binder, modifiers, 0, 0)); }
internal Type[] GetReturnTypeRequiredCustomModifiers(IGenericBinder binder) { return BindTypeParameters(binder, modifiers, 0, 1); }
internal Type[] GetReturnTypeRequiredCustomModifiers(IGenericBinder binder) { return(BindTypeParameters(binder, modifiers, 0, 1)); }
internal Type[] GetParameterOptionalCustomModifiers(IGenericBinder binder, int index) { return BindTypeParameters(binder, modifiers, index + 1, 0); }
internal Type GetParameterType(IGenericBinder binder, int index) { return(parameterTypes[index].BindTypeParameters(binder)); }
internal override Type BindTypeParameters(IGenericBinder binder) { return(this); }
internal Type[] GetParameterOptionalCustomModifiers(IGenericBinder binder, int index) { return(BindTypeParameters(binder, modifiers, index + 1, 0)); }
internal virtual Type BindTypeParameters(IGenericBinder binder) { if (IsGenericTypeDefinition) { Type[] args = GetGenericArguments(); Type.InplaceBindTypeParameters(binder, args); return GenericTypeInstance.Make(this, args, null, null); } else { return this; } }
internal Type[] GetParameterRequiredCustomModifiers(IGenericBinder binder, int index) { return(BindTypeParameters(binder, modifiers, index + 1, 1)); }
internal sealed override Type BindTypeParameters(IGenericBinder binder) { Type type = elementType.BindTypeParameters(binder); Type[] req = BindArray(requiredCustomModifiers, binder); Type[] opt = BindArray(optionalCustomModifiers, binder); if (ReferenceEquals(type, elementType) && ReferenceEquals(req, requiredCustomModifiers) && ReferenceEquals(opt, optionalCustomModifiers)) { return this; } return Wrap(type, req, opt); }
internal CustomModifiers GetReturnTypeCustomModifiers(IGenericBinder binder) { return modifiers.GetReturnTypeCustomModifiers().Bind(binder); }
internal override Type BindTypeParameters(IGenericBinder binder) { for (int i = 0; i < args.Length; i++) { Type xarg = args[i].BindTypeParameters(binder); if (!ReferenceEquals(xarg, args[i])) { Type[] xargs = new Type[args.Length]; Array.Copy(args, xargs, i); xargs[i++] = xarg; for (; i < args.Length; i++) { xargs[i] = args[i].BindTypeParameters(binder); } return Make(type, xargs, null, null); } } return this; }
internal Type GetReturnType(IGenericBinder binder) { if (binder == null) return returnType; return returnType.BindTypeParameters(binder); }