[PATCH] D44695: [clang-format] Partially revert r322749, replacing array with DenseSet

Krasimir Georgiev via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Mar 20 11:31:36 PDT 2018


krasimir created this revision.
Herald added subscribers: cfe-commits, klimek.

The array + binary_search requires the initializer list of identifiers to be
sorted. I can imagine how this list might change frequently while the support
for ObjectiveC improves (https://reviews.llvm.org/D44632). The array approach might have been a premature
optimization too, since in any case computing a hash for every token is trivial
compared to what we do for formatting it.


Repository:
  rC Clang

https://reviews.llvm.org/D44695

Files:
  lib/Format/Format.cpp


Index: lib/Format/Format.cpp
===================================================================
--- lib/Format/Format.cpp
+++ lib/Format/Format.cpp
@@ -31,6 +31,7 @@
 #include "clang/Basic/SourceManager.h"
 #include "clang/Basic/VirtualFileSystem.h"
 #include "clang/Lex/Lexer.h"
+#include "llvm/ADT/DenseSet.h"
 #include "llvm/ADT/STLExtras.h"
 #include "llvm/ADT/StringRef.h"
 #include "llvm/Support/Allocator.h"
@@ -1446,8 +1447,7 @@
 private:
   static bool guessIsObjC(const SmallVectorImpl<AnnotatedLine *> &AnnotatedLines,
                           const AdditionalKeywords &Keywords) {
-    // Keep this array sorted, since we are binary searching over it.
-    static constexpr llvm::StringLiteral FoundationIdentifiers[] = {
+    static const auto *FoundationIdentifiers = new llvm::DenseSet<StringRef>{
         "CGFloat",
         "NSAffineTransform",
         "NSArray",
@@ -1510,9 +1510,8 @@
               FormatTok->isOneOf(tok::numeric_constant, tok::l_square,
                                  tok::l_brace))) ||
             (FormatTok->Tok.isAnyIdentifier() &&
-             std::binary_search(std::begin(FoundationIdentifiers),
-                                std::end(FoundationIdentifiers),
-                                FormatTok->TokenText)) ||
+             FoundationIdentifiers->find(FormatTok->TokenText) !=
+                 FoundationIdentifiers->end()) ||
             FormatTok->is(TT_ObjCStringLiteral) ||
             FormatTok->isOneOf(Keywords.kw_NS_ENUM, Keywords.kw_NS_OPTIONS,
                                TT_ObjCBlockLBrace, TT_ObjCBlockLParen,


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D44695.139172.patch
Type: text/x-patch
Size: 1595 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180320/de9bf2ee/attachment.bin>


More information about the cfe-commits mailing list