Support class type params without defaults (#3693)

This commit is contained in:
Krzysztof Bieganski
2022-10-19 21:59:26 -04:00
committed by GitHub
parent bec0b7d4d0
commit 22243d1e49
12 changed files with 88 additions and 23 deletions
+8 -10
View File
@@ -209,18 +209,16 @@ private:
}
if (VN_IS(nodep->subDTypep(), ParseTypeDType)) {
// It's a parameter type. Use a different node type for this.
AstNodeDType* const dtypep = VN_CAST(nodep->valuep(), NodeDType);
if (!dtypep) {
nodep->v3error(
"Parameter type's initial value isn't a type: " << nodep->prettyNameQ());
nodep->unlinkFrBack();
} else {
AstNodeDType* dtypep = VN_CAST(nodep->valuep(), NodeDType);
if (dtypep) {
dtypep->unlinkFrBack();
AstNode* const newp = new AstParamTypeDType(
nodep->fileline(), nodep->varType(), nodep->name(), VFlagChildDType(), dtypep);
nodep->replaceWith(newp);
VL_DO_DANGLING(nodep->deleteTree(), nodep);
} else {
dtypep = new AstVoidDType{nodep->fileline()};
}
AstNode* const newp = new AstParamTypeDType{nodep->fileline(), nodep->varType(),
nodep->name(), VFlagChildDType{}, dtypep};
nodep->replaceWith(newp);
VL_DO_DANGLING(nodep->deleteTree(), nodep);
return;
}