aboutsummaryrefslogtreecommitdiffstats
path: root/frontends/verilog/verilog_parser.y
diff options
context:
space:
mode:
authorDavid Shah <dave@ds0.me>2019-09-19 21:07:20 +0100
committerDavid Shah <dave@ds0.me>2019-10-03 09:54:14 +0100
commitc9629516120930aedaf52d72fec5d7fabe51d496 (patch)
tree4219cf0483c9ee44938eb7432492d840a57ab970 /frontends/verilog/verilog_parser.y
parentf6b5e47e40b4a2bda6e5d928480ea218a6a911c2 (diff)
downloadyosys-c9629516120930aedaf52d72fec5d7fabe51d496.tar.gz
yosys-c9629516120930aedaf52d72fec5d7fabe51d496.tar.bz2
yosys-c9629516120930aedaf52d72fec5d7fabe51d496.zip
sv: Fix typedef parameters
Signed-off-by: David Shah <dave@ds0.me>
Diffstat (limited to 'frontends/verilog/verilog_parser.y')
-rw-r--r--frontends/verilog/verilog_parser.y21
1 files changed, 17 insertions, 4 deletions
diff --git a/frontends/verilog/verilog_parser.y b/frontends/verilog/verilog_parser.y
index eb091bea6..8cc084fe0 100644
--- a/frontends/verilog/verilog_parser.y
+++ b/frontends/verilog/verilog_parser.y
@@ -327,13 +327,13 @@ single_module_para:
astbuf1 = new AstNode(AST_PARAMETER);
astbuf1->children.push_back(AstNode::mkconst_int(0, true));
append_attr(astbuf1, $1);
- } param_signed param_integer param_range single_param_decl |
+ } int_param_type single_param_decl |
attr TOK_LOCALPARAM {
if (astbuf1) delete astbuf1;
astbuf1 = new AstNode(AST_LOCALPARAM);
astbuf1->children.push_back(AstNode::mkconst_int(0, true));
append_attr(astbuf1, $1);
- } param_signed param_integer param_range single_param_decl |
+ } int_param_type single_param_decl |
single_param_decl;
module_args_opt:
@@ -1158,12 +1158,25 @@ param_range:
}
};
+custom_param_type:
+ hierarchical_id {
+ astbuf1->is_custom_type = true;
+ astbuf1->children.push_back(new AstNode(AST_WIRETYPE));
+ astbuf1->children.back()->str = *$1;
+ };
+
+param_type:
+ param_signed param_integer param_real param_range | custom_param_type;
+
+int_param_type:
+ param_signed param_integer param_range | custom_param_type;
+
param_decl:
attr TOK_PARAMETER {
astbuf1 = new AstNode(AST_PARAMETER);
astbuf1->children.push_back(AstNode::mkconst_int(0, true));
append_attr(astbuf1, $1);
- } param_signed param_integer param_real param_range param_decl_list ';' {
+ } param_type param_decl_list ';' {
delete astbuf1;
};
@@ -1172,7 +1185,7 @@ localparam_decl:
astbuf1 = new AstNode(AST_LOCALPARAM);
astbuf1->children.push_back(AstNode::mkconst_int(0, true));
append_attr(astbuf1, $1);
- } param_signed param_integer param_real param_range param_decl_list ';' {
+ } param_type param_decl_list ';' {
delete astbuf1;
};