~ chicken-core (chicken-5) 93abbcee52cc348206b8aefef8289d6221225f8e


commit 93abbcee52cc348206b8aefef8289d6221225f8e
Author:     felix <felix@call-with-current-continuation.org>
AuthorDate: Thu Dec 6 23:21:35 2018 +0100
Commit:     Evan Hanson <evhan@foldling.org>
CommitDate: Wed Sep 11 21:44:51 2019 +1200

    Replace C_u_i_zerop with inline version C_u_i_zerop2
    
    Marks C_u_i_zerop as deprecated and removes comments indicating possible
    inline candidates (which do no apply). For binary compatibility, the old
    identifier can not be reused.
    
    Signed-off-by: Evan Hanson <evhan@foldling.org>

diff --git a/DEPRECATED b/DEPRECATED
index d6289cf5..d3d8d2b7 100644
--- a/DEPRECATED
+++ b/DEPRECATED
@@ -5,6 +5,8 @@ Deprecated functions and variables
 
 - ##sys#check-exact and its C implementations C_i_check_exact and
   C_i_check_exact_2 have been deprecated (see also #1631).
+- "C_u_i_zerop" has been turned into an inline operation and is
+  deprecated in favor of "C_u_i_zerop2".
 
 
 5.0.0
diff --git a/c-platform.scm b/c-platform.scm
index bf034ff1..3c4e737f 100644
--- a/c-platform.scm
+++ b/c-platform.scm
@@ -650,7 +650,7 @@
 (rewrite 'chicken.flonum#fpgcd 16 2 "C_a_i_flonum_gcd" #f words-per-flonum)
 
 (rewrite 'scheme#zero? 5 "C_eqp" 0 'fixnum)
-(rewrite 'scheme#zero? 2 1 "C_u_i_zerop" #f)
+(rewrite 'scheme#zero? 2 1 "C_u_i_zerop2" #f)
 (rewrite 'scheme#zero? 2 1 "C_i_zerop" #t)
 (rewrite 'scheme#positive? 5 "C_fixnum_greaterp" 0 'fixnum)
 (rewrite 'scheme#positive? 5 "C_flonum_greaterp" 0 'flonum)
diff --git a/chicken.h b/chicken.h
index 72d5d397..dbf6f17b 100644
--- a/chicken.h
+++ b/chicken.h
@@ -1946,7 +1946,7 @@ C_fctexport C_word C_fcall C_i_nanp(C_word x) C_regparm;
 C_fctexport C_word C_fcall C_i_finitep(C_word x) C_regparm;
 C_fctexport C_word C_fcall C_i_infinitep(C_word x) C_regparm;
 C_fctexport C_word C_fcall C_i_zerop(C_word x) C_regparm;
-C_fctexport C_word C_fcall C_u_i_zerop(C_word x) C_regparm;
+C_fctexport C_word C_fcall C_u_i_zerop(C_word x) C_regparm;  /* DEPRECATED */
 C_fctexport C_word C_fcall C_i_positivep(C_word x) C_regparm;
 C_fctexport C_word C_fcall C_i_integer_positivep(C_word x) C_regparm;
 C_fctexport C_word C_fcall C_i_negativep(C_word x) C_regparm;
@@ -2217,6 +2217,15 @@ inline static C_word C_flonum(C_word **ptr, double n)
 }
 
 
+inline static C_word C_fcall C_u_i_zerop2(C_word x)
+{
+  return C_mk_bool(x == C_fix(0) ||
+                   (!C_immediatep(x) &&
+                    C_block_header(x) == C_FLONUM_TAG &&
+                    C_flonum_magnitude(x) == 0.0));
+}
+
+
 inline static C_word C_string_to_pbytevector(C_word s)
 {
   return C_pbytevector(C_header_size(s), (C_char *)C_data_pointer(s));
diff --git a/runtime.c b/runtime.c
index 5e1bb9f1..8a3d3d31 100644
--- a/runtime.c
+++ b/runtime.c
@@ -5491,7 +5491,7 @@ C_regparm C_word C_fcall C_i_zerop(C_word x)
   }
 }
 
-/* I */
+/* DEPRECATED */
 C_regparm C_word C_fcall C_u_i_zerop(C_word x)
 {
   return C_mk_bool(x == C_fix(0) ||
@@ -7050,7 +7050,6 @@ C_s_a_i_arithmetic_shift(C_word **ptr, C_word n, C_word x, C_word y)
 }
 
 
-/* I */
 C_regparm C_word C_fcall C_a_i_exp(C_word **a, int c, C_word n)
 {
   double f;
@@ -7060,7 +7059,6 @@ C_regparm C_word C_fcall C_a_i_exp(C_word **a, int c, C_word n)
 }
 
 
-/* I */
 C_regparm C_word C_fcall C_a_i_log(C_word **a, int c, C_word n)
 {
   double f;
@@ -7070,7 +7068,6 @@ C_regparm C_word C_fcall C_a_i_log(C_word **a, int c, C_word n)
 }
 
 
-/* I */
 C_regparm C_word C_fcall C_a_i_sin(C_word **a, int c, C_word n)
 {
   double f;
@@ -7080,7 +7077,6 @@ C_regparm C_word C_fcall C_a_i_sin(C_word **a, int c, C_word n)
 }
 
 
-/* I */
 C_regparm C_word C_fcall C_a_i_cos(C_word **a, int c, C_word n)
 {
   double f;
@@ -7090,7 +7086,6 @@ C_regparm C_word C_fcall C_a_i_cos(C_word **a, int c, C_word n)
 }
 
 
-/* I */
 C_regparm C_word C_fcall C_a_i_tan(C_word **a, int c, C_word n)
 {
   double f;
@@ -7100,7 +7095,6 @@ C_regparm C_word C_fcall C_a_i_tan(C_word **a, int c, C_word n)
 }
 
 
-/* I */
 C_regparm C_word C_fcall C_a_i_asin(C_word **a, int c, C_word n)
 {
   double f;
@@ -7110,7 +7104,6 @@ C_regparm C_word C_fcall C_a_i_asin(C_word **a, int c, C_word n)
 }
 
 
-/* I */
 C_regparm C_word C_fcall C_a_i_acos(C_word **a, int c, C_word n)
 {
   double f;
@@ -7120,7 +7113,6 @@ C_regparm C_word C_fcall C_a_i_acos(C_word **a, int c, C_word n)
 }
 
 
-/* I */
 C_regparm C_word C_fcall C_a_i_atan(C_word **a, int c, C_word n)
 {
   double f;
@@ -7130,7 +7122,6 @@ C_regparm C_word C_fcall C_a_i_atan(C_word **a, int c, C_word n)
 }
 
 
-/* I */
 C_regparm C_word C_fcall C_a_i_atan2(C_word **a, int c, C_word n1, C_word n2)
 {
   double f1, f2;
@@ -7141,7 +7132,6 @@ C_regparm C_word C_fcall C_a_i_atan2(C_word **a, int c, C_word n1, C_word n2)
 }
 
 
-/* I */
 C_regparm C_word C_fcall C_a_i_sqrt(C_word **a, int c, C_word n)
 {
   double f;
@@ -7782,7 +7772,6 @@ void C_ccall call_cc_values_wrapper(C_word c, C_word *av)
 }
 
 
-/* I */
 void C_ccall C_continuation_graft(C_word c, C_word *av)
 {
   C_word
@@ -8074,7 +8063,7 @@ cplx_times(C_word **ptr, C_word rx, C_word ix, C_word ry, C_word iy)
   clear_buffer_object(ab, i1);
   clear_buffer_object(ab, i2);
 
-  if (C_truep(C_u_i_zerop(i))) return r;
+  if (C_truep(C_u_i_zerop2(i))) return r;
   else return C_cplxnum(ptr, r, i);
 }
 
@@ -8569,7 +8558,7 @@ C_s_a_i_plus(C_word **ptr, C_word n, C_word x, C_word y)
       C_word real_sum, imag_sum;
       real_sum = C_s_a_i_plus(ptr, 2, C_u_i_cplxnum_real(x), C_u_i_cplxnum_real(y));
       imag_sum = C_s_a_i_plus(ptr, 2, C_u_i_cplxnum_imag(x), C_u_i_cplxnum_imag(y));
-      if (C_truep(C_u_i_zerop(imag_sum))) return real_sum;
+      if (C_truep(C_u_i_zerop2(imag_sum))) return real_sum;
       else return C_cplxnum(ptr, real_sum, imag_sum);
     } else {
       C_word real_sum = C_s_a_i_plus(ptr, 2, C_u_i_cplxnum_real(x), y),
@@ -8780,7 +8769,7 @@ C_s_a_i_minus(C_word **ptr, C_word n, C_word x, C_word y)
       C_word real_diff, imag_diff;
       real_diff = C_s_a_i_minus(ptr,2,C_u_i_cplxnum_real(x),C_u_i_cplxnum_real(y));
       imag_diff = C_s_a_i_minus(ptr,2,C_u_i_cplxnum_imag(x),C_u_i_cplxnum_imag(y));
-      if (C_truep(C_u_i_zerop(imag_diff))) return real_diff;
+      if (C_truep(C_u_i_zerop2(imag_diff))) return real_diff;
       else return C_cplxnum(ptr, real_diff, imag_diff);
     } else {
       C_word real_diff = C_s_a_i_minus(ptr, 2, C_u_i_cplxnum_real(x), y),
diff --git a/types.db b/types.db
index 06514b28..9f882dda 100644
--- a/types.db
+++ b/types.db
@@ -260,7 +260,7 @@
 (scheme#zero? (#(procedure #:clean #:enforce #:foldable) scheme#zero? (number) boolean)
 	      ((integer) (scheme#eq? #(1) '0))
 	      (((or cplxnum ratnum)) (let ((#(tmp) #(1))) '#f))
-	      ((number) (##core#inline "C_u_i_zerop" #(1)))
+	      ((number) (##core#inline "C_u_i_zerop2" #(1)))
 	      ((*) (##core#inline "C_i_zerop" #(1))))
 
 (scheme#odd? (#(procedure #:clean #:enforce #:foldable) scheme#odd? (number) boolean)
Trap