зеркало из https://github.com/github/ruby.git
58 строки
1.5 KiB
C
58 строки
1.5 KiB
C
/**
|
|
* @file node.h
|
|
*
|
|
* Functions related to nodes in the AST.
|
|
*/
|
|
#ifndef PRISM_NODE_H
|
|
#define PRISM_NODE_H
|
|
|
|
#include "prism/defines.h"
|
|
#include "prism/parser.h"
|
|
|
|
/**
|
|
* Append a new node onto the end of the node list.
|
|
*
|
|
* @param list The list to append to.
|
|
* @param node The node to append.
|
|
*/
|
|
void pm_node_list_append(pm_node_list_t *list, pm_node_t *node);
|
|
|
|
/**
|
|
* Deallocate a node and all of its children.
|
|
*
|
|
* @param parser The parser that owns the node.
|
|
* @param node The node to deallocate.
|
|
*/
|
|
PRISM_EXPORTED_FUNCTION void pm_node_destroy(pm_parser_t *parser, struct pm_node *node);
|
|
|
|
/**
|
|
* This struct stores the information gathered by the pm_node_memsize function.
|
|
* It contains both the memory footprint and additionally metadata about the
|
|
* shape of the tree.
|
|
*/
|
|
typedef struct {
|
|
/** The total memory footprint of the node and all of its children. */
|
|
size_t memsize;
|
|
|
|
/** The number of children the node has. */
|
|
size_t node_count;
|
|
} pm_memsize_t;
|
|
|
|
/**
|
|
* Calculates the memory footprint of a given node.
|
|
*
|
|
* @param node The node to calculate the memory footprint of.
|
|
* @param memsize The memory footprint of the node and all of its children.
|
|
*/
|
|
PRISM_EXPORTED_FUNCTION void pm_node_memsize(pm_node_t *node, pm_memsize_t *memsize);
|
|
|
|
/**
|
|
* Returns a string representation of the given node type.
|
|
*
|
|
* @param node_type The node type to convert to a string.
|
|
* @return A string representation of the given node type.
|
|
*/
|
|
PRISM_EXPORTED_FUNCTION const char * pm_node_type_to_str(pm_node_type_t node_type);
|
|
|
|
#endif
|