aboutsummaryrefslogtreecommitdiffstats
path: root/frontends/verilog/verilog_parser.y
diff options
context:
space:
mode:
authorwhitequark <whitequark@whitequark.org>2021-03-07 05:48:03 -0800
committerGitHub <noreply@github.com>2021-03-07 05:48:03 -0800
commit9bb839c613aff1d7658eac8ec46c3dcd3b220c5f (patch)
tree1a78ba758840c0d74ea2f1a3ac8b55778e7e4f4b /frontends/verilog/verilog_parser.y
parent72ae15c77c34fe2306c3ac41c40521e9141b8cf0 (diff)
parentd738b2c1272b02d8799e9feda83b1eae8ba10c07 (diff)
downloadyosys-9bb839c613aff1d7658eac8ec46c3dcd3b220c5f.tar.gz
yosys-9bb839c613aff1d7658eac8ec46c3dcd3b220c5f.tar.bz2
yosys-9bb839c613aff1d7658eac8ec46c3dcd3b220c5f.zip
Merge pull request #2626 from zachjs/param-no-default
sv: support for parameters without default values
Diffstat (limited to 'frontends/verilog/verilog_parser.y')
-rw-r--r--frontends/verilog/verilog_parser.y24
1 files changed, 21 insertions, 3 deletions
diff --git a/frontends/verilog/verilog_parser.y b/frontends/verilog/verilog_parser.y
index bcba9b76a..ea8cc0765 100644
--- a/frontends/verilog/verilog_parser.y
+++ b/frontends/verilog/verilog_parser.y
@@ -1462,7 +1462,26 @@ param_decl_list:
single_param_decl | param_decl_list ',' single_param_decl;
single_param_decl:
- TOK_ID '=' expr {
+ single_param_decl_ident '=' expr {
+ AstNode *decl = ast_stack.back()->children.back();
+ log_assert(decl->type == AST_PARAMETER || decl->type == AST_LOCALPARAM);
+ delete decl->children[0];
+ decl->children[0] = $3;
+ } |
+ single_param_decl_ident {
+ AstNode *decl = ast_stack.back()->children.back();
+ if (decl->type != AST_PARAMETER) {
+ log_assert(decl->type == AST_LOCALPARAM);
+ frontend_verilog_yyerror("localparam initialization is missing!");
+ }
+ if (!sv_mode)
+ frontend_verilog_yyerror("Parameter defaults can only be omitted in SystemVerilog mode!");
+ delete decl->children[0];
+ decl->children.erase(decl->children.begin());
+ };
+
+single_param_decl_ident:
+ TOK_ID {
AstNode *node;
if (astbuf1 == nullptr) {
if (!sv_mode)
@@ -1473,10 +1492,9 @@ single_param_decl:
node = astbuf1->clone();
}
node->str = *$1;
- delete node->children[0];
- node->children[0] = $3;
ast_stack.back()->children.push_back(node);
delete $1;
+ SET_AST_NODE_LOC(node, @1, @1);
};
defparam_decl: