mie: convert: add support for converting more value types

This commit is contained in:
2025-04-22 15:20:43 +01:00
parent a9606864cd
commit bdf3115b07

View File

@@ -24,6 +24,11 @@ typedef b_status (*write_function)(struct mie_ir_converter *, struct mie_value *
static void mie_type_to_string(struct mie_type *type, char *out, size_t max)
{
if (!type) {
snprintf(out, max, "<no-type>");
return;
}
switch (type->t_id) {
case MIE_TYPE_PTR:
snprintf(out, max, "ptr");
@@ -215,9 +220,44 @@ static b_status write_operand_data(
return B_SUCCESS;
}
static b_status write_operand_arg(
struct mie_ir_converter *converter, struct mie_value *value, int flags)
{
struct mie_arg *arg = MIE_ARG(value);
if (flags & F_INCLUDE_TYPE) {
char type_name[64];
mie_type_to_string(arg->arg_type, type_name, sizeof type_name);
write_string_f(converter, "%s ", type_name);
}
write_string_f(converter, "%%%s", value->v_name.n_str);
return B_SUCCESS;
}
static b_status write_operand_func(
struct mie_ir_converter *converter, struct mie_value *value, int flags)
{
struct mie_func *func = MIE_FUNC(value);
if (flags & F_INCLUDE_TYPE) {
write_string(converter, "func ");
}
write_string_f(converter, "@%s", value->v_name.n_str);
return B_SUCCESS;
}
static b_status write_operand(
struct mie_ir_converter *converter, struct mie_value *value, int flags)
{
if (!value) {
write_string(converter, "<null>");
return B_SUCCESS;
}
switch (value->v_type->t_id) {
case MIE_VALUE_CONST:
return write_operand_const(converter, value, flags);
@@ -227,7 +267,12 @@ static b_status write_operand(
return write_operand_block(converter, value, flags);
case MIE_VALUE_DATA:
return write_operand_data(converter, value, flags);
case MIE_VALUE_FUNC:
return write_operand_func(converter, value, flags);
case MIE_VALUE_ARG:
return write_operand_arg(converter, value, flags);
default:
write_string_f(converter, "<unknown-value:%d>", value->v_type->t_id);
return B_SUCCESS;
}
}