Mercurial > hg > xemacs-beta
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); |