From 0c1e184cb782ce00a6043649ff15dd6dbe9caf22 Mon Sep 17 00:00:00 2001 From: Wilson Snyder Date: Mon, 7 May 2012 08:58:29 -0400 Subject: [PATCH] Fix newlines in radix values, bug507. --- Changes | 3 +++ src/verilog.l | 17 +++++++++-------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/Changes b/Changes index e31bc5a52..bd80bbc77 100644 --- a/Changes +++ b/Changes @@ -29,6 +29,9 @@ indicates the contributor was also the author of the fix; Thanks! **** Fix imports causing symbol table error, bug490. [Alex Solomatnikov] +**** Fix newlines in radix values, bug507. [Walter Lavino] + + * Verilator 3.833 2012/04/15 *** Support += and -= in standard for loops, bug463. [Alex Solomatnikov] diff --git a/src/verilog.l b/src/verilog.l index 3bc81dbfc..88036a3c0 100644 --- a/src/verilog.l +++ b/src/verilog.l @@ -43,6 +43,7 @@ extern void yyerrorf(const char* format, ...); //====================================================================== #define NEXTLINE() {PARSEP->linenoInc();} +#define LINECHECK() { const char* cp=yytext; for (int n=yyleng; n; --n) if (cp[n]=='\n') NEXTLINE(); } #define CRELINE() (PARSEP->copyOrSameFileLine()) #define FL { yylval.fl = CRELINE(); } @@ -894,8 +895,8 @@ word [a-zA-Z0-9_]+ } \" { yy_push_state(STRING); yymore(); } - [0-9]*?['']s?[bcodhBCODH][ \t]*[A-Fa-f0-9xXzZ_?]* { - FL; yylval.nump = PARSEP->newNumber(yylval.fl,(char*)yytext); + [0-9]*?['']s?[bcodhBCODH][ \t\n]*[A-Fa-f0-9xXzZ_?]* { + FL; LINECHECK(); yylval.nump = PARSEP->newNumber(yylval.fl,(char*)yytext); return yaINTNUM; } [0-9]*?['']s?[01xXzZ] { /* SystemVerilog */ @@ -903,16 +904,16 @@ word [a-zA-Z0-9_]+ return yaINTNUM; } /* Note below is constructed to not match the ' that begins a '( or '{ */ - [0-9][_0-9]*[ \t]*['']s?[bcodhBCODH]?[ \t]*[A-Fa-f0-9xXzZ_?]+ { - FL; yylval.nump = PARSEP->newNumber(yylval.fl,(char*)yytext); + [0-9][_0-9]*[ \t\n]*['']s?[bcodhBCODH]?[ \t]*[A-Fa-f0-9xXzZ_?]+ { + FL; LINECHECK(); yylval.nump = PARSEP->newNumber(yylval.fl,(char*)yytext); return yaINTNUM; } - [0-9][_0-9]*[ \t]*['']s?[bcodhBCODH] { - FL; yylval.nump = PARSEP->newNumber(yylval.fl,(char*)yytext); + [0-9][_0-9]*[ \t\n]*['']s?[bcodhBCODH] { + FL; LINECHECK(); yylval.nump = PARSEP->newNumber(yylval.fl,(char*)yytext); return yaINTNUM; } - [0-9][_0-9]*[ \t]*['']s { - FL; yylval.nump = PARSEP->newNumber(yylval.fl,(char*)yytext); + [0-9][_0-9]*[ \t\n]*['']s { + FL; LINECHECK(); yylval.nump = PARSEP->newNumber(yylval.fl,(char*)yytext); return yaINTNUM; } [0-9][_0-9]* {