CVS update by aidan xemacs/src ...
xemacs-cvs at xemacs.org
xemacs-cvs at xemacs.org
Sun Sep 30 07:38:02 EDT 2007
User: aidan
Date: 07/09/30 13:38:02
Modified: xemacs/src ChangeLog mule-ccl.c
Log:
Merge a CCL bugfix from GNU.
Revision Changes Path
1.1097 +8 -0 XEmacs/xemacs/src/ChangeLog
Index: ChangeLog
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/ChangeLog,v
retrieving revision 1.1096
retrieving revision 1.1097
diff -u -p -r1.1096 -r1.1097
--- ChangeLog 2007/09/26 13:27:59 1.1096
+++ ChangeLog 2007/09/30 11:37:59 1.1097
@@ -1,3 +1,11 @@
+2007-09-30 Aidan Kehoe <kehoea at parhasard.net>
+
+ * mule-ccl.c:
+ * mule-ccl.c (CCL_CALL_FOR_MAP_INSTRUCTION):
+ * mule-ccl.c (ccl_driver):
+ Merge Kenichi Handa's 2004-06-12 GNU bugfix, handling EOF in
+ ccl_driver correctly.
+
2007-09-26 Didier Verna <didier at xemacs.org>
More fixes similar to previous patch:
1.36 +39 -2 XEmacs/xemacs/src/mule-ccl.c
Index: mule-ccl.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/mule-ccl.c,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -p -r1.35 -r1.36
--- mule-ccl.c 2007/08/28 09:49:40 1.35
+++ mule-ccl.c 2007/09/30 11:38:00 1.36
@@ -634,14 +634,17 @@ static int stack_idx_of_map_multiple;
{ \
ccl_prog = ccl_prog_stack_struct[0].ccl_prog; \
ic = ccl_prog_stack_struct[0].ic; \
+ eof_ic = ccl_prog_stack_struct[0].eof_ic; \
} \
CCL_INVALID_CMD; \
} \
ccl_prog_stack_struct[stack_idx].ccl_prog = ccl_prog; \
ccl_prog_stack_struct[stack_idx].ic = (ret_ic); \
+ ccl_prog_stack_struct[stack_idx].eof_ic = eof_ic; \
stack_idx++; \
ccl_prog = called_ccl.prog; \
ic = CCL_HEADER_MAIN; \
+ eof_ic = XINT (ccl_prog[CCL_HEADER_EOF]); \
/* The "if (1)" prevents warning \
"end-of loop code not reached" */ \
if (1) goto ccl_repeat; \
@@ -926,6 +929,7 @@ struct ccl_prog_stack
{
Lisp_Object *ccl_prog; /* Pointer to an array of CCL code. */
int ic; /* Instruction Counter. */
+ int eof_ic; /* Instruction Counter to jump on EOF. */
};
/* For the moment, we only support depth 256 of stack. */
@@ -950,8 +954,11 @@ ccl_driver (struct ccl_program *ccl,
int stack_idx = ccl->stack_idx;
/* Instruction counter of the current CCL code. */
int this_ic = 0;
+ int eof_ic = ccl->eof_ic;
+ int eof_hit = 0;
+ static int ccl_driver_calls;
- if (ic >= ccl->eof_ic)
+ if (ic >= eof_ic)
ic = CCL_HEADER_MAIN;
if (ccl->buf_magnification ==0) /* We can't produce any bytes. */
@@ -964,6 +971,8 @@ ccl_driver (struct ccl_program *ccl,
ccl_backtrace_idx = 0;
#endif
+ ++ccl_driver_calls;
+
for (;;)
{
ccl_repeat:
@@ -1161,15 +1170,18 @@ ccl_driver (struct ccl_program *ccl,
{
ccl_prog = ccl_prog_stack_struct[0].ccl_prog;
ic = ccl_prog_stack_struct[0].ic;
+ eof_ic = ccl_prog_stack_struct[0].eof_ic;
}
CCL_INVALID_CMD;
}
ccl_prog_stack_struct[stack_idx].ccl_prog = ccl_prog;
ccl_prog_stack_struct[stack_idx].ic = ic;
+ ccl_prog_stack_struct[stack_idx].eof_ic = eof_ic;
stack_idx++;
ccl_prog = XVECTOR (XVECTOR (slot)->contents[1])->contents;
ic = CCL_HEADER_MAIN;
+ eof_ic = XINT (ccl_prog[CCL_HEADER_EOF]);
}
break;
@@ -1200,6 +1212,9 @@ ccl_driver (struct ccl_program *ccl,
stack_idx--;
ccl_prog = ccl_prog_stack_struct[stack_idx].ccl_prog;
ic = ccl_prog_stack_struct[stack_idx].ic;
+ eof_ic = ccl_prog_stack_struct[stack_idx].eof_ic;
+ if (eof_hit)
+ ic = eof_ic;
break;
}
if (src)
@@ -1398,10 +1413,32 @@ ccl_driver (struct ccl_program *ccl,
break;
ccl_read_multibyte_character_suspend:
+ if (src <= src_end && ccl->last_block)
+ {
+ /* #### Unclear when this happens. GNU use
+ CHARSET_8_BIT_CONTROL here, which we can't. */
+ if (i < 0x80)
+ {
+ reg[RRR] = LEADING_BYTE_ASCII;
+ reg[rrr] = i;
+ }
+ else if (i < 0xA0)
+ {
+ reg[RRR] = LEADING_BYTE_CONTROL_1;
+ reg[rrr] = i - 0xA0;
+ }
+ else
+ {
+ reg[RRR] = LEADING_BYTE_LATIN_ISO8859_1;
+ reg[rrr] = i & 0x7F;
+ }
+ break;
+ }
src--;
if (ccl->last_block)
{
- ic = ccl->eof_ic;
+ ic = eof_ic;
+ eof_hit = 1;
goto ccl_repeat;
}
else
More information about the XEmacs-CVS
mailing list