diff options
author | Nico Weber <nicolasweber@gmx.de> | 2013-02-06 16:54:35 +0000 |
---|---|---|
committer | Nico Weber <nicolasweber@gmx.de> | 2013-02-06 16:54:35 +0000 |
commit | 4ed7f3e003c906d9fdb92a9484feeb8ac6e28e2f (patch) | |
tree | b3d8419b6c98f402a12b0ceee2a382acdb7fd741 /lib/Format | |
parent | b3507cd01ead99113eed92a815b826f26f6dbadb (diff) |
Formatter: Correctly detect ObjC message expressions preceded by a comment.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@174521 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Format')
-rw-r--r-- | lib/Format/TokenAnnotator.cpp | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/lib/Format/TokenAnnotator.cpp b/lib/Format/TokenAnnotator.cpp index 12e7eac80e..9c7834f564 100644 --- a/lib/Format/TokenAnnotator.cpp +++ b/lib/Format/TokenAnnotator.cpp @@ -42,12 +42,15 @@ static bool isBinaryOperator(const AnnotatedToken &Tok) { } // Returns the previous token ignoring comments. -static const AnnotatedToken *getPreviousToken(const AnnotatedToken &Tok) { - const AnnotatedToken *PrevToken = Tok.Parent; +static AnnotatedToken *getPreviousToken(AnnotatedToken &Tok) { + AnnotatedToken *PrevToken = Tok.Parent; while (PrevToken != NULL && PrevToken->is(tok::comment)) PrevToken = PrevToken->Parent; return PrevToken; } +static const AnnotatedToken *getPreviousToken(const AnnotatedToken &Tok) { + return getPreviousToken(const_cast<AnnotatedToken &>(Tok)); +} // Returns the next token ignoring comments. static const AnnotatedToken *getNextToken(const AnnotatedToken &Tok) { @@ -181,12 +184,12 @@ public: // ')' or ']'), or it could be the start of an Objective-C method // expression. AnnotatedToken *Left = CurrentToken->Parent; + AnnotatedToken *Parent = getPreviousToken(*Left); bool StartsObjCMethodExpr = - !Left->Parent || Left->Parent->is(tok::colon) || - Left->Parent->is(tok::l_square) || Left->Parent->is(tok::l_paren) || - Left->Parent->is(tok::kw_return) || Left->Parent->is(tok::kw_throw) || - isUnaryOperator(*Left->Parent) || - getBinOpPrecedence(Left->Parent->FormatTok.Tok.getKind(), true, true) > + !Parent || Parent->is(tok::colon) || Parent->is(tok::l_square) || + Parent->is(tok::l_paren) || Parent->is(tok::kw_return) || + Parent->is(tok::kw_throw) || isUnaryOperator(*Parent) || + getBinOpPrecedence(Parent->FormatTok.Tok.getKind(), true, true) > prec::Unknown; if (StartsObjCMethodExpr) { @@ -208,10 +211,10 @@ public: // determineStarAmpUsage() thinks that '*' '[' is allocating an // array of pointers, but if '[' starts a selector then '*' is a // binary operator. - if (Left->Parent != NULL && - (Left->Parent->is(tok::star) || Left->Parent->is(tok::amp)) && - Left->Parent->Type == TT_PointerOrReference) - Left->Parent->Type = TT_BinaryOperator; + if (Parent != NULL && + (Parent->is(tok::star) || Parent->is(tok::amp)) && + Parent->Type == TT_PointerOrReference) + Parent->Type = TT_BinaryOperator; } Left->MatchingParen = CurrentToken; CurrentToken->MatchingParen = Left; |