lang: ast: implement parsing of inline and standalone if-else statements
This commit is contained in:
@@ -29,7 +29,7 @@ enum ivy_status ivy_parser_create(struct ivy_parser **parser)
|
||||
|
||||
memset(out, 0x0, sizeof *out);
|
||||
|
||||
parser_push_state(out, IVY_AST_UNIT);
|
||||
parser_push_state(out, IVY_AST_UNIT, 0);
|
||||
|
||||
*parser = out;
|
||||
return IVY_OK;
|
||||
@@ -116,7 +116,7 @@ struct parser_state *parser_get_parent_state_generic(struct ivy_parser *parser,
|
||||
}
|
||||
|
||||
struct parser_state *parser_push_state(
|
||||
struct ivy_parser *parser, enum ivy_ast_node_type type)
|
||||
struct ivy_parser *parser, enum ivy_ast_node_type type, uintptr_t arg)
|
||||
{
|
||||
const struct ast_node_type *node_type = get_ast_node_type(type);
|
||||
if (!node_type) {
|
||||
@@ -141,7 +141,7 @@ struct parser_state *parser_push_state(
|
||||
b_queue_push_back(&parser->p_state, &state->s_entry);
|
||||
|
||||
if (node_type->n_init_state) {
|
||||
node_type->n_init_state(parser, state);
|
||||
node_type->n_init_state(parser, state, arg);
|
||||
}
|
||||
|
||||
printf("states (after push)\n");
|
||||
@@ -159,7 +159,7 @@ void parser_pop_state(struct ivy_parser *parser, enum pop_state_flags flags)
|
||||
struct parser_state *state = b_unbox(struct parser_state, entry, s_entry);
|
||||
b_queue_pop_back(&parser->p_state);
|
||||
|
||||
if (state && (flags & STATE_ADD_NODE_TO_PARENT)) {
|
||||
if (state && state->s_node && (flags & STATE_ADD_NODE_TO_PARENT)) {
|
||||
parser_add_child(parser, state->s_node);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user