]> granicus.if.org Git - clang/commitdiff
[format] Initialize regex lazily
authorBenjamin Kramer <benny.kra@googlemail.com>
Tue, 20 Mar 2018 20:43:12 +0000 (20:43 +0000)
committerBenjamin Kramer <benny.kra@googlemail.com>
Tue, 20 Mar 2018 20:43:12 +0000 (20:43 +0000)
No need to pay for this on program startup, and also no need to destroy
it on process end.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@328041 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Format/NamespaceEndCommentsFixer.cpp

index df99bb2e1381903f5eedd06b521dac274b65fca8..ee11959af3a9f9ef5947d460cac734ae70d0f228 100644 (file)
@@ -27,13 +27,6 @@ namespace {
 // Short namespaces don't need an end comment.
 static const int kShortNamespaceMaxLines = 1;
 
-// Matches a valid namespace end comment.
-// Valid namespace end comments don't need to be edited.
-static llvm::Regex kNamespaceCommentPattern =
-    llvm::Regex("^/[/*] *(end (of )?)? *(anonymous|unnamed)? *"
-                "namespace( +([a-zA-Z0-9:_]+))?\\.? *(\\*/)?$",
-                llvm::Regex::IgnoreCase);
-
 // Computes the name of a namespace given the namespace token.
 // Returns "" for anonymous namespace.
 std::string computeName(const FormatToken *NamespaceTok) {
@@ -67,8 +60,15 @@ bool hasEndComment(const FormatToken *RBraceTok) {
 bool validEndComment(const FormatToken *RBraceTok, StringRef NamespaceName) {
   assert(hasEndComment(RBraceTok));
   const FormatToken *Comment = RBraceTok->Next;
+
+  // Matches a valid namespace end comment.
+  // Valid namespace end comments don't need to be edited.
+  static llvm::Regex *const NamespaceCommentPattern =
+      new llvm::Regex("^/[/*] *(end (of )?)? *(anonymous|unnamed)? *"
+                      "namespace( +([a-zA-Z0-9:_]+))?\\.? *(\\*/)?$",
+                      llvm::Regex::IgnoreCase);
   SmallVector<StringRef, 7> Groups;
-  if (kNamespaceCommentPattern.match(Comment->TokenText, &Groups)) {
+  if (NamespaceCommentPattern->match(Comment->TokenText, &Groups)) {
     StringRef NamespaceNameInComment = Groups.size() > 5 ? Groups[5] : "";
     // Anonymous namespace comments must not mention a namespace name.
     if (NamespaceName.empty() && !NamespaceNameInComment.empty())