Fix parameterized class module parameters (#6754) (#6834)

This commit is contained in:
em2machine
2025-12-19 12:57:15 -05:00
committed by GitHub
parent 5244766b7b
commit 3ceac0b37e
20 changed files with 497 additions and 7 deletions
+14
View File
@@ -5345,6 +5345,20 @@ class LinkDotResolveVisitor final : public VNVisitor {
nodep->typedefp(defp);
nodep->classOrPackagep(foundp->classOrPackagep());
resolvedCapturedTypedef = true;
// class capture: capture typedef references inside parameterized classes
// Only capture if we're referencing from OUTSIDE the class (not
// self-references)
if (m_statep->forPrimary()) {
AstClass* const classp = VN_CAST(nodep->classOrPackagep(), Class);
if (classp && classp->hasGParam() && classp != m_modp) {
UINFO(9, indent()
<< "class capture add typedef name=" << nodep->name()
<< " class=" << classp->name() << " typedef=" << defp);
V3LinkDotIfaceCapture::addClass(nodep, classp, m_modp, defp);
}
}
} else if (AstParamTypeDType* const defp
= foundp ? VN_CAST(foundp->nodep(), ParamTypeDType) : nullptr) {
if (defp == nodep->backp()) { // Where backp is typically typedef