]> git.eshelyaron.com Git - emacs.git/commitdiff
* ccl.c (CCL_CODE_RANGE): Allow negative numbers. (Bug#8751)
authorPaul Eggert <eggert@cs.ucla.edu>
Tue, 31 May 2011 02:12:01 +0000 (19:12 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Tue, 31 May 2011 02:12:01 +0000 (19:12 -0700)
(CCL_CODE_MIN): New macro.

src/ChangeLog
src/ccl.c

index b7c1057ae7e762cf78ee3fe113cc492ac1c2f904..d5eb84095fd7e9c945075d1dcf6625ec4a415ccf 100644 (file)
@@ -1,3 +1,8 @@
+2011-05-31  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * ccl.c (CCL_CODE_RANGE): Allow negative numbers.  (Bug#8751)
+       (CCL_CODE_MIN): New macro.
+
 2011-05-30  Paul Eggert  <eggert@cs.ucla.edu>
 
        * alloc.c (lisp_align_malloc): Omit unnecessary val==NULL tests.
index 630c6b3de9eefdd5bd532159494dec1b42c76e1b..a58ad90beaf07672520c35256084737a470b3ab2 100644 (file)
--- a/src/ccl.c
+++ b/src/ccl.c
@@ -79,9 +79,8 @@ static Lisp_Object Vccl_program_table;
 #define CCL_HEADER_EOF         1
 #define CCL_HEADER_MAIN                2
 
-/* CCL code is a sequence of 28-bit non-negative integers (i.e. the
-   MSB is always 0), each contains CCL command and/or arguments in the
-   following format:
+/* CCL code is a sequence of 28-bit integers.  Each contains a CCL
+   command and/or arguments in the following format:
 
        |----------------- integer (28-bit) ------------------|
        |------- 17-bit ------|- 3-bit --|- 3-bit --|- 5-bit -|
@@ -94,12 +93,14 @@ static Lisp_Object Vccl_program_table;
        |------------- constant or other args ----------------|
                      cccccccccccccccccccccccccccc
 
-   where, `cc...c' is a non-negative integer indicating constant value
-   (the left most `c' is always 0) or an absolute jump address, `RRR'
+   where `cc...c' is an integer indicating a constant value or an
+   absolute jump address.  The context determines whether `cc...c' is
+   considered to be unsigned, or a signed two's complement number.  `RRR'
    and `rrr' are CCL register number, `XXXXX' is one of the following
    CCL commands.  */
 
 #define CCL_CODE_MAX ((1 << (28 - 1)) - 1)
+#define CCL_CODE_MIN (-1 - CCL_CODE_MAX)
 
 /* CCL commands
 
@@ -756,7 +757,7 @@ while(0)
   while (0)
 
 #define GET_CCL_CODE(code, ccl_prog, ic)                       \
-  GET_CCL_RANGE (code, ccl_prog, ic, 0, CCL_CODE_MAX)
+  GET_CCL_RANGE (code, ccl_prog, ic, CCL_CODE_MIN, CCL_CODE_MAX)
 
 #define GET_CCL_INT(var, ccl_prog, ic)                         \
   GET_CCL_RANGE (var, ccl_prog, ic, INT_MIN, INT_MAX)