Re: [PATCH 2/5] Use max_int instead of max because MSVC defines this symbol already

Akim Demaille <[email protected]>
Newsgroups gmane.comp.parsers.bison.patches
Message-ID <[email protected]>

> Le 30 juil. 2020 à 20:53, [email protected] a écrit :
> 
> From: Anonymous Maarten <[email protected]>

Thanks for the patch!  In the future, please try to match our style for commit messages.

I'm installing this instead of your patch.

Cheers!

commit f2e40f736e0ac95de1e80b2322bd32170d1ece5e
Author: Akim Demaille <[email protected]>
Date:   Sat Aug 1 19:56:34 2020 +0200

    portability: beware of max () with MSVC
    
    Reported by Maarten De Braekeleer.
    https://lists.gnu.org/r/bison-patches/2020-07/msg00080.html
    
    We don't want to use gnulib's min and max macros, since we use
    function calls in min/max arguments.
    
    * src/location.c (max_int, min_int): Move to...
    * src/system.h: here.
    * src/counterexample.c, src/derivation.c: Use max_int instead of max.

diff --git a/src/counterexample.c b/src/counterexample.c
index c0dc796c..23436194 100644
--- a/src/counterexample.c
+++ b/src/counterexample.c
@@ -113,11 +113,6 @@ free_counterexample (counterexample *cex)
   free (cex);
 }
 
-static int max (int a, int b)
-{
-  return a < b ? b : a;
-}
-
 static void
 counterexample_print (const counterexample *cex, FILE *out, const char *prefix)
 {
@@ -131,8 +126,8 @@ counterexample_print (const counterexample *cex, FILE *out, const char *prefix)
   const char *deriv2_label
     = cex->shift_reduce ? _("Reduce derivation") : _("Second reduce derivation");
   const int width =
-    max (max (mbswidth (example1_label, 0), mbswidth (example2_label, 0)),
-         max (mbswidth (deriv1_label, 0),   mbswidth (deriv2_label, 0)));
+    max_int (max_int (mbswidth (example1_label, 0), mbswidth (example2_label, 0)),
+             max_int (mbswidth (deriv1_label, 0),   mbswidth (deriv2_label, 0)));
   if (flat)
     fprintf (out, "  %s%s%*s ", prefix,
              example1_label, width - mbswidth (example1_label, 0), "");
diff --git a/src/derivation.c b/src/derivation.c
index 030cc17b..382dc458 100644
--- a/src/derivation.c
+++ b/src/derivation.c
@@ -140,12 +140,6 @@ derivation_size (const derivation *deriv)
 }
 
 
-static int
-max (int a, int b)
-{
-  return a < b ? b : a;
-}
-
 // Longest distance from root to leaf.
 static int
 derivation_depth (const derivation *deriv)
@@ -159,7 +153,7 @@ derivation_depth (const derivation *deriv)
       for (gl_list_iterator_t it = gl_list_iterator (deriv->children);
            derivation_list_next (&it, &child);
            )
-        res = max (res, derivation_depth (child));
+        res = max_int (res, derivation_depth (child));
       return res + 1;
     }
   else
@@ -260,7 +254,7 @@ derivation_width (const derivation *deriv)
           // No separator at the beginning.
           children_width -= derivation_separator_width;
         }
-      return max (self_width, children_width);
+      return max_int (self_width, children_width);
     }
   else if (deriv == &d_dot)
     {
diff --git a/src/location.c b/src/location.c
index 5718144f..1c0aa1fd 100644
--- a/src/location.c
+++ b/src/location.c
@@ -40,18 +40,6 @@
 
 location const empty_loc = EMPTY_LOCATION_INIT;
 
-static int
-min_int (int a, int b)
-{
-  return a < b ? a : b;
-}
-
-static int
-max_int (int a, int b)
-{
-  return a >= b ? a : b;
-}
-
 /* The terminal width.  Not less than 40.  */
 static int
 columns (void)
diff --git a/src/system.h b/src/system.h
index eac89c27..fb65d573 100644
--- a/src/system.h
+++ b/src/system.h
@@ -131,6 +131,22 @@ typedef size_t uintptr_t;
 # include <stdbool.h>
 
 
+/*-----------.
+| Integers.  |
+`-----------*/
+
+static inline int
+min_int (int a, int b)
+{
+  return a < b ? a : b;
+}
+
+static inline int
+max_int (int a, int b)
+{
+  return a >= b ? a : b;
+}
+
 
 /*-------------.
 | Assertions.  |
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.