IsEnumType() public static méthode

public static IsEnumType ( System.TypeSpec t ) : bool
t System.TypeSpec
Résultat bool
 static bool IsValidEnumType(TypeSpec t)
 {
     return(t == TypeManager.int32_type || t == TypeManager.uint32_type || t == TypeManager.int64_type ||
            t == TypeManager.byte_type || t == TypeManager.sbyte_type || t == TypeManager.short_type ||
            t == TypeManager.ushort_type || t == TypeManager.uint64_type || t == TypeManager.char_type ||
            TypeManager.IsEnumType(t));
 }
Exemple #2
0
        public override Constant ConvertImplicitly(Type type)
        {
            ///
            /// The 0 literal can be converted to an enum value,
            ///
            if (Value == 0 && TypeManager.IsEnumType(type))
            {
                Constant c = ConvertImplicitly(TypeManager.GetEnumUnderlyingType(type));
                if (c == null)
                {
                    return(null);
                }

                return(new EnumConstant(c, type));
            }
            return(base.ConvertImplicitly(type));
        }
        public override Constant ConvertImplicitly(ResolveContext rc, TypeSpec type)
        {
            //
            // The 0 literal can be converted to an enum value
            //
            if (Value == 0 && TypeManager.IsEnumType(type))
            {
                Constant c = ConvertImplicitly(rc, EnumSpec.GetUnderlyingType(type));
                if (c == null)
                {
                    return(null);
                }

                return(new EnumConstant(c, type).Resolve(rc));
            }

            return(base.ConvertImplicitly(rc, type));
        }
        //
        // Emits the right opcode to load from an array
        //
        public void EmitArrayLoad(ArrayContainer ac)
        {
            if (ac.Rank > 1)
            {
                if (IsAnonymousStoreyMutateRequired)
                {
                    ac = (ArrayContainer)ac.Mutate(CurrentAnonymousMethod.Storey.Mutator);
                }

                ig.Emit(OpCodes.Call, ac.GetGetMethod());
                return;
            }

            var type = ac.Element;

            if (TypeManager.IsEnumType(type))
            {
                type = EnumSpec.GetUnderlyingType(type);
            }

            if (type == TypeManager.byte_type || type == TypeManager.bool_type)
            {
                Emit(OpCodes.Ldelem_U1);
            }
            else if (type == TypeManager.sbyte_type)
            {
                Emit(OpCodes.Ldelem_I1);
            }
            else if (type == TypeManager.short_type)
            {
                Emit(OpCodes.Ldelem_I2);
            }
            else if (type == TypeManager.ushort_type || type == TypeManager.char_type)
            {
                Emit(OpCodes.Ldelem_U2);
            }
            else if (type == TypeManager.int32_type)
            {
                Emit(OpCodes.Ldelem_I4);
            }
            else if (type == TypeManager.uint32_type)
            {
                Emit(OpCodes.Ldelem_U4);
            }
            else if (type == TypeManager.uint64_type)
            {
                Emit(OpCodes.Ldelem_I8);
            }
            else if (type == TypeManager.int64_type)
            {
                Emit(OpCodes.Ldelem_I8);
            }
            else if (type == TypeManager.float_type)
            {
                Emit(OpCodes.Ldelem_R4);
            }
            else if (type == TypeManager.double_type)
            {
                Emit(OpCodes.Ldelem_R8);
            }
            else if (type == TypeManager.intptr_type)
            {
                Emit(OpCodes.Ldelem_I);
            }
            else if (TypeManager.IsStruct(type))
            {
                Emit(OpCodes.Ldelema, type);
                Emit(OpCodes.Ldobj, type);
            }
            else if (type.IsGenericParameter)
            {
                Emit(OpCodes.Ldelem, type);
            }
            else if (type.IsPointer)
            {
                Emit(OpCodes.Ldelem_I);
            }
            else
            {
                Emit(OpCodes.Ldelem_Ref);
            }
        }