28#include "llvm/ADT/StringSet.h"
29#include "llvm/Support/ErrorHandling.h"
51 assert(!Tokens.empty());
58 if (Current->
isNot(tok::identifier))
62 if (Current->
is(tok::l_paren)) {
67 if (!parseExpansion())
75 assert(Current->
is(tok::l_paren));
77 while (Current->
is(tok::identifier)) {
78 Def.
Params.push_back(Current);
81 if (Current->
isNot(tok::comma))
85 if (Current->
isNot(tok::r_paren))
91 bool parseExpansion() {
92 if (!Current->
isOneOf(tok::equal, tok::eof))
94 if (Current->
is(tok::equal))
101 while (Current->
isNot(tok::eof)) {
102 Def.
Body.push_back(Current);
105 Def.
Body.push_back(Current);
109 if (Pos + 1 < Tokens.size())
111 Current = Tokens[Pos];
116 FormatToken *Current =
nullptr;
118 ArrayRef<FormatToken *> Tokens;
122 const std::vector<std::string> &Macros,
SourceManager &SourceMgr,
124 llvm::SpecificBumpPtrAllocator<FormatToken> &Allocator,