emacs-diffs
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]