diff options
Diffstat (limited to 'clang-include-fixer/find-all-symbols/FindAllMacros.h')
-rw-r--r-- | clang-include-fixer/find-all-symbols/FindAllMacros.h | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/clang-include-fixer/find-all-symbols/FindAllMacros.h b/clang-include-fixer/find-all-symbols/FindAllMacros.h new file mode 100644 index 00000000..5aaf3884 --- /dev/null +++ b/clang-include-fixer/find-all-symbols/FindAllMacros.h @@ -0,0 +1,64 @@ +//===-- FindAllMacros.h - find all macros -----------------------*- C++ -*-===// +// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CLANG_TOOLS_EXTRA_FIND_ALL_SYMBOLS_FIND_ALL_MACROS_H +#define LLVM_CLANG_TOOLS_EXTRA_FIND_ALL_SYMBOLS_FIND_ALL_MACROS_H + +#include "SymbolInfo.h" +#include "SymbolReporter.h" +#include "clang/Lex/PPCallbacks.h" + +namespace clang { +class MacroInfo; +namespace find_all_symbols { + +class HeaderMapCollector; + +/// \brief A preprocessor that collects all macro symbols. +/// The contexts of a macro will be ignored since they are not available during +/// preprocessing period. +class FindAllMacros : public clang::PPCallbacks { +public: + explicit FindAllMacros(SymbolReporter *Reporter, SourceManager *SM, + HeaderMapCollector *Collector = nullptr) + : Reporter(Reporter), SM(SM), Collector(Collector) {} + + void MacroDefined(const Token &MacroNameTok, + const MacroDirective *MD) override; + + void MacroExpands(const Token &MacroNameTok, const MacroDefinition &MD, + SourceRange Range, const MacroArgs *Args) override; + + void Ifdef(SourceLocation Loc, const Token &MacroNameTok, + const MacroDefinition &MD) override; + + void Ifndef(SourceLocation Loc, const Token &MacroNameTok, + const MacroDefinition &MD) override; + + void EndOfMainFile() override; + +private: + llvm::Optional<SymbolInfo> CreateMacroSymbol(const Token &MacroNameTok, + const MacroInfo *MD); + // Not a callback, just a common path for all usage types. + void MacroUsed(const Token &Name, const MacroDefinition &MD); + + SymbolInfo::SignalMap FileSymbols; + // Reporter for SymbolInfo. + SymbolReporter *const Reporter; + SourceManager *const SM; + // A remapping header file collector allowing clients to include a different + // header. + HeaderMapCollector *const Collector; +}; + +} // namespace find_all_symbols +} // namespace clang + +#endif // LLVM_CLANG_TOOLS_EXTRA_FIND_ALL_SYMBOLS_FIND_ALL_MACROS_H |