clang 20.0.0git
|
Takes a set of macro definitions as strings and allows expanding calls to those macros. More...
#include "/home/buildbot/as-worker-4/publish-doxygen-docs/llvm-project/clang/lib/Format/Macros.h"
Classes | |
struct | Definition |
class | DefinitionParser |
Public Types | |
using | ArgsList = ArrayRef< SmallVector< FormatToken *, 8 > > |
Public Member Functions | |
MacroExpander (const std::vector< std::string > &Macros, SourceManager &SourceMgr, const FormatStyle &Style, llvm::SpecificBumpPtrAllocator< FormatToken > &Allocator, IdentifierTable &IdentTable) | |
Construct a macro expander from a set of macro definitions. | |
~MacroExpander () | |
bool | defined (StringRef Name) const |
Returns whether any macro Name is defined, regardless of overloads. | |
bool | objectLike (StringRef Name) const |
Returns whetherh there is an object-like overload, i.e. | |
bool | hasArity (StringRef Name, unsigned Arity) const |
Returns whether macro Name provides an overload with the given arity. | |
SmallVector< FormatToken *, 8 > | expand (FormatToken *ID, std::optional< ArgsList > OptionalArgs) const |
Returns the expanded stream of format tokens for ID , where each element in Args is a positional argument to the macro call. | |
Takes a set of macro definitions as strings and allows expanding calls to those macros.
For example: Definition: A(x, y)=x + y Call : A(int a = 1, 2) Expansion : int a = 1 + 2
Expansion does not check arity of the definition. If fewer arguments than expected are provided, the remaining parameters are considered empty: Call : A(a) Expansion: a + If more arguments than expected are provided, they will be discarded.
The expander does not support:
Furthermore, only a single expansion of each macro argument is supported, so that we cannot get conflicting formatting decisions from different expansions. Definition: A(x)=x+x Call : A(id) Expansion : id+x
using clang::format::MacroExpander::ArgsList = ArrayRef<SmallVector<FormatToken *, 8> > |
clang::format::MacroExpander::MacroExpander | ( | const std::vector< std::string > & | Macros, |
SourceManager & | SourceMgr, | ||
const FormatStyle & | Style, | ||
llvm::SpecificBumpPtrAllocator< FormatToken > & | Allocator, | ||
IdentifierTable & | IdentTable | ||
) |
Construct a macro expander from a set of macro definitions.
Macro definitions must be encoded as UTF-8.
Each entry in Macros
must conform to the following simple macro-definition language: <definition> ::= <id> <expansion> | <id> "(" <params> ")" <expansion> <params> ::= <id-list> | "" <id-list> ::= <id> | <id> "," <params> <expansion> ::= "=" <tail> | <eof> <tail> ::= <tok> <tail> | <eof>
Macros that cannot be parsed will be silently discarded.
Definition at line 121 of file MacroExpander.cpp.
|
default |
bool clang::format::MacroExpander::defined | ( | StringRef | Name | ) | const |
Returns whether any macro Name
is defined, regardless of overloads.
Definition at line 153 of file MacroExpander.cpp.
SmallVector< FormatToken *, 8 > clang::format::MacroExpander::expand | ( | FormatToken * | ID, |
std::optional< ArgsList > | OptionalArgs | ||
) | const |
Returns the expanded stream of format tokens for ID
, where each element in Args
is a positional argument to the macro call.
If Args
is not set, the object-like overload is used. If Args
is set, the overload with the arity equal to Args.size()
is used.
Definition at line 167 of file MacroExpander.cpp.
References clang::format::MacroExpander::Definition::ArgMap, clang::format::MacroExpander::Definition::Body, clang::format::FormatToken::copyFrom(), hasArity(), ID, clang::format::FormatToken::MacroCtx, clang::format::MR_ExpandedArg, clang::format::MR_Hidden, objectLike(), and clang::Result.
Returns whether macro Name
provides an overload with the given arity.
Definition at line 161 of file MacroExpander.cpp.
Referenced by expand().
bool clang::format::MacroExpander::objectLike | ( | StringRef | Name | ) | const |
Returns whetherh there is an object-like overload, i.e.
where the macro has no arguments and should not consume subsequent parentheses.
Definition at line 157 of file MacroExpander.cpp.
Referenced by expand().