static int convert_conversion(struct parse_context *ctx, enum vm_type to_type) { struct expression *from_expression, *conversion_expression; enum vm_type from_type; from_expression = stack_pop(ctx->bb->mimic_stack); from_type = from_expression->vm_type; if (from_type == J_DOUBLE && to_type == J_FLOAT) conversion_expression = conversion_double_to_float_expr(from_expression); else if (from_type == J_FLOAT && to_type == J_DOUBLE) conversion_expression = conversion_float_to_double_expr(from_expression); else if (to_type == J_FLOAT) conversion_expression = conversion_to_float_expr(to_type, from_expression); else if (from_type == J_FLOAT) conversion_expression = conversion_from_float_expr(to_type, from_expression); else if (to_type == J_DOUBLE) conversion_expression = conversion_to_double_expr(to_type, from_expression); else if (from_type == J_DOUBLE) conversion_expression = conversion_from_double_expr(to_type, from_expression); else conversion_expression = conversion_expr(to_type, from_expression); if (!conversion_expression) return warn("out of memory"), -ENOMEM; convert_expression(ctx, conversion_expression); return 0; }
void assert_printed_conversion_expr(struct string *expected, enum vm_type type, struct expression *from_expr) { struct expression *expr; expr = conversion_expr(type, from_expr); assert_print_expr(expected, expr); }
static int convert_conversion(struct parse_context *ctx, enum vm_type to_type) { struct expression *from_expression, *conversion_expression; from_expression = stack_pop(ctx->bb->mimic_stack); if (to_type == J_FLOAT) conversion_expression = conversion_to_float_expr(to_type, from_expression); else if (from_expression->vm_type == J_FLOAT) conversion_expression = conversion_from_float_expr(to_type, from_expression); else conversion_expression = conversion_expr(to_type, from_expression); if (!conversion_expression) return -ENOMEM; convert_expression(ctx, conversion_expression); return 0; }