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)
|
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) {
|
switch (type->t_id) {
|
||||||
case MIE_TYPE_PTR:
|
case MIE_TYPE_PTR:
|
||||||
snprintf(out, max, "ptr");
|
snprintf(out, max, "ptr");
|
||||||
@@ -215,9 +220,44 @@ static b_status write_operand_data(
|
|||||||
return B_SUCCESS;
|
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(
|
static b_status write_operand(
|
||||||
struct mie_ir_converter *converter, struct mie_value *value, int flags)
|
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) {
|
switch (value->v_type->t_id) {
|
||||||
case MIE_VALUE_CONST:
|
case MIE_VALUE_CONST:
|
||||||
return write_operand_const(converter, value, flags);
|
return write_operand_const(converter, value, flags);
|
||||||
@@ -227,7 +267,12 @@ static b_status write_operand(
|
|||||||
return write_operand_block(converter, value, flags);
|
return write_operand_block(converter, value, flags);
|
||||||
case MIE_VALUE_DATA:
|
case MIE_VALUE_DATA:
|
||||||
return write_operand_data(converter, value, flags);
|
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:
|
default:
|
||||||
|
write_string_f(converter, "<unknown-value:%d>", value->v_type->t_id);
|
||||||
return B_SUCCESS;
|
return B_SUCCESS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user