Internals: Make AstAlwaysPost an AstNodeProcedure. (#2959)
This seems to belong there, eliminates some code duplication in V3Clock, and also enables splitting AstAlwaysPost statements into different functions in V3Order, but should otherwise have little effect.
This commit is contained in:
parent
88fed4bc2f
commit
5e95cc9280
|
|
@ -3349,6 +3349,7 @@ public:
|
|||
void sensesp(AstSenTree* nodep) { setOp1p(nodep); }
|
||||
VAlwaysKwd keyword() const { return m_keyword; }
|
||||
};
|
||||
|
||||
class AstAlwaysPostponed final : public AstNodeProcedure {
|
||||
// Like always but postponement scheduling region
|
||||
|
||||
|
|
@ -3358,6 +3359,16 @@ public:
|
|||
ASTNODE_NODE_FUNCS(AlwaysPostponed)
|
||||
};
|
||||
|
||||
class AstAlwaysPost final : public AstNodeProcedure {
|
||||
// Like always but post assignments for memory assignment IFs
|
||||
public:
|
||||
AstAlwaysPost(FileLine* fl, AstSenTree* sensesp, AstNode* bodysp)
|
||||
: ASTGEN_SUPER(fl, bodysp) {
|
||||
addNOp1p(sensesp);
|
||||
}
|
||||
ASTNODE_NODE_FUNCS(AlwaysPost)
|
||||
};
|
||||
|
||||
class AstAlwaysPublic final : public AstNodeStmt {
|
||||
// "Fake" sensitivity created by /*verilator public_flat_rw @(edgelist)*/
|
||||
// Body statements are just AstVarRefs to the public signals
|
||||
|
|
@ -3378,20 +3389,6 @@ public:
|
|||
bool isJustOneBodyStmt() const { return bodysp() && !bodysp()->nextp(); }
|
||||
};
|
||||
|
||||
class AstAlwaysPost final : public AstNode {
|
||||
// Like always but post assignments for memory assignment IFs
|
||||
public:
|
||||
AstAlwaysPost(FileLine* fl, AstSenTree* sensesp, AstNode* bodysp)
|
||||
: ASTGEN_SUPER(fl) {
|
||||
addNOp1p(sensesp);
|
||||
addNOp2p(bodysp);
|
||||
}
|
||||
ASTNODE_NODE_FUNCS(AlwaysPost)
|
||||
//
|
||||
AstNode* bodysp() const { return op2p(); } // op2 = Statements to evaluate
|
||||
void addBodysp(AstNode* newp) { addOp2p(newp); }
|
||||
};
|
||||
|
||||
class AstAssign final : public AstNodeAssign {
|
||||
public:
|
||||
AstAssign(FileLine* fl, AstNode* lhsp, AstNode* rhsp)
|
||||
|
|
|
|||
|
|
@ -301,20 +301,6 @@ private:
|
|||
}
|
||||
VL_DO_DANGLING(nodep->unlinkFrBack()->deleteTree(), nodep);
|
||||
}
|
||||
virtual void visit(AstAlwaysPost* nodep) override {
|
||||
if (AstNode* stmtsp = nodep->bodysp()) {
|
||||
stmtsp->unlinkFrBackWithNext();
|
||||
nodep->addNextHere(stmtsp);
|
||||
}
|
||||
VL_DO_DANGLING(nodep->unlinkFrBack()->deleteTree(), nodep);
|
||||
}
|
||||
virtual void visit(AstAlwaysPostponed* nodep) override {
|
||||
if (AstNode* stmtsp = nodep->bodysp()) {
|
||||
stmtsp->unlinkFrBackWithNext();
|
||||
nodep->addNextHere(stmtsp);
|
||||
}
|
||||
VL_DO_DANGLING(nodep->unlinkFrBack()->deleteTree(), nodep);
|
||||
}
|
||||
virtual void visit(AstCoverToggle* nodep) override {
|
||||
// nodep->dumpTree(cout, "ct:");
|
||||
// COVERTOGGLE(INC, ORIG, CHANGE) ->
|
||||
|
|
|
|||
|
|
@ -351,7 +351,7 @@ private:
|
|||
new AstVarRef(nodep->fileline(), setvscp, VAccess::READ),
|
||||
nullptr, nullptr);
|
||||
UINFO(9, " Created " << postLogicp << endl);
|
||||
finalp->addBodysp(postLogicp);
|
||||
finalp->addStmtp(postLogicp);
|
||||
finalp->user3p(setvscp); // Remember IF's vset variable
|
||||
finalp->user4p(postLogicp); // and the associated IF, as we may be able to reuse it
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue