[llvm-branch-commits] [llvm] [llvm][mustache] Use StringRef parameters (PR #159190)

Paul Kirth via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Mon Sep 22 10:07:39 PDT 2025


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 <paulkirth at google.com>
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();



More information about the llvm-branch-commits mailing list