: -1));
h = GET_HASH_TABLE (eop);
- eop = hash_lookup (h, make_fixnum (reg[RRR]), NULL);
+ eop = (FIXNUM_OVERFLOW_P (reg[RRR])
+ ? -1
+ : hash_lookup (h, make_fixnum (reg[RRR]), NULL));
if (eop >= 0)
{
Lisp_Object opl;
i = CCL_DECODE_CHAR (reg[RRR], reg[rrr]);
h = GET_HASH_TABLE (eop);
- eop = hash_lookup (h, make_fixnum (i), NULL);
+ eop = (FIXNUM_OVERFLOW_P (i)
+ ? -1
+ : hash_lookup (h, make_fixnum (i), NULL));
if (eop >= 0)
{
Lisp_Object opl;
error ("Length of vector REGISTERS is not 8");
for (i = 0; i < 8; i++)
- ccl.reg[i] = (TYPE_RANGED_FIXNUMP (int, AREF (reg, i))
- ? XFIXNUM (AREF (reg, i))
- : 0);
+ {
+ intmax_t n;
+ ccl.reg[i] = ((INTEGERP (AREF (reg, i))
+ && integer_to_intmax (AREF (reg, i), &n)
+ && INT_MIN <= n && n <= INT_MAX)
+ ? n : 0);
+ }
ccl_driver (&ccl, NULL, NULL, 0, 0, Qnil);
maybe_quit ();
error ("Error in CCL program at %dth code", ccl.ic);
for (i = 0; i < 8; i++)
- ASET (reg, i, make_fixnum (ccl.reg[i]));
+ ASET (reg, i, make_int (ccl.reg[i]));
return Qnil;
}
{
if (NILP (AREF (status, i)))
ASET (status, i, make_fixnum (0));
- if (TYPE_RANGED_FIXNUMP (int, AREF (status, i)))
- ccl.reg[i] = XFIXNUM (AREF (status, i));
+ intmax_t n;
+ if (INTEGERP (AREF (status, i))
+ && integer_to_intmax (AREF (status, i), &n)
+ && INT_MIN <= n && n <= INT_MAX)
+ ccl.reg[i] = n;
}
- if (FIXNUMP (AREF (status, 8)))
+ intmax_t ic;
+ if (INTEGERP (AREF (status, 8)) && integer_to_intmax (AREF (status, 8), &ic))
{
- EMACS_INT ic = XFIXNUM (AREF (status, 8));
if (ccl.ic < ic && ic < ccl.size)
ccl.ic = ic;
}
error ("CCL program interrupted at %dth code", ccl.ic);
for (i = 0; i < 8; i++)
- ASET (status, i, make_fixnum (ccl.reg[i]));
- ASET (status, 8, make_fixnum (ccl.ic));
+ ASET (status, i, make_int (ccl.reg[i]));
+ ASET (status, 8, make_int (ccl.ic));
val = make_specified_string ((const char *) outbuf, produced_chars,
outp - outbuf, NILP (unibyte_p));