<div dir="ltr">On Mon, Jun 3, 2013 at 6:11 PM, Daniel Jasper <span dir="ltr"><<a href="mailto:djasper@google.com" target="_blank">djasper@google.com</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Ah, then probably: "no". But we have to decide carefully for each token. I think it is pretty safe for "}".</div>
</blockquote><div><br></div><div style>Yes, but currently we can also do it if the next token is not "}", or am I missing the check?</div><div style> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Jun 3, 2013 at 6:06 PM, Manuel Klimek <span dir="ltr"><<a href="mailto:klimek@google.com" target="_blank">klimek@google.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Sorry, meant '}'.<div><div><div class="gmail_extra"><br><br><div class="gmail_quote">
On Mon, Jun 3, 2013 at 5:41 PM, Daniel Jasper <span dir="ltr"><<a href="mailto:djasper@google.com" target="_blank">djasper@google.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">I don't understand that. '{' would not be an error ..</div><div><div>
<div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Jun 3, 2013 at 1:34 PM, Manuel Klimek <span dir="ltr"><<a href="mailto:klimek@google.com" target="_blank">klimek@google.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div>On Fri, May 31, 2013 at 4:56 PM, Daniel Jasper <span dir="ltr"><<a href="mailto:djasper@google.com" target="_blank">djasper@google.com</a>></span> wrote:<br>



</div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: djasper<br>
Date: Fri May 31 09:56:29 2013<br>
New Revision: 183009<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=183009&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=183009&view=rev</a><br>
Log:<br>
Improve clang-format's error recovery.<br>
<br>
If a "}" is found inside parenthesis, this is probably a case of<br>
missing parenthesis. This enables continuing to format after stuff code<br>
like:<br>
<br>
class A {<br>
  void f(<br>
};<br>
..<br>
<br>
Modified:<br>
    cfe/trunk/lib/Format/UnwrappedLineParser.cpp<br>
    cfe/trunk/unittests/Format/FormatTest.cpp<br>
<br>
Modified: cfe/trunk/lib/Format/UnwrappedLineParser.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/UnwrappedLineParser.cpp?rev=183009&r1=183008&r2=183009&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/UnwrappedLineParser.cpp?rev=183009&r1=183008&r2=183009&view=diff</a><br>





==============================================================================<br>
--- cfe/trunk/lib/Format/UnwrappedLineParser.cpp (original)<br>
+++ cfe/trunk/lib/Format/UnwrappedLineParser.cpp Fri May 31 09:56:29 2013<br>
@@ -45,6 +45,7 @@ public:<br>
     else<br>
       Line.MustBeDeclaration = true;<br>
   }<br>
+<br>
 private:<br>
   UnwrappedLine &Line;<br>
   std::vector<bool> &Stack;<br>
@@ -81,9 +82,7 @@ public:<br>
     return Token;<br>
   }<br>
<br>
-  virtual unsigned getPosition() {<br>
-    return PreviousTokenSource->getPosition();<br>
-  }<br>
+  virtual unsigned getPosition() { return PreviousTokenSource->getPosition(); }<br>
<br>
   virtual FormatToken *setPosition(unsigned Position) {<br>
     Token = PreviousTokenSource->setPosition(Position);<br>
@@ -279,7 +278,7 @@ void UnwrappedLineParser::calculateBrace<br>
     case tok::kw_for:<br>
     case tok::kw_switch:<br>
     case tok::kw_try:<br>
-      if (!LBraceStack.empty())<br>
+      if (!LBraceStack.empty())<br>
         LBraces[LBraceStack.back()] = BS_Block;<br>
       break;<br>
     default:<br>
@@ -386,9 +385,7 @@ void UnwrappedLineParser::parsePPElse()<br>
   parsePPUnknown();<br>
 }<br>
