diff options
author | Clifford Wolf <clifford@clifford.at> | 2014-02-01 13:50:23 +0100 |
---|---|---|
committer | Clifford Wolf <clifford@clifford.at> | 2014-02-01 13:50:23 +0100 |
commit | d06258f74f724ea3ed26ec9341dd64a51e320ccf (patch) | |
tree | cb0a5af86db1dff05686490bdb1ed5908471d2e2 /frontends/verilog | |
parent | 1e2440e7ed6979bdee2f80116d6c3a429b604e25 (diff) | |
download | yosys-d06258f74f724ea3ed26ec9341dd64a51e320ccf.tar.gz yosys-d06258f74f724ea3ed26ec9341dd64a51e320ccf.tar.bz2 yosys-d06258f74f724ea3ed26ec9341dd64a51e320ccf.zip |
Added constant size expression support of sized constants
Diffstat (limited to 'frontends/verilog')
-rw-r--r-- | frontends/verilog/parser.y | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/frontends/verilog/parser.y b/frontends/verilog/parser.y index b0c4db8ae..5b6bf58c2 100644 --- a/frontends/verilog/parser.y +++ b/frontends/verilog/parser.y @@ -1051,6 +1051,28 @@ basic_expr: rvalue { $$ = $1; } | + '(' expr ')' TOK_CONST { + if ($4->substr(0, 1) != "'") + frontend_verilog_yyerror("Syntax error."); + AstNode *bits = $2; + AstNode *val = const2ast(*$4, case_type_stack.size() == 0 ? 0 : case_type_stack.back()); + if (val == NULL) + log_error("Value conversion failed: `%s'\n", $4->c_str()); + $$ = new AstNode(AST_TO_BITS, bits, val); + delete $4; + } | + hierarchical_id TOK_CONST { + if ($2->substr(0, 1) != "'") + frontend_verilog_yyerror("Syntax error."); + AstNode *bits = new AstNode(AST_IDENTIFIER); + bits->str = *$1; + AstNode *val = const2ast(*$2, case_type_stack.size() == 0 ? 0 : case_type_stack.back()); + if (val == NULL) + log_error("Value conversion failed: `%s'\n", $2->c_str()); + $$ = new AstNode(AST_TO_BITS, bits, val); + delete $1; + delete $2; + } | TOK_CONST { $$ = const2ast(*$1, case_type_stack.size() == 0 ? 0 : case_type_stack.back()); if ($$ == NULL) |