From 977e19840d085d09ed454ca8aae1b62b9351034a Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Sat, 1 Aug 2020 19:56:34 +0200 Subject: [PATCH] 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. --- src/counterexample.c | 9 ++------- src/derivation.c | 10 ++-------- src/location.c | 12 ------------ src/system.h | 16 ++++++++++++++++ 4 files changed, 20 insertions(+), 27 deletions(-) diff --git a/src/counterexample.c b/src/counterexample.c index cdf3f218..7f207ca0 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 9772cabd..f1b37639 100644 --- a/src/derivation.c +++ b/src/derivation.c @@ -135,12 +135,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) @@ -154,7 +148,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 @@ -237,7 +231,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 +/*-----------. +| 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. |