Files
ivy/lang/ast/ctx.h

38 lines
1.1 KiB
C

#ifndef _AST_CTX_H_
#define _AST_CTX_H_
#include <blue/core/queue.h>
#include <ivy/lang/ast.h>
#include <ivy/status.h>
#define parser_push_state(parser, node_id, node_type, state_type) \
((state_type *)parser_push_state_generic( \
parser, node_id, sizeof(node_type), sizeof(state_type)))
#define parser_get_state(parser, state_type) \
((state_type *)parser_get_state_generic(parser))
struct parser_state {
b_queue_entry s_entry;
struct ivy_ast_node *s_parent;
struct ivy_ast_node *s_node;
};
struct ivy_parser {
enum ivy_status p_status;
b_queue p_state;
b_queue p_token_queue;
b_queue p_node_queue;
};
enum pop_state_flags {
STATE_ADD_NODE_TO_PARENT = 0x01u,
};
extern struct parser_state *parser_push_state_generic(
struct ivy_parser *parser, enum ivy_ast_node_type node_type,
size_t node_size, size_t state_size);
extern void parser_pop_state(struct ivy_parser *parser, enum pop_state_flags flags);
extern struct parser_state *parser_get_state_generic(struct ivy_parser *parser);
#endif