<br>
-void UnwrappedLineParser::parsePPElIf() {<br>
-  parsePPElse();<br>
-}<br>
+void UnwrappedLineParser::parsePPElIf() { parsePPElse(); }<br>
<br>
 void UnwrappedLineParser::parsePPEndIf() {<br>
   if (!PPStack.empty())<br>
@@ -700,15 +697,21 @@ void UnwrappedLineParser::parseParens()<br>
     case tok::r_paren:<br>
       nextToken();<br>
       return;<br>
+    case tok::r_brace:<br>
+      // A "}" inside parenthesis is an error if there wasn't a matching "{".<br>
+      return;<br>
     case tok::l_brace: {<br>
       if (!tryToParseBracedList()) {<br>
         nextToken();<br>
-        ScopedLineState LineState(*this);<br>
-        ScopedDeclarationState DeclarationState(*Line, DeclarationScopeStack,<br>
-                                                /*MustBeDeclaration=*/ false);<br>
-        Line->Level += 1;<br>
-        parseLevel(/*HasOpeningBrace=*/ true);<br>
-        Line->Level -= 1;<br>
+        {<br>
+          ScopedLineState LineState(*this);<br>
+          ScopedDeclarationState DeclarationState(*Line, DeclarationScopeStack,<br>
+                                                  /*MustBeDeclaration=*/ false);<br>
+          Line->Level += 1;<br>
+          parseLevel(/*HasOpeningBrace=*/ true);<br>
+          Line->Level -= 1;<br>
+        }<br>
+        nextToken();<br></blockquote><div><br></div></div></div><div>Don't we only want to do this if the next token is a '{'?</div><div><div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





       }<br>
       break;<br>
     }<br>
<br>
Modified: cfe/trunk/unittests/Format/FormatTest.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=183009&r1=183008&r2=183009&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=183009&r1=183008&r2=183009&view=diff</a><br>





==============================================================================<br>
--- cfe/trunk/unittests/Format/FormatTest.cpp (original)<br>
+++ cfe/trunk/unittests/Format/FormatTest.cpp Fri May 31 09:56:29 2013<br>
@@ -1901,6 +1901,19 @@ TEST_F(FormatTest, LayoutBlockInsidePare<br>
             "  int i;\n"<br>
             "});",<br>
             format(" functionCall ( {int i;} );"));<br>
+<br>
+  // FIXME: This is bad, find a better and more generic solution.<br>
+  EXPECT_EQ("functionCall({\n"<br>
+            "  int i;\n"<br>
+            "},\n"<br>
+            "             aaaa, bbbb, cccc);",<br>
+            format(" functionCall ( {int i;},  aaaa,   bbbb, cccc);"));<br>
+  verifyFormat(<br>
+      "Aaa({\n"<br>
+      "  int i;\n"<br>
+      "},\n"<br>
+      "    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,\n"<br>
+      "                                     ccccccccccccccccc));");<br>
 }<br>
<br>
 TEST_F(FormatTest, LayoutBlockInsideStatement) {<br>
@@ -3387,7 +3400,9 @@ TEST_F(FormatTest, IncorrectCodeMissingP<br>
<br>
 TEST_F(FormatTest, DoesNotTouchUnwrappedLinesWithErrors) {<br>
   verifyFormat("namespace {\n"<br>
-               "class Foo {  Foo  ( }; }  // comment");<br>
+               "class Foo {  Foo  (\n"<br>
+               "};\n"<br>
+               "} // comment");<br>
 }<br>
<br>
 TEST_F(FormatTest, IncorrectCodeErrorDetection) {<br>
@@ -3460,16 +3475,6 @@ TEST_F(FormatTest, LayoutCxx11Constructo<br>
                  NoSpaces);<br>
 }<br>
<br>
-TEST_F(FormatTest, LayoutTokensFollowingBlockInParentheses) {<br>
-  // FIXME: This is bad, find a better and more generic solution.<br>
-  verifyFormat(<br>
-      "Aaa({\n"<br>
-      "  int i;\n"<br>
-      "},\n"<br>
-      "    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,\n"<br>
-      "                                     ccccccccccccccccc));");<br>
-}<br>
-<br>
 TEST_F(FormatTest, PullTrivialFunctionDefinitionsIntoSingleLine) {<br>
   verifyFormat("void f() { return 42; }");<br>
   verifyFormat("void f() {\n"<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu" target="_blank">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</blockquote></div></div></div><br></div></div>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div></div></div></div>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div></div>