mirror of
https://github.com/verilator/verilator.git
synced 2026-10-06 01:54:01 +02:00
Fix class initial-automatic insertion order (#7086 repair)
This commit is contained in:
+12
-7
@@ -291,18 +291,23 @@ private:
|
||||
iterateChildren(nodep);
|
||||
}
|
||||
UASSERT_OBJ(m_ctorp, nodep, "class constructor missing"); // LinkDot always makes it
|
||||
AstNode* insertp = nullptr;
|
||||
for (AstInitialAutomatic* initialp : m_initialps) {
|
||||
if (AstNode* const newp = initialp->stmtsp()) {
|
||||
newp->unlinkFrBackWithNext();
|
||||
if (!m_ctorp->stmtsp()) {
|
||||
m_ctorp->addStmtsp(newp);
|
||||
} else {
|
||||
m_ctorp->stmtsp()->addHereThisAsNext(newp);
|
||||
}
|
||||
if (AstNode* const movep = initialp->stmtsp()) {
|
||||
movep->unlinkFrBackWithNext();
|
||||
// Next InitialAutomatic must go in order after what we inserted
|
||||
insertp = AstNode::addNextNull(insertp, movep);
|
||||
}
|
||||
VL_DO_DANGLING(pushDeletep(initialp->unlinkFrBack()), initialp);
|
||||
}
|
||||
m_initialps.clear();
|
||||
if (insertp) {
|
||||
if (!m_ctorp->stmtsp()) {
|
||||
m_ctorp->addStmtsp(insertp);
|
||||
} else {
|
||||
m_ctorp->stmtsp()->addHereThisAsNext(insertp);
|
||||
}
|
||||
}
|
||||
}
|
||||
void visit(AstInitialAutomatic* nodep) override {
|
||||
m_initialps.push_back(nodep);
|
||||
|
||||
Reference in New Issue
Block a user