|
Ruby 4.1.0dev (2026-10-27 revision db563a357875d4efbadec58b0fd8695ac9a82f42)
|
Functions related to nodes in the AST. More...


Go to the source code of this file.
Macros | |
| #define | PM_NODE_LIST_FOREACH(list, index, node) for (size_t index = 0; index < (list)->size && ((node) = (list)->nodes[index]); index++) |
| Loop through each node in the node list, writing each node to the given pm_node_t pointer. | |
Typedefs | |
| typedef pm_visit_result_t(* | pm_visit_callback_t) (const pm_node_t *node, void *data) |
| A callback that is called for each node visited by pm_visit_node and pm_visit_child_nodes. | |
Enumerations | |
| enum | pm_visit_result_t { PM_VISIT_SKIP , PM_VISIT_DESCEND , PM_VISIT_STOP } |
| The value returned by a visitor callback, which determines where the walk goes next. More... | |
Functions | |
| PRISM_EXPORTED_FUNCTION void | pm_node_list_append (pm_arena_t *arena, pm_node_list_t *list, pm_node_t *node) PRISM_NONNULL(1 |
| Append a node to the end of a node list. | |
| PRISM_EXPORTED_FUNCTION void PRISM_EXPORTED_FUNCTION const char * | pm_node_type (pm_node_type_t node_type) |
| Returns a string representation of the given node type. | |
| PRISM_EXPORTED_FUNCTION bool | pm_visit_node (const pm_node_t *node, pm_visit_callback_t visitor, void *data) PRISM_NONNULL(1) |
| Visit each of the nodes in this subtree using the given visitor callback. | |
| PRISM_EXPORTED_FUNCTION bool | pm_visit_child_nodes (const pm_node_t *node, pm_visit_callback_t visitor, void *data) PRISM_NONNULL(1) |
| Visit the children of the given node with the given callback. | |
Functions related to nodes in the AST.
Definition in file node.h.
| #define PM_NODE_LIST_FOREACH | ( | list, | |
| index, | |||
| node | |||
| ) | for (size_t index = 0; index < (list)->size && ((node) = (list)->nodes[index]); index++) |
| typedef pm_visit_result_t(* pm_visit_callback_t) (const pm_node_t *node, void *data) |
| enum pm_visit_result_t |
| PRISM_EXPORTED_FUNCTION void pm_node_list_append | ( | pm_arena_t * | arena, |
| pm_node_list_t * | list, | ||
| pm_node_t * | node | ||
| ) |
Append a node to the end of a node list.
If the list is full, its storage is grown by allocating from the given arena, so the arena must live as long as the list does. For a list in a parsed tree, that is the arena that was passed to pm_parser_new.
| arena | The arena to allocate the list's storage from. |
| list | The list to append to. |
| node | The node to append. |
| PRISM_EXPORTED_FUNCTION void PRISM_EXPORTED_FUNCTION const char * pm_node_type | ( | pm_node_type_t | node_type | ) |
| PRISM_EXPORTED_FUNCTION bool pm_visit_child_nodes | ( | const pm_node_t * | node, |
| pm_visit_callback_t | visitor, | ||
| void * | data | ||
| ) |
Visit the children of the given node with the given callback.
This is the default behavior for walking the tree that is called from pm_visit_node if the callback returns PM_VISIT_DESCEND.
| node | The node to visit the children of. |
| visitor | The callback to call for each child node. |
| data | An opaque pointer that is passed to the visitor callback. |
This is the default behavior for walking the tree that is called from pm_visit_node if the callback returns PM_VISIT_DESCEND. A stop from any child returns false immediately, so that it propagates up through every enclosing call.
| PRISM_EXPORTED_FUNCTION bool pm_visit_node | ( | const pm_node_t * | node, |
| pm_visit_callback_t | visitor, | ||
| void * | data | ||
| ) |
Visit each of the nodes in this subtree using the given visitor callback.
The callback function will be called for each node in the subtree, and its return value determines whether the walk visits that node's children, skips them, or stops entirely. The data parameter is treated as an opaque pointer and is passed to the visitor callback for consumers to use as they see fit.
As an example:
| node | The root node to start visiting from. |
| visitor | The callback to call for each node in the subtree. |
| data | An opaque pointer that is passed to the visitor callback. |
The callback function will be called for each node in the subtree, and its return value determines whether the walk visits that node's children, skips them, or stops entirely. The data parameter is treated as an opaque pointer and is passed to the visitor callback for consumers to use as they see fit.