Merge pull request #2257 from antmicro/fix-conflicts

Restore #2203 and #2244 and fix parser conflicts
This commit is contained in:
clairexen 2020-07-15 11:49:09 +02:00 committed by GitHub
commit 021ce8e596
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 59 additions and 9 deletions

View File

@ -742,6 +742,7 @@ module_body:
module_body module_body_stmt | module_body module_body_stmt |
/* the following line makes the generate..endgenrate keywords optional */ /* the following line makes the generate..endgenrate keywords optional */
module_body gen_stmt | module_body gen_stmt |
module_body ';' |
/* empty */; /* empty */;
module_body_stmt: module_body_stmt:
@ -1331,36 +1332,36 @@ ignspec_id:
param_signed: param_signed:
TOK_SIGNED { TOK_SIGNED {
astbuf1->is_signed = true; astbuf1->is_signed = true;
} | TOK_UNSIGNED {
astbuf1->is_signed = false;
} | /* empty */; } | /* empty */;
param_integer: param_integer:
TOK_INTEGER { TOK_INTEGER {
if (astbuf1->children.size() != 1)
frontend_verilog_yyerror("Internal error in param_integer - should not happen?");
astbuf1->children.push_back(new AstNode(AST_RANGE)); astbuf1->children.push_back(new AstNode(AST_RANGE));
astbuf1->children.back()->children.push_back(AstNode::mkconst_int(31, true)); astbuf1->children.back()->children.push_back(AstNode::mkconst_int(31, true));
astbuf1->children.back()->children.push_back(AstNode::mkconst_int(0, true)); astbuf1->children.back()->children.push_back(AstNode::mkconst_int(0, true));
astbuf1->is_signed = true; astbuf1->is_signed = true;
} | /* empty */; };
param_real: param_real:
TOK_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)); astbuf1->children.push_back(new AstNode(AST_REALVALUE));
} | /* empty */; };
param_range: param_range:
range { range {
if ($1 != NULL) { if ($1 != NULL) {
if (astbuf1->children.size() != 1)
frontend_verilog_yyerror("integer/real parameters should not have a range.");
astbuf1->children.push_back($1); astbuf1->children.push_back($1);
} }
}; };
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_type:
param_signed param_integer param_real param_range | param_integer_type | param_real | param_range_type | param_implicit_type |
hierarchical_type_id { hierarchical_type_id {
astbuf1->is_custom_type = true; astbuf1->is_custom_type = true;
astbuf1->children.push_back(new AstNode(AST_WIRETYPE)); astbuf1->children.push_back(new AstNode(AST_WIRETYPE));

View File

@ -0,0 +1,6 @@
logger -expect error "syntax error, unexpected" 1
read_verilog -sv <<EOT
module test_integer_range();
parameter integer [31:0] a = 0;
endmodule
EOT

View File

@ -0,0 +1,6 @@
logger -expect error "syntax error, unexpected TOK_REAL" 1
read_verilog -sv <<EOT
module test_integer_real();
parameter integer real a = 0;
endmodule
EOT

View File

@ -0,0 +1,9 @@
read_verilog -sv <<EOT
module test_logic_param();
parameter logic a = 0;
parameter logic [31:0] e = 0;
parameter logic signed b = 0;
parameter logic unsigned c = 0;
parameter logic unsigned [31:0] d = 0;
endmodule
EOT

28
tests/various/signed.ys Normal file
View File

@ -0,0 +1,28 @@
# SV LRM A2.2.1
read_verilog -sv <<EOT
module test_signed();
parameter integer signed a = 0;
parameter integer unsigned b = 0;
endmodule
EOT
design -reset
read_verilog -sv <<EOT
module test_signed();
parameter logic signed [7:0] a = 0;
parameter logic unsigned [7:0] b = 0;
endmodule
EOT
design -reset
logger -expect error "syntax error, unexpected TOK_INTEGER" 1
read_verilog -sv <<EOT
module test_signed();
parameter signed integer a = 0;
parameter unsigned integer b = 0;
endmodule
EOT