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.
|
// No need to do statements under it, they're already moved.
|
||||||
// iterateChildren(nodep);
|
// 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");
|
nodep->v3fatalSrc("Node should have been under ACTIVE");
|
||||||
}
|
}
|
||||||
virtual void visit(AstAssignAlias* nodep) VL_OVERRIDE { // LCOV_EXCL_LINE
|
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
|
virtual void visit(AstAssignW* nodep) VL_OVERRIDE { // LCOV_EXCL_LINE
|
||||||
nodep->v3fatalSrc("Node should have been under ACTIVE");
|
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
|
virtual void visit(AstAlwaysPublic* nodep) VL_OVERRIDE { // LCOV_EXCL_LINE
|
||||||
nodep->v3fatalSrc("Node should have been under ACTIVE");
|
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(AstNodeMath*) VL_OVERRIDE {} // Accelerate
|
||||||
virtual void visit(AstVarScope*) 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; }
|
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 {
|
class AstNodeStmt : public AstNode {
|
||||||
// Statement -- anything that's directly under a function
|
// Statement -- anything that's directly under a function
|
||||||
bool m_statement; // Really a statement (e.g. not a function with return)
|
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
|
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;
|
VAlwaysKwd m_keyword;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
AstAlways(FileLine* fl, VAlwaysKwd keyword, AstSenTree* sensesp, AstNode* bodysp)
|
AstAlways(FileLine* fl, VAlwaysKwd keyword, AstSenTree* sensesp, AstNode* bodysp)
|
||||||
: ASTGEN_SUPER(fl)
|
: ASTGEN_SUPER(fl, bodysp)
|
||||||
, m_keyword(keyword) {
|
, m_keyword(keyword) {
|
||||||
addNOp1p(sensesp);
|
addNOp1p(sensesp);
|
||||||
addNOp2p(bodysp);
|
|
||||||
}
|
}
|
||||||
ASTNODE_NODE_FUNCS(Always)
|
ASTNODE_NODE_FUNCS(Always)
|
||||||
//
|
//
|
||||||
virtual void dump(std::ostream& str) const;
|
virtual void dump(std::ostream& str) const;
|
||||||
AstSenTree* sensesp() const { return VN_CAST(op1p(), SenTree); } // op1 = Sensitivity list
|
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; }
|
VAlwaysKwd keyword() const { return m_keyword; }
|
||||||
// Special accessors
|
|
||||||
bool isJustOneBodyStmt() const { return bodysp() && !bodysp()->nextp(); }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class AstAlwaysPublic : public AstNodeStmt {
|
class AstAlwaysPublic : public AstNodeStmt {
|
||||||
|
|
@ -4433,28 +4442,6 @@ public:
|
||||||
void joinType(const VJoinType& flag) { m_joinType = flag; }
|
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 {
|
class AstInside : public AstNodeMath {
|
||||||
public:
|
public:
|
||||||
AstInside(FileLine* fl, AstNode* exprp, AstNode* itemsp)
|
AstInside(FileLine* fl, AstNode* exprp, AstNode* itemsp)
|
||||||
|
|
|
||||||
|
|
@ -476,15 +476,7 @@ private:
|
||||||
LifeVisitor visitor(nodep, m_statep);
|
LifeVisitor visitor(nodep, m_statep);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
virtual void visit(AstAlways* nodep) VL_OVERRIDE {
|
virtual void visit(AstNodeProcedure* 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 {
|
|
||||||
// Usage model 2: Cleanup basic blocks
|
// Usage model 2: Cleanup basic blocks
|
||||||
LifeVisitor visitor(nodep, m_statep);
|
LifeVisitor visitor(nodep, m_statep);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -463,8 +463,7 @@ private:
|
||||||
iterateChildren(nodep);
|
iterateChildren(nodep);
|
||||||
m_valueModp = upperValueModp;
|
m_valueModp = upperValueModp;
|
||||||
}
|
}
|
||||||
virtual void visit(AstInitial* nodep) VL_OVERRIDE { visitIterateNoValueMod(nodep); }
|
virtual void visit(AstNodeProcedure* nodep) VL_OVERRIDE { visitIterateNoValueMod(nodep); }
|
||||||
virtual void visit(AstFinal* nodep) VL_OVERRIDE { visitIterateNoValueMod(nodep); }
|
|
||||||
virtual void visit(AstAlways* nodep) VL_OVERRIDE {
|
virtual void visit(AstAlways* nodep) VL_OVERRIDE {
|
||||||
m_inAlways = true;
|
m_inAlways = true;
|
||||||
visitIterateNoValueMod(nodep);
|
visitIterateNoValueMod(nodep);
|
||||||
|
|
|
||||||
|
|
@ -192,18 +192,10 @@ private:
|
||||||
virtual void visit(AstActive* nodep) VL_OVERRIDE {
|
virtual void visit(AstActive* nodep) VL_OVERRIDE {
|
||||||
nodep->v3fatalSrc("Actives now made after scoping");
|
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
|
// Add to list of blocks under this scope
|
||||||
UINFO(4, " Move " << nodep << endl);
|
UINFO(4, " Move " << nodep << endl);
|
||||||
AstInitial* clonep = nodep->cloneTree(false);
|
AstNode* 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);
|
|
||||||
nodep->user2p(clonep);
|
nodep->user2p(clonep);
|
||||||
m_scopep->addActivep(clonep);
|
m_scopep->addActivep(clonep);
|
||||||
iterateChildren(clonep); // We iterate under the *clone*
|
iterateChildren(clonep); // We iterate under the *clone*
|
||||||
|
|
@ -232,14 +224,6 @@ private:
|
||||||
m_scopep->addActivep(clonep);
|
m_scopep->addActivep(clonep);
|
||||||
iterateChildren(clonep); // We iterate under the *clone*
|
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 {
|
virtual void visit(AstAlwaysPublic* nodep) VL_OVERRIDE {
|
||||||
// Add to list of blocks under this scope
|
// Add to list of blocks under this scope
|
||||||
UINFO(4, " Move " << nodep << endl);
|
UINFO(4, " Move " << nodep << endl);
|
||||||
|
|
@ -380,12 +364,10 @@ private:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void visit(AstInitial* nodep) VL_OVERRIDE { movedDeleteOrIterate(nodep); }
|
virtual void visit(AstNodeProcedure* nodep) VL_OVERRIDE { movedDeleteOrIterate(nodep); }
|
||||||
virtual void visit(AstFinal* nodep) VL_OVERRIDE { movedDeleteOrIterate(nodep); }
|
|
||||||
virtual void visit(AstAssignAlias* 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(AstAssignVarScope* nodep) VL_OVERRIDE { movedDeleteOrIterate(nodep); }
|
||||||
virtual void visit(AstAssignW* 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(AstAlwaysPublic* nodep) VL_OVERRIDE { movedDeleteOrIterate(nodep); }
|
||||||
virtual void visit(AstCoverToggle* nodep) VL_OVERRIDE { movedDeleteOrIterate(nodep); }
|
virtual void visit(AstCoverToggle* nodep) VL_OVERRIDE { movedDeleteOrIterate(nodep); }
|
||||||
virtual void visit(AstNodeFTask* nodep) VL_OVERRIDE { movedDeleteOrIterate(nodep); }
|
virtual void visit(AstNodeFTask* nodep) VL_OVERRIDE { movedDeleteOrIterate(nodep); }
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue