ccm/lib/node.h

40 lines
1.1 KiB
C
Raw Permalink Normal View History

2024-03-18 17:20:40 +00:00
#ifndef CCM_NODE_H
#define CCM_NODE_H
#include "commons.h"
#include "vec.h"
#define NODE_KIND(G) \
G(NODE_MODULE), \
G(NODE_NUM), G(NODE_OPAR), G(NODE_CPAR), \
G(NODE_POW), G(NODE_ADD), G(NODE_SUB), G(NODE_MUL), \
G(NODE_DIV), G(NODE_MOD), G(NODE_COMMA), G(NODE_TUPLE), \
2024-03-19 06:11:28 +00:00
G(NODE_ASSERT_EQ), G(NODE_ASSERT_NE), G(NODE_BOOL), \
G(NODE_AND), G(NODE_OR), G(NODE_NOT), G(NODE_IN), \
2024-03-19 13:23:11 +00:00
G(NODE_OSQUARE), G(NODE_CSQUARE), G(NODE_INDEX), \
2024-03-19 15:25:02 +00:00
G(NODE_STR), G(NODE_LT), G(NODE_LE), G(NODE_GT), \
2024-03-21 11:00:20 +00:00
G(NODE_GE), G(NODE_EQ), G(NODE_NE), G(NODE_ARRAY), \
G(NODE_VAR), G(NODE_IDENT), G(NODE_ASSIGN), \
2024-03-22 07:57:44 +00:00
G(NODE_VARDECL), G(NODE_CONST), G(NODE_CONSTDECL), \
2024-03-22 15:33:41 +00:00
G(NODE_BEGIN), G(NODE_BLOCK), G(NODE_END), G(NODE_IF), \
2024-03-22 22:01:20 +00:00
G(NODE_ELSE), G(NODE_WHILE), G(NODE_FOR), G(NODE_BREAK), \
G(NODE_CONTINUE)
2024-03-18 17:20:40 +00:00
CCM_ENUM_H(NodeKind, NODE_KIND);
typedef struct {
NodeKind kind;
char* value;
vec_t children;
int line;
} node_t;
2024-03-19 15:25:02 +00:00
void node_init(node_t* self, NodeKind kind,
2024-03-18 17:20:40 +00:00
char const* value, int line);
void node_free(node_t* self);
void node_push_new_child(node_t* self, node_t* child);
size_t node_str(node_t* self, char* buffer, size_t size);
#endif