From: Stefan Monnier Date: Mon, 10 Sep 2018 12:11:26 +0000 (-0400) Subject: * src/charset.c (Fencode_char): Explain when/why bignums are used X-Git-Tag: emacs-27.0.90~4446 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=a65fe6fbf6f05789bb69c50de7b0946adf8773ac;p=emacs.git * src/charset.c (Fencode_char): Explain when/why bignums are used --- diff --git a/src/charset.c b/src/charset.c index e11a8366d58..6e2bf17cdf6 100644 --- a/src/charset.c +++ b/src/charset.c @@ -1886,6 +1886,13 @@ Return nil if CHARSET doesn't support CH. */) code = ENCODE_CHAR (charsetp, c); if (code == CHARSET_INVALID_CODE (charsetp)) return Qnil; + /* There are much fewer codepoints in the world than we have positive + fixnums, so it could be argued that we never really need a bignum, + e.g. Unicode codepoints only need 21bit, and China's GB-10830 + can fit in 22bit. Yet we encode GB-10830's chars in a sparse way + (we just take the 4byte sequences as a 32bit int), so some + GB-10830 chars (such as 0x81308130 in etc/charsets/gb108304.map) end + up represented as bignums here. */ return INT_TO_INTEGER (code); }