From e003a29261f4d1f9263efbcabbeb4e502de5612b Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Mon, 30 May 2011 19:12:01 -0700 Subject: [PATCH] * ccl.c (CCL_CODE_RANGE): Allow negative numbers. (Bug#8751) (CCL_CODE_MIN): New macro. --- src/ChangeLog | 5 +++++ src/ccl.c | 13 +++++++------ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index b7c1057ae7e..d5eb84095fd 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2011-05-31 Paul Eggert + + * ccl.c (CCL_CODE_RANGE): Allow negative numbers. (Bug#8751) + (CCL_CODE_MIN): New macro. + 2011-05-30 Paul Eggert * alloc.c (lisp_align_malloc): Omit unnecessary val==NULL tests. diff --git a/src/ccl.c b/src/ccl.c index 630c6b3de9e..a58ad90beaf 100644 --- 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)