[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] master b53b1ca: Consolidate duplicated string matching cod
From: |
Dmitry Antipov |
Subject: |
[Emacs-diffs] master b53b1ca: Consolidate duplicated string matching code. |
Date: |
Tue, 13 Jan 2015 04:11:15 +0000 |
branch: master
commit b53b1ca422ff1925f631be511fbec9deb1e4cc33
Author: Dmitry Antipov <address@hidden>
Commit: Dmitry Antipov <address@hidden>
Consolidate duplicated string matching code.
* 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 | 9 +++++++++
src/dired.c | 21 ++++++---------------
src/lisp.h | 17 +++++++++++++++--
src/search.c | 31 ++++++-------------------------
4 files changed, 36 insertions(+), 42 deletions(-)
diff --git a/src/ChangeLog b/src/ChangeLog
index 792407e..48c7370 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -18,6 +18,15 @@
* 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 <address@hidden>
Port to 32-bit MingGW --with-wide-int
diff --git a/src/dired.c b/src/dired.c
index 00f9a5b..9026c56 100644
--- a/src/dired.c
+++ b/src/dired.c
@@ -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;
diff --git a/src/lisp.h b/src/lisp.h
index 6a39f08..a11e612 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -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,
diff --git a/src/search.c b/src/search.c
index 0252542..e961798 100644
--- a/src/search.c
+++ b/src/search.c
@@ -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;
-}
-
/* 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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] master b53b1ca: Consolidate duplicated string matching code.,
Dmitry Antipov <=