Refactor `AstMemberSel` creation with `AstVar` (#5251)

No functional change intended.

Signed-off-by: Krzysztof Bieganski <kbieganski@antmicro.com>
This commit is contained in:
Krzysztof Bieganski 2024-07-11 16:42:58 +02:00 committed by GitHub
parent bbb223f217
commit abb46c9cb2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 10 additions and 12 deletions

View File

@ -1564,12 +1564,7 @@ public:
this->fromp(fromp);
dtypep(nullptr); // V3Width will resolve
}
AstMemberSel(FileLine* fl, AstNodeExpr* fromp, AstNodeDType* dtp)
: ASTGEN_SUPER_MemberSel(fl)
, m_name{dtp->name()} {
this->fromp(fromp);
dtypep(dtp);
}
AstMemberSel(FileLine* fl, AstNodeExpr* fromp, AstVar* varp);
ASTGEN_MEMBERS_AstMemberSel;
void dump(std::ostream& str) const override;
void dumpJson(std::ostream& str) const override;

View File

@ -1831,6 +1831,13 @@ AstNodeUOrStructDType* AstMemberDType::getChildStructp() const {
return VN_CAST(subdtp->skipRefp(), NodeUOrStructDType); // Maybe nullptr
}
AstMemberSel::AstMemberSel(FileLine* fl, AstNodeExpr* fromp, AstVar* varp)
: ASTGEN_SUPER_MemberSel(fl)
, m_name{varp->name()} {
this->fromp(fromp);
this->varp(varp);
dtypep(varp->dtypep());
}
bool AstMemberSel::same(const AstNode* samep) const {
const AstMemberSel* const sp = VN_DBG_AS(samep, MemberSel);
return sp != nullptr && access() == sp->access() && fromp()->isSame(sp->fromp())

View File

@ -46,7 +46,6 @@
#include "V3MemberMap.h"
#include <set>
#include <vector>
VL_DEFINE_DEBUG_FUNCTIONS;
@ -167,9 +166,7 @@ public:
AstMemberSel* const memberselp = new AstMemberSel{
varp->fileline(),
new AstVarRef{varp->fileline(), m_instance.m_handlep, VAccess::WRITE},
varp->dtypep()};
memberselp->name(varp->name());
memberselp->varp(VN_AS(memberMap.findMember(m_instance.m_classp, varp->name()), Var));
VN_AS(memberMap.findMember(m_instance.m_classp, varp->name()), Var)};
AstNode* initAsgnp
= new AstAssign{varp->fileline(), memberselp,
new AstVarRef{varp->fileline(), varp, VAccess::READ}};
@ -307,8 +304,7 @@ class DynScopeVisitor final : public VNVisitor {
refp->unlinkFrBack(&handle);
AstMemberSel* const membersel = new AstMemberSel{
refp->fileline(), new AstVarRef{refp->fileline(), dynScope.m_handlep, refp->access()},
refp->dtypep()};
membersel->name(refp->varp()->name());
refp->varp()};
if (refp->varp()->direction() == VDirection::INPUT) {
membersel->varp(
VN_AS(m_memberMap.findMember(dynScope.m_classp, refp->varp()->name()), Var));