summaryrefslogtreecommitdiff
path: root/gdb/valarith.c
diff options
context:
space:
mode:
authorJoel Brobecker <brobecker@adacore.com>2020-11-23 21:50:29 -0500
committerJoel Brobecker <brobecker@adacore.com>2020-11-23 21:50:29 -0500
commitaf619ce989a51864b1c2b8c2eef7c46ffe1ff256 (patch)
tree14035c14f9ebe08254682dc5935bb1a9c0f5c26b /gdb/valarith.c
parente6fcee3a73ddab55e3b35b7705b01035383e5417 (diff)
downloadbinutils-gdb-af619ce989a51864b1c2b8c2eef7c46ffe1ff256.tar.gz
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.
Diffstat (limited to 'gdb/valarith.c')
-rw-r--r--gdb/valarith.c34
1 files changed, 19 insertions, 15 deletions
diff --git a/gdb/valarith.c b/gdb/valarith.c
index 29ac46b4492..5b2bf1889ed 100644
--- a/gdb/valarith.c
+++ b/gdb/valarith.c
@@ -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: