From 60b18b55f213cf2cb3fb6f7fa079ed0bb1839bfd Mon Sep 17 00:00:00 2001
From: Luigi Scarso <luigi.scarso@gmail.com>
Date: Mon, 18 Mar 2024 00:34:50 +0100
Subject: [PATCH] Sync with MetaPost 2.11

---
 source/texk/web2c/luatexdir/luatex_svnversion.h | 2 +-
 source/texk/web2c/mplibdir/ChangeLog            | 5 +++++
 source/texk/web2c/mplibdir/mp.w                 | 4 ++--
 source/texk/web2c/mplibdir/mpmathbinary.w       | 2 +-
 source/texk/web2c/mplibdir/mpmathdouble.w       | 5 +++++
 source/texk/web2c/mplibdir/mpmathinterval.w     | 4 ++--
 6 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/source/texk/web2c/luatexdir/luatex_svnversion.h b/source/texk/web2c/luatexdir/luatex_svnversion.h
index 90bcf832f..f96e350e5 100644
--- a/source/texk/web2c/luatexdir/luatex_svnversion.h
+++ b/source/texk/web2c/luatexdir/luatex_svnversion.h
@@ -1,4 +1,4 @@
 #ifndef luatex_svn_revision_h
 #define luatex_svn_revision_h
-#define luatex_svn_revision 7614
+#define luatex_svn_revision 7615
 #endif
diff --git a/source/texk/web2c/mplibdir/ChangeLog b/source/texk/web2c/mplibdir/ChangeLog
index 1bce2fdae..eed13ad1b 100644
--- a/source/texk/web2c/mplibdir/ChangeLog
+++ b/source/texk/web2c/mplibdir/ChangeLog
@@ -1,3 +1,8 @@
+2024-03-18  Luigi Scarso <luigi.scarso@gmail.com>
+	* Fixed a bug in n_arg for double and binary mode, 
+          where -0.0 was  different form 0.0. 
+          Work in progress for the  interval mode.
+
 2024-02-16  Luigi Scarso <luigi.scarso@gmail.com>
 	*  Updated manual. MetaPost 2.1
 
diff --git a/source/texk/web2c/mplibdir/mp.w b/source/texk/web2c/mplibdir/mp.w
index 25e9143f2..8466b391c 100644
--- a/source/texk/web2c/mplibdir/mp.w
+++ b/source/texk/web2c/mplibdir/mp.w
@@ -71,12 +71,12 @@ undergoes any modifications, so that it will be clear which version of
 @^extensions to \MP@>
 @^system dependencies@>
 
-@d default_banner "This is MetaPost, Version 2.10" /* printed when \MP\ starts */
+@d default_banner "This is MetaPost, Version 2.11" /* printed when \MP\ starts */
 @d true 1
 @d false 0
 
 @<Metapost version header@>=
-#define metapost_version "2.10"
+#define metapost_version "2.11"
 
 @ The external library header for \MP\ is |mplib.h|. It contains a
 few typedefs and the header defintions for the externally used
diff --git a/source/texk/web2c/mplibdir/mpmathbinary.w b/source/texk/web2c/mplibdir/mpmathbinary.w
index 4ac294641..1c12ffb14 100644
--- a/source/texk/web2c/mplibdir/mpmathbinary.w
+++ b/source/texk/web2c/mplibdir/mpmathbinary.w
@@ -149,7 +149,7 @@ static double precision_bits_to_digits (mpfr_prec_t i);
 
 @d mpfr_negative_p(a) (mpfr_sgn((a))<0)
 @d mpfr_positive_p(a) (mpfr_sgn((a))>0)
-@d checkZero(dec)  if (mpfr_zero_p(dec) && mpfr_negative_p(dec)) {
+@d checkZero(dec)  if (mpfr_zero_p(dec)) {
      mpfr_set_zero(dec,1);
    }
 
diff --git a/source/texk/web2c/mplibdir/mpmathdouble.w b/source/texk/web2c/mplibdir/mpmathdouble.w
index cb1496936..8f51439c2 100644
--- a/source/texk/web2c/mplibdir/mpmathdouble.w
+++ b/source/texk/web2c/mplibdir/mpmathdouble.w
@@ -1172,6 +1172,11 @@ void mp_double_n_arg (MP mp, mp_number *ret, mp_number x_orig, mp_number y_orig)
     @<Handle undefined arg@>;
   } else {
     ret->type = mp_angle_type;
+    /* Consistency with the other numbersystems */
+    if (x_orig.data.dval == -0.0)
+      x_orig.data.dval = 0.0;
+    if (y_orig.data.dval == -0.0)
+      y_orig.data.dval = 0.0;
     ret->data.dval = atan2 (y_orig.data.dval, x_orig.data.dval) * (180.0 / PI)  * angle_multiplier;
     if (ret->data.dval == -0.0) 
       ret->data.dval = 0.0;
diff --git a/source/texk/web2c/mplibdir/mpmathinterval.w b/source/texk/web2c/mplibdir/mpmathinterval.w
index aa1d90d43..813627565 100644
--- a/source/texk/web2c/mplibdir/mpmathinterval.w
+++ b/source/texk/web2c/mplibdir/mpmathinterval.w
@@ -1879,8 +1879,8 @@ void mp_interval_n_arg (MP mp, mp_number *ret, mp_number x_orig, mp_number y_ori
     ret->type = mp_angle_type;
     mpfi_set_si(oneeighty_angle, 180 * angle_multiplier);
     mpfi_div(oneeighty_angle, oneeighty_angle, PI_mpfi_t);
-    checkZero((mpfi_ptr)y_orig.data.num);
-    checkZero((mpfi_ptr)x_orig.data.num);
+    /*checkZero((mpfi_ptr)y_orig.data.num);*/
+    /*checkZero((mpfi_ptr)x_orig.data.num);*/
     mpfi_atan2(atan2val, y_orig.data.num, x_orig.data.num);
     mpfi_mul(ret->data.num, atan2val, oneeighty_angle);
     checkZero((mpfi_ptr)ret->data.num);
-- 
GitLab