From 8f11eaaca6259e817df47d47df4acd8e77948d7f Mon Sep 17 00:00:00 2001 From: Clifford Wolf Date: Fri, 3 Jan 2014 17:51:05 +0100 Subject: Added updating of RTLIL::autoidx to ilang frontend --- frontends/ilang/lexer.l | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'frontends') diff --git a/frontends/ilang/lexer.l b/frontends/ilang/lexer.l index d582d041..fd842b3d 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; -- cgit v1.2.3