summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>2009-06-19 08:39:33 +0000
committerYAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>2009-06-19 08:39:33 +0000
commitd9dff77516c47770a8d0b58fa6ca99ca6e91d037 (patch)
tree921eb4693061a5df09dad63ec34eb424950a1613
parentf4d4dce437a4afd319c956ca7c7905ceb542b850 (diff)
downloademacs-d9dff77516c47770a8d0b58fa6ca99ca6e91d037.tar.gz
(Ffind_coding_systems_region_internal): Cache checked characters.
-rw-r--r--src/coding.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/coding.c b/src/coding.c
index e2a328fd908..3fc43df636b 100644
--- a/src/coding.c
+++ b/src/coding.c
@@ -8640,7 +8640,7 @@ DEFUN ("find-coding-systems-region-internal",
EMACS_INT start_byte, end_byte;
const unsigned char *p, *pbeg, *pend;
int c;
- Lisp_Object tail, elt;
+ Lisp_Object tail, elt, work_table;
if (STRINGP (start))
{
@@ -8698,6 +8698,7 @@ DEFUN ("find-coding-systems-region-internal",
while (p < pend && ASCII_BYTE_P (*p)) p++;
while (p < pend && ASCII_BYTE_P (*(pend - 1))) pend--;
+ work_table = Fmake_char_table (Qnil, Qnil);
while (p < pend)
{
if (ASCII_BYTE_P (*p))
@@ -8705,6 +8706,9 @@ DEFUN ("find-coding-systems-region-internal",
else
{
c = STRING_CHAR_ADVANCE (p);
+ if (!NILP (char_table_ref (work_table, c)))
+ /* This character was already checked. Ignore it. */
+ continue;
charset_map_loaded = 0;
for (tail = coding_attrs_list; CONSP (tail);)
@@ -8736,6 +8740,7 @@ DEFUN ("find-coding-systems-region-internal",
p = pbeg + p_offset;
pend = pbeg + pend_offset;
}
+ char_table_set (work_table, c, Qt);
}
}