forked from OSchip/llvm-project
Driver: Add types::getNumCompilationPhases, getCompilationPhase to
provide information about what steps should be done for a particular file type. llvm-svn: 66881
This commit is contained in:
parent
58cac7ca68
commit
e71b9640ad
|
@ -10,6 +10,8 @@
|
|||
#ifndef CLANG_DRIVER_TYPES_H_
|
||||
#define CLANG_DRIVER_TYPES_H_
|
||||
|
||||
#include "clang/Driver/Phases.h"
|
||||
|
||||
namespace clang {
|
||||
namespace driver {
|
||||
namespace types {
|
||||
|
@ -62,6 +64,14 @@ namespace types {
|
|||
/// specified type name.
|
||||
ID lookupTypeForTypeSpecifier(const char *Name);
|
||||
|
||||
/// getNumCompilationPhases - Return the complete number of phases
|
||||
/// to be done for this type.
|
||||
unsigned getNumCompilationPhases(ID Id);
|
||||
|
||||
/// getCompilationPhase - Return the \args N th compilation phase to
|
||||
/// be done for this type.
|
||||
phases::ID getCompilationPhase(ID Id, unsigned N);
|
||||
|
||||
} // end namespace types
|
||||
} // end namespace driver
|
||||
} // end namespace clang
|
||||
|
|
|
@ -128,3 +128,47 @@ types::ID types::lookupTypeForTypeSpecifier(const char *Name) {
|
|||
|
||||
return TY_INVALID;
|
||||
}
|
||||
|
||||
// FIXME: Why don't we just put this list in the defs file, eh.
|
||||
|
||||
unsigned types::getNumCompilationPhases(ID Id) {
|
||||
if (Id == TY_Object)
|
||||
return 1;
|
||||
|
||||
unsigned N = 0;
|
||||
if (getPreprocessedType(Id) != TY_INVALID)
|
||||
N += 1;
|
||||
|
||||
if (onlyAssembleType(Id))
|
||||
return N + 2; // assemble, link
|
||||
if (onlyPrecompileType(Id))
|
||||
return N + 1; // precompile
|
||||
|
||||
return N + 3; // compile, assemble, link
|
||||
}
|
||||
|
||||
phases::ID types::getCompilationPhase(ID Id, unsigned N) {
|
||||
assert(N < getNumCompilationPhases(Id) && "Invalid index.");
|
||||
|
||||
if (Id == TY_Object)
|
||||
return phases::Link;
|
||||
|
||||
if (getPreprocessedType(Id) != TY_INVALID) {
|
||||
if (N == 0)
|
||||
return phases::Preprocess;
|
||||
--N;
|
||||
}
|
||||
|
||||
if (onlyAssembleType(Id))
|
||||
return N == 0 ? phases::Assemble : phases::Link;
|
||||
|
||||
if (onlyPrecompileType(Id))
|
||||
return phases::Precompile;
|
||||
|
||||
if (N == 0)
|
||||
return phases::Compile;
|
||||
if (N == 1)
|
||||
return phases::Assemble;
|
||||
|
||||
return phases::Link;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue