[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/src/ccl.c [lexbind]
From: |
Miles Bader |
Subject: |
[Emacs-diffs] Changes to emacs/src/ccl.c [lexbind] |
Date: |
Tue, 06 Jul 2004 07:04:38 -0400 |
Index: emacs/src/ccl.c
diff -c emacs/src/ccl.c:1.76.4.4 emacs/src/ccl.c:1.76.4.5
*** emacs/src/ccl.c:1.76.4.4 Tue Jul 6 09:14:34 2004
--- emacs/src/ccl.c Tue Jul 6 10:10:52 2004
***************
*** 626,639 ****
--- 626,642 ----
{ \
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 = XFASTINT (ccl_prog[CCL_HEADER_EOF]); \
goto ccl_repeat; \
} \
while (0)
***************
*** 710,723 ****
--- 713,741 ----
/* Terminate CCL program because of invalid command. Should not occur
in the normal case. */
+ #ifndef CCL_DEBUG
+
+ #define CCL_INVALID_CMD \
+ do \
+ { \
+ ccl->status = CCL_STAT_INVALID_CMD; \
+ goto ccl_error_handler; \
+ } \
+ while(0)
+
+ #else
+
#define CCL_INVALID_CMD \
do \
{ \
+ ccl_debug_hook (this_ic); \
ccl->status = CCL_STAT_INVALID_CMD; \
goto ccl_error_handler; \
} \
while(0)
+ #endif
+
/* Encode one character CH to multibyte form and write to the current
output buffer. If CH is less than 256, CH is written as is. */
#define CCL_WRITE_CHAR(ch) \
***************
*** 809,815 ****
} \
else if (ccl->last_block) \
{ \
! ic = ccl->eof_ic; \
goto ccl_repeat; \
} \
else \
--- 827,834 ----
} \
else if (ccl->last_block) \
{ \
! REG = -1; \
! ic = eof_ic; \
goto ccl_repeat; \
} \
else \
***************
*** 854,865 ****
--- 873,892 ----
#define CCL_DEBUG_BACKTRACE_LEN 256
int ccl_backtrace_table[CCL_DEBUG_BACKTRACE_LEN];
int ccl_backtrace_idx;
+
+ int
+ ccl_debug_hook (int ic)
+ {
+ return ic;
+ }
+
#endif
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. */
***************
*** 888,895 ****
sequence. For that conversion, we remember how many more bytes
we must keep in DESTINATION in this variable. */
int extra_bytes = ccl->eight_bit_control;
! if (ic >= ccl->eof_ic)
ic = CCL_HEADER_MAIN;
if (ccl->buf_magnification == 0) /* We can't produce any bytes. */
--- 915,924 ----
sequence. For that conversion, we remember how many more bytes
we must keep in DESTINATION in this variable. */
int extra_bytes = ccl->eight_bit_control;
+ int eof_ic = ccl->eof_ic;
+ int eof_hit = 0;
! if (ic >= eof_ic)
ic = CCL_HEADER_MAIN;
if (ccl->buf_magnification == 0) /* We can't produce any bytes. */
***************
*** 1093,1107 ****
--- 1122,1139 ----
{
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 (AREF (slot, 1))->contents;
ic = CCL_HEADER_MAIN;
+ eof_ic = XFASTINT (ccl_prog[CCL_HEADER_EOF]);
}
break;
***************
*** 1131,1136 ****
--- 1163,1171 ----
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)
***************
*** 1367,1373 ****
src--;
if (ccl->last_block)
{
! ic = ccl->eof_ic;
goto ccl_repeat;
}
else
--- 1402,1409 ----
src--;
if (ccl->last_block)
{
! ic = eof_ic;
! eof_hit = 1;
goto ccl_repeat;
}
else
- [Emacs-diffs] Changes to emacs/src/ccl.c [lexbind],
Miles Bader <=