Sorry, meant '}'.
On Mon, Jun 3, 2013 at 5:41 PM, Daniel Jasper <[email protected]> wrote: > I don't understand that. '{' would not be an error .. > > > On Mon, Jun 3, 2013 at 1:34 PM, Manuel Klimek <[email protected]> wrote: > >> On Fri, May 31, 2013 at 4:56 PM, Daniel Jasper <[email protected]>wrote: >> >>> Author: djasper >>> Date: Fri May 31 09:56:29 2013 >>> New Revision: 183009 >>> >>> URL: http://llvm.org/viewvc/llvm-project?rev=183009&view=rev >>> Log: >>> Improve clang-format's error recovery. >>> >>> If a "}" is found inside parenthesis, this is probably a case of >>> missing parenthesis. This enables continuing to format after stuff code >>> like: >>> >>> class A { >>> void f( >>> }; >>> .. >>> >>> Modified: >>> cfe/trunk/lib/Format/UnwrappedLineParser.cpp >>> cfe/trunk/unittests/Format/FormatTest.cpp >>> >>> Modified: cfe/trunk/lib/Format/UnwrappedLineParser.cpp >>> URL: >>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/UnwrappedLineParser.cpp?rev=183009&r1=183008&r2=183009&view=diff >>> >>> ============================================================================== >>> --- cfe/trunk/lib/Format/UnwrappedLineParser.cpp (original) >>> +++ cfe/trunk/lib/Format/UnwrappedLineParser.cpp Fri May 31 09:56:29 2013 >>> @@ -45,6 +45,7 @@ public: >>> else >>> Line.MustBeDeclaration = true; >>> } >>> + >>> private: >>> UnwrappedLine &Line; >>> std::vector<bool> &Stack; >>> @@ -81,9 +82,7 @@ public: >>> return Token; >>> } >>> >>> - virtual unsigned getPosition() { >>> - return PreviousTokenSource->getPosition(); >>> - } >>> + virtual unsigned getPosition() { return >>> PreviousTokenSource->getPosition(); } >>> >>> virtual FormatToken *setPosition(unsigned Position) { >>> Token = PreviousTokenSource->setPosition(Position); >>> @@ -279,7 +278,7 @@ void UnwrappedLineParser::calculateBrace >>> case tok::kw_for: >>> case tok::kw_switch: >>> case tok::kw_try: >>> - if (!LBraceStack.empty()) >>> + if (!LBraceStack.empty()) >>> LBraces[LBraceStack.back()] = BS_Block; >>> break; >>> default: >>> @@ -386,9 +385,7 @@ void UnwrappedLineParser::parsePPElse() >>> parsePPUnknown(); >>> } >>> >>> -void UnwrappedLineParser::parsePPElIf() { >>> - parsePPElse(); >>> -} >>> +void UnwrappedLineParser::parsePPElIf() { parsePPElse(); } >>> >>> void UnwrappedLineParser::parsePPEndIf() { >>> if (!PPStack.empty()) >>> @@ -700,15 +697,21 @@ void UnwrappedLineParser::parseParens() >>> case tok::r_paren: >>> nextToken(); >>> return; >>> + case tok::r_brace: >>> + // A "}" inside parenthesis is an error if there wasn't a >>> matching "{". >>> + return; >>> case tok::l_brace: { >>> if (!tryToParseBracedList()) { >>> nextToken(); >>> - ScopedLineState LineState(*this); >>> - ScopedDeclarationState DeclarationState(*Line, >>> DeclarationScopeStack, >>> - /*MustBeDeclaration=*/ >>> false); >>> - Line->Level += 1; >>> - parseLevel(/*HasOpeningBrace=*/ true); >>> - Line->Level -= 1; >>> + { >>> + ScopedLineState LineState(*this); >>> + ScopedDeclarationState DeclarationState(*Line, >>> DeclarationScopeStack, >>> + >>> /*MustBeDeclaration=*/ false); >>> + Line->Level += 1; >>> + parseLevel(/*HasOpeningBrace=*/ true); >>> + Line->Level -= 1; >>> + } >>> + nextToken(); >>> >> >> Don't we only want to do this if the next token is a '{'? >> >> >>> } >>> break; >>> } >>> >>> Modified: cfe/trunk/unittests/Format/FormatTest.cpp >>> URL: >>> http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=183009&r1=183008&r2=183009&view=diff >>> >>> ============================================================================== >>> --- cfe/trunk/unittests/Format/FormatTest.cpp (original) >>> +++ cfe/trunk/unittests/Format/FormatTest.cpp Fri May 31 09:56:29 2013 >>> @@ -1901,6 +1901,19 @@ TEST_F(FormatTest, LayoutBlockInsidePare >>> " int i;\n" >>> "});", >>> format(" functionCall ( {int i;} );")); >>> + >>> + // FIXME: This is bad, find a better and more generic solution. >>> + EXPECT_EQ("functionCall({\n" >>> + " int i;\n" >>> + "},\n" >>> + " aaaa, bbbb, cccc);", >>> + format(" functionCall ( {int i;}, aaaa, bbbb, cccc);")); >>> + verifyFormat( >>> + "Aaa({\n" >>> + " int i;\n" >>> + "},\n" >>> + " >>> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,\n" >>> + " ccccccccccccccccc));"); >>> } >>> >>> TEST_F(FormatTest, LayoutBlockInsideStatement) { >>> @@ -3387,7 +3400,9 @@ TEST_F(FormatTest, IncorrectCodeMissingP >>> >>> TEST_F(FormatTest, DoesNotTouchUnwrappedLinesWithErrors) { >>> verifyFormat("namespace {\n" >>> - "class Foo { Foo ( }; } // comment"); >>> + "class Foo { Foo (\n" >>> + "};\n" >>> + "} // comment"); >>> } >>> >>> TEST_F(FormatTest, IncorrectCodeErrorDetection) { >>> @@ -3460,16 +3475,6 @@ TEST_F(FormatTest, LayoutCxx11Constructo >>> NoSpaces); >>> } >>> >>> -TEST_F(FormatTest, LayoutTokensFollowingBlockInParentheses) { >>> - // FIXME: This is bad, find a better and more generic solution. >>> - verifyFormat( >>> - "Aaa({\n" >>> - " int i;\n" >>> - "},\n" >>> - " >>> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,\n" >>> - " ccccccccccccccccc));"); >>> -} >>> - >>> TEST_F(FormatTest, PullTrivialFunctionDefinitionsIntoSingleLine) { >>> verifyFormat("void f() { return 42; }"); >>> verifyFormat("void f() {\n" >>> >>> >>> _______________________________________________ >>> cfe-commits mailing list >>> [email protected] >>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >>> >> >> >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
