<div dir="ltr">Ah, then probably: "no". But we have to decide carefully for each token. I think it is pretty safe for "}".</div><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 class="h5"><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>