Commit ad3d1b1d authored by Kenichi Handa's avatar Kenichi Handa
Browse files

(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.
parent 0282eb69
...@@ -636,7 +636,6 @@ static tr_stack *mapping_stack_pointer; ...@@ -636,7 +636,6 @@ static tr_stack *mapping_stack_pointer;
#define CCL_SUCCESS \ #define CCL_SUCCESS \
do { \ do { \
ccl->status = CCL_STAT_SUCCESS; \ ccl->status = CCL_STAT_SUCCESS; \
ccl->ic = CCL_HEADER_MAIN; \
goto ccl_finish; \ goto ccl_finish; \
} while (0) } while (0)
...@@ -978,6 +977,11 @@ ccl_driver (ccl, source, destination, src_bytes, dst_bytes, consumed) ...@@ -978,6 +977,11 @@ ccl_driver (ccl, source, destination, src_bytes, dst_bytes, consumed)
ic = ccl_prog_stack_struct[stack_idx].ic; ic = ccl_prog_stack_struct[stack_idx].ic;
break; break;
} }
if (src)
src = src_end;
/* ccl->ic should points to this command code again to
suppress further processing. */
ic--;
CCL_SUCCESS; CCL_SUCCESS;
case CCL_ExprSelfConst: /* 00000OPERATION000000rrrXXXXX */ case CCL_ExprSelfConst: /* 00000OPERATION000000rrrXXXXX */
...@@ -1180,9 +1184,9 @@ ccl_driver (ccl, source, destination, src_bytes, dst_bytes, consumed) ...@@ -1180,9 +1184,9 @@ ccl_driver (ccl, source, destination, src_bytes, dst_bytes, consumed)
} }
else else
{ {
/* INVALID CODE /* INVALID CODE. Return a single byte character. */
Returned charset is -1. */ reg[RRR] = CHARSET_ASCII;
reg[RRR] = -1; reg[rrr] = i;
} }
} while (0); } while (0);
break; break;
...@@ -1608,7 +1612,8 @@ ccl_driver (ccl, source, destination, src_bytes, dst_bytes, consumed) ...@@ -1608,7 +1612,8 @@ ccl_driver (ccl, source, destination, src_bytes, dst_bytes, consumed)
} }
/* Setup fields of the structure pointed by CCL appropriately for the /* 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 void
setup_ccl_program (ccl, vec) setup_ccl_program (ccl, vec)
struct ccl_program *ccl; struct ccl_program *ccl;
...@@ -1616,11 +1621,16 @@ setup_ccl_program (ccl, vec) ...@@ -1616,11 +1621,16 @@ setup_ccl_program (ccl, vec)
{ {
int i; int i;
ccl->size = XVECTOR (vec)->size; if (VECTORP (vec))
ccl->prog = XVECTOR (vec)->contents; {
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->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++) for (i = 0; i < 8; i++)
ccl->reg[i] = 0; ccl->reg[i] = 0;
ccl->last_block = 0; ccl->last_block = 0;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment