lang: ast: update arith parser to set ast node bounds

This commit is contained in:
2025-05-08 22:31:37 +01:00
parent c12371f0ec
commit 5f560d28a7

View File

@@ -62,6 +62,7 @@ enum ivy_status arith_push_operand(
= (struct ivy_ast_ident_node *)ast_node_create(
IVY_AST_IDENT);
v->n_content = tok;
ivy_ast_node_set_bounds_from_token((struct ivy_ast_node *)v, tok);
b_queue_push_back(&state->s_output_queue, &v->n_base.n_entry);
break;
}
@@ -69,6 +70,7 @@ enum ivy_status arith_push_operand(
struct ivy_ast_int_node *v
= (struct ivy_ast_int_node *)ast_node_create(IVY_AST_INT);
v->n_value = tok;
ivy_ast_node_set_bounds_from_token((struct ivy_ast_node *)v, tok);
b_queue_push_back(&state->s_output_queue, &v->n_base.n_entry);
break;
}
@@ -77,6 +79,7 @@ enum ivy_status arith_push_operand(
= (struct ivy_ast_double_node *)ast_node_create(
IVY_AST_DOUBLE);
v->n_value = tok;
ivy_ast_node_set_bounds_from_token((struct ivy_ast_node *)v, tok);
b_queue_push_back(&state->s_output_queue, &v->n_base.n_entry);
break;
}
@@ -84,6 +87,7 @@ enum ivy_status arith_push_operand(
struct ivy_ast_atom_node *v
= (struct ivy_ast_atom_node *)ast_node_create(IVY_AST_ATOM);
v->n_content = tok;
ivy_ast_node_set_bounds_from_token((struct ivy_ast_node *)v, tok);
b_queue_push_back(&state->s_output_queue, &v->n_base.n_entry);
break;
}
@@ -92,6 +96,7 @@ enum ivy_status arith_push_operand(
= (struct ivy_ast_string_node *)ast_node_create(
IVY_AST_STRING);
v->n_value = tok;
ivy_ast_node_set_bounds_from_token((struct ivy_ast_node *)v, tok);
b_queue_push_back(&state->s_output_queue, &v->n_base.n_entry);
break;
}
@@ -101,6 +106,7 @@ enum ivy_status arith_push_operand(
}
struct ivy_ast_node *v = ast_node_create(IVY_AST_DISCARD);
ivy_ast_node_set_bounds_from_token((struct ivy_ast_node *)v, tok);
b_queue_push_back(&state->s_output_queue, &v->n_entry);
break;
}
@@ -141,6 +147,7 @@ static struct ivy_ast_selector_node *unary_selector_from_token(struct ivy_token
{
struct ivy_ast_selector_node *sel
= (struct ivy_ast_selector_node *)ast_node_create(IVY_AST_SELECTOR);
ivy_ast_node_set_bounds_from_token((struct ivy_ast_node *)sel, tok);
sel->n_msg_name = tok;
return sel;
}
@@ -156,12 +163,15 @@ static struct ivy_ast_node *create_operator_node_from_token(struct ivy_token *to
struct ivy_ast_msg_node *new_msg_node
= (struct ivy_ast_msg_node *)ast_node_create(IVY_AST_MSG);
new_msg_node->n_sel = unary_selector_from_token(tok);
ivy_ast_node_set_bounds_from_token(
(struct ivy_ast_node *)new_msg_node, tok);
return (struct ivy_ast_node *)new_msg_node;
}
struct ivy_ast_op_node *new_op_node
= (struct ivy_ast_op_node *)ast_node_create(IVY_AST_OP);
new_op_node->n_op = op;
ivy_ast_node_set_bounds_from_token((struct ivy_ast_node *)new_op_node, tok);
return (struct ivy_ast_node *)new_op_node;
}
@@ -369,11 +379,18 @@ enum ivy_status expr_finalise_arith(
op = op_node->n_op;
tmp = b_queue_pop_back(&q);
op_node->n_right = b_unbox(struct ivy_ast_node, tmp, n_entry);
op_node->n_right->n_parent = (struct ivy_ast_node *)op_node;
ivy_ast_node_extend_bounds_recursive(
(struct ivy_ast_node *)op_node, (struct ivy_ast_node *)tmp);
if (op->op_arity == IVY_OP_BINARY) {
tmp = b_queue_pop_back(&q);
op_node->n_left
= b_unbox(struct ivy_ast_node, tmp, n_entry);
op_node->n_left->n_parent = (struct ivy_ast_node *)op_node;
ivy_ast_node_extend_bounds_recursive(
(struct ivy_ast_node *)op_node,
(struct ivy_ast_node *)tmp);
}
/* ...and push the newly-completed operator node to the operand