djasper added inline comments.
================
Comment at: lib/Format/WhitespaceManager.cpp:413
+
+ while (Param && !Param->is(tok::l_paren)) {
+ if (!Param->is(tok::identifier) && !Param->is(tok::comma))
----------------
enyquist wrote:
> djasper wrote:
> > I think you should be able to use Current.MatchingParen here.
> Hmm, I couldn't make this work... I just replaced this line with
>
> while (Param && Param != Current->MatchingParen)
>
> But it must not be doing what I think it's doing, since it made some tests
> fail.
> Mind you, my C-brain might be taking over here, please let me know if I'm
> using MatchingParen incorrectly
You shouldn't need a while loop. Just:
if (!Current->MatchingParen || !Current->MatchingParen->Previous)
return false;
Param = Param->MatchingParen->Previous;
And with that, I think you can simplify all these methods a bit:
static bool endsPPIdentifier(const FormatToken *Current) {
if (!Current->Next || Current->Next->SpacesRequiredBefore == 0)
return false;
// If Current is a "(", skip past the parameter list.
if (Current->is(tok::r_paren)) {
if (!Current->MatchingParen || !Current->MatchingParen->Previous)
return false;
Current = Current->MatchingParen->Previous;
}
const FormatToken *Keyword = Current->Previous;
if (!Keyword || !Keyword->is(tok::pp_define))
return false;
return Current->is(tok::identifier);
}
Does that work? If so, I'd even suggest inlining this code directly into the
lambda instead of pulling out a function.
================
Comment at: lib/Format/WhitespaceManager.cpp:401
+ return Current->is(tok::identifier) && Current->Next &&
+ Current->Next->SpacesRequiredBefore == SpacesRequiredBefore;
+}
----------------
Note that this is comparing an unsigned with a bool, which might not work as
you expect. And especially, there are tokens for which we set
SpacesRequiredBefore to 2. Also I wonder whether we should check the
SpacesRequiredBefore of the r_paren in a function like macro, i.e. in
#define a(x) (x)
We should check that a space is required between "a(x)" and "(x)". Please take
a look at my longer code snippet below where I am proposing an alternative
solution.
https://reviews.llvm.org/D28462
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits