comparison src/number.h @ 5118:e0db3c197671 ben-lisp-object

merge up to latest default branch, doesn't compile yet
author Ben Wing <ben@xemacs.org>
date Sat, 26 Dec 2009 21:18:49 -0600
parents b5e1d4f6b66f
children d1247f3cc363
comparison
equal deleted inserted replaced
5117:3742ea8250b5 5118:e0db3c197671
74 struct lrecord_header lheader; 74 struct lrecord_header lheader;
75 bignum data; 75 bignum data;
76 }; 76 };
77 typedef struct Lisp_Bignum Lisp_Bignum; 77 typedef struct Lisp_Bignum Lisp_Bignum;
78 78
79 DECLARE_LRECORD (bignum, Lisp_Bignum); 79 DECLARE_LISP_OBJECT (bignum, Lisp_Bignum);
80 #define XBIGNUM(x) XRECORD (x, bignum, Lisp_Bignum) 80 #define XBIGNUM(x) XRECORD (x, bignum, Lisp_Bignum)
81 #define wrap_bignum(p) wrap_record (p, bignum) 81 #define wrap_bignum(p) wrap_record (p, bignum)
82 #define BIGNUMP(x) RECORDP (x, bignum) 82 #define BIGNUMP(x) RECORDP (x, bignum)
83 #define CHECK_BIGNUM(x) CHECK_RECORD (x, bignum) 83 #define CHECK_BIGNUM(x) CHECK_RECORD (x, bignum)
84 #define CONCHECK_BIGNUM(x) CONCHECK_RECORD (x, bignum) 84 #define CONCHECK_BIGNUM(x) CONCHECK_RECORD (x, bignum)
97 { \ 97 { \
98 Lisp_Object retval = make_bignum(0); \ 98 Lisp_Object retval = make_bignum(0); \
99 bignum_##op (XBIGNUM_DATA (retval), XBIGNUM_DATA (b), arg); \ 99 bignum_##op (XBIGNUM_DATA (retval), XBIGNUM_DATA (b), arg); \
100 return Fcanonicalize_number (retval); \ 100 return Fcanonicalize_number (retval); \
101 } while (0) 101 } while (0)
102
103 #if SIZEOF_EMACS_INT == SIZEOF_LONG
104 # define bignum_fits_emacs_int_p(b) bignum_fits_long_p(b)
105 # define bignum_to_emacs_int(b) bignum_to_long(b)
106 #elif SIZEOF_EMACS_INT == SIZEOF_INT
107 # define bignum_fits_emacs_int_p(b) bignum_fits_int_p(b)
108 # define bignum_to_emacs_int(b) bignum_to_int(b)
109 #else
110 # error Bignums currently do not work with long long Emacs integers.
111 #endif
102 112
103 extern Lisp_Object make_bignum (long); 113 extern Lisp_Object make_bignum (long);
104 extern Lisp_Object make_bignum_bg (bignum); 114 extern Lisp_Object make_bignum_bg (bignum);
105 extern bignum scratch_bignum, scratch_bignum2; 115 extern bignum scratch_bignum, scratch_bignum2;
106 116
153 struct lrecord_header lheader; 163 struct lrecord_header lheader;
154 ratio data; 164 ratio data;
155 }; 165 };
156 typedef struct Lisp_Ratio Lisp_Ratio; 166 typedef struct Lisp_Ratio Lisp_Ratio;
157 167
158 DECLARE_LRECORD (ratio, Lisp_Ratio); 168 DECLARE_LISP_OBJECT (ratio, Lisp_Ratio);
159 #define XRATIO(x) XRECORD (x, ratio, Lisp_Ratio) 169 #define XRATIO(x) XRECORD (x, ratio, Lisp_Ratio)
160 #define wrap_ratio(p) wrap_record (p, ratio) 170 #define wrap_ratio(p) wrap_record (p, ratio)
161 #define RATIOP(x) RECORDP (x, ratio) 171 #define RATIOP(x) RECORDP (x, ratio)
162 #define CHECK_RATIO(x) CHECK_RECORD (x, ratio) 172 #define CHECK_RATIO(x) CHECK_RECORD (x, ratio)
163 #define CONCHECK_RATIO(x) CONCHECK_RECORD (x, ratio) 173 #define CONCHECK_RATIO(x) CONCHECK_RECORD (x, ratio)
183 } while (0) 193 } while (0)
184 194
185 extern Lisp_Object make_ratio (long, unsigned long); 195 extern Lisp_Object make_ratio (long, unsigned long);
186 extern Lisp_Object make_ratio_bg (bignum, bignum); 196 extern Lisp_Object make_ratio_bg (bignum, bignum);
187 extern Lisp_Object make_ratio_rt (ratio); 197 extern Lisp_Object make_ratio_rt (ratio);
188 extern ratio scratch_ratio; 198 extern ratio scratch_ratio, scratch_ratio2;
189 199
190 #else /* !HAVE_RATIO */ 200 #else /* !HAVE_RATIO */
191 201
192 #define RATIOP(x) 0 202 #define RATIOP(x) 0
193 #define CHECK_RATIO(x) dead_wrong_type_argument (Qratiop, x) 203 #define CHECK_RATIO(x) dead_wrong_type_argument (Qratiop, x)
227 struct lrecord_header lheader; 237 struct lrecord_header lheader;
228 bigfloat bf; 238 bigfloat bf;
229 }; 239 };
230 typedef struct Lisp_Bigfloat Lisp_Bigfloat; 240 typedef struct Lisp_Bigfloat Lisp_Bigfloat;
231 241
232 DECLARE_LRECORD (bigfloat, Lisp_Bigfloat); 242 DECLARE_LISP_OBJECT (bigfloat, Lisp_Bigfloat);
233 #define XBIGFLOAT(x) XRECORD (x, bigfloat, Lisp_Bigfloat) 243 #define XBIGFLOAT(x) XRECORD (x, bigfloat, Lisp_Bigfloat)
234 #define wrap_bigfloat(p) wrap_record (p, bigfloat) 244 #define wrap_bigfloat(p) wrap_record (p, bigfloat)
235 #define BIGFLOATP(x) RECORDP (x, bigfloat) 245 #define BIGFLOATP(x) RECORDP (x, bigfloat)
236 #define CHECK_BIGFLOAT(x) CHECK_RECORD (x, bigfloat) 246 #define CHECK_BIGFLOAT(x) CHECK_RECORD (x, bigfloat)
237 #define CONCHECK_BIGFLOAT(x) CONCHECK_RECORD (x, bigfloat) 247 #define CONCHECK_BIGFLOAT(x) CONCHECK_RECORD (x, bigfloat)
239 #define bigfloat_data(f) ((f)->bf) 249 #define bigfloat_data(f) ((f)->bf)
240 #define XBIGFLOAT_DATA(x) bigfloat_data (XBIGFLOAT (x)) 250 #define XBIGFLOAT_DATA(x) bigfloat_data (XBIGFLOAT (x))
241 #define XBIGFLOAT_GET_PREC(x) bigfloat_get_prec (XBIGFLOAT_DATA (x)) 251 #define XBIGFLOAT_GET_PREC(x) bigfloat_get_prec (XBIGFLOAT_DATA (x))
242 #define XBIGFLOAT_SET_PREC(x,p) bigfloat_set_prec (XBIGFLOAT_DATA (x), p) 252 #define XBIGFLOAT_SET_PREC(x,p) bigfloat_set_prec (XBIGFLOAT_DATA (x), p)
243 253
244 #define BIGFLOAT_ARITH_RETURN(f,op) do \ 254 #define BIGFLOAT_ARITH_RETURN(f,op) do \
245 { \ 255 { \
246 Lisp_Object retval = make_bigfloat_bf (f); \ 256 Lisp_Object retval = make_bigfloat (0.0, bigfloat_get_default_prec()); \
247 bigfloat_##op (XBIGFLOAT_DATA (retval), XBIGFLOAT_DATA (f)); \ 257 bigfloat_##op (XBIGFLOAT_DATA (retval), XBIGFLOAT_DATA (f)); \
248 return retval; \ 258 return retval; \
249 } while (0) 259 } while (0)
250 260
251 #define BIGFLOAT_ARITH_RETURN1(f,op,arg) do \ 261 #define BIGFLOAT_ARITH_RETURN1(f,op,arg) do \
252 { \ 262 { \
253 Lisp_Object retval = make_bigfloat_bf (f); \ 263 Lisp_Object retval = make_bigfloat (0.0, bigfloat_get_default_prec()); \
254 bigfloat_##op (XBIGFLOAT_DATA (retval), XBIGFLOAT_DATA (f), arg); \ 264 bigfloat_##op (XBIGFLOAT_DATA (retval), XBIGFLOAT_DATA (f), arg); \
255 return retval; \ 265 return retval; \
256 } while (0) 266 } while (0)
257 267
258 extern Lisp_Object make_bigfloat (double, unsigned long); 268 extern Lisp_Object make_bigfloat (double, unsigned long);