Internals: Duplicate code cleanup. No functional change intended.

This commit is contained in:
Wilson Snyder
2026-08-23 16:24:59 -04:00
parent d2760be0d4
commit df0d801790
3 changed files with 25 additions and 59 deletions
+10 -30
View File
@@ -489,40 +489,19 @@ class EmitCSyms final : EmitCBaseVisitorConst {
+ "__VforceRd" + '"';
stmt += ", {";
// Find __VforceEn
{
const std::string enableSignalKey = getKeyName(scopep, varp->name() + "__VforceEn");
for (const std::string forceControlSuffix : {"__VforceEn", "__VforceVal"}) {
const std::string enableSignalKey
= getKeyName(scopep, varp->name() + forceControlSuffix);
const std::map<const std::string, ScopeVarData>::const_iterator itpair
= m_scopeVars.find(enableSignalKey);
if (itpair == m_scopeVars.end()) {
varp->v3fatalSrc("Signal " << varp->prettyNameQ()
<< " is marked forceable, but the force enable signal '"
<< varp->name() << "__VforceEn"
<< "' can not be found in m_scopeVars with key '"
<< enableSignalKey << "'.");
}
const ScopeVarData& svd = itpair->second;
const AstScope* const scopep = svd.m_scopep;
const AstVar* const varp = svd.m_varp;
const VarDims dims = dimsFor(svd);
stmt
+= insertVarStatement(svd, scopep, varp, dims.udim, dims.pdim, boundsString(dims));
}
stmt += ",";
// Find __VforceVal
{
const std::string valueSignalKey = getKeyName(scopep, varp->name() + "__VforceVal");
const std::map<const std::string, ScopeVarData>::const_iterator itpair
= m_scopeVars.find(valueSignalKey);
if (itpair == m_scopeVars.end()) {
varp->v3fatalSrc("Signal " << varp->prettyNameQ()
<< " is marked forceable, but the force value signal '"
<< varp->name() << "__VforceVal"
<< "' can not be found in m_scopeVars with key '"
<< valueSignalKey << "'.");
varp->v3fatalSrc("Signal "
<< varp->prettyNameQ()
<< " is marked forceable, but the force control signal '"
<< varp->name() << forceControlSuffix
<< "' can not be found in m_scopeVars with key '"
<< enableSignalKey << "'.");
}
const ScopeVarData& svd = itpair->second;
@@ -531,6 +510,7 @@ class EmitCSyms final : EmitCBaseVisitorConst {
const VarDims dims = dimsFor(svd);
stmt
+= insertVarStatement(svd, scopep, varp, dims.udim, dims.pdim, boundsString(dims));
if (forceControlSuffix == "__VforceEn") stmt += ",";
}
stmt += "}";
+11 -16
View File
@@ -377,6 +377,13 @@ class LinkCellsVisitor final : public VNVisitor {
return finalEdgep->cellp();
}
void assignParamNumbers(AstPin* const firstPinp) {
for (AstPin* pinp = firstPinp; pinp; pinp = VN_AS(pinp->nextp(), Pin)) {
pinp->param(true);
if (pinp->name() == "") pinp->name("__paramNumber" + cvtToStr(pinp->pinNum()));
}
}
// VISITORS
void visit(AstNetlist* nodep) override {
readModNames();
@@ -520,10 +527,7 @@ class LinkCellsVisitor final : public VNVisitor {
}
}
iterateChildren(nodep);
for (AstPin* pinp = nodep->paramsp(); pinp; pinp = VN_AS(pinp->nextp(), Pin)) {
pinp->param(true);
if (pinp->name() == "") pinp->name("__paramNumber" + cvtToStr(pinp->pinNum()));
}
assignParamNumbers(nodep->paramsp());
// Parser didn't know what was interface, resolve now
// For historical reasons virtual interface reference variables remain VARs
if (m_varp && !nodep->isVirtual()) m_varp->setIfaceRef();
@@ -669,10 +673,7 @@ class LinkCellsVisitor final : public VNVisitor {
for (AstPin* pinp = nodep->pinsp(); pinp; pinp = VN_AS(pinp->nextp(), Pin)) {
if (pinp->name() == "") pinp->name("__pinNumber" + cvtToStr(pinp->pinNum()));
}
for (AstPin* pinp = nodep->paramsp(); pinp; pinp = VN_AS(pinp->nextp(), Pin)) {
pinp->param(true);
if (pinp->name() == "") pinp->name("__paramNumber" + cvtToStr(pinp->pinNum()));
}
assignParamNumbers(nodep->paramsp());
if (nodep->modp()) {
nodep->modName(nodep->modp()->name());
// Note what pins exist
@@ -807,10 +808,7 @@ class LinkCellsVisitor final : public VNVisitor {
void visit(AstRefDType* nodep) override {
iterateChildren(nodep);
for (AstPin* pinp = nodep->paramsp(); pinp; pinp = VN_AS(pinp->nextp(), Pin)) {
pinp->param(true);
if (pinp->name() == "") pinp->name("__paramNumber" + cvtToStr(pinp->pinNum()));
}
assignParamNumbers(nodep->paramsp());
if (m_varp) { // Parser didn't know what was interface, resolve now
AstNodeModule* const varModp = findModuleSym(nodep->name(), m_modp->libname());
if (AstIface* const ifacep = VN_CAST(varModp, Iface)) {
@@ -824,14 +822,11 @@ class LinkCellsVisitor final : public VNVisitor {
}
void visit(AstClassOrPackageRef* nodep) override {
iterateChildren(nodep);
assignParamNumbers(nodep->paramsp());
// Inside a class, an extends or reference to another class
// Note we don't add a V3GraphEdge{vertex(m_modp), vertex(nodep->classOrPackagep()}
// We could for an extends, but for another reference we cannot, as
// it is legal to have classes both with parameters that link to each other
for (AstPin* pinp = nodep->paramsp(); pinp; pinp = VN_AS(pinp->nextp(), Pin)) {
pinp->param(true);
if (pinp->name() == "") pinp->name("__paramNumber" + cvtToStr(pinp->pinNum()));
}
}
void visit(AstVar* nodep) override {
+4 -13
View File
@@ -6293,24 +6293,15 @@ class LinkDotResolveVisitor final : public VNVisitor {
}
}
}
void visit(AstPackageImport* nodep) override {
// No longer needed
LINKDOT_VISIT_START();
checkNoDot(nodep);
if (m_statep->forParamed()) VL_DO_DANGLING(pushDeletep(nodep->unlinkFrBack()), nodep);
}
void visit(AstPackageExport* nodep) override {
// No longer needed
LINKDOT_VISIT_START();
checkNoDot(nodep);
if (m_statep->forParamed()) VL_DO_DANGLING(pushDeletep(nodep->unlinkFrBack()), nodep);
}
void visit(AstPackageExportStarStar* nodep) override {
void visitPackageImportOrExport(AstNode* nodep) {
// No longer needed
LINKDOT_VISIT_START();
checkNoDot(nodep);
if (m_statep->forParamed()) VL_DO_DANGLING(pushDeletep(nodep->unlinkFrBack()), nodep);
}
void visit(AstPackageImport* nodep) override { visitPackageImportOrExport(nodep); }
void visit(AstPackageExport* nodep) override { visitPackageImportOrExport(nodep); }
void visit(AstPackageExportStarStar* nodep) override { visitPackageImportOrExport(nodep); }
void visit(AstCellRef* nodep) override {
LINKDOT_VISIT_START();
UINFO(5, indent() << "visit " << nodep);