Mercurial > hg > CbC > CbC_llvm
view clang-tools-extra/clang-include-fixer/find-all-symbols/FindAllMacros.cpp @ 259:011663b4a808
remove duplicate setjmp in return continuation
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 12 Oct 2023 15:52:37 +0900 |
parents | 1f2b6ac9f198 |
children |
line wrap: on
line source
//===-- FindAllMacros.cpp - 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 // //===----------------------------------------------------------------------===// #include "FindAllMacros.h" #include "HeaderMapCollector.h" #include "PathConfig.h" #include "SymbolInfo.h" #include "clang/Basic/FileManager.h" #include "clang/Basic/IdentifierTable.h" #include "clang/Basic/SourceManager.h" #include "clang/Lex/MacroInfo.h" #include "clang/Lex/Token.h" #include "llvm/Support/Path.h" #include <optional> namespace clang { namespace find_all_symbols { std::optional<SymbolInfo> FindAllMacros::CreateMacroSymbol(const Token &MacroNameTok, const MacroInfo *info) { std::string FilePath = getIncludePath(*SM, info->getDefinitionLoc(), Collector); if (FilePath.empty()) return std::nullopt; return SymbolInfo(MacroNameTok.getIdentifierInfo()->getName(), SymbolInfo::SymbolKind::Macro, FilePath, {}); } void FindAllMacros::MacroDefined(const Token &MacroNameTok, const MacroDirective *MD) { if (auto Symbol = CreateMacroSymbol(MacroNameTok, MD->getMacroInfo())) ++FileSymbols[*Symbol].Seen; } void FindAllMacros::MacroUsed(const Token &Name, const MacroDefinition &MD) { if (!MD || !SM->isInMainFile(SM->getExpansionLoc(Name.getLocation()))) return; if (auto Symbol = CreateMacroSymbol(Name, MD.getMacroInfo())) ++FileSymbols[*Symbol].Used; } void FindAllMacros::MacroExpands(const Token &MacroNameTok, const MacroDefinition &MD, SourceRange Range, const MacroArgs *Args) { MacroUsed(MacroNameTok, MD); } void FindAllMacros::Ifdef(SourceLocation Loc, const Token &MacroNameTok, const MacroDefinition &MD) { MacroUsed(MacroNameTok, MD); } void FindAllMacros::Ifndef(SourceLocation Loc, const Token &MacroNameTok, const MacroDefinition &MD) { MacroUsed(MacroNameTok, MD); } void FindAllMacros::EndOfMainFile() { Reporter->reportSymbols(SM->getFileEntryForID(SM->getMainFileID())->getName(), FileSymbols); FileSymbols.clear(); } } // namespace find_all_symbols } // namespace clang