diff options
author | Clifford Wolf <clifford@clifford.at> | 2014-01-03 17:51:05 +0100 |
---|---|---|
committer | Clifford Wolf <clifford@clifford.at> | 2014-01-03 17:51:05 +0100 |
commit | 8f11eaaca6259e817df47d47df4acd8e77948d7f (patch) | |
tree | 2c39ec5a9092e43904503bfa2d2608e3208722dc /frontends/ilang | |
parent | 03f0ab9de29aa3e396c1b1b3e62e6676de3946a3 (diff) | |
download | yosys-8f11eaaca6259e817df47d47df4acd8e77948d7f.tar.gz yosys-8f11eaaca6259e817df47d47df4acd8e77948d7f.tar.bz2 yosys-8f11eaaca6259e817df47d47df4acd8e77948d7f.zip |
Added updating of RTLIL::autoidx to ilang frontend
Diffstat (limited to 'frontends/ilang')
-rw-r--r-- | frontends/ilang/lexer.l | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/frontends/ilang/lexer.l b/frontends/ilang/lexer.l index d582d0413..fd842b3dc 100644 --- a/frontends/ilang/lexer.l +++ b/frontends/ilang/lexer.l @@ -25,6 +25,7 @@ %{ #include "kernel/rtlil.h" #include "parser.tab.h" +void update_autoidx(const char *p); %} %option yylineno @@ -68,7 +69,7 @@ [a-z]+ { return TOK_INVALID; } "\\"[^ \t\r\n]+ { rtlil_frontend_ilang_yylval.string = strdup(yytext); return TOK_ID; } -"$"[^ \t\r\n]+ { rtlil_frontend_ilang_yylval.string = strdup(yytext); return TOK_ID; } +"$"[^ \t\r\n]+ { rtlil_frontend_ilang_yylval.string = strdup(yytext); update_autoidx(yytext); return TOK_ID; } "."[0-9]+ { rtlil_frontend_ilang_yylval.string = strdup(yytext); return TOK_ID; } [0-9]+'[01xzm-]* { rtlil_frontend_ilang_yylval.string = strdup(yytext); return TOK_VALUE; } @@ -116,6 +117,27 @@ %% +void update_autoidx(const char *p) +{ + if (*p != '$') + return; + + while (*p) { + if (*(p++) != '$') + continue; + if ('0' <= *p && *p <= '9') { + const char *q = p; + while ('0' <= *q && *q <= '9') + q++; + if ((q - p) < 10) { + int idx = atoi(p); + if (idx > RTLIL::autoidx) + RTLIL::autoidx = idx; + } + } + } +} + // this is a hack to avoid the 'yyinput defined but not used' error msgs void *rtlil_frontend_ilang_avoid_input_warnings() { return (void*)&yyinput; |