Class AstCycleTest#

Inheritance Relationships#

Base Type#

Class Documentation#

class AstCycleTest : public AstPrePostOrderTraversal#

AstCycleTest is based on the successor information of SgNodes (the same information that is used by the traversals). It tests such that it allows a preorder traversal to revisit nodes but reports an error if the traversal would run into a cycle. If a cycle is found it reports the list of SgNodes that are part of the cycle to stdout, starting with “CYCLE FOUND: …” and stops testing. Usage: AstCycleTest t; t.traverse(SgNode* n); // where n is the root node of the subtree to be tested.

Public Functions

std::list<SgNode*> determineCycle(std::list<SgNode*> &l, SgNode *node)#

determines whether the given sequence l of nodes extended by node creates a cycle the found cycle is returned. If no cycle is found, the returned list is empty.

virtual void preOrderVisit(SgNode *node)#
virtual void setChildrenContainer(SgNode *node, std::vector<SgNode*> &c)#

In case of a cycle the traversal does not continue to prevent an infinite recursion of the traversal.

virtual void postOrderVisit(SgNode *node)#
inline virtual void modifyChildrenContainer(SgNode *node, std::vector<SgNode*> &c)#

Public Members

std::list<SgNode*> activeNodes#