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 [emacs-unicode-2]


From: Miles Bader
Subject: [Emacs-diffs] Changes to emacs/src/ccl.c [emacs-unicode-2]
Date: Mon, 28 Jun 2004 03:56:09 -0400

Index: emacs/src/ccl.c
diff -c emacs/src/ccl.c:1.82.4.4 emacs/src/ccl.c:1.82.4.5
*** emacs/src/ccl.c:1.82.4.4    Fri Apr 16 12:50:45 2004
--- emacs/src/ccl.c     Mon Jun 28 07:29:19 2004
***************
*** 634,647 ****
--- 634,650 ----
          {                                                     \
            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)
***************
*** 718,731 ****
--- 721,749 ----
  
  /* 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)                    \
***************
*** 762,767 ****
--- 780,786 ----
        r = *src++;                             \
      else if (ccl->last_block)                 \
        {                                               \
+       r = -1;                                 \
        ic = ccl->eof_ic;                       \
        goto ccl_repeat;                        \
        }                                               \
***************
*** 807,818 ****
--- 826,845 ----
  #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.  */
***************
*** 837,844 ****
    /* Instruction counter of the current CCL code. */
    int this_ic = 0;
    struct charset *charset;
  
!   if (ic >= ccl->eof_ic)
      ic = CCL_HEADER_MAIN;
  
    if (ccl->buf_magnification == 0) /* We can't read/produce any bytes.  */
--- 864,873 ----
    /* Instruction counter of the current CCL code. */
    int this_ic = 0;
    struct charset *charset;
+   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 read/produce any bytes.  */
***************
*** 1042,1056 ****
--- 1071,1088 ----
                  {
                    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;
  
***************
*** 1080,1085 ****
--- 1112,1120 ----
              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)




reply via email to

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