Пример #1
0
        internal static ConversionClass ClassifyPredefinedConversion(Type TargetType, Type SourceType)
        {
            if (TargetType == SourceType)
            {
                return(ConversionClass.Identity);
            }
            TypeCode typeCode = Symbols.GetTypeCode(SourceType);
            TypeCode code2    = Symbols.GetTypeCode(TargetType);

            if (Symbols.IsIntrinsicType(typeCode) && Symbols.IsIntrinsicType(code2))
            {
                if ((Symbols.IsEnum(TargetType) && Symbols.IsIntegralType(typeCode)) && Symbols.IsIntegralType(code2))
                {
                    return(ConversionClass.Narrowing);
                }
                if ((typeCode == code2) && Symbols.IsEnum(SourceType))
                {
                    return(ConversionClass.Widening);
                }
                return(ClassifyIntrinsicConversion(code2, typeCode));
            }
            if (Symbols.IsCharArrayRankOne(SourceType) && Symbols.IsStringType(TargetType))
            {
                return(ConversionClass.Widening);
            }
            if (Symbols.IsCharArrayRankOne(TargetType) && Symbols.IsStringType(SourceType))
            {
                return(ConversionClass.Narrowing);
            }
            return(ClassifyPredefinedCLRConversion(TargetType, SourceType));
        }
Пример #2
0
        internal static ConversionClass ClassifyConversion(Type TargetType, Type SourceType, ref Symbols.Method OperatorMethod)
        {
            ConversionClass class3 = ClassifyPredefinedConversion(TargetType, SourceType);

            if ((((class3 != ConversionClass.None) || Symbols.IsInterface(SourceType)) || Symbols.IsInterface(TargetType)) || (!Symbols.IsClassOrValueType(SourceType) && !Symbols.IsClassOrValueType(TargetType)))
            {
                return(class3);
            }
            if (Symbols.IsIntrinsicType(SourceType) && Symbols.IsIntrinsicType(TargetType))
            {
                return(class3);
            }
            return(ClassifyUserDefinedConversion(TargetType, SourceType, ref OperatorMethod));
        }
Пример #3
0
        private static List <Symbols.Method> CollectConversionOperators(Type TargetType, Type SourceType, ref bool FoundTargetTypeOperators, ref bool FoundSourceTypeOperators)
        {
            if (Symbols.IsIntrinsicType(TargetType))
            {
                TargetType = typeof(object);
            }
            if (Symbols.IsIntrinsicType(SourceType))
            {
                SourceType = typeof(object);
            }
            List <Symbols.Method> list3      = Operators.CollectOperators(Symbols.UserDefinedOperator.Widen, TargetType, SourceType, ref FoundTargetTypeOperators, ref FoundSourceTypeOperators);
            List <Symbols.Method> collection = Operators.CollectOperators(Symbols.UserDefinedOperator.Narrow, TargetType, SourceType, ref FoundTargetTypeOperators, ref FoundSourceTypeOperators);

            list3.AddRange(collection);
            return(list3);
        }