From: Chris Lattner Date: Fri, 6 Feb 2009 05:04:11 +0000 (+0000) Subject: simplify and refactor a bunch of type definition code in Preprocessor X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2b5abf515f9696912452f431c7738691cf97f4f1;p=clang simplify and refactor a bunch of type definition code in Preprocessor predefines buffer initialization. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@63919 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/TargetInfo.h b/include/clang/Basic/TargetInfo.h index 5eb74391c8..a0bd74b421 100644 --- a/include/clang/Basic/TargetInfo.h +++ b/include/clang/Basic/TargetInfo.h @@ -61,7 +61,7 @@ public: ///===---- Target Data Type Query Methods -------------------------------===// enum IntType { - NoInt = 0x0, + NoInt = 0, SignedShort, UnsignedShort, SignedInt, @@ -165,6 +165,10 @@ public: return UserLabelPrefix; } + /// getTypeName - Return the user string for the specified integer type enum. + /// For example, SignedShort -> "short". + static const char *getTypeName(IntType T); + ///===---- Other target property query methods --------------------------===// /// getTargetDefines - Appends the target-specific #define values for this diff --git a/lib/Basic/TargetInfo.cpp b/lib/Basic/TargetInfo.cpp index 2b73582b78..378a91503b 100644 --- a/lib/Basic/TargetInfo.cpp +++ b/lib/Basic/TargetInfo.cpp @@ -51,6 +51,22 @@ TargetInfo::TargetInfo(const std::string &T) : Triple(T) { // Out of line virtual dtor for TargetInfo. TargetInfo::~TargetInfo() {} +/// getTypeName - Return the user string for the specified integer type enum. +/// For example, SignedShort -> "short". +const char *TargetInfo::getTypeName(IntType T) { + switch (T) { + default: assert(0 && "not an integer!"); + case SignedShort: return "short"; + case UnsignedShort: return "unsigned short"; + case SignedInt: return "int"; + case UnsignedInt: return "unsigned int"; + case SignedLong: return "long int"; + case UnsignedLong: return "long unsigned int"; + case SignedLongLong: return "long long int"; + case UnsignedLongLong: return "long long unsigned int"; + } +} + //===----------------------------------------------------------------------===// diff --git a/lib/Lex/Preprocessor.cpp b/lib/Lex/Preprocessor.cpp index 69761c824a..c1e852cd2a 100644 --- a/lib/Lex/Preprocessor.cpp +++ b/lib/Lex/Preprocessor.cpp @@ -428,6 +428,14 @@ static void DefineTypeSize(const char *MacroName, unsigned TypeWidth, DefineBuiltinMacro(Buf, MacroBuf); } +static void DefineType(const char *MacroName, TargetInfo::IntType Ty, + std::vector &Buf) { + char MacroBuf[60]; + sprintf(MacroBuf, "%s=%s", MacroName, TargetInfo::getTypeName(Ty)); + DefineBuiltinMacro(Buf, MacroBuf); +} + + static void InitializePredefinedMacros(Preprocessor &PP, std::vector &Buf) { // Compiler version introspection macros. @@ -520,8 +528,6 @@ static void InitializePredefinedMacros(Preprocessor &PP, DefineBuiltinMacro(Buf, "__WCHAR_TYPE__=int"); DefineBuiltinMacro(Buf, "__WINT_TYPE__=int"); - - unsigned IntMaxWidth; const char *IntMaxSuffix; if (TI.getIntMaxType() == TargetInfo::SignedLongLong) { @@ -544,64 +550,11 @@ static void InitializePredefinedMacros(Preprocessor &PP, DefineTypeSize("__WCHAR_MAX__", TI.getWCharWidth(), "", true, Buf); DefineTypeSize("__INTMAX_MAX__", IntMaxWidth, IntMaxSuffix, true, Buf); - if (TI.getIntMaxType() == TargetInfo::UnsignedLongLong) - DefineBuiltinMacro(Buf, "__INTMAX_TYPE__=unsigned long long int"); - else if (TI.getIntMaxType() == TargetInfo::SignedLongLong) - DefineBuiltinMacro(Buf, "__INTMAX_TYPE__=long long int"); - else if (TI.getIntMaxType() == TargetInfo::UnsignedLong) - DefineBuiltinMacro(Buf, "__INTMAX_TYPE__=unsigned long int"); - else if (TI.getIntMaxType() == TargetInfo::SignedLong) - DefineBuiltinMacro(Buf, "__INTMAX_TYPE__=long int"); - else if (TI.getIntMaxType() == TargetInfo::UnsignedInt) - DefineBuiltinMacro(Buf, "__INTMAX_TYPE__=unsigned int"); - else - DefineBuiltinMacro(Buf, "__INTMAX_TYPE__=int"); - - if (TI.getUIntMaxType() == TargetInfo::UnsignedLongLong) - DefineBuiltinMacro(Buf, "__UINTMAX_TYPE__=unsigned long long int"); - else if (TI.getUIntMaxType() == TargetInfo::SignedLongLong) - DefineBuiltinMacro(Buf, "__UINTMAX_TYPE__=long long int"); - else if (TI.getUIntMaxType() == TargetInfo::UnsignedLong) - DefineBuiltinMacro(Buf, "__UINTMAX_TYPE__=unsigned long int"); - else if (TI.getUIntMaxType() == TargetInfo::SignedLong) - DefineBuiltinMacro(Buf, "__UINTMAX_TYPE__=long int"); - else if (TI.getUIntMaxType() == TargetInfo::UnsignedInt) - DefineBuiltinMacro(Buf, "__UINTMAX_TYPE__=unsigned int"); - else - DefineBuiltinMacro(Buf, "__UINTMAX_TYPE__=int"); - - if (TI.getPtrDiffType(0) == TargetInfo::UnsignedLongLong) - DefineBuiltinMacro(Buf, "__PTRDIFF_TYPE__=unsigned long long int"); - else if (TI.getPtrDiffType(0) == TargetInfo::SignedLongLong) - DefineBuiltinMacro(Buf, "__PTRDIFF_TYPE__=long long int"); - else if (TI.getPtrDiffType(0) == TargetInfo::UnsignedLong) - DefineBuiltinMacro(Buf, "__PTRDIFF_TYPE__=unsigned long int"); - else if (TI.getPtrDiffType(0) == TargetInfo::SignedLong) - DefineBuiltinMacro(Buf, "__PTRDIFF_TYPE__=long int"); - else if (TI.getPtrDiffType(0) == TargetInfo::UnsignedInt) - DefineBuiltinMacro(Buf, "__PTRDIFF_TYPE__=unsigned int"); - else { - assert(TI.getPtrDiffType(0) == TargetInfo::SignedInt); - DefineBuiltinMacro(Buf, "__PTRDIFF_TYPE__=int"); - } - - if (TI.getSizeType() == TargetInfo::UnsignedLongLong) - DefineBuiltinMacro(Buf, "__SIZE_TYPE__=unsigned long long int"); - else if (TI.getSizeType() == TargetInfo::SignedLongLong) - DefineBuiltinMacro(Buf, "__SIZE_TYPE__=long long int"); - else if (TI.getSizeType() == TargetInfo::UnsignedLong) - DefineBuiltinMacro(Buf, "__SIZE_TYPE__=unsigned long int"); - else if (TI.getSizeType() == TargetInfo::SignedLong) - DefineBuiltinMacro(Buf, "__SIZE_TYPE__=long int"); - else if (TI.getSizeType() == TargetInfo::UnsignedInt) - DefineBuiltinMacro(Buf, "__SIZE_TYPE__=unsigned int"); - else if (TI.getSizeType() == TargetInfo::SignedInt) - DefineBuiltinMacro(Buf, "__SIZE_TYPE__=int"); - else { - assert(TI.getPtrDiffType(0) == TargetInfo::UnsignedShort); - DefineBuiltinMacro(Buf, "__SIZE_TYPE__=unsigned short"); - } - + DefineType("__INTMAX_TYPE__", TI.getIntMaxType(), Buf); + DefineType("__UINTMAX_TYPE__", TI.getUIntMaxType(), Buf); + DefineType("__PTRDIFF_TYPE__", TI.getPtrDiffType(0), Buf); + DefineType("__SIZE_TYPE__", TI.getSizeType(), Buf); + DefineFloatMacros(Buf, "FLT", &TI.getFloatFormat()); DefineFloatMacros(Buf, "DBL", &TI.getDoubleFormat()); DefineFloatMacros(Buf, "LDBL", &TI.getLongDoubleFormat());