[clang] 9b13992 - [clang-format][NFC] Return early in ContinuationIndenter::mustBreak
Björn Schäpers via cfe-commits
cfe-commits at lists.llvm.org
Sun Feb 20 13:35:14 PST 2022
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;
More information about the cfe-commits
mailing list