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