Frontend: Add support (unused) for showing all "interesting" headers, not just
ones outside the predefines buffer (which is what -H does). llvm-svn: 124749
This commit is contained in:
parent
a5cdc7ea0f
commit
fb24485727
|
@ -75,7 +75,15 @@ void AttachDependencyFileGen(Preprocessor &PP,
|
|||
|
||||
/// AttachHeaderIncludeGen - Create a header include list generator, and attach
|
||||
/// it to the given preprocessor.
|
||||
void AttachHeaderIncludeGen(Preprocessor &PP);
|
||||
///
|
||||
/// \param ShowAllHeaders - If true, show all header information instead of just
|
||||
/// headers following the predefines buffer. This is useful for making sure
|
||||
/// includes mentioned on the command line are also reported, but differs from
|
||||
/// the default behavior used by -H.
|
||||
/// \param OutputPath - If non-empty, a path to write the header include
|
||||
/// information to, instead of writing to stderr.
|
||||
void AttachHeaderIncludeGen(Preprocessor &PP, bool ShowAllHeaders = false,
|
||||
llvm::StringRef OutputPath = "");
|
||||
|
||||
/// CacheTokens - Cache tokens for use with PCH. Note that this requires
|
||||
/// a seekable stream.
|
||||
|
|
|
@ -10,40 +10,28 @@
|
|||
#include "clang/Frontend/Utils.h"
|
||||
#include "clang/Basic/SourceManager.h"
|
||||
#include "clang/Lex/Preprocessor.h"
|
||||
/*
|
||||
#include "clang/Basic/Diagnostic.h"
|
||||
#include "clang/Frontend/PreprocessorOutputOptions.h"
|
||||
#include "clang/Lex/MacroInfo.h"
|
||||
#include "clang/Lex/PPCallbacks.h"
|
||||
#include "clang/Lex/Pragma.h"
|
||||
#include "clang/Lex/TokenConcatenation.h"
|
||||
#include "llvm/ADT/SmallString.h"
|
||||
#include "llvm/ADT/STLExtras.h"
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include "llvm/Config/config.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
#include <cstdio>
|
||||
*/
|
||||
using namespace clang;
|
||||
|
||||
namespace {
|
||||
class HeaderIncludesCallback : public PPCallbacks {
|
||||
SourceManager &SM;
|
||||
unsigned CurrentIncludeDepth;
|
||||
bool ShowAllHeaders;
|
||||
bool HasProcessedPredefines;
|
||||
|
||||
public:
|
||||
HeaderIncludesCallback(const Preprocessor *PP)
|
||||
HeaderIncludesCallback(const Preprocessor *PP, bool ShowAllHeaders_)
|
||||
: SM(PP->getSourceManager()), CurrentIncludeDepth(0),
|
||||
HasProcessedPredefines(false) {}
|
||||
ShowAllHeaders(ShowAllHeaders_), HasProcessedPredefines(false) {}
|
||||
|
||||
virtual void FileChanged(SourceLocation Loc, FileChangeReason Reason,
|
||||
SrcMgr::CharacteristicKind FileType);
|
||||
};
|
||||
}
|
||||
|
||||
void clang::AttachHeaderIncludeGen(Preprocessor &PP) {
|
||||
PP.addPPCallbacks(new HeaderIncludesCallback(&PP));
|
||||
void clang::AttachHeaderIncludeGen(Preprocessor &PP, bool ShowAllHeaders,
|
||||
llvm::StringRef OutputPath) {
|
||||
PP.addPPCallbacks(new HeaderIncludesCallback(&PP, ShowAllHeaders));
|
||||
}
|
||||
|
||||
void HeaderIncludesCallback::FileChanged(SourceLocation Loc,
|
||||
|
@ -68,8 +56,15 @@ void HeaderIncludesCallback::FileChanged(SourceLocation Loc,
|
|||
HasProcessedPredefines = true;
|
||||
}
|
||||
|
||||
// Dump the header include information we are past the predefines buffer.
|
||||
if (HasProcessedPredefines && Reason == PPCallbacks::EnterFile) {
|
||||
// Show the header if we are (a) past the predefines, or (b) showing all
|
||||
// headers and in the predefines at a depth past the initial file and command
|
||||
// line buffers.
|
||||
bool ShowHeader = (HasProcessedPredefines ||
|
||||
(ShowAllHeaders && CurrentIncludeDepth > 2));
|
||||
|
||||
// Dump the header include information we are past the predefines buffer or
|
||||
// are showing all headers.
|
||||
if (ShowHeader && Reason == PPCallbacks::EnterFile) {
|
||||
// Write to a temporary string to avoid unnecessary flushing on errs().
|
||||
llvm::SmallString<512> Filename(UserLoc.getFilename());
|
||||
Lexer::Stringify(Filename);
|
||||
|
|
Loading…
Reference in New Issue