Files
ivy/lang/ast/ctx.h

43 lines
1.3 KiB
C
Raw Normal View History

#ifndef _AST_CTX_H_
#define _AST_CTX_H_
#include <blue/core/queue.h>
#include <ivy/lang/ast.h>
#include <ivy/status.h>
#define parser_get_state(parser, state_type) \
((state_type *)parser_get_state_generic(parser))
#define parser_get_parent_state(parser, type_id, state_type) \
((state_type *)parser_get_parent_state_generic(parser, type_id))
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(
struct ivy_parser *parser, enum ivy_ast_node_type node_type, uintptr_t arg);
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);
extern struct parser_state *parser_get_parent_state_generic(struct ivy_parser *parser, enum ivy_ast_node_type type);
extern void parser_replace_current_node(
struct ivy_parser *parser, struct ivy_ast_node *new_node);
extern enum ivy_status parser_add_child(
struct ivy_parser *parser, struct ivy_ast_node *new_node);
#endif