[cfe-commits] r170875 - /cfe/trunk/lib/Format/Format.cpp

David Blaikie dblaikie at gmail.com
Fri Dec 21 11:53:48 PST 2012


On Fri, Dec 21, 2012 at 2:20 AM, Daniel Jasper <djasper at google.com> wrote:
> Author: djasper
> Date: Fri Dec 21 04:20:02 2012
> New Revision: 170875
>
> URL: http://llvm.org/viewvc/llvm-project?rev=170875&view=rev
> Log:
> Use OperatorPrecedence.h in clang-format
>
> No indented functional changes other than handling more operators
> correctly.

That sounds like a testable intended functional change, or am I
missing something?

>
> Modified:
>     cfe/trunk/lib/Format/Format.cpp
>
> Modified: cfe/trunk/lib/Format/Format.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/Format.cpp?rev=170875&r1=170874&r2=170875&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Format/Format.cpp (original)
> +++ cfe/trunk/lib/Format/Format.cpp Fri Dec 21 04:20:02 2012
> @@ -19,6 +19,7 @@
>  #include "clang/Format/Format.h"
>  #include "UnwrappedLineParser.h"
>  #include "clang/Basic/SourceManager.h"
> +#include "clang/Basic/OperatorPrecedence.h"
>  #include "clang/Lex/Lexer.h"
>
>  #include <string>
> @@ -650,11 +651,12 @@
>        TokenAnnotation &Annotation = Annotations[i];
>        const FormatToken &Tok = Line.Tokens[i];
>
> -      if (Tok.Tok.is(tok::equal) || Tok.Tok.is(tok::plusequal) ||
> -          Tok.Tok.is(tok::minusequal) || Tok.Tok.is(tok::starequal) ||
> -          Tok.Tok.is(tok::slashequal))
> +      if (getBinOpPrecedence(Tok.Tok.getKind(), true, true) == prec::Assignment)
>          AssignmentEncountered = true;
>
> +      if (Annotation.Type != TokenAnnotation::TT_Unknown)
> +        continue;
> +
>        if (Tok.Tok.is(tok::star) || Tok.Tok.is(tok::amp)) {
>          Annotation.Type = determineStarAmpUsage(i, AssignmentEncountered);
>        } else if (Tok.Tok.is(tok::minus) || Tok.Tok.is(tok::plus)) {
> @@ -663,9 +665,9 @@
>          Annotation.Type = determineIncrementUsage(i);
>        } else if (Tok.Tok.is(tok::exclaim)) {
>          Annotation.Type = TokenAnnotation::TT_UnaryOperator;
> -      } else if (isBinaryOperator(Line.Tokens[i]))
> +      } else if (isBinaryOperator(Line.Tokens[i])) {
>          Annotation.Type = TokenAnnotation::TT_BinaryOperator;
> -      else if (Tok.Tok.is(tok::comment)) {
> +      } else if (Tok.Tok.is(tok::comment)) {
>          StringRef Data(SourceMgr.getCharacterData(Tok.Tok.getLocation()),
>                         Tok.Tok.getLength());
>          if (Data.startswith("//"))
> @@ -677,23 +679,8 @@
>    }
>
>    bool isBinaryOperator(const FormatToken &Tok) {
> -    switch (Tok.Tok.getKind()) {
> -    case tok::equal:
> -    case tok::equalequal:
> -    case tok::exclaimequal:
> -    case tok::star:
> -      //case tok::amp:
> -    case tok::plus:
> -    case tok::slash:
> -    case tok::minus:
> -    case tok::ampamp:
> -    case tok::pipe:
> -    case tok::pipepipe:
> -    case tok::percent:
> -      return true;
> -    default:
> -      return false;
> -    }
> +    // Comma is a binary operator, but does not behave a such wrt. formatting.
> +    return getBinOpPrecedence(Tok.Tok.getKind(), true, true) > prec::Comma;
>    }
>
>    TokenAnnotation::TokenType determineStarAmpUsage(unsigned Index,
> @@ -796,12 +783,11 @@
>      if (Right.Tok.is(tok::r_paren) || Right.Tok.is(tok::l_brace) ||
>          Right.Tok.is(tok::comment) || Right.Tok.is(tok::greater))
>        return false;
> -    if (isBinaryOperator(Left) || Right.Tok.is(tok::lessless) ||
> -        Right.Tok.is(tok::arrow) || Right.Tok.is(tok::period))
> -      return true;
> -    return Right.Tok.is(tok::colon) || Left.Tok.is(tok::comma) || Left.Tok.is(
> -        tok::semi) || Left.Tok.is(tok::equal) || Left.Tok.is(tok::ampamp) ||
> -        Left.Tok.is(tok::pipepipe) || Left.Tok.is(tok::l_brace) ||
> +    return (isBinaryOperator(Left) && Left.Tok.isNot(tok::lessless)) ||
> +        Left.Tok.is(tok::comma) || Right.Tok.is(tok::lessless) ||
> +        Right.Tok.is(tok::arrow) || Right.Tok.is(tok::period) ||
> +        Right.Tok.is(tok::colon) || Left.Tok.is(tok::semi) ||
> +        Left.Tok.is(tok::l_brace) ||
>          (Left.Tok.is(tok::l_paren) && !Right.Tok.is(tok::r_paren));
>    }
>
>
>
> _______________________________________________
> 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