From 0e727afa9d1ecb76c8faa96bbfe264aaf4856ffa Mon Sep 17 00:00:00 2001 From: YAMAMOTO Mitsuharu Date: Fri, 19 Jun 2009 08:39:44 +0000 Subject: [PATCH] (Ffind_coding_systems_region_internal): Cache checked characters. --- src/ChangeLog | 5 +++++ src/coding.c | 7 ++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index d1e80ab2381..b5bfa511fea 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2009-06-19 YAMAMOTO Mitsuharu + + * coding.c (Ffind_coding_systems_region_internal): + Cache checked characters. + 2009-06-18 Kenichi Handa * coding.c (decode_coding_iso_2022): Check MSB of bytes more 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); } } -- 2.11.4.GIT