|
@@ -83,7 +83,7 @@ public:
|
|
|
/// \c true if this line starts with the given tokens in order, ignoring
|
|
|
/// comments.
|
|
|
template <typename... Ts> bool startsWith(Ts... Tokens) const {
|
|
|
- return startsWithInternal(First, Tokens...);
|
|
|
+ return First && First->startsSequence(Tokens...);
|
|
|
}
|
|
|
|
|
|
/// \c true if this line ends with the given tokens in reversed order,
|
|
@@ -91,7 +91,7 @@ public:
|
|
|
/// For example, given tokens [T1, T2, T3, ...], the function returns true if
|
|
|
/// this line is like "... T3 T2 T1".
|
|
|
template <typename... Ts> bool endsWith(Ts... Tokens) const {
|
|
|
- return endsWithInternal(Last, Tokens...);
|
|
|
+ return Last && Last->endsSequence(Tokens...);
|
|
|
}
|
|
|
|
|
|
/// \c true if this line looks like a function definition instead of a
|
|
@@ -130,44 +130,6 @@ private:
|
|
|
// Disallow copying.
|
|
|
AnnotatedLine(const AnnotatedLine &) = delete;
|
|
|
void operator=(const AnnotatedLine &) = delete;
|
|
|
-
|
|
|
- template <typename A, typename... Ts>
|
|
|
- bool startsWithInternal(const FormatToken *Tok, A K1) const {
|
|
|
- // Even though we skip comments in the outer `startWithInternal` function,
|
|
|
- // this loop is still necessary if it is invoked by the public interface
|
|
|
- // `startsWith`.
|
|
|
- while (Tok && Tok->is(tok::comment))
|
|
|
- Tok = Tok->Next;
|
|
|
- return Tok && Tok->is(K1);
|
|
|
- }
|
|
|
-
|
|
|
- template <typename A, typename... Ts>
|
|
|
- bool startsWithInternal(const FormatToken *Tok, A K1, Ts... Tokens) const {
|
|
|
- // Skip comments before calling `startsWithInternal(Tok, K1)` so that the
|
|
|
- // second call to `startsWithInternal` takes the correct `Tok->Next`, which
|
|
|
- // should be the next token of the token checked in the first call.
|
|
|
- while (Tok && Tok->is(tok::comment))
|
|
|
- Tok = Tok->Next;
|
|
|
- return Tok && startsWithInternal(Tok, K1) &&
|
|
|
- startsWithInternal(Tok->Next, Tokens...);
|
|
|
- }
|
|
|
-
|
|
|
- template <typename A, typename... Ts>
|
|
|
- bool endsWithInternal(const FormatToken *Tok, A K1) const {
|
|
|
- // See the comments above in `startsWithInternal(Tok, K1)`.
|
|
|
- while (Tok && Tok->is(tok::comment))
|
|
|
- Tok = Tok->Previous;
|
|
|
- return Tok && Tok->is(K1);
|
|
|
- }
|
|
|
-
|
|
|
- template <typename A, typename... Ts>
|
|
|
- bool endsWithInternal(const FormatToken *Tok, A K1, Ts... Tokens) const {
|
|
|
- // See the comments above in `startsWithInternal(Tok, K1, Tokens)`.
|
|
|
- while (Tok && Tok->is(tok::comment))
|
|
|
- Tok = Tok->Previous;
|
|
|
- return Tok && endsWithInternal(Tok, K1) &&
|
|
|
- endsWithInternal(Tok->Previous, Tokens...);
|
|
|
- }
|
|
|
};
|
|
|
|
|
|
/// \brief Determines extra information about the tokens comprising an
|