private static string NameFromTypeClass(CTypeClass typeClass) { switch (typeClass) { case CTypeClass.CVoid: return("void"); case CTypeClass.CChar: return("char"); case CTypeClass.CSChar: return("signed char"); case CTypeClass.CUChar: return("unsigned char"); case CTypeClass.CShortInt: return("short"); case CTypeClass.CUShortInt: return("unsigned short"); case CTypeClass.CInt: return("int"); case CTypeClass.CUInt: return("unsigned int"); case CTypeClass.CLongInt: return("long int"); case CTypeClass.CULongInt: return("unsigned long int"); case CTypeClass.CLongLongInt: return("long long int"); case CTypeClass.CULongLongInt: return("unsigned long long int"); case CTypeClass.CFloat: return("float"); case CTypeClass.CDouble: return("double"); case CTypeClass.CLongDouble: return("long double"); case CTypeClass.CEnum: case CTypeClass.CArray: case CTypeClass.CStruct: case CTypeClass.CFunction: case CTypeClass.CPointer: default: throw new InvalidOperationException("cannopt get name from this type"); } }
/*private readonly CTypeClass m_typeClass; * private readonly bool m_isConst; * private readonly string m_typeName; * private readonly int m_arraySize; * private readonly CType m_containedType; * private readonly IReadOnlyList<CIdentifier> m_enumConstants; * private IReadOnlyList<CIdentifier> m_structMembers; * private bool m_structComplete = false; * private readonly CType m_functionReturnType; * private readonly IReadOnlyList<CType> m_functionArgumentTypes;*/ //from type class private CType(CTypeClass typeClass) { m_typeClass = typeClass; m_isConst = false; m_typeName = NameFromTypeClass(typeClass); m_arraySize = 0; m_containedType = null; m_enumConstants = null; m_structMembers = null; m_functionReturnType = null; m_functionArgumentTypes = null; }
public static CTypeGroups GetTypeGroup(CTypeClass classification) { switch (classification) { case CTypeClass.CVoid: return(CTypeGroups.CObject); case CTypeClass.CChar: case CTypeClass.CSChar: case CTypeClass.CUChar: return(CTypeGroups.CObject | CTypeGroups.CCharacter | CTypeGroups.CInt | CTypeGroups.CArithmetic | CTypeGroups.CScalar); case CTypeClass.CShortInt: case CTypeClass.CUShortInt: case CTypeClass.CInt: case CTypeClass.CUInt: case CTypeClass.CLongInt: case CTypeClass.CULongInt: case CTypeClass.CLongLongInt: case CTypeClass.CULongLongInt: case CTypeClass.CEnum: return(CTypeGroups.CObject | CTypeGroups.CInt | CTypeGroups.CArithmetic | CTypeGroups.CScalar); case CTypeClass.CFloat: case CTypeClass.CDouble: case CTypeClass.CLongDouble: return(CTypeGroups.CObject | CTypeGroups.CArithmetic | CTypeGroups.CScalar); case CTypeClass.CArray: return(CTypeGroups.CObject | CTypeGroups.CAggregate | CTypeGroups.CDerivedType); case CTypeClass.CStruct: return(CTypeGroups.CObject | CTypeGroups.CAggregate); case CTypeClass.CFunction: return(CTypeGroups.CDerivedType); case CTypeClass.CPointer: return(CTypeGroups.CObject | CTypeGroups.CScalar | CTypeGroups.CDerivedType); default: throw new InvalidOperationException("unrecognized type clasification"); } }
public static int TypeClassSizeInBytes(CTypeClass typeClass) { switch (typeClass) { //1 (8 bits) case CTypeClass.CChar: case CTypeClass.CSChar: case CTypeClass.CUChar: return(1); //2 (16 bits) case CTypeClass.CShortInt: case CTypeClass.CUShortInt: return(2); //4 (32 bits) case CTypeClass.CInt: case CTypeClass.CUInt: case CTypeClass.CLongInt: case CTypeClass.CULongInt: case CTypeClass.CEnum: case CTypeClass.CFloat: case CTypeClass.CPointer: return(4); //8 (64 bits) case CTypeClass.CLongLongInt: case CTypeClass.CULongLongInt: case CTypeClass.CDouble: case CTypeClass.CLongDouble: return(8); //incomplete types case CTypeClass.CVoid: case CTypeClass.CArray: case CTypeClass.CStruct: case CTypeClass.CFunction: return(-1); default: throw new InvalidOperationException("unrecognized type clasification"); } }
public static CType FromTypeClass(CTypeClass typeClass) { return(CTypeFromName(NameFromTypeClass(typeClass))); }
private static void InitBasicType(CTypeClass typeClass) { types[NameFromTypeClass(typeClass)] = new CType(typeClass); }