]> code.delx.au - gnu-emacs/commitdiff
Consolidate duplicated string matching code.
authorDmitry Antipov <dmantipov@yandex.ru>
Tue, 13 Jan 2015 04:08:54 +0000 (07:08 +0300)
committerDmitry Antipov <dmantipov@yandex.ru>
Tue, 13 Jan 2015 04:08:54 +0000 (07:08 +0300)
* search.c (fast_string_match_internal): New function,
consolidated from...
(fast_string_match, fast_string_match_ignore_case): ...functions
which are...
* lisp.h (fast_string_match, fast_string_match_ignore_case):
inlined from here now.
(fast_string_match_internal): Add prototype.
* dired.c (file_name_completion): Use fast_string_match_internal.

src/ChangeLog
src/dired.c
src/lisp.h
src/search.c

index 792407e15e6edd67815ed2f1085a1184d3dc053f..48c7370cadec72a1b3bced549935b9d54ff56315 100644 (file)
        * keyboard.c (Ftop_level, Fexit_recursive_edit)
        (Fabor_recursive_edit): Add noreturn attribute.
 
+       * search.c (fast_string_match_internal): New function,
+       consolidated from...
+       (fast_string_match, fast_string_match_ignore_case): ...functions
+       which are...
+       * lisp.h (fast_string_match, fast_string_match_ignore_case):
+       inlined from here now.
+       (fast_string_match_internal): Add prototype.
+       * dired.c (file_name_completion): Use fast_string_match_internal.
+
 2015-01-12  Paul Eggert  <eggert@cs.ucla.edu>
 
        Port to 32-bit MingGW --with-wide-int
index 00f9a5b07655cb964009e5909dc2864baddfb2dd..9026c5678ef4ecbc01fb270e8b69c67ae3afdbc6 100644 (file)
@@ -634,23 +634,14 @@ file_name_completion (Lisp_Object file, Lisp_Object dirname, bool all_flag,
       name = DECODE_FILE (name);
 
       {
-       Lisp_Object regexps;
+       Lisp_Object regexps, table = (completion_ignore_case
+                                     ? Vascii_canon_table : Qnil);
 
        /* Ignore this element if it fails to match all the regexps.  */
-       if (completion_ignore_case)
-         {
-           for (regexps = Vcompletion_regexp_list; CONSP (regexps);
-                regexps = XCDR (regexps))
-             if (fast_string_match_ignore_case (XCAR (regexps), name) < 0)
-               break;
-         }
-       else
-         {
-           for (regexps = Vcompletion_regexp_list; CONSP (regexps);
-                regexps = XCDR (regexps))
-             if (fast_string_match (XCAR (regexps), name) < 0)
-               break;
-         }
+       for (regexps = Vcompletion_regexp_list; CONSP (regexps);
+            regexps = XCDR (regexps))
+         if (fast_string_match_internal (XCAR (regexps), name, table) < 0)
+           break;
 
        if (CONSP (regexps))
          continue;
index 6a39f083a417bce2fa02aa2ffe82842a65e36557..a11e61213dcb21b2c3aee7fe3f9e5900d5835b5c 100644 (file)
@@ -4054,10 +4054,23 @@ struct re_registers;
 extern struct re_pattern_buffer *compile_pattern (Lisp_Object,
                                                  struct re_registers *,
                                                  Lisp_Object, bool, bool);
-extern ptrdiff_t fast_string_match (Lisp_Object, Lisp_Object);
+extern ptrdiff_t fast_string_match_internal (Lisp_Object, Lisp_Object,
+                                            Lisp_Object);
+
+INLINE ptrdiff_t
+fast_string_match (Lisp_Object regexp, Lisp_Object string)
+{
+  return fast_string_match_internal (regexp, string, Qnil);
+}
+
+INLINE ptrdiff_t
+fast_string_match_ignore_case (Lisp_Object regexp, Lisp_Object string)
+{
+  return fast_string_match_internal (regexp, string, Vascii_canon_table);
+}
+
 extern ptrdiff_t fast_c_string_match_ignore_case (Lisp_Object, const char *,
                                                  ptrdiff_t);
-extern ptrdiff_t fast_string_match_ignore_case (Lisp_Object, Lisp_Object);
 extern ptrdiff_t fast_looking_at (Lisp_Object, ptrdiff_t, ptrdiff_t,
                                   ptrdiff_t, ptrdiff_t, Lisp_Object);
 extern ptrdiff_t find_newline (ptrdiff_t, ptrdiff_t, ptrdiff_t, ptrdiff_t,
index 0252542a361112c5207f6f8a1aa7620d9a8e4a4c..e9617985c18e593128f8ab49b0a42aaf0ac42ea5 100644 (file)
@@ -459,17 +459,18 @@ matched by parenthesis constructs in the pattern.  */)
   return string_match_1 (regexp, string, start, 1);
 }
 
-/* Match REGEXP against STRING, searching all of STRING,
-   and return the index of the match, or negative on failure.
-   This does not clobber the match data.  */
+/* Match REGEXP against STRING using translation table TABLE,
+   searching all of STRING, and return the index of the match,
+   or negative on failure.  This does not clobber the match data.  */
 
 ptrdiff_t
-fast_string_match (Lisp_Object regexp, Lisp_Object string)
+fast_string_match_internal (Lisp_Object regexp, Lisp_Object string,
+                           Lisp_Object table)
 {
   ptrdiff_t val;
   struct re_pattern_buffer *bufp;
 
-  bufp = compile_pattern (regexp, 0, Qnil,
+  bufp = compile_pattern (regexp, 0, table,
                          0, STRING_MULTIBYTE (string));
   immediate_quit = 1;
   re_match_object = string;
@@ -504,26 +505,6 @@ fast_c_string_match_ignore_case (Lisp_Object regexp,
   return val;
 }
 
-/* Like fast_string_match but ignore case.  */
-
-ptrdiff_t
-fast_string_match_ignore_case (Lisp_Object regexp, Lisp_Object string)
-{
-  ptrdiff_t val;
-  struct re_pattern_buffer *bufp;
-
-  bufp = compile_pattern (regexp, 0, Vascii_canon_table,
-                         0, STRING_MULTIBYTE (string));
-  immediate_quit = 1;
-  re_match_object = string;
-
-  val = re_search (bufp, SSDATA (string),
-                  SBYTES (string), 0,
-                  SBYTES (string), 0);
-  immediate_quit = 0;
-  return val;
-}
-\f
 /* Match REGEXP against the characters after POS to LIMIT, and return
    the number of matched characters.  If STRING is non-nil, match
    against the characters in it.  In that case, POS and LIMIT are