comparison src/data.c @ 5438:8d29f1c4bb98

Merge with 21.5 trunk.
author Mats Lidell <matsl@xemacs.org>
date Fri, 26 Nov 2010 06:43:36 +0100
parents 308d34e9f07d c096d8051f89
children 89331fa1c819
comparison
equal deleted inserted replaced
5437:002cb5224e4f 5438:8d29f1c4bb98
154 { 154 {
155 signal_error_1 (Qargs_out_of_range, list3 (a1, a2, a3)); 155 signal_error_1 (Qargs_out_of_range, list3 (a1, a2, a3));
156 } 156 }
157 157
158 void 158 void
159 check_int_range (EMACS_INT val, EMACS_INT min, EMACS_INT max) 159 check_integer_range (Lisp_Object val, Lisp_Object min, Lisp_Object max)
160 { 160 {
161 if (val < min || val > max) 161 Lisp_Object args[] = { min, val, max };
162 args_out_of_range_3 (make_int (val), make_int (min), make_int (max)); 162 int ii;
163
164 for (ii = 0; ii < countof (args); ii++)
165 {
166 CHECK_INTEGER (args[ii]);
167 }
168
169 if (NILP (Fleq (countof (args), args)))
170 args_out_of_range_3 (val, min, max);
163 } 171 }
164 172
165 173
166 /* Data type predicates */ 174 /* Data type predicates */
167 175
500 DEFUN ("natnump", Fnatnump, 1, 1, 0, /* 508 DEFUN ("natnump", Fnatnump, 1, 1, 0, /*
501 Return t if OBJECT is a nonnegative integer. 509 Return t if OBJECT is a nonnegative integer.
502 */ 510 */
503 (object)) 511 (object))
504 { 512 {
505 return NATNUMP (object) 513 return NATNUMP (object) ? Qt : Qnil;
506 #ifdef HAVE_BIGNUM
507 || (BIGNUMP (object) && bignum_sign (XBIGNUM_DATA (object)) >= 0)
508 #endif
509 ? Qt : Qnil;
510 } 514 }
511 515
512 DEFUN ("nonnegativep", Fnonnegativep, 1, 1, 0, /* 516 DEFUN ("nonnegativep", Fnonnegativep, 1, 1, 0, /*
513 Return t if OBJECT is a nonnegative number. 517 Return t if OBJECT is a nonnegative number.
514 */ 518 */
515 (object)) 519 (object))
516 { 520 {
517 return NATNUMP (object) 521 return NATNUMP (object)
518 #ifdef HAVE_BIGNUM
519 || (BIGNUMP (object) && bignum_sign (XBIGNUM_DATA (object)) >= 0)
520 #endif
521 #ifdef HAVE_RATIO 522 #ifdef HAVE_RATIO
522 || (RATIOP (object) && ratio_sign (XRATIO_DATA (object)) >= 0) 523 || (RATIOP (object) && ratio_sign (XRATIO_DATA (object)) >= 0)
523 #endif 524 #endif
524 #ifdef HAVE_BIGFLOAT 525 #ifdef HAVE_BIGFLOAT
525 || (BIGFLOATP (object) && bigfloat_sign (XBIGFLOAT_DATA (object)) >= 0) 526 || (BIGFLOATP (object) && bigfloat_sign (XBIGFLOAT_DATA (object)) >= 0)
1291 1292
1292 if (NILP (base)) 1293 if (NILP (base))
1293 b = 10; 1294 b = 10;
1294 else 1295 else
1295 { 1296 {
1296 CHECK_INT (base); 1297 check_integer_range (base, make_int (2), make_int (16));
1297 b = XINT (base); 1298 b = XINT (base);
1298 check_int_range (b, 2, 16);
1299 } 1299 }
1300 1300
1301 p = XSTRING_DATA (string); 1301 p = XSTRING_DATA (string);
1302 1302
1303 /* Skip any whitespace at the front of the number. Some versions of 1303 /* Skip any whitespace at the front of the number. Some versions of