Skip to content

Commit 978644c

Browse files
authored
[llvm][mustache] Remove out parameters from processTags() (#159190)
We can construct the return values directly and simplify the interface.
1 parent 6b23f4f commit 978644c

File tree

1 file changed

+12
-11
lines changed

1 file changed

+12
-11
lines changed

llvm/lib/Support/Mustache.cpp

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include "llvm/Support/Debug.h"
1111
#include "llvm/Support/raw_ostream.h"
1212
#include <cctype>
13+
#include <optional>
1314
#include <sstream>
1415

1516
#define DEBUG_TYPE "mustache"
@@ -364,35 +365,33 @@ static Tag findNextTag(StringRef Template, size_t StartPos, StringRef Open,
364365
return Result;
365366
}
366367

367-
static void processTag(const Tag &T, SmallVectorImpl<Token> &Tokens,
368-
SmallString<8> &Open, SmallString<8> &Close) {
368+
static std::optional<std::pair<StringRef, StringRef>>
369+
processTag(const Tag &T, SmallVectorImpl<Token> &Tokens) {
369370
LLVM_DEBUG(dbgs() << " Found tag: \"" << T.FullMatch << "\", Content: \""
370371
<< T.Content << "\"\n");
371372
if (T.TagKind == Tag::Kind::Triple) {
372373
Tokens.emplace_back(T.FullMatch.str(), "&" + T.Content.str(), '&');
373374
LLVM_DEBUG(dbgs() << " Created UnescapeVariable token.\n");
374-
return;
375+
return std::nullopt;
375376
}
376377
StringRef Interpolated = T.Content;
377378
std::string RawBody = T.FullMatch.str();
378379
if (!Interpolated.trim().starts_with("=")) {
379380
char Front = Interpolated.empty() ? ' ' : Interpolated.trim().front();
380381
Tokens.emplace_back(RawBody, Interpolated.str(), Front);
381382
LLVM_DEBUG(dbgs() << " Created tag token of type '" << Front << "'\n");
382-
return;
383+
return std::nullopt;
383384
}
384385
Tokens.emplace_back(RawBody, Interpolated.str(), '=');
385386
StringRef DelimSpec = Interpolated.trim();
386387
DelimSpec = DelimSpec.drop_front(1);
387388
DelimSpec = DelimSpec.take_until([](char C) { return C == '='; });
388389
DelimSpec = DelimSpec.trim();
389390

390-
auto [NewOpen, NewClose] = DelimSpec.split(' ');
391-
Open = NewOpen;
392-
Close = NewClose;
393-
394-
LLVM_DEBUG(dbgs() << " Found Set Delimiter tag. NewOpen='" << Open
395-
<< "', NewClose='" << Close << "'\n");
391+
std::pair<StringRef, StringRef> Ret = DelimSpec.split(' ');
392+
LLVM_DEBUG(dbgs() << " Found Set Delimiter tag. NewOpen='" << Ret.first
393+
<< "', NewClose='" << Ret.second << "'\n");
394+
return Ret;
396395
}
397396

398397
// Simple tokenizer that splits the template into tokens.
@@ -426,7 +425,9 @@ static SmallVector<Token> tokenize(StringRef Template) {
426425
LLVM_DEBUG(dbgs() << " Created Text token: \"" << Text << "\"\n");
427426
}
428427

429-
processTag(T, Tokens, Open, Close);
428+
if (auto NewDelims = processTag(T, Tokens)) {
429+
std::tie(Open, Close) = *NewDelims;
430+
}
430431

431432
// Move past the tag.
432433
Start = T.StartPosition + T.FullMatch.size();

0 commit comments

Comments
 (0)