Internals: Refactor to add AstNodeProcedure. No functional change intended.
This commit is contained in:
parent
0fcc7f2987
commit
6ab3d8f3ed
|
|
@ -108,7 +108,7 @@ private:
|
|||
// No need to do statements under it, they're already moved.
|
||||
// iterateChildren(nodep);
|
||||
}
|
||||
virtual void visit(AstInitial* nodep) VL_OVERRIDE { // LCOV_EXCL_LINE
|
||||
virtual void visit(AstNodeProcedure* nodep) VL_OVERRIDE { // LCOV_EXCL_LINE
|
||||
nodep->v3fatalSrc("Node should have been under ACTIVE");
|
||||
}
|
||||
virtual void visit(AstAssignAlias* nodep) VL_OVERRIDE { // LCOV_EXCL_LINE
|
||||
|
|
@ -117,15 +117,9 @@ private:
|
|||
virtual void visit(AstAssignW* nodep) VL_OVERRIDE { // LCOV_EXCL_LINE
|
||||
nodep->v3fatalSrc("Node should have been under ACTIVE");
|
||||
}
|
||||
virtual void visit(AstAlways* nodep) VL_OVERRIDE { // LCOV_EXCL_LINE
|
||||
nodep->v3fatalSrc("Node should have been under ACTIVE");
|
||||
}
|
||||
virtual void visit(AstAlwaysPublic* nodep) VL_OVERRIDE { // LCOV_EXCL_LINE
|
||||
nodep->v3fatalSrc("Node should have been under ACTIVE");
|
||||
}
|
||||
virtual void visit(AstFinal* nodep) VL_OVERRIDE { // LCOV_EXCL_LINE
|
||||
nodep->v3fatalSrc("Node should have been deleted");
|
||||
}
|
||||
//--------------------
|
||||
virtual void visit(AstNodeMath*) VL_OVERRIDE {} // Accelerate
|
||||
virtual void visit(AstVarScope*) VL_OVERRIDE {} // Accelerate
|
||||
|
|
|
|||
14
src/V3Ast.h
14
src/V3Ast.h
|
|
@ -2090,6 +2090,20 @@ public:
|
|||
virtual bool same(const AstNode*) const { return true; }
|
||||
};
|
||||
|
||||
class AstNodeProcedure : public AstNode {
|
||||
// IEEE procedure: initial, final, always
|
||||
public:
|
||||
AstNodeProcedure(AstType t, FileLine* fl, AstNode* bodysp)
|
||||
: AstNode(t, fl) {
|
||||
addNOp2p(bodysp);
|
||||
}
|
||||
ASTNODE_BASE_FUNCS(NodeProcedure)
|
||||
// METHODS
|
||||
AstNode* bodysp() const { return op2p(); } // op2 = Statements to evaluate
|
||||
void addStmtp(AstNode* nodep) { addOp2p(nodep); }
|
||||
bool isJustOneBodyStmt() const { return bodysp() && !bodysp()->nextp(); }
|
||||
};
|
||||
|
||||
class AstNodeStmt : public AstNode {
|
||||
// Statement -- anything that's directly under a function
|
||||
bool m_statement; // Really a statement (e.g. not a function with return)
|
||||
|
|
|
|||
|
|
@ -3076,25 +3076,34 @@ public:
|
|||
bool hasCombo() const; // Includes a COMBO SenItem
|
||||
};
|
||||
|
||||
class AstAlways : public AstNode {
|
||||
class AstFinal : public AstNodeProcedure {
|
||||
public:
|
||||
AstFinal(FileLine* fl, AstNode* bodysp)
|
||||
: ASTGEN_SUPER(fl, bodysp) {}
|
||||
ASTNODE_NODE_FUNCS(Final)
|
||||
};
|
||||
|
||||
class AstInitial : public AstNodeProcedure {
|
||||
public:
|
||||
AstInitial(FileLine* fl, AstNode* bodysp)
|
||||
: ASTGEN_SUPER(fl, bodysp) {}
|
||||
ASTNODE_NODE_FUNCS(Initial)
|
||||
};
|
||||
|
||||
class AstAlways : public AstNodeProcedure {
|
||||
VAlwaysKwd m_keyword;
|
||||
|
||||
public:
|
||||
AstAlways(FileLine* fl, VAlwaysKwd keyword, AstSenTree* sensesp, AstNode* bodysp)
|
||||
: ASTGEN_SUPER(fl)
|
||||
: ASTGEN_SUPER(fl, bodysp)
|
||||
, m_keyword(keyword) {
|
||||
addNOp1p(sensesp);
|
||||
addNOp2p(bodysp);
|
||||
}
|
||||
ASTNODE_NODE_FUNCS(Always)
|
||||
//
|
||||
virtual void dump(std::ostream& str) const;
|
||||
AstSenTree* sensesp() const { return VN_CAST(op1p(), SenTree); } // op1 = Sensitivity list
|
||||
AstNode* bodysp() const { return op2p(); } // op2 = Statements to evaluate
|
||||
void addStmtp(AstNode* nodep) { addOp2p(nodep); }
|
||||
VAlwaysKwd keyword() const { return m_keyword; }
|
||||
// Special accessors
|
||||
bool isJustOneBodyStmt() const { return bodysp() && !bodysp()->nextp(); }
|
||||
};
|
||||
|
||||
class AstAlwaysPublic : public AstNodeStmt {
|
||||
|
|
@ -4433,28 +4442,6 @@ public:
|
|||
void joinType(const VJoinType& flag) { m_joinType = flag; }
|
||||
};
|
||||
|
||||
class AstInitial : public AstNode {
|
||||
public:
|
||||
AstInitial(FileLine* fl, AstNode* bodysp)
|
||||
: ASTGEN_SUPER(fl) {
|
||||
addNOp1p(bodysp);
|
||||
}
|
||||
ASTNODE_NODE_FUNCS(Initial)
|
||||
AstNode* bodysp() const { return op1p(); } // op1 = Expressions to evaluate
|
||||
// Special accessors
|
||||
bool isJustOneBodyStmt() const { return bodysp() && !bodysp()->nextp(); }
|
||||
};
|
||||
|
||||
class AstFinal : public AstNode {
|
||||
public:
|
||||
AstFinal(FileLine* fl, AstNode* bodysp)
|
||||
: ASTGEN_SUPER(fl) {
|
||||
addNOp1p(bodysp);
|
||||
}
|
||||
ASTNODE_NODE_FUNCS(Final)
|
||||
AstNode* bodysp() const { return op1p(); } // op1 = Expressions to evaluate
|
||||
};
|
||||
|
||||
class AstInside : public AstNodeMath {
|
||||
public:
|
||||
AstInside(FileLine* fl, AstNode* exprp, AstNode* itemsp)
|
||||
|
|
|
|||
|
|
@ -476,15 +476,7 @@ private:
|
|||
LifeVisitor visitor(nodep, m_statep);
|
||||
}
|
||||
}
|
||||
virtual void visit(AstAlways* nodep) VL_OVERRIDE {
|
||||
// Usage model 2: Cleanup basic blocks
|
||||
LifeVisitor visitor(nodep, m_statep);
|
||||
}
|
||||
virtual void visit(AstInitial* nodep) VL_OVERRIDE {
|
||||
// Usage model 2: Cleanup basic blocks
|
||||
LifeVisitor visitor(nodep, m_statep);
|
||||
}
|
||||
virtual void visit(AstFinal* nodep) VL_OVERRIDE {
|
||||
virtual void visit(AstNodeProcedure* nodep) VL_OVERRIDE {
|
||||
// Usage model 2: Cleanup basic blocks
|
||||
LifeVisitor visitor(nodep, m_statep);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -463,8 +463,7 @@ private:
|
|||
iterateChildren(nodep);
|
||||
m_valueModp = upperValueModp;
|
||||
}
|
||||
virtual void visit(AstInitial* nodep) VL_OVERRIDE { visitIterateNoValueMod(nodep); }
|
||||
virtual void visit(AstFinal* nodep) VL_OVERRIDE { visitIterateNoValueMod(nodep); }
|
||||
virtual void visit(AstNodeProcedure* nodep) VL_OVERRIDE { visitIterateNoValueMod(nodep); }
|
||||
virtual void visit(AstAlways* nodep) VL_OVERRIDE {
|
||||
m_inAlways = true;
|
||||
visitIterateNoValueMod(nodep);
|
||||
|
|
|
|||
|
|
@ -192,18 +192,10 @@ private:
|
|||
virtual void visit(AstActive* nodep) VL_OVERRIDE {
|
||||
nodep->v3fatalSrc("Actives now made after scoping");
|
||||
}
|
||||
virtual void visit(AstInitial* nodep) VL_OVERRIDE {
|
||||
virtual void visit(AstNodeProcedure* nodep) VL_OVERRIDE {
|
||||
// Add to list of blocks under this scope
|
||||
UINFO(4, " Move " << nodep << endl);
|
||||
AstInitial* clonep = nodep->cloneTree(false);
|
||||
nodep->user2p(clonep);
|
||||
m_scopep->addActivep(clonep);
|
||||
iterateChildren(clonep); // We iterate under the *clone*
|
||||
}
|
||||
virtual void visit(AstFinal* nodep) VL_OVERRIDE {
|
||||
// Add to list of blocks under this scope
|
||||
UINFO(4, " Move " << nodep << endl);
|
||||
AstFinal* clonep = nodep->cloneTree(false);
|
||||
AstNode* clonep = nodep->cloneTree(false);
|
||||
nodep->user2p(clonep);
|
||||
m_scopep->addActivep(clonep);
|
||||
iterateChildren(clonep); // We iterate under the *clone*
|
||||
|
|
@ -232,14 +224,6 @@ private:
|
|||
m_scopep->addActivep(clonep);
|
||||
iterateChildren(clonep); // We iterate under the *clone*
|
||||
}
|
||||
virtual void visit(AstAlways* nodep) VL_OVERRIDE {
|
||||
// Add to list of blocks under this scope
|
||||
UINFO(4, " Move " << nodep << endl);
|
||||
AstNode* clonep = nodep->cloneTree(false);
|
||||
nodep->user2p(clonep);
|
||||
m_scopep->addActivep(clonep);
|
||||
iterateChildren(clonep); // We iterate under the *clone*
|
||||
}
|
||||
virtual void visit(AstAlwaysPublic* nodep) VL_OVERRIDE {
|
||||
// Add to list of blocks under this scope
|
||||
UINFO(4, " Move " << nodep << endl);
|
||||
|
|
@ -380,12 +364,10 @@ private:
|
|||
}
|
||||
}
|
||||
|
||||
virtual void visit(AstInitial* nodep) VL_OVERRIDE { movedDeleteOrIterate(nodep); }
|
||||
virtual void visit(AstFinal* nodep) VL_OVERRIDE { movedDeleteOrIterate(nodep); }
|
||||
virtual void visit(AstNodeProcedure* nodep) VL_OVERRIDE { movedDeleteOrIterate(nodep); }
|
||||
virtual void visit(AstAssignAlias* nodep) VL_OVERRIDE { movedDeleteOrIterate(nodep); }
|
||||
virtual void visit(AstAssignVarScope* nodep) VL_OVERRIDE { movedDeleteOrIterate(nodep); }
|
||||
virtual void visit(AstAssignW* nodep) VL_OVERRIDE { movedDeleteOrIterate(nodep); }
|
||||
virtual void visit(AstAlways* nodep) VL_OVERRIDE { movedDeleteOrIterate(nodep); }
|
||||
virtual void visit(AstAlwaysPublic* nodep) VL_OVERRIDE { movedDeleteOrIterate(nodep); }
|
||||
virtual void visit(AstCoverToggle* nodep) VL_OVERRIDE { movedDeleteOrIterate(nodep); }
|
||||
virtual void visit(AstNodeFTask* nodep) VL_OVERRIDE { movedDeleteOrIterate(nodep); }
|
||||
|
|
|
|||
Loading…
Reference in New Issue