ROSE 0.11.145.192
|
String annotations to uniquely indicate any source constructs.
A reference implementation of abstract handles for language constructs Used for specifying a unique language construct in source files.
Users are required to implement the interface using their own IR node types.
Goal : Only define interfaces and abstract implementation independent to any particular compilers or tools
We provide ROSE's implementation.
Essentially, you can use a string to uniquely specify any language constructs in your source code and convert the string to AST node.
This is useful to pass string options to translators so they can operate on the desired language constructs (e.g. for loops)
Example use in outliner: outline the for loop at line 12 of the input code ./outline -rose:outline:abstract_handle "ForStatement<position,12>" -c inputCode_OutlineLoop2.c Outline the 2nd for statement of the input code
./outline -rose:outline:abstract_handle "FunctionDeclaration<name,initialize>::ForStatement<numbering,2>" -c inputCode_OutlineLoop2.c Outline the statement at line 5 of the input code ./outline -rose:outline:abstract_handle "Statement<position,5>" -c declarations.c
Classes | |
class | abstract_handle |
to specify a construct using a specifier Can be used alone or with parent handles when relative specifiers are used More... | |
class | abstract_node |
Users should provide a concrete node implementation especially a constructor/builder to avoid duplicated creation of abstract_node. More... | |
class | roseNode |
Concrete roseNode derived from abstract_node. More... | |
struct | source_position |
source position information: More... | |
struct | source_position_pair |
class | specifier |
construct specifier could be used to specify a construct by name, position, numbering, labels, etc (e_name, foo) (e_position, 15) More... | |
union | u_specifier_value |
Typedefs | |
typedef union AbstractHandle::u_specifier_value | specifier_value_t |
Enumerations | |
enum | specifier_type_t { e_name , e_position , e_numbering , e_int_label , e_str_label } |
specifier type and values More... | |
Functions | |
std::string | toString (const source_position &) |
std::string | toString (const source_position_pair &) |
bool | isEqual (const source_position &pos1, const source_position &pos2) |
bool | isEqual (const source_position_pair &pair1, const source_position_pair &pair2) |
void | fromString (source_position &, const std::string &input) |
Parse a string (such as 12.10, 13, 0 etc )into source position data structure. | |
void | fromString (source_position_pair &, const std::string &input) |
Parse a string into source position pair data structure. | |
void | fromString (specifier &, const std::string &input) |
ROSE_DLL_API roseNode * | buildroseNode (SgNode *snode) |
A builder function to avoid duplicated building. | |
ROSE_DLL_API abstract_handle * | buildAbstractHandle (SgNode *snode) |
A default builder function handles all details: file use name, others use numbering | |
ROSE_DLL_API SgLocatedNode * | convertHandleToNode (const std::string &handle) |
Convert an abstract handle string to a located node in AST. | |
Variables | |
std::map< abstract_node *, abstract_handle * > | handle_map |
maintain a map between nodes and handles, used for fast indexing and avoid redundant creation of handles for nodes Should update the map after each creation | |
specifier type and values
Definition at line 83 of file abstract_handle.h.