summaryrefslogtreecommitdiff
path: root/frontends/verilog
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2014-02-01 13:50:23 +0100
committerClifford Wolf <clifford@clifford.at>2014-02-01 13:50:23 +0100
commitd06258f74f724ea3ed26ec9341dd64a51e320ccf (patch)
treecb0a5af86db1dff05686490bdb1ed5908471d2e2 /frontends/verilog
parent1e2440e7ed6979bdee2f80116d6c3a429b604e25 (diff)
Added constant size expression support of sized constants
Diffstat (limited to 'frontends/verilog')
-rw-r--r--frontends/verilog/parser.y22
1 files changed, 22 insertions, 0 deletions
diff --git a/frontends/verilog/parser.y b/frontends/verilog/parser.y
index b0c4db8a..5b6bf58c 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)