clang 24.0.0git
DataCollection.cpp
Go to the documentation of this file.
1//===-- DataCollection.cpp --------------------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
11#include "clang/Lex/Lexer.h"
12
13namespace clang {
14namespace data_collection {
15
16/// Prints the macro name that contains the given SourceLocation into the given
17/// raw_string_ostream.
18static void printMacroName(llvm::raw_string_ostream &MacroStack,
19 ASTContext &Context, SourceLocation Loc) {
20 MacroStack << Lexer::getImmediateMacroName(Loc, Context.getSourceManager(),
21 Context.getLangOpts());
22
23 // Add an empty space at the end as a padding to prevent
24 // that macro names concatenate to the names of other macros.
25 MacroStack << " ";
26}
27
28/// Returns a string that represents all macro expansions that expanded into the
29/// given SourceLocation.
30///
31/// If 'getMacroStack(A) == getMacroStack(B)' is true, then the SourceLocations
32/// A and B are expanded from the same macros in the same order.
33std::string getMacroStack(SourceLocation Loc, ASTContext &Context) {
34 std::string MacroStack;
35 llvm::raw_string_ostream MacroStackStream(MacroStack);
36 SourceManager &SM = Context.getSourceManager();
37
38 // Iterate over all macros that expanded into the given SourceLocation.
39 while (Loc.isMacroID()) {
40 // Add the macro name to the stream.
41 printMacroName(MacroStackStream, Context, Loc);
42 Loc = SM.getImmediateMacroCallerLoc(Loc);
43 }
44 return MacroStack;
45}
46
47} // end namespace data_collection
48} // end namespace clang
This file declares helper methods for collecting data from AST nodes.
Defines the SourceManager interface.
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
Definition ASTContext.h:223
static StringRef getImmediateMacroName(SourceLocation Loc, const SourceManager &SM, const LangOptions &LangOpts)
Retrieve the name of the immediate macro expansion.
Definition Lexer.cpp:1111
Encodes a location in the source.
This class handles loading and caching of source files into memory.
SourceLocation getImmediateMacroCallerLoc(SourceLocation Loc) const
Gets the location of the immediate macro caller, one level up the stack toward the initial macro type...
static void printMacroName(llvm::raw_string_ostream &MacroStack, ASTContext &Context, SourceLocation Loc)
Prints the macro name that contains the given SourceLocation into the given raw_string_ostream.
std::string getMacroStack(SourceLocation Loc, ASTContext &Context)
Returns a string that represents all macro expansions that expanded into the given SourceLocation.
The JSON file list parser is used to communicate input to InstallAPI.