diff --git a/libguile/ChangeLog b/libguile/ChangeLog index 602f1fc92..0d62154f6 100644 --- a/libguile/ChangeLog +++ b/libguile/ChangeLog @@ -1,3 +1,17 @@ +2000-05-10 Dirk Herrmann + + * eq.c (scm_eqv_p): Separate handling of real and complex + values. Remove #ifdef SCM_BIGDIG #endif test. + + * eval.c (SCM_CEVAL, SCM_APPLY), gh_data.c (gh_scm2floats, + gh_scm2doubles), hash.c (scm_hasher), ramap.c (scm_array_fill_int, + ramap_rp, scm_array_map_x), random.c (vector_scale, + vector_sum_squares), unif.c (scm_make_uve, scm_array_p, + scm_array_set_x): Use SCM_REAL_VALUE instead of SCM_REALPART if + the object is known to be real. Use SCM_COMPLEXP instead of + deprecated SCM_CPLXP. Use SCM_INEXACTP instead of deprecated + SCM_INEXP. + 2000-05-10 Dirk Herrmann * numbers.c: No need to include unif.h. diff --git a/libguile/eq.c b/libguile/eq.c index b7d0188ce..526a97d4c 100644 --- a/libguile/eq.c +++ b/libguile/eq.c @@ -104,13 +104,14 @@ SCM_DEFINE1 (scm_eqv_p, "eqv?", scm_tc7_rpsubr, } if (SCM_NUMP (x)) { -# ifdef SCM_BIGDIG - if (SCM_BIGP (x)) + if (SCM_BIGP (x)) { return SCM_BOOL (0 == scm_bigcomp (x, y)); -# endif - if (SCM_REALPART (x) != SCM_REALPART(y)) return SCM_BOOL_F; - if (SCM_CPLXP(x) && (SCM_IMAG(x) != SCM_IMAG(y))) return SCM_BOOL_F; - return SCM_BOOL_T; + } else if (SCM_SLOPPY_REALP (x)) { + return SCM_BOOL (SCM_REAL_VALUE (x) == SCM_REAL_VALUE (y)); + } else { /* complex */ + return SCM_BOOL (SCM_COMPLEX_REAL (x) == SCM_COMPLEX_REAL (y) + && SCM_COMPLEX_IMAG (x) == SCM_COMPLEX_IMAG (y)); + } } return SCM_BOOL_F; } diff --git a/libguile/eval.c b/libguile/eval.c index b311da464..91009fc24 100644 --- a/libguile/eval.c +++ b/libguile/eval.c @@ -2739,7 +2739,7 @@ evapply: SCM_ASRTGO (SCM_NIMP (t.arg1), floerr); if (SCM_REALP (t.arg1)) { - RETURN (scm_make_real (SCM_DSUBRF (proc) (SCM_REALPART (t.arg1)))); + RETURN (scm_make_real (SCM_DSUBRF (proc) (SCM_REAL_VALUE (t.arg1)))); } #ifdef SCM_BIGDIG if (SCM_BIGP (t.arg1)) @@ -3335,7 +3335,7 @@ tail: SCM_ASRTGO (SCM_NIMP (arg1), floerr); if (SCM_REALP (arg1)) { - RETURN (scm_make_real (SCM_DSUBRF (proc) (SCM_REALPART (arg1)))); + RETURN (scm_make_real (SCM_DSUBRF (proc) (SCM_REAL_VALUE (arg1)))); } #ifdef SCM_BIGDIG if (SCM_BIGP (arg1)) diff --git a/libguile/gh_data.c b/libguile/gh_data.c index 4d7a55af4..e16e033c9 100644 --- a/libguile/gh_data.c +++ b/libguile/gh_data.c @@ -422,7 +422,7 @@ gh_scm2floats (SCM obj, float *m) else if (SCM_BIGP (val)) m[i] = scm_num2long (val, 0, 0); else - m[i] = SCM_REALPART (val); + m[i] = SCM_REAL_VALUE (val); } break; #ifdef HAVE_ARRAYS @@ -478,7 +478,7 @@ gh_scm2doubles (SCM obj, double *m) else if (SCM_BIGP (val)) m[i] = scm_num2long (val, 0, 0); else - m[i] = SCM_REALPART (val); + m[i] = SCM_REAL_VALUE (val); } break; #ifdef HAVE_ARRAYS diff --git a/libguile/hash.c b/libguile/hash.c index 80f6b8cd8..cdf8d8d0c 100644 --- a/libguile/hash.c +++ b/libguile/hash.c @@ -106,7 +106,7 @@ scm_hasher(SCM obj, unsigned long n, scm_sizet d) return 263 % n; case scm_tc16_real: { - double r = SCM_REALPART(obj); + double r = SCM_REAL_VALUE(obj); if (floor(r)==r) { obj = scm_inexact_to_exact (obj); if SCM_IMP(obj) return SCM_INUM(obj) % n; diff --git a/libguile/ramap.c b/libguile/ramap.c index 840661aad..04c2ad819 100644 --- a/libguile/ramap.c +++ b/libguile/ramap.c @@ -585,7 +585,7 @@ scm_array_fill_int (SCM ra, SCM fill, SCM ignore) { /* scope */ float f, *ve = (float *) SCM_VELTS (ra); SCM_ASRTGO (SCM_REALP (fill), badarg2); - f = SCM_REALPART (fill); + f = SCM_REAL_VALUE (fill); for (i = base; n--; i += inc) ve[i] = f; break; @@ -594,7 +594,7 @@ scm_array_fill_int (SCM ra, SCM fill, SCM ignore) { /* scope */ double f, *ve = (double *) SCM_VELTS (ra); SCM_ASRTGO (SCM_REALP (fill), badarg2); - f = SCM_REALPART (fill); + f = SCM_REAL_VALUE (fill); for (i = base; n--; i += inc) ve[i] = f; break; @@ -603,9 +603,14 @@ scm_array_fill_int (SCM ra, SCM fill, SCM ignore) { /* scope */ double fr, fi; double (*ve)[2] = (double (*)[2]) SCM_VELTS (ra); - SCM_ASRTGO (SCM_INEXP (fill), badarg2); - fr = SCM_REALPART (fill); - fi = (SCM_CPLXP (fill) ? SCM_IMAG (fill) : 0.0); + SCM_ASRTGO (SCM_INEXACTP (fill), badarg2); + if (SCM_REALP (fill)) { + fr = SCM_REAL_VALUE (fill); + fi = 0.0; + } else { + fr = SCM_COMPLEX_REAL (fill); + fi = SCM_COMPLEX_IMAG (fill); + } for (i = base; n--; i += inc) { ve[i][0] = fr; @@ -1365,8 +1370,8 @@ ramap_rp (SCM ra0,SCM proc,SCM ras) for (; n-- > 0; i0 += inc0, i1 += inc1, i2 += inc2) if (SCM_BITVEC_REF (ra0, i0)) { - SCM_REAL (a1) = ((double *) SCM_VELTS (ra1))[i1]; - SCM_REAL (a2) = ((double *) SCM_VELTS (ra2))[i2]; + SCM_REAL_VALUE (a1) = ((double *) SCM_VELTS (ra1))[i1]; + SCM_REAL_VALUE (a2) = ((double *) SCM_VELTS (ra2))[i2]; if (SCM_FALSEP (SCM_SUBRF (proc) (a1, a2))) SCM_BITVEC_CLR (ra0, i0); } @@ -1550,7 +1555,7 @@ SCM_DEFINE (scm_array_map_x, "array-map!", 2, 0, 1, if (SCM_INUMP(fill)) { prot = scm_array_prototype (ra0); - if (SCM_INEXP (prot)) + if (SCM_INEXACTP (prot)) fill = scm_make_real ((double) SCM_INUM (fill)); } diff --git a/libguile/random.c b/libguile/random.c index a29469a1c..a2f48cef9 100644 --- a/libguile/random.c +++ b/libguile/random.c @@ -447,7 +447,7 @@ vector_scale (SCM v, double c) int n = SCM_LENGTH (v); if (SCM_VECTORP (v)) while (--n >= 0) - SCM_REAL (SCM_VELTS (v)[n]) *= c; + SCM_REAL_VALUE (SCM_VELTS (v)[n]) *= c; else while (--n >= 0) ((double *) SCM_VELTS (v))[n] *= c; @@ -461,7 +461,7 @@ vector_sum_squares (SCM v) if (SCM_VECTORP (v)) while (--n >= 0) { - x = SCM_REAL (SCM_VELTS (v)[n]); + x = SCM_REAL_VALUE (SCM_VELTS (v)[n]); sum += x * x; } else diff --git a/libguile/unif.c b/libguile/unif.c index 5616dd155..688e26e8d 100644 --- a/libguile/unif.c +++ b/libguile/unif.c @@ -202,7 +202,7 @@ scm_make_uve (long k, SCM prot) } } else - if (SCM_IMP (prot) || !SCM_INEXP (prot)) + if (SCM_IMP (prot) || !SCM_INEXACTP (prot)) /* Huge non-unif vectors are NOT supported. */ /* no special scm_vector */ return scm_make_vector (SCM_MAKINUM (k), SCM_UNDEFINED); @@ -211,7 +211,7 @@ scm_make_uve (long k, SCM prot) i = sizeof (float) * k; type = scm_tc7_fvect; } - else if (SCM_CPLXP (prot)) + else if (SCM_COMPLEXP (prot)) { i = 2 * sizeof (double) * k; type = scm_tc7_cvect; @@ -318,7 +318,7 @@ SCM_DEFINE (scm_array_p, "array?", 1, 1, 0, case scm_tc7_dvect: protp = SCM_REALP(prot); case scm_tc7_cvect: - protp = SCM_CPLXP(prot); + protp = SCM_COMPLEXP(prot); case scm_tc7_vector: case scm_tc7_wvect: protp = SCM_NULLP(prot); @@ -1332,9 +1332,14 @@ SCM_DEFINE (scm_array_set_x, "array-set!", 2, 0, 1, ((double *) SCM_CELL_WORD_1 (v))[pos] = scm_num2dbl (obj, FUNC_NAME); break; case scm_tc7_cvect: - SCM_ASRTGO (SCM_INEXP (obj), badobj); - ((double *) SCM_CELL_WORD_1 (v))[2 * pos] = SCM_REALPART (obj); - ((double *) SCM_CELL_WORD_1 (v))[2 * pos + 1] = SCM_CPLXP (obj) ? SCM_IMAG (obj) : 0.0; + SCM_ASRTGO (SCM_INEXACTP (obj), badobj); + if (SCM_REALP (obj)) { + ((double *) SCM_CELL_WORD_1 (v))[2 * pos] = SCM_REAL_VALUE (obj); + ((double *) SCM_CELL_WORD_1 (v))[2 * pos + 1] = 0.0; + } else { + ((double *) SCM_CELL_WORD_1 (v))[2 * pos] = SCM_COMPLEX_REAL (obj); + ((double *) SCM_CELL_WORD_1 (v))[2 * pos + 1] = SCM_COMPLEX_IMAG (obj); + } break; case scm_tc7_vector: case scm_tc7_wvect: