Пример #1
0
 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);
 }
Пример #2
0
        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));
            }
        }
Пример #3
0
 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));
 }
Пример #5
0
        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);
        }
Пример #6
0
		internal Type GetParameterType(IGenericBinder binder, int index)
		{
			return parameterTypes[index].BindTypeParameters(binder);
		}
Пример #7
0
		internal Type[] GetReturnTypeOptionalCustomModifiers(IGenericBinder binder)
		{
			return BindTypeParameters(binder, modifiers, 0, 0);
		}
Пример #8
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);
		}
Пример #11
0
		internal static void InplaceBindTypeParameters(IGenericBinder binder, Type[] types)
		{
			for (int i = 0; i < types.Length; i++)
			{
				types[i] = types[i].BindTypeParameters(binder);
			}
		}
Пример #12
0
		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);
			}
		}
Пример #13
0
		internal override Type BindTypeParameters(IGenericBinder binder)
		{
			return binder.BindMethodParameter(this);
		}
Пример #14
0
		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);
		}
Пример #15
0
		internal Type[] GetParameterRequiredCustomModifiers(IGenericBinder binder, int index)
		{
			return BindTypeParameters(binder, modifiers, index + 1, 1);
		}
Пример #16
0
		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));
 }
Пример #18
0
		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));
 }
Пример #22
0
		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;
		}
Пример #23
0
		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;
		}
Пример #24
0
		internal override Type BindTypeParameters(IGenericBinder binder)
		{
			return this;
		}
Пример #25
0
		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]);
		}
Пример #26
0
		internal Type GetReturnType(IGenericBinder binder)
		{
			return returnType.BindTypeParameters(binder);
		}
Пример #27
0
 internal Type[] GetReturnTypeOptionalCustomModifiers(IGenericBinder binder)
 {
     return(BindTypeParameters(binder, modifiers, 0, 0));
 }
Пример #28
0
		internal Type[] GetReturnTypeRequiredCustomModifiers(IGenericBinder binder)
		{
			return BindTypeParameters(binder, modifiers, 0, 1);
		}
Пример #29
0
 internal Type[] GetReturnTypeRequiredCustomModifiers(IGenericBinder binder)
 {
     return(BindTypeParameters(binder, modifiers, 0, 1));
 }
Пример #30
0
		internal Type[] GetParameterOptionalCustomModifiers(IGenericBinder binder, int index)
		{
			return BindTypeParameters(binder, modifiers, index + 1, 0);
		}
Пример #31
0
 internal Type GetParameterType(IGenericBinder binder, int index)
 {
     return(parameterTypes[index].BindTypeParameters(binder));
 }
Пример #32
0
 internal override Type BindTypeParameters(IGenericBinder binder)
 {
     return(this);
 }
Пример #33
0
 internal Type[] GetParameterOptionalCustomModifiers(IGenericBinder binder, int index)
 {
     return(BindTypeParameters(binder, modifiers, index + 1, 0));
 }
Пример #34
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;
			}
		}
Пример #35
0
 internal Type[] GetParameterRequiredCustomModifiers(IGenericBinder binder, int index)
 {
     return(BindTypeParameters(binder, modifiers, index + 1, 1));
 }
Пример #36
0
		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);
		}
Пример #38
0
		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;
		}
Пример #39
0
		internal Type GetReturnType(IGenericBinder binder)
		{
            if (binder == null)
                return returnType;

			return returnType.BindTypeParameters(binder);
		}