https://github.com/ilovepi updated https://github.com/llvm/llvm-project/pull/159190
>From e79233da33b30f1c3bdbc8b5d0f18f0ee1909053 Mon Sep 17 00:00:00 2001 From: Paul Kirth <[email protected]> Date: Fri, 12 Sep 2025 00:24:31 -0700 Subject: [PATCH] [llvm][mustache] Use StringRef parameters --- llvm/lib/Support/Mustache.cpp | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/llvm/lib/Support/Mustache.cpp b/llvm/lib/Support/Mustache.cpp index e2de7645e8dfb..f948344883452 100644 --- a/llvm/lib/Support/Mustache.cpp +++ b/llvm/lib/Support/Mustache.cpp @@ -11,6 +11,7 @@ #include "llvm/Support/raw_ostream.h" #include <cctype> +#include <optional> #include <sstream> #define DEBUG_TYPE "mustache" @@ -325,9 +326,8 @@ struct Tag { size_t StartPosition = StringRef::npos; }; -static Tag findNextTag(StringRef Template, size_t StartPos, - const SmallString<8> &Open, - const SmallString<8> &Close) { +static Tag findNextTag(StringRef Template, size_t StartPos, StringRef Open, + StringRef Close) { const StringLiteral TripleOpen("{{{"); const StringLiteral TripleClose("}}}"); @@ -368,14 +368,14 @@ static Tag findNextTag(StringRef Template, size_t StartPos, return Result; } -static void processTag(const Tag &T, SmallVectorImpl<Token> &Tokens, - SmallString<8> &Open, SmallString<8> &Close) { +static std::optional<std::pair<StringRef, StringRef>> +processTag(const Tag &T, SmallVectorImpl<Token> &Tokens) { LLVM_DEBUG(dbgs() << " Found tag: \"" << T.FullMatch << "\", Content: \"" << T.Content << "\"\n"); if (T.TagKind == Tag::Kind::Triple) { Tokens.emplace_back(T.FullMatch.str(), "&" + T.Content.str(), '&'); LLVM_DEBUG(dbgs() << " Created UnescapeVariable token.\n"); - return; + return std::nullopt; } StringRef Interpolated = T.Content; std::string RawBody = T.FullMatch.str(); @@ -383,7 +383,7 @@ static void processTag(const Tag &T, SmallVectorImpl<Token> &Tokens, char Front = Interpolated.empty() ? ' ' : Interpolated.trim().front(); Tokens.emplace_back(RawBody, Interpolated.str(), Front); LLVM_DEBUG(dbgs() << " Created tag token of type '" << Front << "'\n"); - return; + return std::nullopt; } Tokens.emplace_back(RawBody, Interpolated.str(), '='); StringRef DelimSpec = Interpolated.trim(); @@ -392,11 +392,9 @@ static void processTag(const Tag &T, SmallVectorImpl<Token> &Tokens, DelimSpec = DelimSpec.trim(); auto [NewOpen, NewClose] = DelimSpec.split(' '); - Open = NewOpen; - Close = NewClose; - - LLVM_DEBUG(dbgs() << " Found Set Delimiter tag. NewOpen='" << Open - << "', NewClose='" << Close << "'\n"); + LLVM_DEBUG(dbgs() << " Found Set Delimiter tag. NewOpen='" << NewOpen + << "', NewClose='" << NewClose << "'\n"); + return std::make_pair(NewOpen, NewClose); } // Simple tokenizer that splits the template into tokens. @@ -430,7 +428,9 @@ static SmallVector<Token> tokenize(StringRef Template) { LLVM_DEBUG(dbgs() << " Created Text token: \"" << Text << "\"\n"); } - processTag(T, Tokens, Open, Close); + if (auto NewDelims = processTag(T, Tokens)) { + std::tie(Open, Close) = *NewDelims; + } // Move past the tag. Start = T.StartPosition + T.FullMatch.size(); _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
