Mercurial > emacs
changeset 16009:2a4da819f152
(re_search_2): Optimize regexp that starts with ^.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sat, 31 Aug 1996 23:40:19 +0000 |
parents | 419214ae89df |
children | 4addc35d079b |
files | src/regex.c |
diffstat | 1 files changed, 19 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/regex.c Sat Aug 31 22:29:12 1996 +0000 +++ b/src/regex.c Sat Aug 31 23:40:19 1996 +0000 @@ -3284,6 +3284,7 @@ register RE_TRANSLATE_TYPE translate = bufp->translate; int total_size = size1 + size2; int endpos = startpos + range; + int anchored_start = 0; /* Check for out-of-range STARTPOS. */ if (startpos < 0 || startpos > total_size) @@ -3323,9 +3324,26 @@ if (re_compile_fastmap (bufp) == -2) return -2; + /* See whether the pattern is anchored. */ + if (bufp->buffer[0] == begline) + anchored_start = 1; + /* Loop through the string, looking for a place to start matching. */ for (;;) { + /* If the pattern is anchored, + skip quickly past places we cannot match. + We don't bother to treat startpos == 0 specially + because that case doesn't repeat. */ + if (anchored_start && startpos > 0) + { + if (! (bufp->newline_anchor + && ((startpos <= size1 ? string1[startpos - 1] + : string2[startpos - size1 - 1]) + == '\n'))) + goto advance; + } + /* If a fastmap is supplied, skip quickly over characters that cannot be the start of a match. If the pattern can match the null string, however, we don't need to skip characters; we want @@ -3461,7 +3479,7 @@ /* Free everything we malloc. */ #ifdef MATCH_MAY_ALLOCATE -#define FREE_VAR(var) if (var) then { REGEX_FREE (var); var = NULL; } else +#define FREE_VAR(var) if (var) { REGEX_FREE (var); var = NULL; } else #define FREE_VARIABLES() \ do { \ REGEX_FREE_STACK (fail_stack.stack); \