Support pure constraint.

This commit is contained in:
Wilson Snyder
2024-11-09 12:05:26 -05:00
parent 1e546bb9d9
commit 3fae11595a
15 changed files with 171 additions and 10 deletions
+12
View File
@@ -162,6 +162,18 @@ private:
nodep->replaceWith(nodep->lhsp()->unlinkFrBack());
VL_DO_DANGLING(pushDeletep(nodep), nodep);
}
void visit(AstConstraint* nodep) override {
iterateChildren(nodep);
editDType(nodep);
{
const AstClass* const classp = VN_CAST(m_modp, Class);
if (nodep->isKwdPure()
&& (!classp || (!classp->isInterfaceClass() && !classp->isVirtual()))) {
nodep->v3error("Illegal to have 'pure constraint' in non-abstract class"
" (IEEE 1800-2023 18.5.2)");
}
}
}
void visit(AstNodeDType* nodep) override {
// Note some specific dtypes have unique visitors
visitIterateNodeDType(nodep);