Ar an tríú lá is fiche de mí na Samhain, scríobh Stephen J. Turnbull:
diff -r c096d8051f89 src/font-mgr.c
--- a/src/font-mgr.c Sat Nov 20 16:49:11 2010 +0000
+++ b/src/font-mgr.c Tue Nov 23 14:12:26 2010 +0900
@@ -440,7 +440,7 @@
{
#ifdef HAVE_BIGNUM
check_integer_range (id, Qzero, make_integer (INT_MAX));
- int_id = BIGNUMP (id) ? bignum_to_int (id) : XINT (id);
+ int_id = BIGNUMP (id) ? bignum_to_int ((mpz_srcptr) XBIGNUM(id)) : XINT (id);
#else
check_integer_range (id, Qzero, make_integer (EMACS_INT_MAX));
int_id = XINT (id);
Aidan, Jerry, please review. I *will not* apply because I do not
understand why the cast to mpz_srcptr is needed to avoid warnings
about the result type of XBIGNUM, so I'm probably doing something
wrong.
Right; the Lisp_Bignum object has a header before the associated
library-specific bignum object, so the library-specific functions will end
up rummaging through data intended for our garbage collector.
But maybe that cast will clue you in to what I'm doing
wrong....
Also, *in principle*[1] shouldn't it be possible to write this code as
check_integer_range (id, Qzero, make_integer (INT_MAX))
int_id = BIGNUMP (id) ? bignum_to_int (id) : XINT (id)
where
#ifndef HAVE_BIGNUM
#define INT_MAX (EMACS_INT_MAX)
INT_MAX is a standard C90 constant, and changing it is something I didn’t
want to do. We could have changed the code to something like you suggest,
but it’s much of a muchness.
--
“Apart from the nine-banded armadillo, man is the only natural host of
Mycobacterium leprae, although it can be grown in the footpads of mice.”
-- Kumar & Clark, Clinical Medicine, summarising improbable leprosy research
_______________________________________________
XEmacs-Beta mailing list
XEmacs-Beta(a)xemacs.org
http://lists.xemacs.org/mailman/listinfo/xemacs-beta