[PATCH] D19106: Fixed a bug in AnnotatedLine::startsWith when there are comments in the line.
Eric Liu via cfe-commits
cfe-commits at lists.llvm.org
Tue Apr 19 12:31:15 PDT 2016
This revision was automatically updated to reflect the committed changes.
Closed by commit rL266803: Fixed a bug in AnnotatedLine::startsWith when there are comments in the line. (authored by ioeric).
Changed prior to commit:
http://reviews.llvm.org/D19106?vs=54240&id=54242#toc
Repository:
rL LLVM
http://reviews.llvm.org/D19106
Files:
cfe/trunk/lib/Format/TokenAnnotator.h
Index: cfe/trunk/lib/Format/TokenAnnotator.h
===================================================================
--- cfe/trunk/lib/Format/TokenAnnotator.h
+++ cfe/trunk/lib/Format/TokenAnnotator.h
@@ -83,7 +83,7 @@
/// \c true if this line starts with the given tokens in order, ignoring
/// comments.
template <typename... Ts> bool startsWith(Ts... Tokens) const {
- return startsWith(First, Tokens...);
+ return startsWithInternal(First, Tokens...);
}
/// \c true if this line looks like a function definition instead of a
@@ -124,15 +124,24 @@
void operator=(const AnnotatedLine &) = delete;
template <typename A, typename... Ts>
- bool startsWith(FormatToken *Tok, A K1) const {
+ 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 startsWith(FormatToken *Tok, A K1, Ts... Tokens) const {
- return startsWith(Tok, K1) && startsWith(Tok->Next, Tokens...);
+ 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...);
}
};
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D19106.54242.patch
Type: text/x-patch
Size: 1734 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20160419/84aa4183/attachment.bin>
More information about the cfe-commits
mailing list