valarith.c: Replace INIT_VAL_WITH_FIXED_POINT_VAL macro by lambda

gdb/ChangeLog (Simon Marchi  <simark@simark.ca>):

        * valarith.c (fixed_point_binop): Replace the
        INIT_VAL_WITH_FIXED_POINT_VAL macro by a lambda.  Update all
        users accordingly.
This commit is contained in:
Joel Brobecker 2020-11-23 21:50:29 -05:00
parent e6fcee3a73
commit af619ce989
2 changed files with 25 additions and 15 deletions

View File

@ -1,3 +1,9 @@
2020-11-24 Joel Brobecker <brobecker@adacore.com>
* valarith.c (fixed_point_binop): Replace the
INIT_VAL_WITH_FIXED_POINT_VAL macro by a lambda. Update all
users accordingly.
2020-11-24 Joel Brobecker <brobecker@adacore.com>
* gdbtypes.h (struct type) <fixed_point_scaling_factor>: New method,

View File

@ -917,44 +917,48 @@ fixed_point_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
type_byte_order (type2), type2->is_unsigned (),
type2->fixed_point_scaling_factor ());
#define INIT_VAL_WITH_FIXED_POINT_VAL(RESULT) \
do { \
val = allocate_value (type1); \
(RESULT).write_fixed_point \
(gdb::make_array_view (value_contents_raw (val), \
TYPE_LENGTH (type1)), \
type_byte_order (type1), type1->is_unsigned (), \
type1->fixed_point_scaling_factor ()); \
} while (0)
auto fixed_point_to_value = [type1] (const gdb_mpq &fp)
{
value *fp_val = allocate_value (type1);
fp.write_fixed_point
(gdb::make_array_view (value_contents_raw (fp_val),
TYPE_LENGTH (type1)),
type_byte_order (type1),
type1->is_unsigned (),
type1->fixed_point_scaling_factor ());
return fp_val;
};
switch (op)
{
case BINOP_ADD:
mpq_add (res.val, v1.val, v2.val);
INIT_VAL_WITH_FIXED_POINT_VAL (res);
val = fixed_point_to_value (res);
break;
case BINOP_SUB:
mpq_sub (res.val, v1.val, v2.val);
INIT_VAL_WITH_FIXED_POINT_VAL (res);
val = fixed_point_to_value (res);
break;
case BINOP_MIN:
INIT_VAL_WITH_FIXED_POINT_VAL (mpq_cmp (v1.val, v2.val) < 0 ? v1 : v2);
val = fixed_point_to_value (mpq_cmp (v1.val, v2.val) < 0 ? v1 : v2);
break;
case BINOP_MAX:
INIT_VAL_WITH_FIXED_POINT_VAL (mpq_cmp (v1.val, v2.val) > 0 ? v1 : v2);
val = fixed_point_to_value (mpq_cmp (v1.val, v2.val) > 0 ? v1 : v2);
break;
case BINOP_MUL:
mpq_mul (res.val, v1.val, v2.val);
INIT_VAL_WITH_FIXED_POINT_VAL (res);
val = fixed_point_to_value (res);
break;
case BINOP_DIV:
mpq_div (res.val, v1.val, v2.val);
INIT_VAL_WITH_FIXED_POINT_VAL (res);
val = fixed_point_to_value (res);
break;
case BINOP_EQUAL: