diff options
Diffstat (limited to 'lib/Driver/Types.cpp')
-rw-r--r-- | lib/Driver/Types.cpp | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/lib/Driver/Types.cpp b/lib/Driver/Types.cpp index 7d22596..d947ae7 100644 --- a/lib/Driver/Types.cpp +++ b/lib/Driver/Types.cpp @@ -8,6 +8,7 @@ //===----------------------------------------------------------------------===// #include "clang/Driver/Types.h" +#include "llvm/ADT/STLExtras.h" #include "llvm/ADT/StringSwitch.h" #include <cassert> #include <string.h> @@ -28,7 +29,7 @@ static const TypeInfo TypeInfos[] = { #include "clang/Driver/Types.def" #undef TYPE }; -static const unsigned numTypes = sizeof(TypeInfos) / sizeof(TypeInfos[0]); +static const unsigned numTypes = llvm::array_lengthof(TypeInfos); static const TypeInfo &getInfo(unsigned id) { assert(id > 0 && id - 1 < numTypes && "Invalid Type ID."); @@ -43,7 +44,13 @@ types::ID types::getPreprocessedType(ID Id) { return getInfo(Id).PreprocessedType; } -const char *types::getTypeTempSuffix(ID Id) { +const char *types::getTypeTempSuffix(ID Id, bool CLMode) { + if (Id == TY_Object && CLMode) + return "obj"; + if (Id == TY_Image && CLMode) + return "exe"; + if (Id == TY_PP_Asm && CLMode) + return "asm"; return getInfo(Id).TempSuffix; } @@ -132,8 +139,10 @@ types::ID types::lookupTypeForExtension(const char *Ext) { .Case("f", TY_PP_Fortran) .Case("F", TY_Fortran) .Case("s", TY_PP_Asm) + .Case("asm", TY_PP_Asm) .Case("S", TY_Asm) .Case("o", TY_Object) + .Case("obj", TY_Object) .Case("ii", TY_PP_CXX) .Case("mi", TY_PP_ObjC) .Case("mm", TY_ObjCXX) @@ -180,9 +189,7 @@ types::ID types::lookupTypeForTypeSpecifier(const char *Name) { } // FIXME: Why don't we just put this list in the defs file, eh. -void types::getCompilationPhases( - ID Id, - llvm::SmallVector<phases::ID, phases::MaxNumberOfPhases> &P) { +void types::getCompilationPhases(ID Id, llvm::SmallVectorImpl<phases::ID> &P) { if (Id != TY_Object) { if (getPreprocessedType(Id) != TY_INVALID) { P.push_back(phases::Preprocess); |