lang: update bluelib api usage

This commit is contained in:
2025-11-06 10:38:32 +00:00
parent b26c37c349
commit 4386965cd9
40 changed files with 351 additions and 271 deletions

View File

@@ -3,7 +3,7 @@
#include "../node.h"
#include "expr.h"
#include <blue/object/string.h>
#include <blue/ds/string.h>
#include <ivy/lang/lex.h>
#include <ivy/lang/operator.h>
#include <stdio.h>
@@ -296,7 +296,7 @@ enum ivy_status expr_finalise_arith(
struct expr_parser_state *state, struct ivy_ast_node **expr_tree,
enum ivy_operator_precedence minimum_precedence)
{
b_queue_iterator it = {0};
b_queue_entry *entry = NULL;
/* first, take all the operators still left on the operator stack and
* add them to the output queue.
@@ -304,7 +304,7 @@ enum ivy_status expr_finalise_arith(
* since each set of parentheses has its own expression context,
* we don't have to handle parentheses here */
while (true) {
b_queue_entry *entry = b_queue_pop_back(&state->s_operator_stack);
entry = b_queue_pop_back(&state->s_operator_stack);
if (!entry) {
break;
}
@@ -355,20 +355,21 @@ enum ivy_status expr_finalise_arith(
b_queue q = B_QUEUE_INIT;
b_queue_entry *tmp = NULL;
b_queue_iterator_begin(&state->s_output_queue, &it);
entry = b_queue_first(&state->s_output_queue);
int i = 0;
while (b_queue_iterator_is_valid(&it)) {
while (entry) {
struct ivy_ast_node *item
= b_unbox(struct ivy_ast_node, it.entry, n_entry);
b_queue_iterator_erase(&it);
= b_unbox(struct ivy_ast_node, entry, n_entry);
b_queue_entry *next = b_queue_next(entry);
b_queue_delete(&state->s_output_queue, entry);
/* if the node is an operand, just push it to a temporary queue
* and come back to it later. */
if (item->n_type != IVY_AST_OP && item->n_type != IVY_AST_MSG) {
/* operand */
b_queue_push_back(&q, &item->n_entry);
continue;
goto next;
}
const struct ivy_operator *op = NULL;
@@ -388,7 +389,7 @@ enum ivy_status expr_finalise_arith(
struct ivy_ast_node, tmp, n_entry);
}
b_queue_push_back(&q, &msg->n_base.n_entry);
continue;
goto next;
}
struct ivy_ast_op_node *op_node = (struct ivy_ast_op_node *)item;
@@ -397,7 +398,7 @@ enum ivy_status expr_finalise_arith(
* queue as-is */
if (op_node_is_complete(op_node)) {
b_queue_push_back(&q, &item->n_entry);
continue;
goto next;
}
/* otherwise, pop the relevant operands from the operand
@@ -432,6 +433,8 @@ enum ivy_status expr_finalise_arith(
/* ...and push the newly-completed operator node to the operand
* queue */
b_queue_push_back(&q, &op_node->n_base.n_entry);
next:
entry = next;
}
#if 0
@@ -445,13 +448,15 @@ enum ivy_status expr_finalise_arith(
* their operands have just been moved to the temporary operand stack
* used above. move them back to the parser state's output queue here
* so they can be used later. */
b_queue_foreach (&it, &state->s_operator_stack) {
b_queue_entry *entry = b_queue_pop_front(&q);
if (!entry) {
entry = b_queue_first(&state->s_operator_stack);
while (entry) {
b_queue_entry *entry2 = b_queue_pop_front(&q);
if (!entry2) {
return IVY_ERR_INTERNAL_FAILURE;
}
b_queue_push_back(&state->s_output_queue, entry);
b_queue_push_back(&state->s_output_queue, entry2);
entry = b_queue_next(entry);
}
#if 0
@@ -908,14 +913,17 @@ static struct ivy_ast_selector_node *keyword_selector_from_label_list(b_queue *l
struct ivy_ast_selector_node *sel
= (struct ivy_ast_selector_node *)ast_node_create(IVY_AST_SELECTOR);
b_queue_iterator it = {0};
b_queue_entry *entry = b_queue_first(labels);
b_queue_entry *next = NULL;
b_queue_iterator_begin(labels, &it);
while (b_queue_iterator_is_valid(&it)) {
while (entry) {
struct ivy_token *label
= b_unbox(struct ivy_token, it.entry, t_entry);
b_queue_iterator_erase(&it);
= b_unbox(struct ivy_token, entry, t_entry);
next = b_queue_next(entry);
b_queue_delete(labels, entry);
b_queue_push_back(&sel->n_arg_labels, &label->t_entry);
entry = next;
}
return sel;
@@ -929,13 +937,17 @@ static struct ivy_ast_cascade_node *expr_finalise_cascade(
cascade->n_recipient = state->s_recipient;
b_queue_iterator it = {0};
b_queue_iterator_begin(&state->s_cascade_msg, &it);
while (b_queue_iterator_is_valid(&it)) {
b_queue_entry *entry = b_queue_first(&state->s_cascade_msg);
b_queue_entry *next = NULL;
while (entry) {
struct ivy_ast_node *msg
= b_unbox(struct ivy_ast_node, it.entry, n_entry);
b_queue_iterator_erase(&it);
= b_unbox(struct ivy_ast_node, entry, n_entry);
next = b_queue_next(entry);
b_queue_delete(&state->s_cascade_msg, entry);
b_queue_push_back(&cascade->n_msg, &msg->n_entry);
entry = next;
}
return cascade;
@@ -950,15 +962,17 @@ static struct ivy_ast_msg_node *expr_finalise_keyword_msg(
msg->n_recipient = state->s_recipient;
msg->n_sel = keyword_selector_from_label_list(&state->s_labels);
b_queue_iterator it = {0};
b_queue_entry *entry = b_queue_first(&state->s_args);
b_queue_entry *next = NULL;
b_queue_iterator_begin(&state->s_args, &it);
while (b_queue_iterator_is_valid(&it)) {
while (entry) {
struct ivy_ast_node *arg
= b_unbox(struct ivy_ast_node, it.entry, n_entry);
b_queue_iterator_erase(&it);
= b_unbox(struct ivy_ast_node, entry, n_entry);
next = b_queue_next(entry);
b_queue_delete(&state->s_args, entry);
b_queue_push_back(&msg->n_arg, &arg->n_entry);
entry = next;
}
return msg;
@@ -974,22 +988,28 @@ static struct ivy_ast_msg_node *expr_finalise_complex_msg(
state->s_msg = NULL;
b_queue_iterator it = {0};
b_queue_iterator_begin(&state->s_labels, &it);
while (b_queue_iterator_is_valid(&it)) {
b_queue_entry *entry = b_queue_first(&state->s_labels);
b_queue_entry *next = NULL;
while (entry) {
struct ivy_token *label
= b_unbox(struct ivy_token, it.entry, t_entry);
b_queue_iterator_erase(&it);
= b_unbox(struct ivy_token, entry, t_entry);
next = b_queue_next(entry);
b_queue_delete(&state->s_labels, entry);
b_queue_push_back(&msg->n_sel->n_arg_labels, &label->t_entry);
entry = next;
}
b_queue_iterator_begin(&state->s_args, &it);
while (b_queue_iterator_is_valid(&it)) {
entry = b_queue_first(&state->s_args);
while (entry) {
struct ivy_ast_node *arg
= b_unbox(struct ivy_ast_node, it.entry, n_entry);
b_queue_iterator_erase(&it);
= b_unbox(struct ivy_ast_node, entry, n_entry);
next = b_queue_next(entry);
b_queue_delete(&state->s_args, entry);
b_queue_push_back(&msg->n_arg, &arg->n_entry);
entry = next;
}
return msg;

View File

@@ -1,7 +1,7 @@
#include "../node.h"
#include "expr.h"
#include <blue/object/string.h>
#include <blue/ds/string.h>
#include <ivy/lang/lex.h>
#include <ivy/lang/operator.h>
#include <stdio.h>