Internals: Minor refactoring of checker parsing/tests. No functional change.
This commit is contained in:
parent
c7ff82f06b
commit
c8a945f363
|
@ -114,7 +114,7 @@ public:
|
||||||
callp->argTypes("vlSymsp");
|
callp->argTypes("vlSymsp");
|
||||||
} else {
|
} else {
|
||||||
if (m_type.isCoverage()) callp->argTypes("first");
|
if (m_type.isCoverage()) callp->argTypes("first");
|
||||||
callp->selfPointer(VSelfPointerText{VSelfPointerText::This()});
|
callp->selfPointer(VSelfPointerText{VSelfPointerText::This{}});
|
||||||
}
|
}
|
||||||
rootFuncp->addStmtsp(callp->makeStmt());
|
rootFuncp->addStmtsp(callp->makeStmt());
|
||||||
}
|
}
|
||||||
|
@ -235,7 +235,7 @@ void V3CCtors::evalAsserts() {
|
||||||
// if (signal & CONST(upper_non_clean_mask)) { fail; }
|
// if (signal & CONST(upper_non_clean_mask)) { fail; }
|
||||||
AstVarRef* const vrefp
|
AstVarRef* const vrefp
|
||||||
= new AstVarRef{varp->fileline(), varp, VAccess::READ};
|
= new AstVarRef{varp->fileline(), varp, VAccess::READ};
|
||||||
vrefp->selfPointer(VSelfPointerText{VSelfPointerText::This()});
|
vrefp->selfPointer(VSelfPointerText{VSelfPointerText::This{}});
|
||||||
AstNodeExpr* newp = vrefp;
|
AstNodeExpr* newp = vrefp;
|
||||||
if (varp->isWide()) {
|
if (varp->isWide()) {
|
||||||
newp = new AstWordSel{
|
newp = new AstWordSel{
|
||||||
|
|
|
@ -74,7 +74,7 @@ class DescopeVisitor final : public VNVisitor {
|
||||||
string name = scopep->name();
|
string name = scopep->name();
|
||||||
string::size_type pos;
|
string::size_type pos;
|
||||||
if ((pos = name.rfind('.')) != string::npos) name.erase(0, pos + 1);
|
if ((pos = name.rfind('.')) != string::npos) name.erase(0, pos + 1);
|
||||||
ret.thisPtr = VSelfPointerText{VSelfPointerText::This(), name};
|
ret.thisPtr = VSelfPointerText{VSelfPointerText::This{}, name};
|
||||||
}
|
}
|
||||||
return ret.thisPtr;
|
return ret.thisPtr;
|
||||||
}
|
}
|
||||||
|
@ -104,9 +104,9 @@ class DescopeVisitor final : public VNVisitor {
|
||||||
if (VN_IS(scopep->modp(), Class)) {
|
if (VN_IS(scopep->modp(), Class)) {
|
||||||
// Direct reference to class members are from within the class itself, references from
|
// Direct reference to class members are from within the class itself, references from
|
||||||
// outside the class must go via AstMemberSel
|
// outside the class must go via AstMemberSel
|
||||||
return VSelfPointerText{VSelfPointerText::This()};
|
return VSelfPointerText{VSelfPointerText::This{}};
|
||||||
} else if (relativeRefOk && scopep == m_scopep) {
|
} else if (relativeRefOk && scopep == m_scopep) {
|
||||||
return VSelfPointerText{VSelfPointerText::This()};
|
return VSelfPointerText{VSelfPointerText::This{}};
|
||||||
} else if (relativeRefOk && !m_modSingleton && scopep->aboveScopep() == m_scopep
|
} else if (relativeRefOk && !m_modSingleton && scopep->aboveScopep() == m_scopep
|
||||||
&& VN_IS(scopep->modp(), Module)) {
|
&& VN_IS(scopep->modp(), Module)) {
|
||||||
// Reference to scope of instance directly under this module, can just "this->cell",
|
// Reference to scope of instance directly under this module, can just "this->cell",
|
||||||
|
|
|
@ -1496,7 +1496,7 @@ list_of_ports<nodep>: // IEEE: list_of_ports + list_of_port_declaratio
|
||||||
|
|
||||||
portAndTagE<nodep>:
|
portAndTagE<nodep>:
|
||||||
/* empty */
|
/* empty */
|
||||||
{ int p = PINNUMINC();
|
{ const int p = PINNUMINC();
|
||||||
const string name = "__pinNumber" + cvtToStr(p);
|
const string name = "__pinNumber" + cvtToStr(p);
|
||||||
$$ = new AstPort{CRELINE(), p, name};
|
$$ = new AstPort{CRELINE(), p, name};
|
||||||
AstVar* varp = new AstVar{CRELINE(), VVarType::WIRE, name, VFlagChildDType{},
|
AstVar* varp = new AstVar{CRELINE(), VVarType::WIRE, name, VFlagChildDType{},
|
||||||
|
@ -6304,22 +6304,26 @@ property_port_item<nodep>: // IEEE: property_port_item/sequence_port_item
|
||||||
// // id {variable_dimension} [ '=' property_actual_arg ]
|
// // id {variable_dimension} [ '=' property_actual_arg ]
|
||||||
// // seq IEEE: [ yLOCAL [ sequence_lvar_port_direction ] ] sequence_formal_type
|
// // seq IEEE: [ yLOCAL [ sequence_lvar_port_direction ] ] sequence_formal_type
|
||||||
// // id {variable_dimension} [ '=' sequence_actual_arg ]
|
// // id {variable_dimension} [ '=' sequence_actual_arg ]
|
||||||
property_port_itemFront property_port_itemAssignment { $$ = $2; }
|
property_port_itemFront property_port_itemAssignment { $$ = $2; }
|
||||||
;
|
;
|
||||||
|
|
||||||
property_port_itemFront: // IEEE: part of property_port_item/sequence_port_item
|
property_port_itemFront: // IEEE: part of property_port_item/sequence_port_item
|
||||||
property_port_itemDirE property_formal_typeNoDt { VARDTYPE($2); }
|
property_port_itemDirE property_formal_typeNoDt
|
||||||
|
{ VARDTYPE($2); }
|
||||||
// // data_type_or_implicit
|
// // data_type_or_implicit
|
||||||
| property_port_itemDirE data_type
|
| property_port_itemDirE data_type
|
||||||
{ VARDTYPE($2); GRAMMARP->m_typedPropertyPort = true; }
|
{ VARDTYPE($2); GRAMMARP->m_typedPropertyPort = true; }
|
||||||
| property_port_itemDirE yVAR data_type
|
| property_port_itemDirE yVAR data_type
|
||||||
{ VARDTYPE($3); GRAMMARP->m_typedPropertyPort = true; }
|
{ VARDTYPE($3); GRAMMARP->m_typedPropertyPort = true; }
|
||||||
| property_port_itemDirE yVAR implicit_typeE { VARDTYPE($3); }
|
| property_port_itemDirE yVAR implicit_typeE
|
||||||
| property_port_itemDirE implicit_typeE { VARDTYPE($2); }
|
{ VARDTYPE($3); }
|
||||||
|
| property_port_itemDirE implicit_typeE
|
||||||
|
{ VARDTYPE($2); }
|
||||||
;
|
;
|
||||||
|
|
||||||
property_port_itemAssignment<nodep>: // IEEE: part of property_port_item/sequence_port_item/checker_port_direction
|
property_port_itemAssignment<nodep>: // IEEE: part of property_port_item/sequence_port_item/checker_port_direction
|
||||||
id variable_dimensionListE { $$ = VARDONEA($<fl>1, *$1, $2, nullptr); }
|
id variable_dimensionListE
|
||||||
|
{ $$ = VARDONEA($<fl>1, *$1, $2, nullptr); }
|
||||||
| id variable_dimensionListE '=' property_actual_arg
|
| id variable_dimensionListE '=' property_actual_arg
|
||||||
{ $$ = VARDONEA($<fl>1, *$1, $2, $4);
|
{ $$ = VARDONEA($<fl>1, *$1, $2, $4);
|
||||||
BBUNSUP($3, "Unsupported: property variable default value"); }
|
BBUNSUP($3, "Unsupported: property variable default value"); }
|
||||||
|
@ -7128,7 +7132,7 @@ rs_case_item<nodep>: // ==IEEE: rs_case_item
|
||||||
//**********************************************************************
|
//**********************************************************************
|
||||||
// Checker
|
// Checker
|
||||||
|
|
||||||
checker_declaration<nodep>: // ==IEEE: part of checker_declaration
|
checker_declaration<nodeModulep>: // ==IEEE: part of checker_declaration
|
||||||
checkerFront checker_port_listE ';'
|
checkerFront checker_port_listE ';'
|
||||||
checker_or_generate_itemListE yENDCHECKER endLabelE
|
checker_or_generate_itemListE yENDCHECKER endLabelE
|
||||||
{ $$ = $1;
|
{ $$ = $1;
|
||||||
|
|
|
@ -1,38 +0,0 @@
|
||||||
%Error-UNSUPPORTED: t/t_checker.v:33:1: Unsupported: checker
|
|
||||||
33 | checker Chk
|
|
||||||
| ^~~~~~~
|
|
||||||
... For error description see https://verilator.org/warn/UNSUPPORTED?v=latest
|
|
||||||
%Error-UNSUPPORTED: t/t_checker.v:36:8: Unsupported: checker data declaration
|
|
||||||
36 | bit clk;
|
|
||||||
| ^~~
|
|
||||||
%Error-UNSUPPORTED: t/t_checker.v:37:8: Unsupported: checker data declaration
|
|
||||||
37 | bit in;
|
|
||||||
| ^~
|
|
||||||
%Error-UNSUPPORTED: t/t_checker.v:38:8: Unsupported: checker data declaration
|
|
||||||
38 | bit rst;
|
|
||||||
| ^~~
|
|
||||||
%Error-UNSUPPORTED: t/t_checker.v:39:4: Unsupported: checker rand
|
|
||||||
39 | rand bit randed;
|
|
||||||
| ^~~~
|
|
||||||
%Error-UNSUPPORTED: t/t_checker.v:41:8: Unsupported: checker data declaration
|
|
||||||
41 | int counter = 0;
|
|
||||||
| ^~~~~~~
|
|
||||||
%Error-UNSUPPORTED: t/t_checker.v:43:8: Unsupported: checker data declaration
|
|
||||||
43 | int ival;
|
|
||||||
| ^~~~
|
|
||||||
%Error-UNSUPPORTED: t/t_checker.v:53:8: Unsupported: checker data declaration
|
|
||||||
53 | int ival2;
|
|
||||||
| ^~~~~
|
|
||||||
%Error-UNSUPPORTED: t/t_checker.v:61:4: Unsupported: checker default clocking
|
|
||||||
61 | default clocking clk;
|
|
||||||
| ^~~~~~~
|
|
||||||
%Error-UNSUPPORTED: t/t_checker.v:62:4: Unsupported: checker default disable iff
|
|
||||||
62 | default disable iff rst;
|
|
||||||
| ^~~~~~~
|
|
||||||
%Error-UNSUPPORTED: t/t_checker.v:64:4: Unsupported: checker
|
|
||||||
64 | checker ChkChk;
|
|
||||||
| ^~~~~~~
|
|
||||||
%Error-UNSUPPORTED: t/t_checker.v:64:12: Unsupported: recursive checker
|
|
||||||
64 | checker ChkChk;
|
|
||||||
| ^~~~~~
|
|
||||||
%Error: Exiting due to
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
%Error-UNSUPPORTED: t/t_checker_unsup.v:31:4: Unsupported: checker
|
||||||
|
31 | checker checker_in_module;
|
||||||
|
| ^~~~~~~
|
||||||
|
... For error description see https://verilator.org/warn/UNSUPPORTED?v=latest
|
||||||
|
%Error-UNSUPPORTED: t/t_checker_unsup.v:37:4: Unsupported: checker
|
||||||
|
37 | checker checker_in_pkg;
|
||||||
|
| ^~~~~~~
|
||||||
|
%Error-UNSUPPORTED: t/t_checker_unsup.v:41:1: Unsupported: checker
|
||||||
|
41 | checker Chk
|
||||||
|
| ^~~~~~~
|
||||||
|
%Error-UNSUPPORTED: t/t_checker_unsup.v:44:8: Unsupported: checker data declaration
|
||||||
|
44 | bit clk;
|
||||||
|
| ^~~
|
||||||
|
%Error-UNSUPPORTED: t/t_checker_unsup.v:45:8: Unsupported: checker data declaration
|
||||||
|
45 | bit in;
|
||||||
|
| ^~
|
||||||
|
%Error-UNSUPPORTED: t/t_checker_unsup.v:46:8: Unsupported: checker data declaration
|
||||||
|
46 | bit rst;
|
||||||
|
| ^~~
|
||||||
|
%Error-UNSUPPORTED: t/t_checker_unsup.v:47:4: Unsupported: checker rand
|
||||||
|
47 | rand bit randed;
|
||||||
|
| ^~~~
|
||||||
|
%Error-UNSUPPORTED: t/t_checker_unsup.v:49:8: Unsupported: checker data declaration
|
||||||
|
49 | int counter = 0;
|
||||||
|
| ^~~~~~~
|
||||||
|
%Error-UNSUPPORTED: t/t_checker_unsup.v:51:8: Unsupported: checker data declaration
|
||||||
|
51 | int ival;
|
||||||
|
| ^~~~
|
||||||
|
%Error-UNSUPPORTED: t/t_checker_unsup.v:61:8: Unsupported: checker data declaration
|
||||||
|
61 | int ival2;
|
||||||
|
| ^~~~~
|
||||||
|
%Error-UNSUPPORTED: t/t_checker_unsup.v:69:4: Unsupported: checker default clocking
|
||||||
|
69 | default clocking clk;
|
||||||
|
| ^~~~~~~
|
||||||
|
%Error-UNSUPPORTED: t/t_checker_unsup.v:70:4: Unsupported: checker default disable iff
|
||||||
|
70 | default disable iff rst;
|
||||||
|
| ^~~~~~~
|
||||||
|
%Error-UNSUPPORTED: t/t_checker_unsup.v:72:4: Unsupported: checker
|
||||||
|
72 | checker ChkChk;
|
||||||
|
| ^~~~~~~
|
||||||
|
%Error-UNSUPPORTED: t/t_checker_unsup.v:72:12: Unsupported: recursive checker
|
||||||
|
72 | checker ChkChk;
|
||||||
|
| ^~~~~~
|
||||||
|
%Error: Exiting due to
|
|
@ -28,8 +28,16 @@ module t(/*AUTOARG*/
|
||||||
|
|
||||||
Chk check(clk, cyc);
|
Chk check(clk, cyc);
|
||||||
|
|
||||||
|
checker checker_in_module;
|
||||||
|
endchecker
|
||||||
|
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
|
package Pkg;
|
||||||
|
checker checker_in_pkg;
|
||||||
|
endchecker
|
||||||
|
endpackage
|
||||||
|
|
||||||
checker Chk
|
checker Chk
|
||||||
// UNSUP (input clk, int in)
|
// UNSUP (input clk, int in)
|
||||||
;
|
;
|
|
@ -19,17 +19,17 @@ test.compile(v_flags2=['--no-json-edit-nums', '+define+ATTRIBUTES', '+define+NOU
|
||||||
if test.vlt_all:
|
if test.vlt_all:
|
||||||
test.file_grep(
|
test.file_grep(
|
||||||
out_filename,
|
out_filename,
|
||||||
r'{"type":"MODULE","name":"ma",.*"loc":"\w,84:[^"]*","origName":"ma",.*,"modPublic":true')
|
r'{"type":"MODULE","name":"ma",.*"loc":"\w,84:[^"]*",.*"origName":"ma",.*,"modPublic":true')
|
||||||
test.file_grep(
|
test.file_grep(
|
||||||
out_filename,
|
out_filename,
|
||||||
r'{"type":"MODULE","name":"mb",.*"loc":"\w,99:[^"]*","origName":"mb",.*"modPublic":true')
|
r'{"type":"MODULE","name":"mb",.*"loc":"\w,99:[^"]*",.*"origName":"mb",.*"modPublic":true')
|
||||||
test.file_grep(
|
test.file_grep(
|
||||||
out_filename,
|
out_filename,
|
||||||
r'{"type":"MODULE","name":"mc","addr":"[^"]*","loc":"\w,127:[^"]*","origName":"mc",.*"modPublic":true'
|
r'{"type":"MODULE","name":"mc","addr":"[^"]*","loc":"\w,127:[^"]*",.*"origName":"mc",.*"modPublic":true'
|
||||||
)
|
)
|
||||||
test.file_grep(
|
test.file_grep(
|
||||||
out_filename,
|
out_filename,
|
||||||
r'{"type":"MODULE","name":"mc__PB1","addr":"[^"]*","loc":"\w,127:[^"]*","origName":"mc",.*"modPublic":true'
|
r'{"type":"MODULE","name":"mc__PB1","addr":"[^"]*","loc":"\w,127:[^"]*",.*"origName":"mc",.*"modPublic":true'
|
||||||
)
|
)
|
||||||
|
|
||||||
test.execute()
|
test.execute()
|
||||||
|
|
Loading…
Reference in New Issue