diff --git a/regression/verilog/modules/parameter_ports4.desc b/regression/verilog/modules/type_parameter_port1.desc similarity index 78% rename from regression/verilog/modules/parameter_ports4.desc rename to regression/verilog/modules/type_parameter_port1.desc index 64ef929a0..8a917ccb3 100644 --- a/regression/verilog/modules/parameter_ports4.desc +++ b/regression/verilog/modules/type_parameter_port1.desc @@ -1,5 +1,5 @@ KNOWNBUG -parameter_ports4.sv +type_parameter_port1.sv ^EXIT=0$ ^SIGNAL=0$ diff --git a/regression/verilog/modules/parameter_ports4.sv b/regression/verilog/modules/type_parameter_port1.sv similarity index 100% rename from regression/verilog/modules/parameter_ports4.sv rename to regression/verilog/modules/type_parameter_port1.sv diff --git a/regression/verilog/modules/type_parameter_port2.desc b/regression/verilog/modules/type_parameter_port2.desc new file mode 100644 index 000000000..8d9e9de7e --- /dev/null +++ b/regression/verilog/modules/type_parameter_port2.desc @@ -0,0 +1,8 @@ +KNOWNBUG +type_parameter_port2.sv + +^EXIT=0$ +^SIGNAL=0$ +-- +-- +The type parameter port needs to be parsed as a type. diff --git a/regression/verilog/modules/type_parameter_port2.sv b/regression/verilog/modules/type_parameter_port2.sv new file mode 100644 index 000000000..8ad2e02c3 --- /dev/null +++ b/regression/verilog/modules/type_parameter_port2.sv @@ -0,0 +1,13 @@ +module sub #(parameter type T = int)(); + + var T my_var; + +endmodule + +module main; + + sub #(.T(byte)) submodule(); + + p1: assert final ($bits(submodule.my_var) == 8); + +endmodule // main diff --git a/src/verilog/parser.y b/src/verilog/parser.y index b41147b70..0df8ef106 100644 --- a/src/verilog/parser.y +++ b/src/verilog/parser.y @@ -1985,6 +1985,8 @@ list_of_variable_identifiers: parameter_port_declaration: TOK_PARAMETER data_type_or_implicit param_assignment { $$ = $3; } + | TOK_PARAMETER TOK_TYPE type_assignment + { $$ = $3; } | TOK_LOCALPARAM data_type_or_implicit param_assignment { $$ = $3; } | data_type param_assignment @@ -3160,11 +3162,23 @@ named_parameter_assignment_brace: { $$=$1; mto($$, $3); } ; -ordered_parameter_assignment: - expression; +ordered_parameter_assignment: param_expression + ; + +param_expression: + expression + | data_type + { init($$, ID_type); stack_expr($$).type() = stack_type($1); } + ; + +param_expression_opt: + /* empty */ + { init($$, ID_nil); } + | param_expression + ; named_parameter_assignment: - '.' parameter_identifier '(' expression_opt ')' + '.' parameter_identifier '(' param_expression_opt ')' { init($$, ID_named_parameter_assignment); stack_expr($$).add(ID_parameter).swap(stack_expr($2)); stack_expr($$).add(ID_value).swap(stack_expr($4));