Derive the prefix instead of hardcoding TOP__

This commit is contained in:
Yilin Li 2026-06-10 13:19:38 +02:00
parent 22cb70a77d
commit 1d6d921488
2 changed files with 9 additions and 5 deletions

View File

@ -463,9 +463,7 @@ void EmitCFunc::emitVarReset(const string& prefix, AstVar* varp, bool constructi
// 'constructing' indicates that the object was just constructed, so if it is a string or
// something that starts off clear already, no need to clear it again
AstNodeDType* const dtypep = varp->dtypep()->skipRefp();
const string vlSelf = m_cfuncp && m_cfuncp->isStatic()
? "vlSymsp->TOP__" + m_modp->name() + "."
: VSelfPointerText::replaceThis(m_useSelfForThis, "this->");
const string vlSelf = VSelfPointerText::replaceThis(m_useSelfForThis, "this->");
const string varNameProtected
= ((VN_IS(m_modp, Class) || varp->isFuncLocal()) || !prefix.empty())
? varp->nameProtect()

View File

@ -573,8 +573,14 @@ public:
+ "\", " + std::to_string(nodep->fileline()->lineno()) + ")->"),
memberVarp, resetp->constructing());
} else {
AstVar* const varp = VN_AS(fromp, NodeVarRef)->varp();
emitVarReset("", varp, resetp->constructing());
AstNodeVarRef* const fromVarRefp = VN_AS(fromp, NodeVarRef);
AstVar* const varp = fromVarRefp->varp();
const string prefix
= fromVarRefp->selfPointer().isEmpty()
? ""
: dereferenceString(
VN_AS(fromp, NodeVarRef)->selfPointerProtect(m_useSelfForThis));
emitVarReset(prefix, varp, resetp->constructing());
}
return;
}