]> granicus.if.org Git - clang/commitdiff
clang-format: Fix for #pragma option formatting.
authorDaniel Jasper <djasper@google.com>
Wed, 22 Apr 2015 09:45:42 +0000 (09:45 +0000)
committerDaniel Jasper <djasper@google.com>
Wed, 22 Apr 2015 09:45:42 +0000 (09:45 +0000)
Adapted patch from Sergey Razmetov. Thank you.

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

lib/Format/FormatToken.h
lib/Format/TokenAnnotator.cpp
unittests/Format/FormatTest.cpp

index bc14d4c5392dbb5b76ffb4d0e625462f6e562b24..5e8730c71e58f0685a01dfeaa02a199f1e9764a8 100644 (file)
@@ -545,6 +545,8 @@ struct AdditionalKeywords {
     kw_throws = &IdentTable.get("throws");
     kw___except = &IdentTable.get("__except");
 
+    kw_mark = &IdentTable.get("mark");
+
     kw_option = &IdentTable.get("option");
     kw_optional = &IdentTable.get("optional");
     kw_repeated = &IdentTable.get("repeated");
@@ -582,6 +584,9 @@ struct AdditionalKeywords {
   IdentifierInfo *kw_synchronized;
   IdentifierInfo *kw_throws;
 
+  // Pragma keywords.
+  IdentifierInfo *kw_mark;
+
   // Proto keywords.
   IdentifierInfo *kw_option;
   IdentifierInfo *kw_optional;
index ea5503ade68d861e0673ac6b5f33132f8da7e94c..7733b8a6e951a7c1f4b754b954db01e96b403a52 100644 (file)
@@ -582,11 +582,14 @@ private:
 
   void parsePragma() {
     next(); // Consume "pragma".
-    if (CurrentToken && CurrentToken->TokenText == "mark") {
+    if (CurrentToken &&
+        CurrentToken->isOneOf(Keywords.kw_mark, Keywords.kw_option)) {
+      bool IsMark = CurrentToken->is(Keywords.kw_mark);
       next(); // Consume "mark".
       next(); // Consume first token (so we fix leading whitespace).
       while (CurrentToken) {
-        CurrentToken->Type = TT_ImplicitStringLiteral;
+        if (IsMark || CurrentToken->Previous->is(TT_BinaryOperator))
+          CurrentToken->Type = TT_ImplicitStringLiteral;
         next();
       }
     }
index bec7a9cfb50a1e7a682ab9d55e8f3e267ab3372e..ed31a097b0abf8e0670708897380b3d4a39d6209 100644 (file)
@@ -8795,6 +8795,12 @@ TEST_F(FormatTest, UnderstandsPragmas) {
                    "(including parentheses)."));
 }
 
+TEST_F(FormatTest, UnderstandPragmaOption) {
+  verifyFormat("#pragma option -C -A");
+
+  EXPECT_EQ("#pragma option -C -A", format("#pragma    option   -C   -A"));
+}
+
 #define EXPECT_ALL_STYLES_EQUAL(Styles)                                        \
   for (size_t i = 1; i < Styles.size(); ++i)                                   \
     EXPECT_EQ(Styles[0], Styles[i]) << "Style #" << i << " of "                \