data: Analyze all types of macro usage

This commit is contained in:
Eberhard Graether
2016-06-11 03:46:44 +02:00
parent 594bb41a6f
commit 77080464d7
3 changed files with 139 additions and 42 deletions
@@ -92,10 +92,38 @@ void PreprocessorCallbacks::MacroDefined(const clang::Token& macroNameToken, con
}
}
void PreprocessorCallbacks::MacroUndefined(
const clang::Token& macroNameToken, const clang::MacroDefinition& macroDefinition)
{
onMacroUsage(macroNameToken);
}
void PreprocessorCallbacks::Defined(
const clang::Token& macroNameToken, const clang::MacroDefinition& macroDefinition, clang::SourceRange range)
{
onMacroUsage(macroNameToken);
}
void PreprocessorCallbacks::Ifdef(clang::SourceLocation location, const clang::Token& macroNameToken,
const clang::MacroDefinition& macroDefinition)
{
onMacroUsage(macroNameToken);
}
void PreprocessorCallbacks::Ifndef(clang::SourceLocation location, const clang::Token& macroNameToken,
const clang::MacroDefinition& macroDefinition)
{
onMacroUsage(macroNameToken);
}
void PreprocessorCallbacks::MacroExpands(
const clang::Token& macroNameToken, const clang::MacroDefinition& macroDirective,
clang::SourceRange range, const clang::MacroArgs* args
){
onMacroUsage(macroNameToken);
}
void PreprocessorCallbacks::onMacroUsage(const clang::Token& macroNameToken)
{
const std::string& fileStr = m_sourceManager.getFilename(m_sourceManager.getFileLoc(macroNameToken.getLocation()));
if (!fileStr.size())
{
@@ -17,7 +17,8 @@ class PreprocessorCallbacks
public:
explicit PreprocessorCallbacks(clang::SourceManager& sourceManager, ParserClient* client, FileRegister* fileRegister);
virtual void FileChanged(clang::SourceLocation location, FileChangeReason reason, clang::SrcMgr::CharacteristicKind, clang::FileID);
virtual void FileChanged(
clang::SourceLocation location, FileChangeReason reason, clang::SrcMgr::CharacteristicKind, clang::FileID);
virtual void InclusionDirective(
clang::SourceLocation hashLocation, const clang::Token& includeToken, llvm::StringRef fileName, bool isAngled,
@@ -25,6 +26,14 @@ public:
llvm::StringRef relativePath, const clang::Module* imported);
virtual void MacroDefined(const clang::Token& macroNameToken, const clang::MacroDirective* macroDirective);
virtual void MacroUndefined(const clang::Token& macroNameToken, const clang::MacroDefinition& macroDefinition);
virtual void Defined(
const clang::Token& macroNameToken, const clang::MacroDefinition& macroDefinition, clang::SourceRange range);
virtual void Ifdef(clang::SourceLocation location, const clang::Token& macroNameToken,
const clang::MacroDefinition& macroDefinition);
virtual void Ifndef(clang::SourceLocation location, const clang::Token& macroNameToken,
const clang::MacroDefinition& macroDefinition);
virtual void MacroExpands(
const clang::Token& macroNameToken, const clang::MacroDefinition& macroDirective,
@@ -32,6 +41,8 @@ public:
);
private:
void onMacroUsage(const clang::Token& macroNameToken);
ParseLocation getParseLocation(const clang::Token& macroNameToc) const;
ParseLocation getParseLocation(const clang::MacroInfo* macroNameToc) const;
ParseLocation getParseLocation(const clang::SourceRange& sourceRange) const;