mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2025-02-01 20:06:00 +00:00
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.
This commit is contained in:
parent
ad9c4a4091
commit
b53b1ca422
@ -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 <eggert@cs.ucla.edu>
|
||||
|
||||
Port to 32-bit MingGW --with-wide-int
|
||||
|
21
src/dired.c
21
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;
|
||||
|
17
src/lisp.h
17
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,
|
||||
|
31
src/search.c
31
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
|
||||
|
Loading…
x
Reference in New Issue
Block a user