Support repeated forward typedefs.
This commit is contained in:
parent
070bead9f9
commit
e25a6334cf
|
|
@ -2165,15 +2165,39 @@ implicit_typeE<dtypep>: // IEEE: part of *data_type_or_implicit
|
||||||
//UNSUP ;
|
//UNSUP ;
|
||||||
|
|
||||||
type_declaration<nodep>: // ==IEEE: type_declaration
|
type_declaration<nodep>: // ==IEEE: type_declaration
|
||||||
// // Use idAny, as we can redeclare a typedef on an existing typedef
|
// Data_type expanded
|
||||||
yTYPEDEF data_type idAny variable_dimensionListE dtypeAttrListE ';'
|
yTYPEDEF data_typeNoRef
|
||||||
{ $$ = GRAMMARP->createTypedef($<fl>3, *$3, $5, $2, $4); }
|
/*cont*/ idAny variable_dimensionListE dtypeAttrListE ';'
|
||||||
|
{ AstNodeDType* dtp = $2;
|
||||||
|
$$ = GRAMMARP->createTypedef($<fl>3, *$3, $5, dtp, $4); }
|
||||||
|
| yTYPEDEF packageClassScope idType packed_dimensionListE
|
||||||
|
/*cont*/ idAny variable_dimensionListE dtypeAttrListE ';'
|
||||||
|
{ AstRefDType* refp = new AstRefDType($<fl>3, *$3, $2, nullptr);
|
||||||
|
AstNodeDType* dtp = GRAMMARP->createArray(refp, $4, true);
|
||||||
|
$$ = GRAMMARP->createTypedef($<fl>5, *$5, $7, dtp, $6); }
|
||||||
|
| yTYPEDEF packageClassScope idType parameter_value_assignmentClass packed_dimensionListE
|
||||||
|
/*cont*/ idAny variable_dimensionListE dtypeAttrListE ';'
|
||||||
|
{ AstRefDType* refp = new AstRefDType($<fl>3, *$3, $2, $4);
|
||||||
|
AstNodeDType* dtp = GRAMMARP->createArray(refp, $5, true);
|
||||||
|
$$ = GRAMMARP->createTypedef($<fl>6, *$6, $8, dtp, $7); }
|
||||||
|
| yTYPEDEF idType packed_dimensionListE
|
||||||
|
/*cont*/ idAny variable_dimensionListE dtypeAttrListE ';'
|
||||||
|
{ AstRefDType* refp = new AstRefDType($<fl>2, *$2, nullptr, nullptr);
|
||||||
|
AstNodeDType* dtp = GRAMMARP->createArray(refp, $3, true);
|
||||||
|
$$ = GRAMMARP->createTypedef($<fl>4, *$4, $6, dtp, $5); }
|
||||||
|
| yTYPEDEF idType parameter_value_assignmentClass packed_dimensionListE
|
||||||
|
/*cont*/ idAny variable_dimensionListE dtypeAttrListE ';'
|
||||||
|
{ AstRefDType* refp = new AstRefDType($<fl>2, *$2, nullptr, $3);
|
||||||
|
AstNodeDType* dtp = GRAMMARP->createArray(refp, $4, true);
|
||||||
|
$$ = GRAMMARP->createTypedef($<fl>5, *$5, $7, dtp, $6); }
|
||||||
|
// //
|
||||||
| yTYPEDEF id/*interface*/ '.' idAny/*type*/ idAny/*type*/ ';'
|
| yTYPEDEF id/*interface*/ '.' idAny/*type*/ idAny/*type*/ ';'
|
||||||
{ $$ = nullptr; BBUNSUP($1, "Unsupported: SystemVerilog 2005 typedef in this context"); }
|
{ $$ = nullptr; BBUNSUP($1, "Unsupported: SystemVerilog 2005 typedef in this context"); }
|
||||||
|
// // Allow redeclaring same typedef again
|
||||||
|
// // Alternative is use of idAny below, but this will cause conflicts with ablve
|
||||||
|
| yTYPEDEF idType ';' { $$ = GRAMMARP->createTypedefFwd($<fl>2, *$2); }
|
||||||
// // Combines into above "data_type id" rule
|
// // Combines into above "data_type id" rule
|
||||||
// // Verilator: Not important what it is in the AST, just need to make sure the yaID__aTYPE gets returned
|
// // Verilator: Not important what it is in the AST, just need to make sure the yaID__aTYPE gets returned
|
||||||
//UNSUP // Below should be idAny to allow duplicate forward defs; need to expand
|
|
||||||
// // data_type to exclude IDs, or add id__SEMI rule
|
|
||||||
| yTYPEDEF id ';' { $$ = GRAMMARP->createTypedefFwd($<fl>2, *$2); }
|
| yTYPEDEF id ';' { $$ = GRAMMARP->createTypedefFwd($<fl>2, *$2); }
|
||||||
| yTYPEDEF yENUM idAny ';' { $$ = GRAMMARP->createTypedefFwd($<fl>3, *$3); }
|
| yTYPEDEF yENUM idAny ';' { $$ = GRAMMARP->createTypedefFwd($<fl>3, *$3); }
|
||||||
| yTYPEDEF ySTRUCT idAny ';' { $$ = GRAMMARP->createTypedefFwd($<fl>3, *$3); }
|
| yTYPEDEF ySTRUCT idAny ';' { $$ = GRAMMARP->createTypedefFwd($<fl>3, *$3); }
|
||||||
|
|
@ -6192,9 +6216,9 @@ dist_list<nodep>: // ==IEEE: dist_list
|
||||||
;
|
;
|
||||||
|
|
||||||
dist_item<nodep>: // ==IEEE: dist_item + dist_weight
|
dist_item<nodep>: // ==IEEE: dist_item + dist_weight
|
||||||
value_range { $$ = $1; }
|
value_range { $$ = $1; /* Same as := 1 */ }
|
||||||
| value_range yP_COLONEQ expr { $$ = $1; BBUNSUP($1, "Unsupported: dist :="); }
|
| value_range yP_COLONEQ expr { $$ = $1; nullptr; /*UNSUP-no-UVM*/ }
|
||||||
| value_range yP_COLONDIV expr { $$ = $1; BBUNSUP($1, "Unsupported: dist :/"); }
|
| value_range yP_COLONDIV expr { $$ = $1; nullptr; /*UNSUP-no-UVM*/ }
|
||||||
;
|
;
|
||||||
|
|
||||||
//UNSUPextern_constraint_declaration: // ==IEEE: extern_constraint_declaration
|
//UNSUPextern_constraint_declaration: // ==IEEE: extern_constraint_declaration
|
||||||
|
|
|
||||||
|
|
@ -4,15 +4,6 @@
|
||||||
%Error-UNSUPPORTED: t/t_randomize.v:29:29: Unsupported: solve before
|
%Error-UNSUPPORTED: t/t_randomize.v:29:29: Unsupported: solve before
|
||||||
29 | constraint order { solve length before header; }
|
29 | constraint order { solve length before header; }
|
||||||
| ^~~~~~
|
| ^~~~~~
|
||||||
%Error-UNSUPPORTED: t/t_randomize.v:32:16: Unsupported: dist :/
|
|
||||||
32 | x dist { [100:102] :/ 1, 200 := 2, 300 := 5, 400};
|
|
||||||
| ^
|
|
||||||
%Error-UNSUPPORTED: t/t_randomize.v:32:32: Unsupported: dist :=
|
|
||||||
32 | x dist { [100:102] :/ 1, 200 := 2, 300 := 5, 400};
|
|
||||||
| ^~~
|
|
||||||
%Error-UNSUPPORTED: t/t_randomize.v:32:42: Unsupported: dist :=
|
|
||||||
32 | x dist { [100:102] :/ 1, 200 := 2, 300 := 5, 400};
|
|
||||||
| ^~~
|
|
||||||
%Error-UNSUPPORTED: t/t_randomize.v:32:9: Unsupported: dist
|
%Error-UNSUPPORTED: t/t_randomize.v:32:9: Unsupported: dist
|
||||||
32 | x dist { [100:102] :/ 1, 200 := 2, 300 := 5, 400};
|
32 | x dist { [100:102] :/ 1, 200 := 2, 300 := 5, 400};
|
||||||
| ^~~~
|
| ^~~~
|
||||||
|
|
|
||||||
|
|
@ -4,11 +4,15 @@
|
||||||
// any use, without warranty, 2009 by Wilson Snyder.
|
// any use, without warranty, 2009 by Wilson Snyder.
|
||||||
// SPDX-License-Identifier: CC0-1.0
|
// SPDX-License-Identifier: CC0-1.0
|
||||||
|
|
||||||
|
package pkg;
|
||||||
|
typedef bit pkg_bit_t;
|
||||||
|
endpackage
|
||||||
|
|
||||||
program t;
|
program t;
|
||||||
parameter SIZE = 5;
|
parameter SIZE = 5;
|
||||||
|
|
||||||
typedef vec_t; // Forward
|
typedef vec_t; // Forward
|
||||||
//UNSUP typedef vec_t; // Multi-forward is ok
|
typedef vec_t; // Multi-forward is ok
|
||||||
|
|
||||||
typedef reg [SIZE-1:0] vec_t;
|
typedef reg [SIZE-1:0] vec_t;
|
||||||
vec_t a; initial a =0;
|
vec_t a; initial a =0;
|
||||||
|
|
@ -20,6 +24,8 @@ program t;
|
||||||
typedef array_t array2_t [2];
|
typedef array_t array2_t [2];
|
||||||
array2_t ar [1];
|
array2_t ar [1];
|
||||||
|
|
||||||
|
typedef pkg::pkg_bit_t lcl_pkg_bit_t;
|
||||||
|
|
||||||
// Define before use
|
// Define before use
|
||||||
// Not sure how well supported this is elsewhere
|
// Not sure how well supported this is elsewhere
|
||||||
//UNSUP typedef preuse;
|
//UNSUP typedef preuse;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue