Fix CRLF macro definitions retaining carriage returns. Strip both CRLF bytes from discontinued macro definition lines so the formatter emits one line terminator and converges. Fixes #2607.
diff --git a/verible/verilog/parser/verilog-lexer_test.cc b/verible/verilog/parser/verilog-lexer_test.cc index b1f3788..e23b911 100644 --- a/verible/verilog/parser/verilog-lexer_test.cc +++ b/verible/verilog/parser/verilog-lexer_test.cc
@@ -472,6 +472,12 @@ static std::initializer_list<LexerTestData> kMacroDefineTests = { {{PP_define, "`define"}, {TK_SPACE, " "}, + {PP_Identifier, "A"}, + {TK_SPACE, " "}, + {PP_define_body, "x.y"}, + {TK_NEWLINE, "\r\n"}}, + {{PP_define, "`define"}, + {TK_SPACE, " "}, {PP_Identifier, "FOO"}, {PP_define_body, ""}, {TK_NEWLINE, "\n"}},
diff --git a/verible/verilog/parser/verilog.lex b/verible/verilog/parser/verilog.lex index 759fcc2..3afd55e 100644 --- a/verible/verilog/parser/verilog.lex +++ b/verible/verilog/parser/verilog.lex
@@ -1229,7 +1229,10 @@ yymore(); } {DiscontinuedLine} { - yyless(yyleng-1); /* return \n to input stream */ + if (yyleng >= 2 && yytext[yyleng - 2] == '\r') + yyless(yyleng - 2); /* return \r\n to input stream */ + else + yyless(yyleng - 1); /* return \n to input stream */ UpdateLocation(); yy_pop_state(); /* Return a dummy token so the Location range of the definition (@$) spans