mie: convert: add support for converting more value types
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user