ROSE
0.11.96.11
|
This namespace contains template functions that operate on the ROSE AST.
Classes | |
struct | AncestorTypeFinder |
helper class for _ancestor More... | |
struct | ConstLike |
projects the constness of T1 on T2 More... | |
struct | ConstLike< const T1, T2 > |
struct | DefaultHandler |
struct DefaultHandler More... | |
struct | DispatchHandler |
struct DispatchHandler More... | |
struct | DispatchHelper |
struct | InitNameCloner |
Functor copying an initialized name into a different scope. More... | |
struct | SageInserter |
Generic inserter for sage containers. More... | |
struct | ScopeSetter |
Functor setting the scope of a sage node to a specified (at Functor construction time) scope. More... | |
struct | TraversalClass |
struct | TraversalFunction |
executes a functor for a specific node type More... | |
struct | VarRefBuilder |
Functor building a variable reference from an initialized name. More... | |
struct | VisitDispatcher |
Functions | |
template<class SageSequenceContainer > | |
SageInserter< SageSequenceContainer > | sage_inserter (SageSequenceContainer &cont) |
generates a SageInserter, adding elements at the end of a sequence More... | |
void | report_error (std::string desc, const char *file=nullptr, size_t ln=0) |
void | unexpected_node (const SgNode &n, const char *file=nullptr, size_t ln=0) |
template<class T > | |
T & | deref (T *ptr, const char *file=0, size_t ln=0) |
dereferences an object (= checked dereference in debug mode) | |
template<class RoseVisitor > | |
std::remove_const< typename std::remove_reference< RoseVisitor >::type >::type | _dispatch (RoseVisitor &&rv, SgNode *n) |
template<class RoseVisitor > | |
std::remove_const< typename std::remove_reference< RoseVisitor >::type >::type | dispatch (RoseVisitor &&rv, SgNode *n) |
uncovers the type of SgNode and passes it to an function "handle" in RoseVisitor. More... | |
template<class RoseVisitor > | |
std::remove_const< typename std::remove_reference< RoseVisitor >::type >::type | dispatch (RoseVisitor &&rv, const SgNode *n) |
template<class AncestorNode , class QualSgNode > | |
AncestorNode * | _ancestor (QualSgNode &n) |
implements the ancestor search More... | |
template<class AncestorNode > | |
AncestorNode * | ancestor (SgNode *n) |
finds an ancestor node with a given type More... | |
template<class AncestorNode > | |
const AncestorNode * | ancestor (const SgNode *n) |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. | |
template<class AncestorNode > | |
AncestorNode & | ancestor (SgNode &n) |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. | |
template<class AncestorNode > | |
const AncestorNode & | ancestor (const SgNode &n) |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. | |
template<class SageNode , class SageChild > | |
void | swap_child (SageNode &lhs, SageNode &rhs, SageChild *(SageNode::*getter)() const, void(SageNode::*setter)(SageChild *)) |
swaps children (of equal kind) between two ancestor nodes of the same type More... | |
template<class SageParent , class SageChild > | |
void | linkParentChild (SageParent &parent, SageChild &child, void(SageParent::*setter)(SageChild *)) |
SageInserter<SageSequenceContainer> sg::sage_inserter | ( | SageSequenceContainer & | cont | ) |
generates a SageInserter, adding elements at the end of a sequence
SageSequenceContainer,a | sage container that supports appending an element |
Definition at line 140 of file sageFunctors.h.
|
inline |
uncovers the type of SgNode and passes it to an function "handle" in RoseVisitor.
which should be overloaded with every possible target node. After the traversal, RoseVisitor should contain the intended return data.
RoseVisitor. | The visitor that will be called back with the recovered type information. It must implement "handle." The handle function with the most suitable SgNode type will get invoked. |
rv | an instance of a rose visitor; ie any class with a "handle" function. Note: rv is essentially passed by value (similar to STL's for_each). |
n | The root of the tree to visit. SgNode |
The following code has two classes.
Definition at line 900 of file sageGeneric.h.
Referenced by _ancestor(), assert_sage_type(), and sg::TraversalClass< GVisitor >::visit().
AncestorNode* sg::_ancestor | ( | QualSgNode & | n | ) |
implements the ancestor search
see comments for AncestorTypeFinder
Definition at line 962 of file sageGeneric.h.
References dispatch().
AncestorNode* sg::ancestor | ( | SgNode * | n | ) |
finds an ancestor node with a given type
the function family comes in four variants:
Definition at line 988 of file sageGeneric.h.
SageNode* sg::assert_sage_type | ( | SgNode * | n, |
const char * | f = 0 , |
||
size_t | ln = 0 |
||
) |
asserts that n has type SageNode
the ROSE assert in the following example holds b/c assert_sage_type aborts if the input node is not a SgStatement
Definition at line 1062 of file sageGeneric.h.
References dispatch().
const SageNode* sg::assert_sage_type | ( | const SgNode * | n, |
const char * | f = 0 , |
||
size_t | ln = 0 |
||
) |
asserts that n has type SageNode
the ROSE assert in the following example holds b/c assert_sage_type aborts if the input node is not a SgStatement
Definition at line 1068 of file sageGeneric.h.
References dispatch().
SageNode& sg::assert_sage_type | ( | SgNode & | n, |
const char * | f = 0 , |
||
size_t | ln = 0 |
||
) |
asserts that n has type SageNode
the ROSE assert in the following example holds b/c assert_sage_type aborts if the input node is not a SgStatement
Definition at line 1074 of file sageGeneric.h.
References dispatch().
const SageNode& sg::assert_sage_type | ( | const SgNode & | n, |
const char * | f = 0 , |
||
size_t | ln = 0 |
||
) |
asserts that n has type SageNode
the ROSE assert in the following example holds b/c assert_sage_type aborts if the input node is not a SgStatement
Definition at line 1080 of file sageGeneric.h.
References dispatch().
void sg::swap_child | ( | SageNode & | lhs, |
SageNode & | rhs, | ||
SageChild *(SageNode::*)() const | getter, | ||
void(SageNode::*)(SageChild *) | setter | ||
) |
swaps children (of equal kind) between two ancestor nodes of the same type
SageNode | the parent node type |
SageChild | the child node type |
lhs | one parent node |
rhs | another parent node |
getter | the getter function to extract the child from lhs (and rhs) |
setter | the setter function to store the child in lhs (and rhs) |
Definition at line 1111 of file sageGeneric.h.
SageNode::base_node_type& sg::asBaseType | ( | SageNode & | n | ) |
returns the same node n upcasted to its base type
Definition at line 1290 of file sageGeneric.h.
const SageNode::base_node_type& sg::asBaseType | ( | const SageNode & | n | ) |
returns the same node n upcasted to its base type
Definition at line 1294 of file sageGeneric.h.
SageNode::base_node_type* sg::asBaseType | ( | SageNode * | n | ) |
returns the same node n upcasted to its base type
Definition at line 1298 of file sageGeneric.h.
const SageNode::base_node_type* sg::asBaseType | ( | const SageNode * | n | ) |
returns the same node n upcasted to its base type
Definition at line 1302 of file sageGeneric.h.