Fix integer signing grammar
authorLukasz Dalek <ldalek@antmicro.com>
Mon, 18 May 2020 19:01:16 +0000 (21:01 +0200)
committerKamil Rakoczy <krakoczy@antmicro.com>
Fri, 26 Jun 2020 13:35:56 +0000 (15:35 +0200)
This commit fixes signed/unsigned grammar in parameters as defined in SV
LRM A2.2.1. Example of correct parameters:

parameter integer signed i = 0;
parameter integer unsigned i = 0;

Example of incorrect parameters:

parameter signed integer i = 0;
parameter unsigned integer i = 0;

Signed-off-by: Lukasz Dalek <ldalek@antmicro.com>
Signed-off-by: Kamil Rakoczy <krakoczy@antmicro.com>
frontends/verilog/verilog_parser.y

index 15c231f3b98b1b02f4724b0b2df14ced514259a5..18745e38eece4d90c33bb51df9cec62079c85386 100644 (file)
@@ -1329,6 +1329,8 @@ ignspec_id:
 param_signed:
        TOK_SIGNED {
                astbuf1->is_signed = true;
+       } | TOK_UNSIGNED {
+               astbuf1->is_signed = false;
        } | /* empty */;
 
 param_integer:
@@ -1339,14 +1341,14 @@ param_integer:
                astbuf1->children.back()->children.push_back(AstNode::mkconst_int(31, true));
                astbuf1->children.back()->children.push_back(AstNode::mkconst_int(0, true));
                astbuf1->is_signed = true;
-       } | /* empty */;
+       }
 
 param_real:
        TOK_REAL {
                if (astbuf1->children.size() != 1)
                        frontend_verilog_yyerror("Parameter already declared as integer, cannot set to real.");
                astbuf1->children.push_back(new AstNode(AST_REALVALUE));
-       } | /* empty */;
+       }
 
 param_range:
        range {
@@ -1357,8 +1359,12 @@ param_range:
                }
        };
 
+param_integer_type: param_integer param_signed
+param_range_type: type_vec param_signed param_range
+param_implicit_type: param_signed param_range
+
 param_type:
-       param_signed param_integer param_real param_range |
+       param_integer_type | param_real | param_range_type | param_implicit_type |
        hierarchical_type_id {
                astbuf1->is_custom_type = true;
                astbuf1->children.push_back(new AstNode(AST_WIRETYPE));