diff --git a/clang/lib/Format/UnwrappedLineParser.h b/clang/lib/Format/UnwrappedLineParser.h --- a/clang/lib/Format/UnwrappedLineParser.h +++ b/clang/lib/Format/UnwrappedLineParser.h @@ -125,6 +125,7 @@ bool handleCppAttributes(); FormatToken *parseIfThenElse(IfStmtKind *IfKind, bool KeepBraces = false); void parseTryCatch(); + void parseLoopBody(bool TryRemoveBraces, bool WrapRightBrace); void parseForOrWhileLoop(); void parseDoWhile(); void parseLabel(bool LeftAlignLabel = false); diff --git a/clang/lib/Format/UnwrappedLineParser.cpp b/clang/lib/Format/UnwrappedLineParser.cpp --- a/clang/lib/Format/UnwrappedLineParser.cpp +++ b/clang/lib/Format/UnwrappedLineParser.cpp @@ -2713,6 +2713,29 @@ } while (!eof()); } +void UnwrappedLineParser::parseLoopBody(bool TryRemoveBraces, + bool WrapRightBrace) { + keepAncestorBraces(); + + if (FormatTok->is(tok::l_brace)) { + FormatToken *LeftBrace = FormatTok; + CompoundStatementIndenter Indenter(this, Style, Line->Level); + parseBlock(); + if (TryRemoveBraces) { + assert(!NestedTooDeep.empty()); + if (!NestedTooDeep.back()) + markOptionalBraces(LeftBrace); + } + if (WrapRightBrace) + addUnwrappedLine(); + } else { + parseUnbracedBody(); + } + + if (TryRemoveBraces) + NestedTooDeep.pop_back(); +} + void UnwrappedLineParser::parseForOrWhileLoop() { assert(FormatTok->isOneOf(tok::kw_for, tok::kw_while, TT_ForEachMacro) && "'for', 'while' or foreach macro expected"); @@ -2731,43 +2754,14 @@ parseParens(); } - keepAncestorBraces(); - - if (FormatTok->is(tok::l_brace)) { - FormatToken *LeftBrace = FormatTok; - CompoundStatementIndenter Indenter(this, Style, Line->Level); - parseBlock(); - if (Style.RemoveBracesLLVM) { - assert(!NestedTooDeep.empty()); - if (!NestedTooDeep.back()) - markOptionalBraces(LeftBrace); - } - addUnwrappedLine(); - } else { - parseUnbracedBody(); - } - - if (Style.RemoveBracesLLVM) - NestedTooDeep.pop_back(); + parseLoopBody(Style.RemoveBracesLLVM, true); } void UnwrappedLineParser::parseDoWhile() { assert(FormatTok->is(tok::kw_do) && "'do' expected"); nextToken(); - keepAncestorBraces(); - - if (FormatTok->is(tok::l_brace)) { - CompoundStatementIndenter Indenter(this, Style, Line->Level); - parseBlock(); - if (Style.BraceWrapping.BeforeWhile) - addUnwrappedLine(); - } else { - parseUnbracedBody(); - } - - if (Style.RemoveBracesLLVM) - NestedTooDeep.pop_back(); + parseLoopBody(false, Style.BraceWrapping.BeforeWhile); // FIXME: Add error handling. if (!FormatTok->is(tok::kw_while)) {