From f8c322ef6c1c29dd391525ff4eb5361121872c4f Mon Sep 17 00:00:00 2001 From: Max Wash Date: Tue, 22 Apr 2025 15:20:43 +0100 Subject: [PATCH] mie: convert: add support for converting more value types --- mie/convert/text-write.c | 45 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/mie/convert/text-write.c b/mie/convert/text-write.c index e87082b..2f18774 100644 --- a/mie/convert/text-write.c +++ b/mie/convert/text-write.c @@ -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, ""); + 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, ""); + 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, "", value->v_type->t_id); return B_SUCCESS; } }