[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/src/ccl.c
From: |
Kenichi Handa |
Subject: |
[Emacs-diffs] Changes to emacs/src/ccl.c |
Date: |
Fri, 27 May 2005 07:27:50 -0400 |
Index: emacs/src/ccl.c
diff -c emacs/src/ccl.c:1.87 emacs/src/ccl.c:1.88
*** emacs/src/ccl.c:1.87 Sun Jun 13 00:22:19 2004
--- emacs/src/ccl.c Fri May 27 11:27:50 2005
***************
*** 49,58 ****
Lisp_Object Qccl_program_idx;
/* Table of registered CCL programs. Each element is a vector of
! NAME, CCL_PROG, and RESOLVEDP where NAME (symbol) is the name of
! the program, CCL_PROG (vector) is the compiled code of the program,
! RESOLVEDP (t or nil) is the flag to tell if symbols in CCL_PROG is
! already resolved to index numbers or not. */
Lisp_Object Vccl_program_table;
/* Vector of registered hash tables for translation. */
--- 49,60 ----
Lisp_Object Qccl_program_idx;
/* Table of registered CCL programs. Each element is a vector of
! NAME, CCL_PROG, RESOLVEDP, and UPDATEDP, where NAME (symbol) is the
! name of the program, CCL_PROG (vector) is the compiled code of the
! program, RESOLVEDP (t or nil) is the flag to tell if symbols in
! CCL_PROG is already resolved to index numbers or not, UPDATEDP (t
! or nil) is the flat to tell if the CCL program is updated after it
! was once used. */
Lisp_Object Vccl_program_table;
/* Vector of registered hash tables for translation. */
***************
*** 2028,2041 ****
symbols, return Qnil. */
static Lisp_Object
! ccl_get_compiled_code (ccl_prog)
Lisp_Object ccl_prog;
{
Lisp_Object val, slot;
if (VECTORP (ccl_prog))
{
val = resolve_symbol_ccl_program (ccl_prog);
return (VECTORP (val) ? val : Qnil);
}
if (!SYMBOLP (ccl_prog))
--- 2030,2045 ----
symbols, return Qnil. */
static Lisp_Object
! ccl_get_compiled_code (ccl_prog, idx)
Lisp_Object ccl_prog;
+ int *idx;
{
Lisp_Object val, slot;
if (VECTORP (ccl_prog))
{
val = resolve_symbol_ccl_program (ccl_prog);
+ *idx = -1;
return (VECTORP (val) ? val : Qnil);
}
if (!SYMBOLP (ccl_prog))
***************
*** 2047,2055 ****
return Qnil;
slot = AREF (Vccl_program_table, XINT (val));
if (! VECTORP (slot)
! || ASIZE (slot) != 3
|| ! VECTORP (AREF (slot, 1)))
return Qnil;
if (NILP (AREF (slot, 2)))
{
val = resolve_symbol_ccl_program (AREF (slot, 1));
--- 2051,2060 ----
return Qnil;
slot = AREF (Vccl_program_table, XINT (val));
if (! VECTORP (slot)
! || ASIZE (slot) != 4
|| ! VECTORP (AREF (slot, 1)))
return Qnil;
+ *idx = XINT (val);
if (NILP (AREF (slot, 2)))
{
val = resolve_symbol_ccl_program (AREF (slot, 1));
***************
*** 2078,2084 ****
{
struct Lisp_Vector *vp;
! ccl_prog = ccl_get_compiled_code (ccl_prog);
if (! VECTORP (ccl_prog))
return -1;
vp = XVECTOR (ccl_prog);
--- 2083,2089 ----
{
struct Lisp_Vector *vp;
! ccl_prog = ccl_get_compiled_code (ccl_prog, &ccl->idx);
if (! VECTORP (ccl_prog))
return -1;
vp = XVECTOR (ccl_prog);
***************
*** 2086,2091 ****
--- 2091,2103 ----
ccl->prog = vp->contents;
ccl->eof_ic = XINT (vp->contents[CCL_HEADER_EOF]);
ccl->buf_magnification = XINT (vp->contents[CCL_HEADER_BUF_MAG]);
+ if (ccl->idx >= 0)
+ {
+ Lisp_Object slot;
+
+ slot = AREF (Vccl_program_table, ccl->idx);
+ ASET (slot, 3, Qnil);
+ }
}
ccl->ic = CCL_HEADER_MAIN;
for (i = 0; i < 8; i++)
***************
*** 2100,2105 ****
--- 2112,2144 ----
return 0;
}
+
+ /* Check if CCL is updated or not. If not, re-setup members of CCL. */
+
+ int
+ check_ccl_update (ccl)
+ struct ccl_program *ccl;
+ {
+ struct Lisp_Vector *vp;
+ Lisp_Object slot, ccl_prog;
+
+ if (ccl->idx < 0)
+ return 0;
+ slot = AREF (Vccl_program_table, ccl->idx);
+ if (NILP (AREF (slot, 3)))
+ return 0;
+ ccl_prog = ccl_get_compiled_code (AREF (slot, 0), &ccl->idx);
+ if (! VECTORP (ccl_prog))
+ return -1;
+ ccl->size = ASIZE (ccl_prog);
+ ccl->prog = XVECTOR (ccl_prog)->contents;
+ ccl->eof_ic = XINT (AREF (ccl_prog, CCL_HEADER_EOF));
+ ccl->buf_magnification = XINT (AREF (ccl_prog, CCL_HEADER_BUF_MAG));
+ ASET (slot, 3, Qnil);
+ return 0;
+ }
+
+
DEFUN ("ccl-program-p", Fccl_program_p, Sccl_program_p, 1, 1, 0,
doc: /* Return t if OBJECT is a CCL program name or a compiled CCL
program code.
See the documentation of `define-ccl-program' for the detail of CCL program.
*/)
***************
*** 2298,2305 ****
if (EQ (name, AREF (slot, 0)))
{
/* Update this slot. */
! AREF (slot, 1) = ccl_prog;
! AREF (slot, 2) = resolved;
return make_number (idx);
}
}
--- 2337,2345 ----
if (EQ (name, AREF (slot, 0)))
{
/* Update this slot. */
! ASET (slot, 1, ccl_prog);
! ASET (slot, 2, resolved);
! ASET (slot, 3, Qt);
return make_number (idx);
}
}
***************
*** 2312,2330 ****
new_table = Fmake_vector (make_number (len * 2), Qnil);
for (j = 0; j < len; j++)
! AREF (new_table, j)
! = AREF (Vccl_program_table, j);
Vccl_program_table = new_table;
}
{
Lisp_Object elt;
! elt = Fmake_vector (make_number (3), Qnil);
! AREF (elt, 0) = name;
! AREF (elt, 1) = ccl_prog;
! AREF (elt, 2) = resolved;
! AREF (Vccl_program_table, idx) = elt;
}
Fput (name, Qccl_program_idx, make_number (idx));
--- 2352,2370 ----
new_table = Fmake_vector (make_number (len * 2), Qnil);
for (j = 0; j < len; j++)
! ASET (new_table, j, AREF (Vccl_program_table, j));
Vccl_program_table = new_table;
}
{
Lisp_Object elt;
! elt = Fmake_vector (make_number (4), Qnil);
! ASET (elt, 0, name);
! ASET (elt, 1, ccl_prog);
! ASET (elt, 2, resolved);
! ASET (elt, 3, Qt);
! ASET (Vccl_program_table, idx, elt);
}
Fput (name, Qccl_program_idx, make_number (idx));
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] Changes to emacs/src/ccl.c,
Kenichi Handa <=