else if (EQ (lisp, Qt))
return json_check (json_true ());
else if (INTEGERP (lisp))
- return json_check (json_integer (INTEGER_TO_INT (lisp, json_int_t)));
+ {
+ intmax_t low = TYPE_MINIMUM (json_int_t);
+ intmax_t high = TYPE_MAXIMUM (json_int_t);
+ intmax_t value;
+ if (! (integer_to_intmax (lisp, &value) && low <= value && value <= high))
+ args_out_of_range_3 (lisp, make_int (low), make_int (high));
+ return json_check (json_integer (value));
+ }
else if (FLOATP (lisp))
return json_check (json_real (XFLOAT_DATA (lisp)));
else if (STRINGP (lisp))
#define INT_TO_INTEGER(expr) \
(EXPR_SIGNED (expr) ? make_int (expr) : make_uint (expr))
-/* Return the integral value of NUM. If NUM is too big for TYPE,
- signal an error. */
-#define INTEGER_TO_INT(num, type) \
- (TYPE_SIGNED (type) \
- ? ranged_integer_to_int ((num), TYPE_MINIMUM (type), TYPE_MAXIMUM (type)) \
- : ranged_integer_to_uint ((num), TYPE_MAXIMUM (type)))
-
\f
/* Forwarding pointer to an int variable.
This is allowed only in the value cell of a symbol,
garbage_collect ();
}
-INLINE intmax_t
-ranged_integer_to_int (Lisp_Object num, intmax_t min, intmax_t max)
-{
- CHECK_INTEGER (num);
- intmax_t result;
- if (!(integer_to_intmax (num, &result) && min <= result && result <= max))
- args_out_of_range_3 (num, make_int (min), make_int (max));
- return result;
-}
-
-INLINE uintmax_t
-ranged_integer_to_uint (Lisp_Object num, uintmax_t max)
-{
- CHECK_INTEGER (num);
- uintmax_t result;
- if (!(integer_to_uintmax (num, &result) && result <= max))
- args_out_of_range_3 (num, make_fixed_natnum (0), make_uint (max));
- return result;
-}
-
INLINE_HEADER_END
#endif /* EMACS_LISP_H */