roza/lib/node.h

40 lines
1.1 KiB
C
Raw Normal View History

2023-12-09 17:24:41 +00:00
#ifndef RZ_NODE_H
#define RZ_NODE_H
#include "commons.h"
2023-12-15 21:31:01 +00:00
#define NODE_TYPE(G) \
G(NODE_MOD), \
G(NODE_NUM), G(NODE_BOOL), G(NODE_STR), \
G(NODE_ASSERT), \
G(NODE_EQ), G(NODE_NE), \
G(NODE_LT), G(NODE_LE), G(NODE_GT), G(NODE_GE), \
G(NODE_ADD), G(NODE_SUB), G(NODE_MUL), G(NODE_DIV), \
2023-12-16 18:12:20 +00:00
G(NODE_MODULO), G(NODE_POW), G(NODE_OPAR), G(NODE_CPAR), \
G(NODE_AND), G(NODE_OR), G(NODE_NOT)
2023-12-09 17:24:41 +00:00
RZ_ENUM_H(NodeType, NODE_TYPE);
typedef struct {
NodeType type;
str_t value;
int line;
struct {
struct node_t** data;
size_t size;
size_t cap;
} children;
} node_t;
void node_init(node_t* node, NodeType type, char* value, int line);
void node_free(node_t* node);
2023-12-11 17:01:22 +00:00
void node_add_new_child(node_t* node, node_t* child);
node_t* node_child(node_t* node, size_t index);
2023-12-09 17:24:41 +00:00
size_t node_str(node_t* node, char* buffer, size_t size);
2023-12-16 18:42:26 +00:00
node_t* node_find_first(node_t* node, NodeType type);
2023-12-09 17:24:41 +00:00
#endif