changeset 103486:091a55d2d6f7

(Ffind_coding_systems_region_internal): Cache checked characters.
author YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
date Fri, 19 Jun 2009 08:39:33 +0000
parents 40b49259dd71
children 462bf178e4e5
files src/coding.c
diffstat 1 files changed, 6 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/coding.c	Fri Jun 19 03:08:54 2009 +0000
+++ b/src/coding.c	Fri Jun 19 08:39:33 2009 +0000
@@ -8640,7 +8640,7 @@
   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 @@
   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 @@
       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 @@
 	      p = pbeg + p_offset;
 	      pend = pbeg + pend_offset;
 	    }
+	  char_table_set (work_table, c, Qt);
 	}
     }