diff src/ccl.c @ 23884:179bcb86f12f

(CCL_SUCCESS): Don't set ccl->ic. (ccl_driver) <CCL_End>: Pretend that all source text is consumed. Set `ic' to the head of this command. (ccl_driver) <CCL_ReadMultibyteChar2>: Return a single byte 8-bit code for an invalid code. (setup_ccl_program): If the arg VEC is nil, skip setting ups based on VEC.
author Kenichi Handa <handa@m17n.org>
date Tue, 15 Dec 1998 04:35:38 +0000
parents 3d079e8b2edb
children 36e004c54eaf
line wrap: on
line diff
--- a/src/ccl.c	Tue Dec 15 04:35:38 1998 +0000
+++ b/src/ccl.c	Tue Dec 15 04:35:38 1998 +0000
@@ -636,7 +636,6 @@
 #define CCL_SUCCESS		   	\
   do {				   	\
     ccl->status = CCL_STAT_SUCCESS;	\
-    ccl->ic = CCL_HEADER_MAIN;		\
     goto ccl_finish;		   	\
   } while (0)
 
@@ -978,6 +977,11 @@
 	      ic = ccl_prog_stack_struct[stack_idx].ic;
 	      break;
 	    }
+	  if (src)
+	    src = src_end;
+	  /* ccl->ic should points to this command code again to
+             suppress further processing.  */
+	  ic--;
 	  CCL_SUCCESS;
 
 	case CCL_ExprSelfConst: /* 00000OPERATION000000rrrXXXXX */
@@ -1180,9 +1184,9 @@
 		  }
 		else
 		  {
-		    /* INVALID CODE
-		       Returned charset is -1.  */
-		    reg[RRR] = -1;
+		    /* INVALID CODE.  Return a single byte character.  */
+		    reg[RRR] = CHARSET_ASCII;
+		    reg[rrr] = i;
 		  }
 	      } while (0);
 	      break;
@@ -1608,7 +1612,8 @@
 }
 
 /* Setup fields of the structure pointed by CCL appropriately for the
-   execution of compiled CCL code in VEC (vector of integer).  */
+   execution of compiled CCL code in VEC (vector of integer).
+   If VEC is nil, we skip setting ups based on VEC.  */
 void
 setup_ccl_program (ccl, vec)
      struct ccl_program *ccl;
@@ -1616,11 +1621,16 @@
 {
   int i;
 
-  ccl->size = XVECTOR (vec)->size;
-  ccl->prog = XVECTOR (vec)->contents;
+  if (VECTORP (vec))
+    {
+      struct Lisp_Vector *vp = XVECTOR (vec);
+
+      ccl->size = vp->size;
+      ccl->prog = vp->contents;
+      ccl->eof_ic = XINT (vp->contents[CCL_HEADER_EOF]);
+      ccl->buf_magnification = XINT (vp->contents[CCL_HEADER_BUF_MAG]);
+    }
   ccl->ic = CCL_HEADER_MAIN;
-  ccl->eof_ic = XINT (XVECTOR (vec)->contents[CCL_HEADER_EOF]);
-  ccl->buf_magnification = XINT (XVECTOR (vec)->contents[CCL_HEADER_BUF_MAG]);
   for (i = 0; i < 8; i++)
     ccl->reg[i] = 0;
   ccl->last_block = 0;