diff --git a/src/verilog.y b/src/verilog.y index fbf1142a9..02da23103 100644 --- a/src/verilog.y +++ b/src/verilog.y @@ -3228,12 +3228,23 @@ cellparamItemE: // IEEE: named_parameter_assignment + empty | '.' idAny '(' exprOrDataType ')' { $$ = new AstPin{$2, PINNUMINC(), *$2, $4}; $$->svDotName(true); } - //UNSUP '.' idAny '(' exprOrDataType/*expr*/ ':' expr ')' { } - //UNSUP '.' idAny '(' exprOrDataType/*expr*/ ':' expr ':' expr ')' { } + //UNSUP | '.' idAny '(' exprOrDataType/*expr*/ ':' expr ')' + //UNSUP { MINTYPMAXDLYUNSUP($4); DEL($4); + //UNSUP $$ = new AstPin{$2, PINNUMINC(), *$2, $6}; + //UNSUP $$->svDotName(true); } + //UNSUP | '.' idAny '(' exprOrDataType/*expr*/ ':' expr ':' expr ')' + //UNSUP { MINTYPMAXDLYUNSUP($4); DEL($4); DEL($8); + //UNSUP $$ = new AstPin{$2, PINNUMINC(), *$2, $6}; + //UNSUP $$->svDotName(true); } // // data_type for 'parameter type' hookups - | exprOrDataType { $$ = new AstPin{FILELINE_OR_CRE($1), PINNUMINC(), "", $1}; } - //UNSUP exprOrDataType/*expr*/ ':' expr { } - //UNSUP exprOrDataType/*expr*/ ':' expr ':' expr { } + | exprOrDataType + { $$ = new AstPin{FILELINE_OR_CRE($1), PINNUMINC(), "", $1}; } + //UNSUP | exprOrDataType/*expr*/ ':' expr + //UNSUP { MINTYPMAXDLYUNSUP($1); DEL($1); + //UNSUP $$ = new AstPin{FILELINE_OR_CRE($3), PINNUMINC(), "", $3}; } + //UNSUP | exprOrDataType/*expr*/ ':' expr ':' expr + //UNSUP { MINTYPMAXDLYUNSUP($1); DEL($1); DEL($5); + //UNSUP $$ = new AstPin{FILELINE_OR_CRE($3), PINNUMINC(), "", $3}; } ; cellpinItemE: // IEEE: named_port_connection + empty diff --git a/test_regress/t/t_param_mintypmax.v b/test_regress/t/t_param_mintypmax.v index dd9acdb5a..dfc793551 100644 --- a/test_regress/t/t_param_mintypmax.v +++ b/test_regress/t/t_param_mintypmax.v @@ -8,10 +8,23 @@ module t (/*AUTOARG*/); parameter MTM = (1:2:3); + sub sub (); + //UNSUP sub #(.MTM(10:20:30)) sub20name (); + //UNSUP sub #(.MTM(100:200)) sub200name (); + //UNSUP sub #(10:20:30) sub20pos (); + //UNSUP sub #(100:200) sub200pos (); + initial begin if (MTM != 2) $stop; + //UNSUP if (sub20pos.MTM != 20) $stop; + //UNSUP if (sub200pos.MTM != 200) $stop; + //UNSUP if (sub20name.MTM != 20) $stop; + //UNSUP if (sub200name.MTM != 200) $stop; $write("*-* All Finished *-*\n"); $finish; end endmodule + +module sub #(parameter MTM = (1:2:3)) (); +endmodule