r178261 - Fixed handling of comments before preprocessor directives.

Manuel Klimek klimek at google.com
Mon Apr 1 09:21:56 PDT 2013


On Thu, Mar 28, 2013 at 7:40 PM, Alexander Kornienko <alexfh at google.com>wrote:

> Author: alexfh
> Date: Thu Mar 28 13:40:55 2013
> New Revision: 178261
>
> URL: http://llvm.org/viewvc/llvm-project?rev=178261&view=rev
> Log:
> Fixed handling of comments before preprocessor directives.
>
> Comments before preprocessor directives used to be stored with
> InPPDirective
> flag set, which prevented correct comment splitting in this case. Fixed by
> flushing comments before switching on InPPDirective. Added a new test and
> fixed
> one of the existing tests.
>
>
> Modified:
>     cfe/trunk/lib/Format/UnwrappedLineParser.cpp
>     cfe/trunk/unittests/Format/FormatTest.cpp
>
> Modified: cfe/trunk/lib/Format/UnwrappedLineParser.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/UnwrappedLineParser.cpp?rev=178261&r1=178260&r2=178261&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Format/UnwrappedLineParser.cpp (original)
> +++ cfe/trunk/lib/Format/UnwrappedLineParser.cpp Thu Mar 28 13:40:55 2013
> @@ -822,6 +822,7 @@ void UnwrappedLineParser::readToken() {
>      while (!Line->InPPDirective && FormatTok.Tok.is(tok::hash) &&
>             ((FormatTok.NewlinesBefore > 0 &&
> FormatTok.HasUnescapedNewline) ||
>              FormatTok.IsFirst)) {
>

Please add a comment indicating why we need this.


> +      flushComments(FormatTok.NewlinesBefore > 0);
>        // If there is an unfinished unwrapped line, we flush the
> preprocessor
>        // directives only after that unwrapped line was finished later.
>        bool SwitchToPreprocessorLines =
>
> Modified: cfe/trunk/unittests/Format/FormatTest.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=178261&r1=178260&r2=178261&view=diff
>
> ==============================================================================
> --- cfe/trunk/unittests/Format/FormatTest.cpp (original)
> +++ cfe/trunk/unittests/Format/FormatTest.cpp Thu Mar 28 13:40:55 2013
> @@ -699,6 +699,13 @@ TEST_F(FormatTest, SplitsLongCxxComments
>        "//Don't add leading\n"
>        "//whitespace",
>        format("//Don't add leading whitespace",
> getLLVMStyleWithColumns(20)));
> +  EXPECT_EQ("// A comment before\n"
> +            "// a macro\n"
> +            "// definition\n"
> +            "#define a b",
> +            format("// A comment before a macro definition\n"
> +                   "#define a b",
> +                   getLLVMStyleWithColumns(20)));
>  }
>
>  TEST_F(FormatTest, SplitsLongLinesInComments) {
> @@ -1203,13 +1210,13 @@ TEST_F(FormatTest, IndentsPPDirectiveInR
>  }
>
>  TEST_F(FormatTest, HandlePreprocessorDirectiveContext) {
> -  EXPECT_EQ("// some comment\n"
> +  EXPECT_EQ("// somecomment\n"
>

What's the reason for this part of the change?


>              "#include \"a.h\"\n"
>              "#define A(  \\\n"
>              "    A, B)\n"
>              "#include \"b.h\"\n"
>              "// somecomment\n",
> -            format("  // some comment\n"
> +            format("  // somecomment\n"
>                     "  #include \"a.h\"\n"
>                     "#define A(A,\\\n"
>                     "    B)\n"
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20130401/6b38b1e2/attachment.html>


More information about the cfe-commits mailing list