Author: Björn Schäpers Date: 2022-02-20T22:33:27+01:00 New Revision: 9b139923bc6634c2d1667c54000debe00e7858f4
URL: https://github.com/llvm/llvm-project/commit/9b139923bc6634c2d1667c54000debe00e7858f4 DIFF: https://github.com/llvm/llvm-project/commit/9b139923bc6634c2d1667c54000debe00e7858f4.diff LOG: [clang-format][NFC] Return early in ContinuationIndenter::mustBreak We can return as early as possible and only calculate IsComparison if we really need to. Also cache getPrecedence() instead of querying it at most 4 times. Differential Revision: https://reviews.llvm.org/D119923 Added: Modified: clang/lib/Format/ContinuationIndenter.cpp Removed: ################################################################################ diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index a49e0f307cef..f4a755268eae 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -448,26 +448,31 @@ bool ContinuationIndenter::mustBreak(const LineState &State) { // current style uses wrapping before or after operators for the given // operator. if (Previous.is(TT_BinaryOperator) && Current.CanBreakBefore) { - // If we need to break somewhere inside the LHS of a binary expression, we - // should also break after the operator. Otherwise, the formatting would - // hide the operator precedence, e.g. in: - // if (aaaaaaaaaaaaaa == - // bbbbbbbbbbbbbb && c) {.. - // For comparisons, we only apply this rule, if the LHS is a binary - // expression itself as otherwise, the line breaks seem superfluous. - // We need special cases for ">>" which we have split into two ">" while - // lexing in order to make template parsing easier. - bool IsComparison = (Previous.getPrecedence() == prec::Relational || - Previous.getPrecedence() == prec::Equality || - Previous.getPrecedence() == prec::Spaceship) && - Previous.Previous && - Previous.Previous->isNot(TT_BinaryOperator); // For >>. - bool LHSIsBinaryExpr = - Previous.Previous && Previous.Previous->EndsBinaryExpression; - if ((!IsComparison || LHSIsBinaryExpr) && !Current.isTrailingComment() && - Previous.getPrecedence() != prec::Assignment && - CurrentState.BreakBeforeParameter) - return true; + const auto PreviousPrecedence = Previous.getPrecedence(); + if (PreviousPrecedence != prec::Assignment && + CurrentState.BreakBeforeParameter && !Current.isTrailingComment()) { + const bool LHSIsBinaryExpr = + Previous.Previous && Previous.Previous->EndsBinaryExpression; + if (LHSIsBinaryExpr) + return true; + // If we need to break somewhere inside the LHS of a binary expression, we + // should also break after the operator. Otherwise, the formatting would + // hide the operator precedence, e.g. in: + // if (aaaaaaaaaaaaaa == + // bbbbbbbbbbbbbb && c) {.. + // For comparisons, we only apply this rule, if the LHS is a binary + // expression itself as otherwise, the line breaks seem superfluous. + // We need special cases for ">>" which we have split into two ">" while + // lexing in order to make template parsing easier. + const bool IsComparison = + (PreviousPrecedence == prec::Relational || + PreviousPrecedence == prec::Equality || + PreviousPrecedence == prec::Spaceship) && + Previous.Previous && + Previous.Previous->isNot(TT_BinaryOperator); // For >>. + if (!IsComparison) + return true; + } } else if (Current.is(TT_BinaryOperator) && Current.CanBreakBefore && CurrentState.BreakBeforeParameter) { return true; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits