valarith.c: Replace INIT_VAL_WITH_FIXED_POINT_VAL macro by lambda
authorJoel Brobecker <brobecker@adacore.com>
Tue, 24 Nov 2020 02:50:29 +0000 (21:50 -0500)
committerJoel Brobecker <brobecker@adacore.com>
Tue, 24 Nov 2020 02:50:29 +0000 (21:50 -0500)
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.

gdb/ChangeLog
gdb/valarith.c

index d1a1b9584f477dcd7360907eb350906949b6b172..014687416432d3bfa184afa715ac66fecb10748b 100644 (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,
index 29ac46b4492b295d7b8af0602044f369063a28c2..5b2bf1889ed9ef108113f7e0f0ec72cdf55af6de 100644 (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: