diff --git a/clang/lib/Format/TokenAnnotator.h b/clang/lib/Format/TokenAnnotator.h index 58e2cf79f488fa..05a6daa87d8034 100644 --- a/clang/lib/Format/TokenAnnotator.h +++ b/clang/lib/Format/TokenAnnotator.h @@ -156,6 +156,11 @@ class AnnotatedLine { return First->is(tok::comment) ? First->getNextNonComment() : First; } + FormatToken *getLastNonComment() const { + assert(Last); + return Last->is(tok::comment) ? Last->getPreviousNonComment() : Last; + } + FormatToken *First; FormatToken *Last; diff --git a/clang/lib/Format/UnwrappedLineFormatter.cpp b/clang/lib/Format/UnwrappedLineFormatter.cpp index 40730cd53529ed..b4930c2e4621dc 100644 --- a/clang/lib/Format/UnwrappedLineFormatter.cpp +++ b/clang/lib/Format/UnwrappedLineFormatter.cpp @@ -346,14 +346,10 @@ class LineJoiner { return false; // Check if the found line starts a record. - const FormatToken *LastNonComment = Line->Last; + const auto *LastNonComment = Line->getLastNonComment(); + // There must be another token (usually `{`), because we chose a + // non-PPDirective and non-comment line that has a smaller level. assert(LastNonComment); - if (LastNonComment->is(tok::comment)) { - LastNonComment = LastNonComment->getPreviousNonComment(); - // There must be another token (usually `{`), because we chose a - // non-PPDirective and non-comment line that has a smaller level. - assert(LastNonComment); - } return isRecordLBrace(*LastNonComment); } } @@ -363,12 +359,9 @@ class LineJoiner { bool MergeShortFunctions = ShouldMergeShortFunctions(); - const FormatToken *FirstNonComment = TheLine->First; - if (FirstNonComment->is(tok::comment)) { - FirstNonComment = FirstNonComment->getNextNonComment(); - if (!FirstNonComment) - return 0; - } + const auto *FirstNonComment = TheLine->getFirstNonComment(); + if (!FirstNonComment) + return 0; // FIXME: There are probably cases where we should use FirstNonComment // instead of TheLine->First.