r181438 - Fix formatting of pointers to members.

David Blaikie dblaikie at gmail.com
Wed May 8 10:34:20 PDT 2013


On Wed, May 8, 2013 at 7:58 AM, Daniel Jasper <djasper at google.com> 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
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits



More information about the cfe-commits mailing list