lang: codegen: replace codegen_value with a new system for passing different types of values between code generators

This commit is contained in:
2025-09-08 16:17:29 +01:00
parent 7ee2e9dd81
commit 6844f498c5
12 changed files with 114 additions and 91 deletions

View File

@@ -363,7 +363,7 @@ static enum ivy_status state_init(
static enum ivy_status state_fini(
struct ivy_codegen *gen, struct code_generator_state *state,
struct mie_value **result)
struct code_generator_value *result)
{
debug_printf("codegen: end of expression\n");
@@ -472,19 +472,23 @@ static enum ivy_status state_fini(
}
struct expr_item *result_item = b_unbox(struct expr_item, cur, i_entry);
struct mie_value *result_value;
if (result_item->i_operand_type == EXPR_OPERAND_VAR) {
*result = codegen_load_variable(gen, &result_item->i_var);
result_value = load_variable(gen, &result_item->i_var);
} else {
*result = result_item->i_value;
result_value = result_item->i_value;
}
free(result_item);
return IVY_OK;
result->v_type = CODE_GENERATOR_VALUE_MIE_VALUE;
result->v_value.mie_value = result_value;
return status;
}
static struct code_generator_result value_received(
struct ivy_codegen *gen, struct code_generator_state *state,
struct mie_value *value)
struct code_generator_value *value)
{
struct expr_codegen_state *expr = (struct expr_codegen_state *)state;