#define CCL_SUCCESS \
do { \
ccl->status = CCL_STAT_SUCCESS; \
- ccl->ic = CCL_HEADER_MAIN; \
goto ccl_finish; \
} while (0)
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 */
}
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;
}
/* 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;
{
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;