Mercurial > emacs
changeset 6083:a8abaa9116f1
*** empty log message ***
author | Karl Heuer <kwzh@gnu.org> |
---|---|
date | Fri, 25 Feb 1994 01:30:59 +0000 |
parents | 829b83e91e8b |
children | d42c85701055 |
files | src/regex.c |
diffstat | 1 files changed, 30 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/regex.c Fri Feb 25 00:57:37 1994 +0000 +++ b/src/regex.c Fri Feb 25 01:30:59 1994 +0000 @@ -264,6 +264,8 @@ typedef char boolean; #define false 0 #define true 1 + +static int re_match_2_internal (); /* These are the command codes that appear in compiled regular expressions. Some opcodes are followed by argument bytes. A @@ -3153,8 +3155,10 @@ && !bufp->can_be_null) return -1; - val = re_match_2 (bufp, string1, size1, string2, size2, - startpos, regs, stop); + val = re_match_2_internal (bufp, string1, size1, string2, size2, + startpos, regs, stop); + alloca (0); + if (val >= 0) return startpos; @@ -3250,8 +3254,8 @@ FREE_VAR (reg_info_dummy); \ } while (0) #else /* not REGEX_MALLOC */ -/* Some MIPS systems (at least) want this to free alloca'd storage. */ -#define FREE_VARIABLES() alloca (0) +/* This used to do alloca (0), but now we do that in the caller. */ +#define FREE_VARIABLES() /* Nothing */ #endif /* not REGEX_MALLOC */ #else #define FREE_VARIABLES() /* Do nothing! */ @@ -3278,8 +3282,11 @@ const char *string; int size, pos; struct re_registers *regs; - { - return re_match_2 (bufp, NULL, 0, string, size, pos, regs, size); +{ + int result = re_match_2_internal (bufp, NULL, 0, string, size, + pos, regs, size); + alloca (0); + return result; } #endif /* not emacs */ @@ -3306,6 +3313,23 @@ struct re_registers *regs; int stop; { + int result = re_match_2_internal (bufp, string1, size1, string2, size2, + pos, regs, stop); + alloca (0); + return result; +} + +/* This is a separate function so that we can force an alloca cleanup + afterwards. */ +static int +re_match_2_internal (bufp, string1, size1, string2, size2, pos, regs, stop) + struct re_pattern_buffer *bufp; + const char *string1, *string2; + int size1, size2; + int pos; + struct re_registers *regs; + int stop; +{ /* General temporaries. */ int mcnt; unsigned char *p1;