On Wed, May 8, 2013 at 7:58 AM, Daniel Jasper <[email protected]> wrote: > Author: djasper > Date: Wed May 8 09:58:20 2013 > New Revision: 181438 > > URL: http://llvm.org/viewvc/llvm-project?rev=181438&view=rev > Log: > Fix formatting of pointers to members. > > Before: int(S::*func)(void *); > After: int (S::*func)(void *);
These & the test cases are only pointers to member functions - did you want to test/implement pointers to member variables too? eg: int S::*var; > > Modified: > cfe/trunk/lib/Format/TokenAnnotator.cpp > cfe/trunk/lib/Format/TokenAnnotator.h > cfe/trunk/unittests/Format/FormatTest.cpp > > Modified: cfe/trunk/lib/Format/TokenAnnotator.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/TokenAnnotator.cpp?rev=181438&r1=181437&r2=181438&view=diff > ============================================================================== > --- cfe/trunk/lib/Format/TokenAnnotator.cpp (original) > +++ cfe/trunk/lib/Format/TokenAnnotator.cpp Wed May 8 09:58:20 2013 > @@ -173,6 +173,9 @@ private: > } > if (CurrentToken->isOneOf(tok::r_square, tok::r_brace)) > return false; > + if (CurrentToken->Parent->Type == TT_PointerOrReference && > + CurrentToken->Parent->Parent->isOneOf(tok::l_paren, > tok::coloncolon)) > + Left->DefinesFunctionType = true; > updateParameterCount(Left, CurrentToken); > if (!consumeToken()) > return false; > @@ -1025,6 +1028,9 @@ bool TokenAnnotator::spaceRequiredBetwee > return Left.FormatTok.Tok.isLiteral() || > ((Left.Type != TT_PointerOrReference) && Left.isNot(tok::l_paren) > && > !Style.PointerBindsToType); > + if (Right.DefinesFunctionType && > + (Left.Type != TT_PointerOrReference || Style.PointerBindsToType)) > + return true; > if (Left.Type == TT_PointerOrReference) > return Right.FormatTok.Tok.isLiteral() || > ((Right.Type != TT_PointerOrReference) && > @@ -1091,13 +1097,6 @@ bool TokenAnnotator::spaceRequiredBefore > if (Tok.is(tok::colon)) > return !Line.First.isOneOf(tok::kw_case, tok::kw_default) && > Tok.getNextNoneComment() != NULL && Tok.Type != TT_ObjCMethodExpr; > - if (Tok.is(tok::l_paren) && !Tok.Children.empty() && > - Tok.Children[0].Type == TT_PointerOrReference && > - !Tok.Children[0].Children.empty() && > - Tok.Children[0].Children[0].isNot(tok::r_paren) && > - Tok.Parent->isNot(tok::l_paren) && > - (Tok.Parent->Type != TT_PointerOrReference || > Style.PointerBindsToType)) > - return true; > if (Tok.Parent->Type == TT_UnaryOperator || Tok.Parent->Type == > TT_CastRParen) > return false; > if (Tok.Type == TT_UnaryOperator) > > Modified: cfe/trunk/lib/Format/TokenAnnotator.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/TokenAnnotator.h?rev=181438&r1=181437&r2=181438&view=diff > ============================================================================== > --- cfe/trunk/lib/Format/TokenAnnotator.h (original) > +++ cfe/trunk/lib/Format/TokenAnnotator.h Wed May 8 09:58:20 2013 > @@ -75,7 +75,7 @@ public: > CanBreakBefore(false), MustBreakBefore(false), > ClosesTemplateDeclaration(false), MatchingParen(NULL), > ParameterCount(0), BindingStrength(0), SplitPenalty(0), > - LongestObjCSelectorName(0), Parent(NULL), > + LongestObjCSelectorName(0), DefinesFunctionType(false), Parent(NULL), > FakeRParens(0), LastInChainOfCalls(false), > PartOfMultiVariableDeclStmt(false), NoMoreTokensOnLevel(false) {} > > @@ -164,6 +164,9 @@ public: > /// definition or call, this contains the length of the longest name. > unsigned LongestObjCSelectorName; > > + /// \brief \c true if this is a "(" that starts a function type definition. > + bool DefinesFunctionType; > + > std::vector<AnnotatedToken> Children; > AnnotatedToken *Parent; > > > Modified: cfe/trunk/unittests/Format/FormatTest.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=181438&r1=181437&r2=181438&view=diff > ============================================================================== > --- cfe/trunk/unittests/Format/FormatTest.cpp (original) > +++ cfe/trunk/unittests/Format/FormatTest.cpp Wed May 8 09:58:20 2013 > @@ -2417,14 +2417,15 @@ TEST_F(FormatTest, UnderstandsBinaryOper > > TEST_F(FormatTest, UnderstandsPointersToMembers) { > verifyFormat("int A::*x;"); > - // FIXME: Recognize pointers to member functions. > - //verifyFormat("int (S::*func)(void *);"); > - verifyFormat("int(S::*func)(void *);"); > - verifyFormat("(a->*f)();"); > - verifyFormat("a->*x;"); > - verifyFormat("(a.*f)();"); > - verifyFormat("((*a).*f)();"); > - verifyFormat("a.*x;"); > + verifyFormat("int (S::*func)(void *);"); > + verifyFormat("typedef bool (Class::*Member)() const;"); > + verifyFormat("void f() {\n" > + " (a->*f)();\n" > + " a->*x;\n" > + " (a.*f)();\n" > + " ((*a).*f)();\n" > + " a.*x;\n" > + "}"); > } > > TEST_F(FormatTest, UnderstandsUnaryOperators) { > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
