Update from libc.
[gnulib.git] / lib / regex.c
1 /* Extended regular expression matching and search library,
2    version 0.12.
3    (Implements POSIX draft P1003.2/D11.2, except for some of the
4    internationalization features.)
5    Copyright (C) 1993-1999, 2000 Free Software Foundation, Inc.
6
7    The GNU C Library is free software; you can redistribute it and/or
8    modify it under the terms of the GNU Library General Public License as
9    published by the Free Software Foundation; either version 2 of the
10    License, or (at your option) any later version.
11
12    The GNU C Library is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15    Library General Public License for more details.
16
17    You should have received a copy of the GNU Library General Public
18    License along with the GNU C Library; see the file COPYING.LIB.  If not,
19    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20    Boston, MA 02111-1307, USA.  */
21
22 /* AIX requires this to be the first thing in the file. */
23 #if defined _AIX && !defined REGEX_MALLOC
24   #pragma alloca
25 #endif
26
27 #undef  _GNU_SOURCE
28 #define _GNU_SOURCE
29
30 #ifdef HAVE_CONFIG_H
31 # include <config.h>
32 #endif
33
34 #ifndef PARAMS
35 # if defined __GNUC__ || (defined __STDC__ && __STDC__)
36 #  define PARAMS(args) args
37 # else
38 #  define PARAMS(args) ()
39 # endif  /* GCC.  */
40 #endif  /* Not PARAMS.  */
41
42 #if defined STDC_HEADERS && !defined emacs
43 # include <stddef.h>
44 #else
45 /* We need this for `regex.h', and perhaps for the Emacs include files.  */
46 # include <sys/types.h>
47 #endif
48
49 #define WIDE_CHAR_SUPPORT (HAVE_WCTYPE_H && HAVE_WCHAR_H && HAVE_BTOWC)
50
51 /* For platform which support the ISO C amendement 1 functionality we
52    support user defined character classes.  */
53 #if defined _LIBC || WIDE_CHAR_SUPPORT
54 /* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>.  */
55 # include <wchar.h>
56 # include <wctype.h>
57 #endif
58
59 #ifdef _LIBC
60 /* We have to keep the namespace clean.  */
61 # define regfree(preg) __regfree (preg)
62 # define regexec(pr, st, nm, pm, ef) __regexec (pr, st, nm, pm, ef)
63 # define regcomp(preg, pattern, cflags) __regcomp (preg, pattern, cflags)
64 # define regerror(errcode, preg, errbuf, errbuf_size) \
65         __regerror(errcode, preg, errbuf, errbuf_size)
66 # define re_set_registers(bu, re, nu, st, en) \
67         __re_set_registers (bu, re, nu, st, en)
68 # define re_match_2(bufp, string1, size1, string2, size2, pos, regs, stop) \
69         __re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop)
70 # define re_match(bufp, string, size, pos, regs) \
71         __re_match (bufp, string, size, pos, regs)
72 # define re_search(bufp, string, size, startpos, range, regs) \
73         __re_search (bufp, string, size, startpos, range, regs)
74 # define re_compile_pattern(pattern, length, bufp) \
75         __re_compile_pattern (pattern, length, bufp)
76 # define re_set_syntax(syntax) __re_set_syntax (syntax)
77 # define re_search_2(bufp, st1, s1, st2, s2, startpos, range, regs, stop) \
78         __re_search_2 (bufp, st1, s1, st2, s2, startpos, range, regs, stop)
79 # define re_compile_fastmap(bufp) __re_compile_fastmap (bufp)
80
81 # define btowc __btowc
82
83 /* We are also using some library internals.  */
84 # include <locale/localeinfo.h>
85 # include <locale/elem-hash.h>
86 # include <langinfo.h>
87 #endif
88
89 /* This is for other GNU distributions with internationalized messages.  */
90 #if HAVE_LIBINTL_H || defined _LIBC
91 # include <libintl.h>
92 #else
93 # define gettext(msgid) (msgid)
94 #endif
95
96 #ifndef gettext_noop
97 /* This define is so xgettext can find the internationalizable
98    strings.  */
99 # define gettext_noop(String) String
100 #endif
101
102 /* The `emacs' switch turns on certain matching commands
103    that make sense only in Emacs. */
104 #ifdef emacs
105
106 # include "lisp.h"
107 # include "buffer.h"
108 # include "syntax.h"
109
110 #else  /* not emacs */
111
112 /* If we are not linking with Emacs proper,
113    we can't use the relocating allocator
114    even if config.h says that we can.  */
115 # undef REL_ALLOC
116
117 # if defined STDC_HEADERS || defined _LIBC
118 #  include <stdlib.h>
119 # else
120 char *malloc ();
121 char *realloc ();
122 # endif
123
124 /* When used in Emacs's lib-src, we need to get bzero and bcopy somehow.
125    If nothing else has been done, use the method below.  */
126 # ifdef INHIBIT_STRING_HEADER
127 #  if !(defined HAVE_BZERO && defined HAVE_BCOPY)
128 #   if !defined bzero && !defined bcopy
129 #    undef INHIBIT_STRING_HEADER
130 #   endif
131 #  endif
132 # endif
133
134 /* This is the normal way of making sure we have a bcopy and a bzero.
135    This is used in most programs--a few other programs avoid this
136    by defining INHIBIT_STRING_HEADER.  */
137 # ifndef INHIBIT_STRING_HEADER
138 #  if defined HAVE_STRING_H || defined STDC_HEADERS || defined _LIBC
139 #   include <string.h>
140 #   ifndef bzero
141 #    ifndef _LIBC
142 #     define bzero(s, n)        (memset (s, '\0', n), (s))
143 #    else
144 #     define bzero(s, n)        __bzero (s, n)
145 #    endif
146 #   endif
147 #  else
148 #   include <strings.h>
149 #   ifndef memcmp
150 #    define memcmp(s1, s2, n)   bcmp (s1, s2, n)
151 #   endif
152 #   ifndef memcpy
153 #    define memcpy(d, s, n)     (bcopy (s, d, n), (d))
154 #   endif
155 #  endif
156 # endif
157
158 /* Define the syntax stuff for \<, \>, etc.  */
159
160 /* This must be nonzero for the wordchar and notwordchar pattern
161    commands in re_match_2.  */
162 # ifndef Sword
163 #  define Sword 1
164 # endif
165
166 # ifdef SWITCH_ENUM_BUG
167 #  define SWITCH_ENUM_CAST(x) ((int)(x))
168 # else
169 #  define SWITCH_ENUM_CAST(x) (x)
170 # endif
171
172 #endif /* not emacs */
173
174 #if defined _LIBC || HAVE_LIMITS_H
175 # include <limits.h>
176 #endif
177
178 #ifndef MB_LEN_MAX
179 # define MB_LEN_MAX 1
180 #endif
181 \f
182 /* Get the interface, including the syntax bits.  */
183 #include <regex.h>
184
185 /* isalpha etc. are used for the character classes.  */
186 #include <ctype.h>
187
188 /* Jim Meyering writes:
189
190    "... Some ctype macros are valid only for character codes that
191    isascii says are ASCII (SGI's IRIX-4.0.5 is one such system --when
192    using /bin/cc or gcc but without giving an ansi option).  So, all
193    ctype uses should be through macros like ISPRINT...  If
194    STDC_HEADERS is defined, then autoconf has verified that the ctype
195    macros don't need to be guarded with references to isascii. ...
196    Defining isascii to 1 should let any compiler worth its salt
197    eliminate the && through constant folding."
198    Solaris defines some of these symbols so we must undefine them first.  */
199
200 #if defined STDC_HEADERS || (!defined isascii && !defined HAVE_ISASCII)
201 # define IN_CTYPE_DOMAIN(c) 1
202 #else
203 # define IN_CTYPE_DOMAIN(c) isascii(c)
204 #endif
205
206 #ifdef isblank
207 # define ISBLANK(c) (IN_CTYPE_DOMAIN (c) && isblank (c))
208 #else
209 # define ISBLANK(c) ((c) == ' ' || (c) == '\t')
210 #endif
211 #ifdef isgraph
212 # define ISGRAPH(c) (IN_CTYPE_DOMAIN (c) && isgraph (c))
213 #else
214 # define ISGRAPH(c) (IN_CTYPE_DOMAIN (c) && isprint (c) && !isspace (c))
215 #endif
216
217 #undef ISPRINT
218 #define ISPRINT(c) (IN_CTYPE_DOMAIN (c) && isprint (c))
219 #define ISDIGIT(c) (IN_CTYPE_DOMAIN (c) && isdigit (c))
220 #define ISALNUM(c) (IN_CTYPE_DOMAIN (c) && isalnum (c))
221 #define ISALPHA(c) (IN_CTYPE_DOMAIN (c) && isalpha (c))
222 #define ISCNTRL(c) (IN_CTYPE_DOMAIN (c) && iscntrl (c))
223 #define ISLOWER(c) (IN_CTYPE_DOMAIN (c) && islower (c))
224 #define ISPUNCT(c) (IN_CTYPE_DOMAIN (c) && ispunct (c))
225 #define ISSPACE(c) (IN_CTYPE_DOMAIN (c) && isspace (c))
226 #define ISUPPER(c) (IN_CTYPE_DOMAIN (c) && isupper (c))
227 #define ISXDIGIT(c) (IN_CTYPE_DOMAIN (c) && isxdigit (c))
228
229 #ifdef _tolower
230 # define TOLOWER(c) _tolower(c)
231 #else
232 # define TOLOWER(c) tolower(c)
233 #endif
234
235 #ifndef NULL
236 # define NULL (void *)0
237 #endif
238
239 /* We remove any previous definition of `SIGN_EXTEND_CHAR',
240    since ours (we hope) works properly with all combinations of
241    machines, compilers, `char' and `unsigned char' argument types.
242    (Per Bothner suggested the basic approach.)  */
243 #undef SIGN_EXTEND_CHAR
244 #if __STDC__
245 # define SIGN_EXTEND_CHAR(c) ((signed char) (c))
246 #else  /* not __STDC__ */
247 /* As in Harbison and Steele.  */
248 # define SIGN_EXTEND_CHAR(c) ((((unsigned char) (c)) ^ 128) - 128)
249 #endif
250 \f
251 #ifndef emacs
252 /* How many characters in the character set.  */
253 # define CHAR_SET_SIZE 256
254
255 # ifdef SYNTAX_TABLE
256
257 extern char *re_syntax_table;
258
259 # else /* not SYNTAX_TABLE */
260
261 static char re_syntax_table[CHAR_SET_SIZE];
262
263 static void
264 init_syntax_once ()
265 {
266    register int c;
267    static int done = 0;
268
269    if (done)
270      return;
271    bzero (re_syntax_table, sizeof re_syntax_table);
272
273    for (c = 0; c < CHAR_SET_SIZE; ++c)
274      if (ISALNUM (c))
275         re_syntax_table[c] = Sword;
276
277    re_syntax_table['_'] = Sword;
278
279    done = 1;
280 }
281
282 # endif /* not SYNTAX_TABLE */
283
284 # define SYNTAX(c) re_syntax_table[(unsigned char) (c)]
285
286 #endif /* emacs */
287 \f
288 /* Should we use malloc or alloca?  If REGEX_MALLOC is not defined, we
289    use `alloca' instead of `malloc'.  This is because using malloc in
290    re_search* or re_match* could cause memory leaks when C-g is used in
291    Emacs; also, malloc is slower and causes storage fragmentation.  On
292    the other hand, malloc is more portable, and easier to debug.
293
294    Because we sometimes use alloca, some routines have to be macros,
295    not functions -- `alloca'-allocated space disappears at the end of the
296    function it is called in.  */
297
298 #ifdef REGEX_MALLOC
299
300 # define REGEX_ALLOCATE malloc
301 # define REGEX_REALLOCATE(source, osize, nsize) realloc (source, nsize)
302 # define REGEX_FREE free
303
304 #else /* not REGEX_MALLOC  */
305
306 /* Emacs already defines alloca, sometimes.  */
307 # ifndef alloca
308
309 /* Make alloca work the best possible way.  */
310 #  ifdef __GNUC__
311 #   define alloca __builtin_alloca
312 #  else /* not __GNUC__ */
313 #   if HAVE_ALLOCA_H
314 #    include <alloca.h>
315 #   endif /* HAVE_ALLOCA_H */
316 #  endif /* not __GNUC__ */
317
318 # endif /* not alloca */
319
320 # define REGEX_ALLOCATE alloca
321
322 /* Assumes a `char *destination' variable.  */
323 # define REGEX_REALLOCATE(source, osize, nsize)                         \
324   (destination = (char *) alloca (nsize),                               \
325    memcpy (destination, source, osize))
326
327 /* No need to do anything to free, after alloca.  */
328 # define REGEX_FREE(arg) ((void)0) /* Do nothing!  But inhibit gcc warning.  */
329
330 #endif /* not REGEX_MALLOC */
331
332 /* Define how to allocate the failure stack.  */
333
334 #if defined REL_ALLOC && defined REGEX_MALLOC
335
336 # define REGEX_ALLOCATE_STACK(size)                             \
337   r_alloc (&failure_stack_ptr, (size))
338 # define REGEX_REALLOCATE_STACK(source, osize, nsize)           \
339   r_re_alloc (&failure_stack_ptr, (nsize))
340 # define REGEX_FREE_STACK(ptr)                                  \
341   r_alloc_free (&failure_stack_ptr)
342
343 #else /* not using relocating allocator */
344
345 # ifdef REGEX_MALLOC
346
347 #  define REGEX_ALLOCATE_STACK malloc
348 #  define REGEX_REALLOCATE_STACK(source, osize, nsize) realloc (source, nsize)
349 #  define REGEX_FREE_STACK free
350
351 # else /* not REGEX_MALLOC */
352
353 #  define REGEX_ALLOCATE_STACK alloca
354
355 #  define REGEX_REALLOCATE_STACK(source, osize, nsize)                  \
356    REGEX_REALLOCATE (source, osize, nsize)
357 /* No need to explicitly free anything.  */
358 #  define REGEX_FREE_STACK(arg)
359
360 # endif /* not REGEX_MALLOC */
361 #endif /* not using relocating allocator */
362
363
364 /* True if `size1' is non-NULL and PTR is pointing anywhere inside
365    `string1' or just past its end.  This works if PTR is NULL, which is
366    a good thing.  */
367 #define FIRST_STRING_P(ptr)                                     \
368   (size1 && string1 <= (ptr) && (ptr) <= string1 + size1)
369
370 /* (Re)Allocate N items of type T using malloc, or fail.  */
371 #define TALLOC(n, t) ((t *) malloc ((n) * sizeof (t)))
372 #define RETALLOC(addr, n, t) ((addr) = (t *) realloc (addr, (n) * sizeof (t)))
373 #define RETALLOC_IF(addr, n, t) \
374   if (addr) RETALLOC((addr), (n), t); else (addr) = TALLOC ((n), t)
375 #define REGEX_TALLOC(n, t) ((t *) REGEX_ALLOCATE ((n) * sizeof (t)))
376
377 #define BYTEWIDTH 8 /* In bits.  */
378
379 #define STREQ(s1, s2) ((strcmp (s1, s2) == 0))
380
381 #undef MAX
382 #undef MIN
383 #define MAX(a, b) ((a) > (b) ? (a) : (b))
384 #define MIN(a, b) ((a) < (b) ? (a) : (b))
385
386 typedef char boolean;
387 #define false 0
388 #define true 1
389
390 static int re_match_2_internal PARAMS ((struct re_pattern_buffer *bufp,
391                                         const char *string1, int size1,
392                                         const char *string2, int size2,
393                                         int pos,
394                                         struct re_registers *regs,
395                                         int stop));
396 \f
397 /* These are the command codes that appear in compiled regular
398    expressions.  Some opcodes are followed by argument bytes.  A
399    command code can specify any interpretation whatsoever for its
400    arguments.  Zero bytes may appear in the compiled regular expression.  */
401
402 typedef enum
403 {
404   no_op = 0,
405
406   /* Succeed right away--no more backtracking.  */
407   succeed,
408
409         /* Followed by one byte giving n, then by n literal bytes.  */
410   exactn,
411
412         /* Matches any (more or less) character.  */
413   anychar,
414
415         /* Matches any one char belonging to specified set.  First
416            following byte is number of bitmap bytes.  Then come bytes
417            for a bitmap saying which chars are in.  Bits in each byte
418            are ordered low-bit-first.  A character is in the set if its
419            bit is 1.  A character too large to have a bit in the map is
420            automatically not in the set.  */
421   charset,
422
423         /* Same parameters as charset, but match any character that is
424            not one of those specified.  */
425   charset_not,
426
427         /* Start remembering the text that is matched, for storing in a
428            register.  Followed by one byte with the register number, in
429            the range 0 to one less than the pattern buffer's re_nsub
430            field.  Then followed by one byte with the number of groups
431            inner to this one.  (This last has to be part of the
432            start_memory only because we need it in the on_failure_jump
433            of re_match_2.)  */
434   start_memory,
435
436         /* Stop remembering the text that is matched and store it in a
437            memory register.  Followed by one byte with the register
438            number, in the range 0 to one less than `re_nsub' in the
439            pattern buffer, and one byte with the number of inner groups,
440            just like `start_memory'.  (We need the number of inner
441            groups here because we don't have any easy way of finding the
442            corresponding start_memory when we're at a stop_memory.)  */
443   stop_memory,
444
445         /* Match a duplicate of something remembered. Followed by one
446            byte containing the register number.  */
447   duplicate,
448
449         /* Fail unless at beginning of line.  */
450   begline,
451
452         /* Fail unless at end of line.  */
453   endline,
454
455         /* Succeeds if at beginning of buffer (if emacs) or at beginning
456            of string to be matched (if not).  */
457   begbuf,
458
459         /* Analogously, for end of buffer/string.  */
460   endbuf,
461
462         /* Followed by two byte relative address to which to jump.  */
463   jump,
464
465         /* Same as jump, but marks the end of an alternative.  */
466   jump_past_alt,
467
468         /* Followed by two-byte relative address of place to resume at
469            in case of failure.  */
470   on_failure_jump,
471
472         /* Like on_failure_jump, but pushes a placeholder instead of the
473            current string position when executed.  */
474   on_failure_keep_string_jump,
475
476         /* Throw away latest failure point and then jump to following
477            two-byte relative address.  */
478   pop_failure_jump,
479
480         /* Change to pop_failure_jump if know won't have to backtrack to
481            match; otherwise change to jump.  This is used to jump
482            back to the beginning of a repeat.  If what follows this jump
483            clearly won't match what the repeat does, such that we can be
484            sure that there is no use backtracking out of repetitions
485            already matched, then we change it to a pop_failure_jump.
486            Followed by two-byte address.  */
487   maybe_pop_jump,
488
489         /* Jump to following two-byte address, and push a dummy failure
490            point. This failure point will be thrown away if an attempt
491            is made to use it for a failure.  A `+' construct makes this
492            before the first repeat.  Also used as an intermediary kind
493            of jump when compiling an alternative.  */
494   dummy_failure_jump,
495
496         /* Push a dummy failure point and continue.  Used at the end of
497            alternatives.  */
498   push_dummy_failure,
499
500         /* Followed by two-byte relative address and two-byte number n.
501            After matching N times, jump to the address upon failure.  */
502   succeed_n,
503
504         /* Followed by two-byte relative address, and two-byte number n.
505            Jump to the address N times, then fail.  */
506   jump_n,
507
508         /* Set the following two-byte relative address to the
509            subsequent two-byte number.  The address *includes* the two
510            bytes of number.  */
511   set_number_at,
512
513   wordchar,     /* Matches any word-constituent character.  */
514   notwordchar,  /* Matches any char that is not a word-constituent.  */
515
516   wordbeg,      /* Succeeds if at word beginning.  */
517   wordend,      /* Succeeds if at word end.  */
518
519   wordbound,    /* Succeeds if at a word boundary.  */
520   notwordbound  /* Succeeds if not at a word boundary.  */
521
522 #ifdef emacs
523   ,before_dot,  /* Succeeds if before point.  */
524   at_dot,       /* Succeeds if at point.  */
525   after_dot,    /* Succeeds if after point.  */
526
527         /* Matches any character whose syntax is specified.  Followed by
528            a byte which contains a syntax code, e.g., Sword.  */
529   syntaxspec,
530
531         /* Matches any character whose syntax is not that specified.  */
532   notsyntaxspec
533 #endif /* emacs */
534 } re_opcode_t;
535 \f
536 /* Common operations on the compiled pattern.  */
537
538 /* Store NUMBER in two contiguous bytes starting at DESTINATION.  */
539
540 #define STORE_NUMBER(destination, number)                               \
541   do {                                                                  \
542     (destination)[0] = (number) & 0377;                                 \
543     (destination)[1] = (number) >> 8;                                   \
544   } while (0)
545
546 /* Same as STORE_NUMBER, except increment DESTINATION to
547    the byte after where the number is stored.  Therefore, DESTINATION
548    must be an lvalue.  */
549
550 #define STORE_NUMBER_AND_INCR(destination, number)                      \
551   do {                                                                  \
552     STORE_NUMBER (destination, number);                                 \
553     (destination) += 2;                                                 \
554   } while (0)
555
556 /* Put into DESTINATION a number stored in two contiguous bytes starting
557    at SOURCE.  */
558
559 #define EXTRACT_NUMBER(destination, source)                             \
560   do {                                                                  \
561     (destination) = *(source) & 0377;                                   \
562     (destination) += SIGN_EXTEND_CHAR (*((source) + 1)) << 8;           \
563   } while (0)
564
565 #ifdef DEBUG
566 static void extract_number _RE_ARGS ((int *dest, unsigned char *source));
567 static void
568 extract_number (dest, source)
569     int *dest;
570     unsigned char *source;
571 {
572   int temp = SIGN_EXTEND_CHAR (*(source + 1));
573   *dest = *source & 0377;
574   *dest += temp << 8;
575 }
576
577 # ifndef EXTRACT_MACROS /* To debug the macros.  */
578 #  undef EXTRACT_NUMBER
579 #  define EXTRACT_NUMBER(dest, src) extract_number (&dest, src)
580 # endif /* not EXTRACT_MACROS */
581
582 #endif /* DEBUG */
583
584 /* Same as EXTRACT_NUMBER, except increment SOURCE to after the number.
585    SOURCE must be an lvalue.  */
586
587 #define EXTRACT_NUMBER_AND_INCR(destination, source)                    \
588   do {                                                                  \
589     EXTRACT_NUMBER (destination, source);                               \
590     (source) += 2;                                                      \
591   } while (0)
592
593 #ifdef DEBUG
594 static void extract_number_and_incr _RE_ARGS ((int *destination,
595                                                unsigned char **source));
596 static void
597 extract_number_and_incr (destination, source)
598     int *destination;
599     unsigned char **source;
600 {
601   extract_number (destination, *source);
602   *source += 2;
603 }
604
605 # ifndef EXTRACT_MACROS
606 #  undef EXTRACT_NUMBER_AND_INCR
607 #  define EXTRACT_NUMBER_AND_INCR(dest, src) \
608   extract_number_and_incr (&dest, &src)
609 # endif /* not EXTRACT_MACROS */
610
611 #endif /* DEBUG */
612 \f
613 /* If DEBUG is defined, Regex prints many voluminous messages about what
614    it is doing (if the variable `debug' is nonzero).  If linked with the
615    main program in `iregex.c', you can enter patterns and strings
616    interactively.  And if linked with the main program in `main.c' and
617    the other test files, you can run the already-written tests.  */
618
619 #ifdef DEBUG
620
621 /* We use standard I/O for debugging.  */
622 # include <stdio.h>
623
624 /* It is useful to test things that ``must'' be true when debugging.  */
625 # include <assert.h>
626
627 static int debug;
628
629 # define DEBUG_STATEMENT(e) e
630 # define DEBUG_PRINT1(x) if (debug) printf (x)
631 # define DEBUG_PRINT2(x1, x2) if (debug) printf (x1, x2)
632 # define DEBUG_PRINT3(x1, x2, x3) if (debug) printf (x1, x2, x3)
633 # define DEBUG_PRINT4(x1, x2, x3, x4) if (debug) printf (x1, x2, x3, x4)
634 # define DEBUG_PRINT_COMPILED_PATTERN(p, s, e)                          \
635   if (debug) print_partial_compiled_pattern (s, e)
636 # define DEBUG_PRINT_DOUBLE_STRING(w, s1, sz1, s2, sz2)                 \
637   if (debug) print_double_string (w, s1, sz1, s2, sz2)
638
639
640 /* Print the fastmap in human-readable form.  */
641
642 void
643 print_fastmap (fastmap)
644     char *fastmap;
645 {
646   unsigned was_a_range = 0;
647   unsigned i = 0;
648
649   while (i < (1 << BYTEWIDTH))
650     {
651       if (fastmap[i++])
652         {
653           was_a_range = 0;
654           putchar (i - 1);
655           while (i < (1 << BYTEWIDTH)  &&  fastmap[i])
656             {
657               was_a_range = 1;
658               i++;
659             }
660           if (was_a_range)
661             {
662               printf ("-");
663               putchar (i - 1);
664             }
665         }
666     }
667   putchar ('\n');
668 }
669
670
671 /* Print a compiled pattern string in human-readable form, starting at
672    the START pointer into it and ending just before the pointer END.  */
673
674 void
675 print_partial_compiled_pattern (start, end)
676     unsigned char *start;
677     unsigned char *end;
678 {
679   int mcnt, mcnt2;
680   unsigned char *p1;
681   unsigned char *p = start;
682   unsigned char *pend = end;
683
684   if (start == NULL)
685     {
686       printf ("(null)\n");
687       return;
688     }
689
690   /* Loop over pattern commands.  */
691   while (p < pend)
692     {
693 #ifdef _LIBC
694       printf ("%t:\t", p - start);
695 #else
696       printf ("%ld:\t", (long int) (p - start));
697 #endif
698
699       switch ((re_opcode_t) *p++)
700         {
701         case no_op:
702           printf ("/no_op");
703           break;
704
705         case exactn:
706           mcnt = *p++;
707           printf ("/exactn/%d", mcnt);
708           do
709             {
710               putchar ('/');
711               putchar (*p++);
712             }
713           while (--mcnt);
714           break;
715
716         case start_memory:
717           mcnt = *p++;
718           printf ("/start_memory/%d/%d", mcnt, *p++);
719           break;
720
721         case stop_memory:
722           mcnt = *p++;
723           printf ("/stop_memory/%d/%d", mcnt, *p++);
724           break;
725
726         case duplicate:
727           printf ("/duplicate/%d", *p++);
728           break;
729
730         case anychar:
731           printf ("/anychar");
732           break;
733
734         case charset:
735         case charset_not:
736           {
737             register int c, last = -100;
738             register int in_range = 0;
739
740             printf ("/charset [%s",
741                     (re_opcode_t) *(p - 1) == charset_not ? "^" : "");
742
743             assert (p + *p < pend);
744
745             for (c = 0; c < 256; c++)
746               if (c / 8 < *p
747                   && (p[1 + (c/8)] & (1 << (c % 8))))
748                 {
749                   /* Are we starting a range?  */
750                   if (last + 1 == c && ! in_range)
751                     {
752                       putchar ('-');
753                       in_range = 1;
754                     }
755                   /* Have we broken a range?  */
756                   else if (last + 1 != c && in_range)
757               {
758                       putchar (last);
759                       in_range = 0;
760                     }
761
762                   if (! in_range)
763                     putchar (c);
764
765                   last = c;
766               }
767
768             if (in_range)
769               putchar (last);
770
771             putchar (']');
772
773             p += 1 + *p;
774           }
775           break;
776
777         case begline:
778           printf ("/begline");
779           break;
780
781         case endline:
782           printf ("/endline");
783           break;
784
785         case on_failure_jump:
786           extract_number_and_incr (&mcnt, &p);
787 #ifdef _LIBC
788           printf ("/on_failure_jump to %t", p + mcnt - start);
789 #else
790           printf ("/on_failure_jump to %ld", (long int) (p + mcnt - start));
791 #endif
792           break;
793
794         case on_failure_keep_string_jump:
795           extract_number_and_incr (&mcnt, &p);
796 #ifdef _LIBC
797           printf ("/on_failure_keep_string_jump to %t", p + mcnt - start);
798 #else
799           printf ("/on_failure_keep_string_jump to %ld",
800                   (long int) (p + mcnt - start));
801 #endif
802           break;
803
804         case dummy_failure_jump:
805           extract_number_and_incr (&mcnt, &p);
806 #ifdef _LIBC
807           printf ("/dummy_failure_jump to %t", p + mcnt - start);
808 #else
809           printf ("/dummy_failure_jump to %ld", (long int) (p + mcnt - start));
810 #endif
811           break;
812
813         case push_dummy_failure:
814           printf ("/push_dummy_failure");
815           break;
816
817         case maybe_pop_jump:
818           extract_number_and_incr (&mcnt, &p);
819 #ifdef _LIBC
820           printf ("/maybe_pop_jump to %t", p + mcnt - start);
821 #else
822           printf ("/maybe_pop_jump to %ld", (long int) (p + mcnt - start));
823 #endif
824           break;
825
826         case pop_failure_jump:
827           extract_number_and_incr (&mcnt, &p);
828 #ifdef _LIBC
829           printf ("/pop_failure_jump to %t", p + mcnt - start);
830 #else
831           printf ("/pop_failure_jump to %ld", (long int) (p + mcnt - start));
832 #endif
833           break;
834
835         case jump_past_alt:
836           extract_number_and_incr (&mcnt, &p);
837 #ifdef _LIBC
838           printf ("/jump_past_alt to %t", p + mcnt - start);
839 #else
840           printf ("/jump_past_alt to %ld", (long int) (p + mcnt - start));
841 #endif
842           break;
843
844         case jump:
845           extract_number_and_incr (&mcnt, &p);
846 #ifdef _LIBC
847           printf ("/jump to %t", p + mcnt - start);
848 #else
849           printf ("/jump to %ld", (long int) (p + mcnt - start));
850 #endif
851           break;
852
853         case succeed_n:
854           extract_number_and_incr (&mcnt, &p);
855           p1 = p + mcnt;
856           extract_number_and_incr (&mcnt2, &p);
857 #ifdef _LIBC
858           printf ("/succeed_n to %t, %d times", p1 - start, mcnt2);
859 #else
860           printf ("/succeed_n to %ld, %d times",
861                   (long int) (p1 - start), mcnt2);
862 #endif
863           break;
864
865         case jump_n:
866           extract_number_and_incr (&mcnt, &p);
867           p1 = p + mcnt;
868           extract_number_and_incr (&mcnt2, &p);
869           printf ("/jump_n to %d, %d times", p1 - start, mcnt2);
870           break;
871
872         case set_number_at:
873           extract_number_and_incr (&mcnt, &p);
874           p1 = p + mcnt;
875           extract_number_and_incr (&mcnt2, &p);
876 #ifdef _LIBC
877           printf ("/set_number_at location %t to %d", p1 - start, mcnt2);
878 #else
879           printf ("/set_number_at location %ld to %d",
880                   (long int) (p1 - start), mcnt2);
881 #endif
882           break;
883
884         case wordbound:
885           printf ("/wordbound");
886           break;
887
888         case notwordbound:
889           printf ("/notwordbound");
890           break;
891
892         case wordbeg:
893           printf ("/wordbeg");
894           break;
895
896         case wordend:
897           printf ("/wordend");
898
899 # ifdef emacs
900         case before_dot:
901           printf ("/before_dot");
902           break;
903
904         case at_dot:
905           printf ("/at_dot");
906           break;
907
908         case after_dot:
909           printf ("/after_dot");
910           break;
911
912         case syntaxspec:
913           printf ("/syntaxspec");
914           mcnt = *p++;
915           printf ("/%d", mcnt);
916           break;
917
918         case notsyntaxspec:
919           printf ("/notsyntaxspec");
920           mcnt = *p++;
921           printf ("/%d", mcnt);
922           break;
923 # endif /* emacs */
924
925         case wordchar:
926           printf ("/wordchar");
927           break;
928
929         case notwordchar:
930           printf ("/notwordchar");
931           break;
932
933         case begbuf:
934           printf ("/begbuf");
935           break;
936
937         case endbuf:
938           printf ("/endbuf");
939           break;
940
941         default:
942           printf ("?%d", *(p-1));
943         }
944
945       putchar ('\n');
946     }
947
948 #ifdef _LIBC
949   printf ("%t:\tend of pattern.\n", p - start);
950 #else
951   printf ("%ld:\tend of pattern.\n", (long int) (p - start));
952 #endif
953 }
954
955
956 void
957 print_compiled_pattern (bufp)
958     struct re_pattern_buffer *bufp;
959 {
960   unsigned char *buffer = bufp->buffer;
961
962   print_partial_compiled_pattern (buffer, buffer + bufp->used);
963   printf ("%ld bytes used/%ld bytes allocated.\n",
964           bufp->used, bufp->allocated);
965
966   if (bufp->fastmap_accurate && bufp->fastmap)
967     {
968       printf ("fastmap: ");
969       print_fastmap (bufp->fastmap);
970     }
971
972 #ifdef _LIBC
973   printf ("re_nsub: %Zd\t", bufp->re_nsub);
974 #else
975   printf ("re_nsub: %ld\t", (long int) bufp->re_nsub);
976 #endif
977   printf ("regs_alloc: %d\t", bufp->regs_allocated);
978   printf ("can_be_null: %d\t", bufp->can_be_null);
979   printf ("newline_anchor: %d\n", bufp->newline_anchor);
980   printf ("no_sub: %d\t", bufp->no_sub);
981   printf ("not_bol: %d\t", bufp->not_bol);
982   printf ("not_eol: %d\t", bufp->not_eol);
983   printf ("syntax: %lx\n", bufp->syntax);
984   /* Perhaps we should print the translate table?  */
985 }
986
987
988 void
989 print_double_string (where, string1, size1, string2, size2)
990     const char *where;
991     const char *string1;
992     const char *string2;
993     int size1;
994     int size2;
995 {
996   int this_char;
997
998   if (where == NULL)
999     printf ("(null)");
1000   else
1001     {
1002       if (FIRST_STRING_P (where))
1003         {
1004           for (this_char = where - string1; this_char < size1; this_char++)
1005             putchar (string1[this_char]);
1006
1007           where = string2;
1008         }
1009
1010       for (this_char = where - string2; this_char < size2; this_char++)
1011         putchar (string2[this_char]);
1012     }
1013 }
1014
1015 void
1016 printchar (c)
1017      int c;
1018 {
1019   putc (c, stderr);
1020 }
1021
1022 #else /* not DEBUG */
1023
1024 # undef assert
1025 # define assert(e)
1026
1027 # define DEBUG_STATEMENT(e)
1028 # define DEBUG_PRINT1(x)
1029 # define DEBUG_PRINT2(x1, x2)
1030 # define DEBUG_PRINT3(x1, x2, x3)
1031 # define DEBUG_PRINT4(x1, x2, x3, x4)
1032 # define DEBUG_PRINT_COMPILED_PATTERN(p, s, e)
1033 # define DEBUG_PRINT_DOUBLE_STRING(w, s1, sz1, s2, sz2)
1034
1035 #endif /* not DEBUG */
1036 \f
1037 /* Set by `re_set_syntax' to the current regexp syntax to recognize.  Can
1038    also be assigned to arbitrarily: each pattern buffer stores its own
1039    syntax, so it can be changed between regex compilations.  */
1040 /* This has no initializer because initialized variables in Emacs
1041    become read-only after dumping.  */
1042 reg_syntax_t re_syntax_options;
1043
1044
1045 /* Specify the precise syntax of regexps for compilation.  This provides
1046    for compatibility for various utilities which historically have
1047    different, incompatible syntaxes.
1048
1049    The argument SYNTAX is a bit mask comprised of the various bits
1050    defined in regex.h.  We return the old syntax.  */
1051
1052 reg_syntax_t
1053 re_set_syntax (syntax)
1054     reg_syntax_t syntax;
1055 {
1056   reg_syntax_t ret = re_syntax_options;
1057
1058   re_syntax_options = syntax;
1059 #ifdef DEBUG
1060   if (syntax & RE_DEBUG)
1061     debug = 1;
1062   else if (debug) /* was on but now is not */
1063     debug = 0;
1064 #endif /* DEBUG */
1065   return ret;
1066 }
1067 #ifdef _LIBC
1068 weak_alias (__re_set_syntax, re_set_syntax)
1069 #endif
1070 \f
1071 /* This table gives an error message for each of the error codes listed
1072    in regex.h.  Obviously the order here has to be same as there.
1073    POSIX doesn't require that we do anything for REG_NOERROR,
1074    but why not be nice?  */
1075
1076 static const char re_error_msgid[] =
1077   {
1078 #define REG_NOERROR_IDX 0
1079     gettext_noop ("Success")    /* REG_NOERROR */
1080     "\0"
1081 #define REG_NOMATCH_IDX (REG_NOERROR_IDX + sizeof "Success")
1082     gettext_noop ("No match")   /* REG_NOMATCH */
1083     "\0"
1084 #define REG_BADPAT_IDX  (REG_NOMATCH_IDX + sizeof "No match")
1085     gettext_noop ("Invalid regular expression") /* REG_BADPAT */
1086     "\0"
1087 #define REG_ECOLLATE_IDX (REG_BADPAT_IDX + sizeof "Invalid regular expression")
1088     gettext_noop ("Invalid collation character") /* REG_ECOLLATE */
1089     "\0"
1090 #define REG_ECTYPE_IDX  (REG_ECOLLATE_IDX + sizeof "Invalid collation character")
1091     gettext_noop ("Invalid character class name") /* REG_ECTYPE */
1092     "\0"
1093 #define REG_EESCAPE_IDX (REG_ECTYPE_IDX + sizeof "Invalid character class name")
1094     gettext_noop ("Trailing backslash") /* REG_EESCAPE */
1095     "\0"
1096 #define REG_ESUBREG_IDX (REG_EESCAPE_IDX + sizeof "Trailing backslash")
1097     gettext_noop ("Invalid back reference") /* REG_ESUBREG */
1098     "\0"
1099 #define REG_EBRACK_IDX  (REG_ESUBREG_IDX + sizeof "Invalid back reference")
1100     gettext_noop ("Unmatched [ or [^")  /* REG_EBRACK */
1101     "\0"
1102 #define REG_EPAREN_IDX  (REG_EBRACK_IDX + sizeof "Unmatched [ or [^")
1103     gettext_noop ("Unmatched ( or \\(") /* REG_EPAREN */
1104     "\0"
1105 #define REG_EBRACE_IDX  (REG_EPAREN_IDX + sizeof "Unmatched ( or \\(")
1106     gettext_noop ("Unmatched \\{") /* REG_EBRACE */
1107     "\0"
1108 #define REG_BADBR_IDX   (REG_EBRACE_IDX + sizeof "Unmatched \\{")
1109     gettext_noop ("Invalid content of \\{\\}") /* REG_BADBR */
1110     "\0"
1111 #define REG_ERANGE_IDX  (REG_BADBR_IDX + sizeof "Invalid content of \\{\\}")
1112     gettext_noop ("Invalid range end")  /* REG_ERANGE */
1113     "\0"
1114 #define REG_ESPACE_IDX  (REG_ERANGE_IDX + sizeof "Invalid range end")
1115     gettext_noop ("Memory exhausted") /* REG_ESPACE */
1116     "\0"
1117 #define REG_BADRPT_IDX  (REG_ESPACE_IDX + sizeof "Memory exhausted")
1118     gettext_noop ("Invalid preceding regular expression") /* REG_BADRPT */
1119     "\0"
1120 #define REG_EEND_IDX    (REG_BADRPT_IDX + sizeof "Invalid preceding regular expression")
1121     gettext_noop ("Premature end of regular expression") /* REG_EEND */
1122     "\0"
1123 #define REG_ESIZE_IDX   (REG_EEND_IDX + sizeof "Premature end of regular expression")
1124     gettext_noop ("Regular expression too big") /* REG_ESIZE */
1125     "\0"
1126 #define REG_ERPAREN_IDX (REG_ESIZE_IDX + sizeof "Regular expression too big")
1127     gettext_noop ("Unmatched ) or \\)") /* REG_ERPAREN */
1128   };
1129
1130 static const size_t re_error_msgid_idx[] =
1131   {
1132     REG_NOERROR_IDX,
1133     REG_NOMATCH_IDX,
1134     REG_BADPAT_IDX,
1135     REG_ECOLLATE_IDX,
1136     REG_ECTYPE_IDX,
1137     REG_EESCAPE_IDX,
1138     REG_ESUBREG_IDX,
1139     REG_EBRACK_IDX,
1140     REG_EPAREN_IDX,
1141     REG_EBRACE_IDX,
1142     REG_BADBR_IDX,
1143     REG_ERANGE_IDX,
1144     REG_ESPACE_IDX,
1145     REG_BADRPT_IDX,
1146     REG_EEND_IDX,
1147     REG_ESIZE_IDX,
1148     REG_ERPAREN_IDX
1149   };
1150 \f
1151 /* Avoiding alloca during matching, to placate r_alloc.  */
1152
1153 /* Define MATCH_MAY_ALLOCATE unless we need to make sure that the
1154    searching and matching functions should not call alloca.  On some
1155    systems, alloca is implemented in terms of malloc, and if we're
1156    using the relocating allocator routines, then malloc could cause a
1157    relocation, which might (if the strings being searched are in the
1158    ralloc heap) shift the data out from underneath the regexp
1159    routines.
1160
1161    Here's another reason to avoid allocation: Emacs
1162    processes input from X in a signal handler; processing X input may
1163    call malloc; if input arrives while a matching routine is calling
1164    malloc, then we're scrod.  But Emacs can't just block input while
1165    calling matching routines; then we don't notice interrupts when
1166    they come in.  So, Emacs blocks input around all regexp calls
1167    except the matching calls, which it leaves unprotected, in the
1168    faith that they will not malloc.  */
1169
1170 /* Normally, this is fine.  */
1171 #define MATCH_MAY_ALLOCATE
1172
1173 /* When using GNU C, we are not REALLY using the C alloca, no matter
1174    what config.h may say.  So don't take precautions for it.  */
1175 #ifdef __GNUC__
1176 # undef C_ALLOCA
1177 #endif
1178
1179 /* The match routines may not allocate if (1) they would do it with malloc
1180    and (2) it's not safe for them to use malloc.
1181    Note that if REL_ALLOC is defined, matching would not use malloc for the
1182    failure stack, but we would still use it for the register vectors;
1183    so REL_ALLOC should not affect this.  */
1184 #if (defined C_ALLOCA || defined REGEX_MALLOC) && defined emacs
1185 # undef MATCH_MAY_ALLOCATE
1186 #endif
1187
1188 \f
1189 /* Failure stack declarations and macros; both re_compile_fastmap and
1190    re_match_2 use a failure stack.  These have to be macros because of
1191    REGEX_ALLOCATE_STACK.  */
1192
1193
1194 /* Number of failure points for which to initially allocate space
1195    when matching.  If this number is exceeded, we allocate more
1196    space, so it is not a hard limit.  */
1197 #ifndef INIT_FAILURE_ALLOC
1198 # define INIT_FAILURE_ALLOC 5
1199 #endif
1200
1201 /* Roughly the maximum number of failure points on the stack.  Would be
1202    exactly that if always used MAX_FAILURE_ITEMS items each time we failed.
1203    This is a variable only so users of regex can assign to it; we never
1204    change it ourselves.  */
1205
1206 #ifdef INT_IS_16BIT
1207
1208 # if defined MATCH_MAY_ALLOCATE
1209 /* 4400 was enough to cause a crash on Alpha OSF/1,
1210    whose default stack limit is 2mb.  */
1211 long int re_max_failures = 4000;
1212 # else
1213 long int re_max_failures = 2000;
1214 # endif
1215
1216 union fail_stack_elt
1217 {
1218   unsigned char *pointer;
1219   long int integer;
1220 };
1221
1222 typedef union fail_stack_elt fail_stack_elt_t;
1223
1224 typedef struct
1225 {
1226   fail_stack_elt_t *stack;
1227   unsigned long int size;
1228   unsigned long int avail;              /* Offset of next open position.  */
1229 } fail_stack_type;
1230
1231 #else /* not INT_IS_16BIT */
1232
1233 # if defined MATCH_MAY_ALLOCATE
1234 /* 4400 was enough to cause a crash on Alpha OSF/1,
1235    whose default stack limit is 2mb.  */
1236 int re_max_failures = 4000;
1237 # else
1238 int re_max_failures = 2000;
1239 # endif
1240
1241 union fail_stack_elt
1242 {
1243   unsigned char *pointer;
1244   int integer;
1245 };
1246
1247 typedef union fail_stack_elt fail_stack_elt_t;
1248
1249 typedef struct
1250 {
1251   fail_stack_elt_t *stack;
1252   unsigned size;
1253   unsigned avail;                       /* Offset of next open position.  */
1254 } fail_stack_type;
1255
1256 #endif /* INT_IS_16BIT */
1257
1258 #define FAIL_STACK_EMPTY()     (fail_stack.avail == 0)
1259 #define FAIL_STACK_PTR_EMPTY() (fail_stack_ptr->avail == 0)
1260 #define FAIL_STACK_FULL()      (fail_stack.avail == fail_stack.size)
1261
1262
1263 /* Define macros to initialize and free the failure stack.
1264    Do `return -2' if the alloc fails.  */
1265
1266 #ifdef MATCH_MAY_ALLOCATE
1267 # define INIT_FAIL_STACK()                                              \
1268   do {                                                                  \
1269     fail_stack.stack = (fail_stack_elt_t *)                             \
1270       REGEX_ALLOCATE_STACK (INIT_FAILURE_ALLOC * sizeof (fail_stack_elt_t)); \
1271                                                                         \
1272     if (fail_stack.stack == NULL)                                       \
1273       return -2;                                                        \
1274                                                                         \
1275     fail_stack.size = INIT_FAILURE_ALLOC;                               \
1276     fail_stack.avail = 0;                                               \
1277   } while (0)
1278
1279 # define RESET_FAIL_STACK()  REGEX_FREE_STACK (fail_stack.stack)
1280 #else
1281 # define INIT_FAIL_STACK()                                              \
1282   do {                                                                  \
1283     fail_stack.avail = 0;                                               \
1284   } while (0)
1285
1286 # define RESET_FAIL_STACK()
1287 #endif
1288
1289
1290 /* Double the size of FAIL_STACK, up to approximately `re_max_failures' items.
1291
1292    Return 1 if succeeds, and 0 if either ran out of memory
1293    allocating space for it or it was already too large.
1294
1295    REGEX_REALLOCATE_STACK requires `destination' be declared.   */
1296
1297 #define DOUBLE_FAIL_STACK(fail_stack)                                   \
1298   ((fail_stack).size > (unsigned) (re_max_failures * MAX_FAILURE_ITEMS) \
1299    ? 0                                                                  \
1300    : ((fail_stack).stack = (fail_stack_elt_t *)                         \
1301         REGEX_REALLOCATE_STACK ((fail_stack).stack,                     \
1302           (fail_stack).size * sizeof (fail_stack_elt_t),                \
1303           ((fail_stack).size << 1) * sizeof (fail_stack_elt_t)),        \
1304                                                                         \
1305       (fail_stack).stack == NULL                                        \
1306       ? 0                                                               \
1307       : ((fail_stack).size <<= 1,                                       \
1308          1)))
1309
1310
1311 /* Push pointer POINTER on FAIL_STACK.
1312    Return 1 if was able to do so and 0 if ran out of memory allocating
1313    space to do so.  */
1314 #define PUSH_PATTERN_OP(POINTER, FAIL_STACK)                            \
1315   ((FAIL_STACK_FULL ()                                                  \
1316     && !DOUBLE_FAIL_STACK (FAIL_STACK))                                 \
1317    ? 0                                                                  \
1318    : ((FAIL_STACK).stack[(FAIL_STACK).avail++].pointer = POINTER,       \
1319       1))
1320
1321 /* Push a pointer value onto the failure stack.
1322    Assumes the variable `fail_stack'.  Probably should only
1323    be called from within `PUSH_FAILURE_POINT'.  */
1324 #define PUSH_FAILURE_POINTER(item)                                      \
1325   fail_stack.stack[fail_stack.avail++].pointer = (unsigned char *) (item)
1326
1327 /* This pushes an integer-valued item onto the failure stack.
1328    Assumes the variable `fail_stack'.  Probably should only
1329    be called from within `PUSH_FAILURE_POINT'.  */
1330 #define PUSH_FAILURE_INT(item)                                  \
1331   fail_stack.stack[fail_stack.avail++].integer = (item)
1332
1333 /* Push a fail_stack_elt_t value onto the failure stack.
1334    Assumes the variable `fail_stack'.  Probably should only
1335    be called from within `PUSH_FAILURE_POINT'.  */
1336 #define PUSH_FAILURE_ELT(item)                                  \
1337   fail_stack.stack[fail_stack.avail++] =  (item)
1338
1339 /* These three POP... operations complement the three PUSH... operations.
1340    All assume that `fail_stack' is nonempty.  */
1341 #define POP_FAILURE_POINTER() fail_stack.stack[--fail_stack.avail].pointer
1342 #define POP_FAILURE_INT() fail_stack.stack[--fail_stack.avail].integer
1343 #define POP_FAILURE_ELT() fail_stack.stack[--fail_stack.avail]
1344
1345 /* Used to omit pushing failure point id's when we're not debugging.  */
1346 #ifdef DEBUG
1347 # define DEBUG_PUSH PUSH_FAILURE_INT
1348 # define DEBUG_POP(item_addr) *(item_addr) = POP_FAILURE_INT ()
1349 #else
1350 # define DEBUG_PUSH(item)
1351 # define DEBUG_POP(item_addr)
1352 #endif
1353
1354
1355 /* Push the information about the state we will need
1356    if we ever fail back to it.
1357
1358    Requires variables fail_stack, regstart, regend, reg_info, and
1359    num_regs_pushed be declared.  DOUBLE_FAIL_STACK requires `destination'
1360    be declared.
1361
1362    Does `return FAILURE_CODE' if runs out of memory.  */
1363
1364 #define PUSH_FAILURE_POINT(pattern_place, string_place, failure_code)   \
1365   do {                                                                  \
1366     char *destination;                                                  \
1367     /* Must be int, so when we don't save any registers, the arithmetic \
1368        of 0 + -1 isn't done as unsigned.  */                            \
1369     /* Can't be int, since there is not a shred of a guarantee that int \
1370        is wide enough to hold a value of something to which pointer can \
1371        be assigned */                                                   \
1372     active_reg_t this_reg;                                              \
1373                                                                         \
1374     DEBUG_STATEMENT (failure_id++);                                     \
1375     DEBUG_STATEMENT (nfailure_points_pushed++);                         \
1376     DEBUG_PRINT2 ("\nPUSH_FAILURE_POINT #%u:\n", failure_id);           \
1377     DEBUG_PRINT2 ("  Before push, next avail: %d\n", (fail_stack).avail);\
1378     DEBUG_PRINT2 ("                     size: %d\n", (fail_stack).size);\
1379                                                                         \
1380     DEBUG_PRINT2 ("  slots needed: %ld\n", NUM_FAILURE_ITEMS);          \
1381     DEBUG_PRINT2 ("     available: %d\n", REMAINING_AVAIL_SLOTS);       \
1382                                                                         \
1383     /* Ensure we have enough space allocated for what we will push.  */ \
1384     while (REMAINING_AVAIL_SLOTS < NUM_FAILURE_ITEMS)                   \
1385       {                                                                 \
1386         if (!DOUBLE_FAIL_STACK (fail_stack))                            \
1387           return failure_code;                                          \
1388                                                                         \
1389         DEBUG_PRINT2 ("\n  Doubled stack; size now: %d\n",              \
1390                        (fail_stack).size);                              \
1391         DEBUG_PRINT2 ("  slots available: %d\n", REMAINING_AVAIL_SLOTS);\
1392       }                                                                 \
1393                                                                         \
1394     /* Push the info, starting with the registers.  */                  \
1395     DEBUG_PRINT1 ("\n");                                                \
1396                                                                         \
1397     if (1)                                                              \
1398       for (this_reg = lowest_active_reg; this_reg <= highest_active_reg; \
1399            this_reg++)                                                  \
1400         {                                                               \
1401           DEBUG_PRINT2 ("  Pushing reg: %lu\n", this_reg);              \
1402           DEBUG_STATEMENT (num_regs_pushed++);                          \
1403                                                                         \
1404           DEBUG_PRINT2 ("    start: %p\n", regstart[this_reg]);         \
1405           PUSH_FAILURE_POINTER (regstart[this_reg]);                    \
1406                                                                         \
1407           DEBUG_PRINT2 ("    end: %p\n", regend[this_reg]);             \
1408           PUSH_FAILURE_POINTER (regend[this_reg]);                      \
1409                                                                         \
1410           DEBUG_PRINT2 ("    info: %p\n      ",                         \
1411                         reg_info[this_reg].word.pointer);               \
1412           DEBUG_PRINT2 (" match_null=%d",                               \
1413                         REG_MATCH_NULL_STRING_P (reg_info[this_reg]));  \
1414           DEBUG_PRINT2 (" active=%d", IS_ACTIVE (reg_info[this_reg]));  \
1415           DEBUG_PRINT2 (" matched_something=%d",                        \
1416                         MATCHED_SOMETHING (reg_info[this_reg]));        \
1417           DEBUG_PRINT2 (" ever_matched=%d",                             \
1418                         EVER_MATCHED_SOMETHING (reg_info[this_reg]));   \
1419           DEBUG_PRINT1 ("\n");                                          \
1420           PUSH_FAILURE_ELT (reg_info[this_reg].word);                   \
1421         }                                                               \
1422                                                                         \
1423     DEBUG_PRINT2 ("  Pushing  low active reg: %ld\n", lowest_active_reg);\
1424     PUSH_FAILURE_INT (lowest_active_reg);                               \
1425                                                                         \
1426     DEBUG_PRINT2 ("  Pushing high active reg: %ld\n", highest_active_reg);\
1427     PUSH_FAILURE_INT (highest_active_reg);                              \
1428                                                                         \
1429     DEBUG_PRINT2 ("  Pushing pattern %p:\n", pattern_place);            \
1430     DEBUG_PRINT_COMPILED_PATTERN (bufp, pattern_place, pend);           \
1431     PUSH_FAILURE_POINTER (pattern_place);                               \
1432                                                                         \
1433     DEBUG_PRINT2 ("  Pushing string %p: `", string_place);              \
1434     DEBUG_PRINT_DOUBLE_STRING (string_place, string1, size1, string2,   \
1435                                  size2);                                \
1436     DEBUG_PRINT1 ("'\n");                                               \
1437     PUSH_FAILURE_POINTER (string_place);                                \
1438                                                                         \
1439     DEBUG_PRINT2 ("  Pushing failure id: %u\n", failure_id);            \
1440     DEBUG_PUSH (failure_id);                                            \
1441   } while (0)
1442
1443 /* This is the number of items that are pushed and popped on the stack
1444    for each register.  */
1445 #define NUM_REG_ITEMS  3
1446
1447 /* Individual items aside from the registers.  */
1448 #ifdef DEBUG
1449 # define NUM_NONREG_ITEMS 5 /* Includes failure point id.  */
1450 #else
1451 # define NUM_NONREG_ITEMS 4
1452 #endif
1453
1454 /* We push at most this many items on the stack.  */
1455 /* We used to use (num_regs - 1), which is the number of registers
1456    this regexp will save; but that was changed to 5
1457    to avoid stack overflow for a regexp with lots of parens.  */
1458 #define MAX_FAILURE_ITEMS (5 * NUM_REG_ITEMS + NUM_NONREG_ITEMS)
1459
1460 /* We actually push this many items.  */
1461 #define NUM_FAILURE_ITEMS                               \
1462   (((0                                                  \
1463      ? 0 : highest_active_reg - lowest_active_reg + 1)  \
1464     * NUM_REG_ITEMS)                                    \
1465    + NUM_NONREG_ITEMS)
1466
1467 /* How many items can still be added to the stack without overflowing it.  */
1468 #define REMAINING_AVAIL_SLOTS ((fail_stack).size - (fail_stack).avail)
1469
1470
1471 /* Pops what PUSH_FAIL_STACK pushes.
1472
1473    We restore into the parameters, all of which should be lvalues:
1474      STR -- the saved data position.
1475      PAT -- the saved pattern position.
1476      LOW_REG, HIGH_REG -- the highest and lowest active registers.
1477      REGSTART, REGEND -- arrays of string positions.
1478      REG_INFO -- array of information about each subexpression.
1479
1480    Also assumes the variables `fail_stack' and (if debugging), `bufp',
1481    `pend', `string1', `size1', `string2', and `size2'.  */
1482
1483 #define POP_FAILURE_POINT(str, pat, low_reg, high_reg, regstart, regend, reg_info)\
1484 {                                                                       \
1485   DEBUG_STATEMENT (unsigned failure_id;)                                \
1486   active_reg_t this_reg;                                                \
1487   const unsigned char *string_temp;                                     \
1488                                                                         \
1489   assert (!FAIL_STACK_EMPTY ());                                        \
1490                                                                         \
1491   /* Remove failure points and point to how many regs pushed.  */       \
1492   DEBUG_PRINT1 ("POP_FAILURE_POINT:\n");                                \
1493   DEBUG_PRINT2 ("  Before pop, next avail: %d\n", fail_stack.avail);    \
1494   DEBUG_PRINT2 ("                    size: %d\n", fail_stack.size);     \
1495                                                                         \
1496   assert (fail_stack.avail >= NUM_NONREG_ITEMS);                        \
1497                                                                         \
1498   DEBUG_POP (&failure_id);                                              \
1499   DEBUG_PRINT2 ("  Popping failure id: %u\n", failure_id);              \
1500                                                                         \
1501   /* If the saved string location is NULL, it came from an              \
1502      on_failure_keep_string_jump opcode, and we want to throw away the  \
1503      saved NULL, thus retaining our current position in the string.  */ \
1504   string_temp = POP_FAILURE_POINTER ();                                 \
1505   if (string_temp != NULL)                                              \
1506     str = (const char *) string_temp;                                   \
1507                                                                         \
1508   DEBUG_PRINT2 ("  Popping string %p: `", str);                         \
1509   DEBUG_PRINT_DOUBLE_STRING (str, string1, size1, string2, size2);      \
1510   DEBUG_PRINT1 ("'\n");                                                 \
1511                                                                         \
1512   pat = (unsigned char *) POP_FAILURE_POINTER ();                       \
1513   DEBUG_PRINT2 ("  Popping pattern %p:\n", pat);                        \
1514   DEBUG_PRINT_COMPILED_PATTERN (bufp, pat, pend);                       \
1515                                                                         \
1516   /* Restore register info.  */                                         \
1517   high_reg = (active_reg_t) POP_FAILURE_INT ();                         \
1518   DEBUG_PRINT2 ("  Popping high active reg: %ld\n", high_reg);          \
1519                                                                         \
1520   low_reg = (active_reg_t) POP_FAILURE_INT ();                          \
1521   DEBUG_PRINT2 ("  Popping  low active reg: %ld\n", low_reg);           \
1522                                                                         \
1523   if (1)                                                                \
1524     for (this_reg = high_reg; this_reg >= low_reg; this_reg--)          \
1525       {                                                                 \
1526         DEBUG_PRINT2 ("    Popping reg: %ld\n", this_reg);              \
1527                                                                         \
1528         reg_info[this_reg].word = POP_FAILURE_ELT ();                   \
1529         DEBUG_PRINT2 ("      info: %p\n",                               \
1530                       reg_info[this_reg].word.pointer);                 \
1531                                                                         \
1532         regend[this_reg] = (const char *) POP_FAILURE_POINTER ();       \
1533         DEBUG_PRINT2 ("      end: %p\n", regend[this_reg]);             \
1534                                                                         \
1535         regstart[this_reg] = (const char *) POP_FAILURE_POINTER ();     \
1536         DEBUG_PRINT2 ("      start: %p\n", regstart[this_reg]);         \
1537       }                                                                 \
1538   else                                                                  \
1539     {                                                                   \
1540       for (this_reg = highest_active_reg; this_reg > high_reg; this_reg--) \
1541         {                                                               \
1542           reg_info[this_reg].word.integer = 0;                          \
1543           regend[this_reg] = 0;                                         \
1544           regstart[this_reg] = 0;                                       \
1545         }                                                               \
1546       highest_active_reg = high_reg;                                    \
1547     }                                                                   \
1548                                                                         \
1549   set_regs_matched_done = 0;                                            \
1550   DEBUG_STATEMENT (nfailure_points_popped++);                           \
1551 } /* POP_FAILURE_POINT */
1552
1553
1554 \f
1555 /* Structure for per-register (a.k.a. per-group) information.
1556    Other register information, such as the
1557    starting and ending positions (which are addresses), and the list of
1558    inner groups (which is a bits list) are maintained in separate
1559    variables.
1560
1561    We are making a (strictly speaking) nonportable assumption here: that
1562    the compiler will pack our bit fields into something that fits into
1563    the type of `word', i.e., is something that fits into one item on the
1564    failure stack.  */
1565
1566
1567 /* Declarations and macros for re_match_2.  */
1568
1569 typedef union
1570 {
1571   fail_stack_elt_t word;
1572   struct
1573   {
1574       /* This field is one if this group can match the empty string,
1575          zero if not.  If not yet determined,  `MATCH_NULL_UNSET_VALUE'.  */
1576 #define MATCH_NULL_UNSET_VALUE 3
1577     unsigned match_null_string_p : 2;
1578     unsigned is_active : 1;
1579     unsigned matched_something : 1;
1580     unsigned ever_matched_something : 1;
1581   } bits;
1582 } register_info_type;
1583
1584 #define REG_MATCH_NULL_STRING_P(R)  ((R).bits.match_null_string_p)
1585 #define IS_ACTIVE(R)  ((R).bits.is_active)
1586 #define MATCHED_SOMETHING(R)  ((R).bits.matched_something)
1587 #define EVER_MATCHED_SOMETHING(R)  ((R).bits.ever_matched_something)
1588
1589
1590 /* Call this when have matched a real character; it sets `matched' flags
1591    for the subexpressions which we are currently inside.  Also records
1592    that those subexprs have matched.  */
1593 #define SET_REGS_MATCHED()                                              \
1594   do                                                                    \
1595     {                                                                   \
1596       if (!set_regs_matched_done)                                       \
1597         {                                                               \
1598           active_reg_t r;                                               \
1599           set_regs_matched_done = 1;                                    \
1600           for (r = lowest_active_reg; r <= highest_active_reg; r++)     \
1601             {                                                           \
1602               MATCHED_SOMETHING (reg_info[r])                           \
1603                 = EVER_MATCHED_SOMETHING (reg_info[r])                  \
1604                 = 1;                                                    \
1605             }                                                           \
1606         }                                                               \
1607     }                                                                   \
1608   while (0)
1609
1610 /* Registers are set to a sentinel when they haven't yet matched.  */
1611 static char reg_unset_dummy;
1612 #define REG_UNSET_VALUE (&reg_unset_dummy)
1613 #define REG_UNSET(e) ((e) == REG_UNSET_VALUE)
1614 \f
1615 /* Subroutine declarations and macros for regex_compile.  */
1616
1617 static reg_errcode_t regex_compile _RE_ARGS ((const char *pattern, size_t size,
1618                                               reg_syntax_t syntax,
1619                                               struct re_pattern_buffer *bufp));
1620 static void store_op1 _RE_ARGS ((re_opcode_t op, unsigned char *loc, int arg));
1621 static void store_op2 _RE_ARGS ((re_opcode_t op, unsigned char *loc,
1622                                  int arg1, int arg2));
1623 static void insert_op1 _RE_ARGS ((re_opcode_t op, unsigned char *loc,
1624                                   int arg, unsigned char *end));
1625 static void insert_op2 _RE_ARGS ((re_opcode_t op, unsigned char *loc,
1626                                   int arg1, int arg2, unsigned char *end));
1627 static boolean at_begline_loc_p _RE_ARGS ((const char *pattern, const char *p,
1628                                            reg_syntax_t syntax));
1629 static boolean at_endline_loc_p _RE_ARGS ((const char *p, const char *pend,
1630                                            reg_syntax_t syntax));
1631 static reg_errcode_t compile_range _RE_ARGS ((unsigned int range_start,
1632                                               const char **p_ptr,
1633                                               const char *pend,
1634                                               char *translate,
1635                                               reg_syntax_t syntax,
1636                                               unsigned char *b));
1637
1638 /* Fetch the next character in the uncompiled pattern---translating it
1639    if necessary.  Also cast from a signed character in the constant
1640    string passed to us by the user to an unsigned char that we can use
1641    as an array index (in, e.g., `translate').  */
1642 #ifndef PATFETCH
1643 # define PATFETCH(c)                                                    \
1644   do {if (p == pend) return REG_EEND;                                   \
1645     c = (unsigned char) *p++;                                           \
1646     if (translate) c = (unsigned char) translate[c];                    \
1647   } while (0)
1648 #endif
1649
1650 /* Fetch the next character in the uncompiled pattern, with no
1651    translation.  */
1652 #define PATFETCH_RAW(c)                                                 \
1653   do {if (p == pend) return REG_EEND;                                   \
1654     c = (unsigned char) *p++;                                           \
1655   } while (0)
1656
1657 /* Go backwards one character in the pattern.  */
1658 #define PATUNFETCH p--
1659
1660
1661 /* If `translate' is non-null, return translate[D], else just D.  We
1662    cast the subscript to translate because some data is declared as
1663    `char *', to avoid warnings when a string constant is passed.  But
1664    when we use a character as a subscript we must make it unsigned.  */
1665 #ifndef TRANSLATE
1666 # define TRANSLATE(d) \
1667   (translate ? (char) translate[(unsigned char) (d)] : (d))
1668 #endif
1669
1670
1671 /* Macros for outputting the compiled pattern into `buffer'.  */
1672
1673 /* If the buffer isn't allocated when it comes in, use this.  */
1674 #define INIT_BUF_SIZE  32
1675
1676 /* Make sure we have at least N more bytes of space in buffer.  */
1677 #define GET_BUFFER_SPACE(n)                                             \
1678     while ((unsigned long) (b - bufp->buffer + (n)) > bufp->allocated)  \
1679       EXTEND_BUFFER ()
1680
1681 /* Make sure we have one more byte of buffer space and then add C to it.  */
1682 #define BUF_PUSH(c)                                                     \
1683   do {                                                                  \
1684     GET_BUFFER_SPACE (1);                                               \
1685     *b++ = (unsigned char) (c);                                         \
1686   } while (0)
1687
1688
1689 /* Ensure we have two more bytes of buffer space and then append C1 and C2.  */
1690 #define BUF_PUSH_2(c1, c2)                                              \
1691   do {                                                                  \
1692     GET_BUFFER_SPACE (2);                                               \
1693     *b++ = (unsigned char) (c1);                                        \
1694     *b++ = (unsigned char) (c2);                                        \
1695   } while (0)
1696
1697
1698 /* As with BUF_PUSH_2, except for three bytes.  */
1699 #define BUF_PUSH_3(c1, c2, c3)                                          \
1700   do {                                                                  \
1701     GET_BUFFER_SPACE (3);                                               \
1702     *b++ = (unsigned char) (c1);                                        \
1703     *b++ = (unsigned char) (c2);                                        \
1704     *b++ = (unsigned char) (c3);                                        \
1705   } while (0)
1706
1707
1708 /* Store a jump with opcode OP at LOC to location TO.  We store a
1709    relative address offset by the three bytes the jump itself occupies.  */
1710 #define STORE_JUMP(op, loc, to) \
1711   store_op1 (op, loc, (int) ((to) - (loc) - 3))
1712
1713 /* Likewise, for a two-argument jump.  */
1714 #define STORE_JUMP2(op, loc, to, arg) \
1715   store_op2 (op, loc, (int) ((to) - (loc) - 3), arg)
1716
1717 /* Like `STORE_JUMP', but for inserting.  Assume `b' is the buffer end.  */
1718 #define INSERT_JUMP(op, loc, to) \
1719   insert_op1 (op, loc, (int) ((to) - (loc) - 3), b)
1720
1721 /* Like `STORE_JUMP2', but for inserting.  Assume `b' is the buffer end.  */
1722 #define INSERT_JUMP2(op, loc, to, arg) \
1723   insert_op2 (op, loc, (int) ((to) - (loc) - 3), arg, b)
1724
1725
1726 /* This is not an arbitrary limit: the arguments which represent offsets
1727    into the pattern are two bytes long.  So if 2^16 bytes turns out to
1728    be too small, many things would have to change.  */
1729 /* Any other compiler which, like MSC, has allocation limit below 2^16
1730    bytes will have to use approach similar to what was done below for
1731    MSC and drop MAX_BUF_SIZE a bit.  Otherwise you may end up
1732    reallocating to 0 bytes.  Such thing is not going to work too well.
1733    You have been warned!!  */
1734 #if defined _MSC_VER  && !defined WIN32
1735 /* Microsoft C 16-bit versions limit malloc to approx 65512 bytes.
1736    The REALLOC define eliminates a flurry of conversion warnings,
1737    but is not required. */
1738 # define MAX_BUF_SIZE  65500L
1739 # define REALLOC(p,s) realloc ((p), (size_t) (s))
1740 #else
1741 # define MAX_BUF_SIZE (1L << 16)
1742 # define REALLOC(p,s) realloc ((p), (s))
1743 #endif
1744
1745 /* Extend the buffer by twice its current size via realloc and
1746    reset the pointers that pointed into the old block to point to the
1747    correct places in the new one.  If extending the buffer results in it
1748    being larger than MAX_BUF_SIZE, then flag memory exhausted.  */
1749 #if __BOUNDED_POINTERS__
1750 # define SET_HIGH_BOUND(P) (__ptrhigh (P) = __ptrlow (P) + bufp->allocated)
1751 # define MOVE_BUFFER_POINTER(P) \
1752   (__ptrlow (P) += incr, SET_HIGH_BOUND (P), __ptrvalue (P) += incr)
1753 # define ELSE_EXTEND_BUFFER_HIGH_BOUND          \
1754   else                                          \
1755     {                                           \
1756       SET_HIGH_BOUND (b);                       \
1757       SET_HIGH_BOUND (begalt);                  \
1758       if (fixup_alt_jump)                       \
1759         SET_HIGH_BOUND (fixup_alt_jump);        \
1760       if (laststart)                            \
1761         SET_HIGH_BOUND (laststart);             \
1762       if (pending_exact)                        \
1763         SET_HIGH_BOUND (pending_exact);         \
1764     }
1765 #else
1766 # define MOVE_BUFFER_POINTER(P) (P) += incr
1767 # define ELSE_EXTEND_BUFFER_HIGH_BOUND
1768 #endif
1769 #define EXTEND_BUFFER()                                                 \
1770   do {                                                                  \
1771     unsigned char *old_buffer = bufp->buffer;                           \
1772     if (bufp->allocated == MAX_BUF_SIZE)                                \
1773       return REG_ESIZE;                                                 \
1774     bufp->allocated <<= 1;                                              \
1775     if (bufp->allocated > MAX_BUF_SIZE)                                 \
1776       bufp->allocated = MAX_BUF_SIZE;                                   \
1777     bufp->buffer = (unsigned char *) REALLOC (bufp->buffer, bufp->allocated);\
1778     if (bufp->buffer == NULL)                                           \
1779       return REG_ESPACE;                                                \
1780     /* If the buffer moved, move all the pointers into it.  */          \
1781     if (old_buffer != bufp->buffer)                                     \
1782       {                                                                 \
1783         int incr = bufp->buffer - old_buffer;                           \
1784         MOVE_BUFFER_POINTER (b);                                        \
1785         MOVE_BUFFER_POINTER (begalt);                                   \
1786         if (fixup_alt_jump)                                             \
1787           MOVE_BUFFER_POINTER (fixup_alt_jump);                         \
1788         if (laststart)                                                  \
1789           MOVE_BUFFER_POINTER (laststart);                              \
1790         if (pending_exact)                                              \
1791           MOVE_BUFFER_POINTER (pending_exact);                          \
1792       }                                                                 \
1793     ELSE_EXTEND_BUFFER_HIGH_BOUND                                       \
1794   } while (0)
1795
1796
1797 /* Since we have one byte reserved for the register number argument to
1798    {start,stop}_memory, the maximum number of groups we can report
1799    things about is what fits in that byte.  */
1800 #define MAX_REGNUM 255
1801
1802 /* But patterns can have more than `MAX_REGNUM' registers.  We just
1803    ignore the excess.  */
1804 typedef unsigned regnum_t;
1805
1806
1807 /* Macros for the compile stack.  */
1808
1809 /* Since offsets can go either forwards or backwards, this type needs to
1810    be able to hold values from -(MAX_BUF_SIZE - 1) to MAX_BUF_SIZE - 1.  */
1811 /* int may be not enough when sizeof(int) == 2.  */
1812 typedef long pattern_offset_t;
1813
1814 typedef struct
1815 {
1816   pattern_offset_t begalt_offset;
1817   pattern_offset_t fixup_alt_jump;
1818   pattern_offset_t inner_group_offset;
1819   pattern_offset_t laststart_offset;
1820   regnum_t regnum;
1821 } compile_stack_elt_t;
1822
1823
1824 typedef struct
1825 {
1826   compile_stack_elt_t *stack;
1827   unsigned size;
1828   unsigned avail;                       /* Offset of next open position.  */
1829 } compile_stack_type;
1830
1831
1832 #define INIT_COMPILE_STACK_SIZE 32
1833
1834 #define COMPILE_STACK_EMPTY  (compile_stack.avail == 0)
1835 #define COMPILE_STACK_FULL  (compile_stack.avail == compile_stack.size)
1836
1837 /* The next available element.  */
1838 #define COMPILE_STACK_TOP (compile_stack.stack[compile_stack.avail])
1839
1840
1841 /* Set the bit for character C in a list.  */
1842 #define SET_LIST_BIT(c)                               \
1843   (b[((unsigned char) (c)) / BYTEWIDTH]               \
1844    |= 1 << (((unsigned char) c) % BYTEWIDTH))
1845
1846
1847 /* Get the next unsigned number in the uncompiled pattern.  */
1848 #define GET_UNSIGNED_NUMBER(num)                                        \
1849   { if (p != pend)                                                      \
1850      {                                                                  \
1851        PATFETCH (c);                                                    \
1852        while ('0' <= c && c <= '9')                                     \
1853          {                                                              \
1854            if (num < 0)                                                 \
1855               num = 0;                                                  \
1856            num = num * 10 + c - '0';                                    \
1857            if (p == pend)                                               \
1858               break;                                                    \
1859            PATFETCH (c);                                                \
1860          }                                                              \
1861        }                                                                \
1862     }
1863
1864 #if defined _LIBC || WIDE_CHAR_SUPPORT
1865 /* The GNU C library provides support for user-defined character classes
1866    and the functions from ISO C amendement 1.  */
1867 # ifdef CHARCLASS_NAME_MAX
1868 #  define CHAR_CLASS_MAX_LENGTH CHARCLASS_NAME_MAX
1869 # else
1870 /* This shouldn't happen but some implementation might still have this
1871    problem.  Use a reasonable default value.  */
1872 #  define CHAR_CLASS_MAX_LENGTH 256
1873 # endif
1874
1875 # ifdef _LIBC
1876 #  define IS_CHAR_CLASS(string) __wctype (string)
1877 # else
1878 #  define IS_CHAR_CLASS(string) wctype (string)
1879 # endif
1880 #else
1881 # define CHAR_CLASS_MAX_LENGTH  6 /* Namely, `xdigit'.  */
1882
1883 # define IS_CHAR_CLASS(string)                                          \
1884    (STREQ (string, "alpha") || STREQ (string, "upper")                  \
1885     || STREQ (string, "lower") || STREQ (string, "digit")               \
1886     || STREQ (string, "alnum") || STREQ (string, "xdigit")              \
1887     || STREQ (string, "space") || STREQ (string, "print")               \
1888     || STREQ (string, "punct") || STREQ (string, "graph")               \
1889     || STREQ (string, "cntrl") || STREQ (string, "blank"))
1890 #endif
1891 \f
1892 #ifndef MATCH_MAY_ALLOCATE
1893
1894 /* If we cannot allocate large objects within re_match_2_internal,
1895    we make the fail stack and register vectors global.
1896    The fail stack, we grow to the maximum size when a regexp
1897    is compiled.
1898    The register vectors, we adjust in size each time we
1899    compile a regexp, according to the number of registers it needs.  */
1900
1901 static fail_stack_type fail_stack;
1902
1903 /* Size with which the following vectors are currently allocated.
1904    That is so we can make them bigger as needed,
1905    but never make them smaller.  */
1906 static int regs_allocated_size;
1907
1908 static const char **     regstart, **     regend;
1909 static const char ** old_regstart, ** old_regend;
1910 static const char **best_regstart, **best_regend;
1911 static register_info_type *reg_info;
1912 static const char **reg_dummy;
1913 static register_info_type *reg_info_dummy;
1914
1915 /* Make the register vectors big enough for NUM_REGS registers,
1916    but don't make them smaller.  */
1917
1918 static
1919 regex_grow_registers (num_regs)
1920      int num_regs;
1921 {
1922   if (num_regs > regs_allocated_size)
1923     {
1924       RETALLOC_IF (regstart,     num_regs, const char *);
1925       RETALLOC_IF (regend,       num_regs, const char *);
1926       RETALLOC_IF (old_regstart, num_regs, const char *);
1927       RETALLOC_IF (old_regend,   num_regs, const char *);
1928       RETALLOC_IF (best_regstart, num_regs, const char *);
1929       RETALLOC_IF (best_regend,  num_regs, const char *);
1930       RETALLOC_IF (reg_info,     num_regs, register_info_type);
1931       RETALLOC_IF (reg_dummy,    num_regs, const char *);
1932       RETALLOC_IF (reg_info_dummy, num_regs, register_info_type);
1933
1934       regs_allocated_size = num_regs;
1935     }
1936 }
1937
1938 #endif /* not MATCH_MAY_ALLOCATE */
1939 \f
1940 static boolean group_in_compile_stack _RE_ARGS ((compile_stack_type
1941                                                  compile_stack,
1942                                                  regnum_t regnum));
1943
1944 /* `regex_compile' compiles PATTERN (of length SIZE) according to SYNTAX.
1945    Returns one of error codes defined in `regex.h', or zero for success.
1946
1947    Assumes the `allocated' (and perhaps `buffer') and `translate'
1948    fields are set in BUFP on entry.
1949
1950    If it succeeds, results are put in BUFP (if it returns an error, the
1951    contents of BUFP are undefined):
1952      `buffer' is the compiled pattern;
1953      `syntax' is set to SYNTAX;
1954      `used' is set to the length of the compiled pattern;
1955      `fastmap_accurate' is zero;
1956      `re_nsub' is the number of subexpressions in PATTERN;
1957      `not_bol' and `not_eol' are zero;
1958
1959    The `fastmap' and `newline_anchor' fields are neither
1960    examined nor set.  */
1961
1962 /* Return, freeing storage we allocated.  */
1963 #define FREE_STACK_RETURN(value)                \
1964   return (free (compile_stack.stack), value)
1965
1966 static reg_errcode_t
1967 regex_compile (pattern, size, syntax, bufp)
1968      const char *pattern;
1969      size_t size;
1970      reg_syntax_t syntax;
1971      struct re_pattern_buffer *bufp;
1972 {
1973   /* We fetch characters from PATTERN here.  Even though PATTERN is
1974      `char *' (i.e., signed), we declare these variables as unsigned, so
1975      they can be reliably used as array indices.  */
1976   register unsigned char c, c1;
1977
1978   /* A random temporary spot in PATTERN.  */
1979   const char *p1;
1980
1981   /* Points to the end of the buffer, where we should append.  */
1982   register unsigned char *b;
1983
1984   /* Keeps track of unclosed groups.  */
1985   compile_stack_type compile_stack;
1986
1987   /* Points to the current (ending) position in the pattern.  */
1988   const char *p = pattern;
1989   const char *pend = pattern + size;
1990
1991   /* How to translate the characters in the pattern.  */
1992   RE_TRANSLATE_TYPE translate = bufp->translate;
1993
1994   /* Address of the count-byte of the most recently inserted `exactn'
1995      command.  This makes it possible to tell if a new exact-match
1996      character can be added to that command or if the character requires
1997      a new `exactn' command.  */
1998   unsigned char *pending_exact = 0;
1999
2000   /* Address of start of the most recently finished expression.
2001      This tells, e.g., postfix * where to find the start of its
2002      operand.  Reset at the beginning of groups and alternatives.  */
2003   unsigned char *laststart = 0;
2004
2005   /* Address of beginning of regexp, or inside of last group.  */
2006   unsigned char *begalt;
2007
2008   /* Place in the uncompiled pattern (i.e., the {) to
2009      which to go back if the interval is invalid.  */
2010   const char *beg_interval;
2011
2012   /* Address of the place where a forward jump should go to the end of
2013      the containing expression.  Each alternative of an `or' -- except the
2014      last -- ends with a forward jump of this sort.  */
2015   unsigned char *fixup_alt_jump = 0;
2016
2017   /* Counts open-groups as they are encountered.  Remembered for the
2018      matching close-group on the compile stack, so the same register
2019      number is put in the stop_memory as the start_memory.  */
2020   regnum_t regnum = 0;
2021
2022 #ifdef DEBUG
2023   DEBUG_PRINT1 ("\nCompiling pattern: ");
2024   if (debug)
2025     {
2026       unsigned debug_count;
2027
2028       for (debug_count = 0; debug_count < size; debug_count++)
2029         putchar (pattern[debug_count]);
2030       putchar ('\n');
2031     }
2032 #endif /* DEBUG */
2033
2034   /* Initialize the compile stack.  */
2035   compile_stack.stack = TALLOC (INIT_COMPILE_STACK_SIZE, compile_stack_elt_t);
2036   if (compile_stack.stack == NULL)
2037     return REG_ESPACE;
2038
2039   compile_stack.size = INIT_COMPILE_STACK_SIZE;
2040   compile_stack.avail = 0;
2041
2042   /* Initialize the pattern buffer.  */
2043   bufp->syntax = syntax;
2044   bufp->fastmap_accurate = 0;
2045   bufp->not_bol = bufp->not_eol = 0;
2046
2047   /* Set `used' to zero, so that if we return an error, the pattern
2048      printer (for debugging) will think there's no pattern.  We reset it
2049      at the end.  */
2050   bufp->used = 0;
2051
2052   /* Always count groups, whether or not bufp->no_sub is set.  */
2053   bufp->re_nsub = 0;
2054
2055 #if !defined emacs && !defined SYNTAX_TABLE
2056   /* Initialize the syntax table.  */
2057    init_syntax_once ();
2058 #endif
2059
2060   if (bufp->allocated == 0)
2061     {
2062       if (bufp->buffer)
2063         { /* If zero allocated, but buffer is non-null, try to realloc
2064              enough space.  This loses if buffer's address is bogus, but
2065              that is the user's responsibility.  */
2066           RETALLOC (bufp->buffer, INIT_BUF_SIZE, unsigned char);
2067         }
2068       else
2069         { /* Caller did not allocate a buffer.  Do it for them.  */
2070           bufp->buffer = TALLOC (INIT_BUF_SIZE, unsigned char);
2071         }
2072       if (!bufp->buffer) FREE_STACK_RETURN (REG_ESPACE);
2073
2074       bufp->allocated = INIT_BUF_SIZE;
2075     }
2076
2077   begalt = b = bufp->buffer;
2078
2079   /* Loop through the uncompiled pattern until we're at the end.  */
2080   while (p != pend)
2081     {
2082       PATFETCH (c);
2083
2084       switch (c)
2085         {
2086         case '^':
2087           {
2088             if (   /* If at start of pattern, it's an operator.  */
2089                    p == pattern + 1
2090                    /* If context independent, it's an operator.  */
2091                 || syntax & RE_CONTEXT_INDEP_ANCHORS
2092                    /* Otherwise, depends on what's come before.  */
2093                 || at_begline_loc_p (pattern, p, syntax))
2094               BUF_PUSH (begline);
2095             else
2096               goto normal_char;
2097           }
2098           break;
2099
2100
2101         case '$':
2102           {
2103             if (   /* If at end of pattern, it's an operator.  */
2104                    p == pend
2105                    /* If context independent, it's an operator.  */
2106                 || syntax & RE_CONTEXT_INDEP_ANCHORS
2107                    /* Otherwise, depends on what's next.  */
2108                 || at_endline_loc_p (p, pend, syntax))
2109                BUF_PUSH (endline);
2110              else
2111                goto normal_char;
2112            }
2113            break;
2114
2115
2116         case '+':
2117         case '?':
2118           if ((syntax & RE_BK_PLUS_QM)
2119               || (syntax & RE_LIMITED_OPS))
2120             goto normal_char;
2121         handle_plus:
2122         case '*':
2123           /* If there is no previous pattern... */
2124           if (!laststart)
2125             {
2126               if (syntax & RE_CONTEXT_INVALID_OPS)
2127                 FREE_STACK_RETURN (REG_BADRPT);
2128               else if (!(syntax & RE_CONTEXT_INDEP_OPS))
2129                 goto normal_char;
2130             }
2131
2132           {
2133             /* Are we optimizing this jump?  */
2134             boolean keep_string_p = false;
2135
2136             /* 1 means zero (many) matches is allowed.  */
2137             char zero_times_ok = 0, many_times_ok = 0;
2138
2139             /* If there is a sequence of repetition chars, collapse it
2140                down to just one (the right one).  We can't combine
2141                interval operators with these because of, e.g., `a{2}*',
2142                which should only match an even number of `a's.  */
2143
2144             for (;;)
2145               {
2146                 zero_times_ok |= c != '+';
2147                 many_times_ok |= c != '?';
2148
2149                 if (p == pend)
2150                   break;
2151
2152                 PATFETCH (c);
2153
2154                 if (c == '*'
2155                     || (!(syntax & RE_BK_PLUS_QM) && (c == '+' || c == '?')))
2156                   ;
2157
2158                 else if (syntax & RE_BK_PLUS_QM  &&  c == '\\')
2159                   {
2160                     if (p == pend) FREE_STACK_RETURN (REG_EESCAPE);
2161
2162                     PATFETCH (c1);
2163                     if (!(c1 == '+' || c1 == '?'))
2164                       {
2165                         PATUNFETCH;
2166                         PATUNFETCH;
2167                         break;
2168                       }
2169
2170                     c = c1;
2171                   }
2172                 else
2173                   {
2174                     PATUNFETCH;
2175                     break;
2176                   }
2177
2178                 /* If we get here, we found another repeat character.  */
2179                }
2180
2181             /* Star, etc. applied to an empty pattern is equivalent
2182                to an empty pattern.  */
2183             if (!laststart)
2184               break;
2185
2186             /* Now we know whether or not zero matches is allowed
2187                and also whether or not two or more matches is allowed.  */
2188             if (many_times_ok)
2189               { /* More than one repetition is allowed, so put in at the
2190                    end a backward relative jump from `b' to before the next
2191                    jump we're going to put in below (which jumps from
2192                    laststart to after this jump).
2193
2194                    But if we are at the `*' in the exact sequence `.*\n',
2195                    insert an unconditional jump backwards to the .,
2196                    instead of the beginning of the loop.  This way we only
2197                    push a failure point once, instead of every time
2198                    through the loop.  */
2199                 assert (p - 1 > pattern);
2200
2201                 /* Allocate the space for the jump.  */
2202                 GET_BUFFER_SPACE (3);
2203
2204                 /* We know we are not at the first character of the pattern,
2205                    because laststart was nonzero.  And we've already
2206                    incremented `p', by the way, to be the character after
2207                    the `*'.  Do we have to do something analogous here
2208                    for null bytes, because of RE_DOT_NOT_NULL?  */
2209                 if (TRANSLATE (*(p - 2)) == TRANSLATE ('.')
2210                     && zero_times_ok
2211                     && p < pend && TRANSLATE (*p) == TRANSLATE ('\n')
2212                     && !(syntax & RE_DOT_NEWLINE))
2213                   { /* We have .*\n.  */
2214                     STORE_JUMP (jump, b, laststart);
2215                     keep_string_p = true;
2216                   }
2217                 else
2218                   /* Anything else.  */
2219                   STORE_JUMP (maybe_pop_jump, b, laststart - 3);
2220
2221                 /* We've added more stuff to the buffer.  */
2222                 b += 3;
2223               }
2224
2225             /* On failure, jump from laststart to b + 3, which will be the
2226                end of the buffer after this jump is inserted.  */
2227             GET_BUFFER_SPACE (3);
2228             INSERT_JUMP (keep_string_p ? on_failure_keep_string_jump
2229                                        : on_failure_jump,
2230                          laststart, b + 3);
2231             pending_exact = 0;
2232             b += 3;
2233
2234             if (!zero_times_ok)
2235               {
2236                 /* At least one repetition is required, so insert a
2237                    `dummy_failure_jump' before the initial
2238                    `on_failure_jump' instruction of the loop. This
2239                    effects a skip over that instruction the first time
2240                    we hit that loop.  */
2241                 GET_BUFFER_SPACE (3);
2242                 INSERT_JUMP (dummy_failure_jump, laststart, laststart + 6);
2243                 b += 3;
2244               }
2245             }
2246           break;
2247
2248
2249         case '.':
2250           laststart = b;
2251           BUF_PUSH (anychar);
2252           break;
2253
2254
2255         case '[':
2256           {
2257             boolean had_char_class = false;
2258             unsigned int range_start = 0xffffffff;
2259
2260             if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
2261
2262             /* Ensure that we have enough space to push a charset: the
2263                opcode, the length count, and the bitset; 34 bytes in all.  */
2264             GET_BUFFER_SPACE (34);
2265
2266             laststart = b;
2267
2268             /* We test `*p == '^' twice, instead of using an if
2269                statement, so we only need one BUF_PUSH.  */
2270             BUF_PUSH (*p == '^' ? charset_not : charset);
2271             if (*p == '^')
2272               p++;
2273
2274             /* Remember the first position in the bracket expression.  */
2275             p1 = p;
2276
2277             /* Push the number of bytes in the bitmap.  */
2278             BUF_PUSH ((1 << BYTEWIDTH) / BYTEWIDTH);
2279
2280             /* Clear the whole map.  */
2281             bzero (b, (1 << BYTEWIDTH) / BYTEWIDTH);
2282
2283             /* charset_not matches newline according to a syntax bit.  */
2284             if ((re_opcode_t) b[-2] == charset_not
2285                 && (syntax & RE_HAT_LISTS_NOT_NEWLINE))
2286               SET_LIST_BIT ('\n');
2287
2288             /* Read in characters and ranges, setting map bits.  */
2289             for (;;)
2290               {
2291                 if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
2292
2293                 PATFETCH (c);
2294
2295                 /* \ might escape characters inside [...] and [^...].  */
2296                 if ((syntax & RE_BACKSLASH_ESCAPE_IN_LISTS) && c == '\\')
2297                   {
2298                     if (p == pend) FREE_STACK_RETURN (REG_EESCAPE);
2299
2300                     PATFETCH (c1);
2301                     SET_LIST_BIT (c1);
2302                     range_start = c1;
2303                     continue;
2304                   }
2305
2306                 /* Could be the end of the bracket expression.  If it's
2307                    not (i.e., when the bracket expression is `[]' so
2308                    far), the ']' character bit gets set way below.  */
2309                 if (c == ']' && p != p1 + 1)
2310                   break;
2311
2312                 /* Look ahead to see if it's a range when the last thing
2313                    was a character class.  */
2314                 if (had_char_class && c == '-' && *p != ']')
2315                   FREE_STACK_RETURN (REG_ERANGE);
2316
2317                 /* Look ahead to see if it's a range when the last thing
2318                    was a character: if this is a hyphen not at the
2319                    beginning or the end of a list, then it's the range
2320                    operator.  */
2321                 if (c == '-'
2322                     && !(p - 2 >= pattern && p[-2] == '[')
2323                     && !(p - 3 >= pattern && p[-3] == '[' && p[-2] == '^')
2324                     && *p != ']')
2325                   {
2326                     reg_errcode_t ret
2327                       = compile_range (range_start, &p, pend, translate,
2328                                        syntax, b);
2329                     if (ret != REG_NOERROR) FREE_STACK_RETURN (ret);
2330                     range_start = 0xffffffff;
2331                   }
2332
2333                 else if (p[0] == '-' && p[1] != ']')
2334                   { /* This handles ranges made up of characters only.  */
2335                     reg_errcode_t ret;
2336
2337                     /* Move past the `-'.  */
2338                     PATFETCH (c1);
2339
2340                     ret = compile_range (c, &p, pend, translate, syntax, b);
2341                     if (ret != REG_NOERROR) FREE_STACK_RETURN (ret);
2342                     range_start = 0xffffffff;
2343                   }
2344
2345                 /* See if we're at the beginning of a possible character
2346                    class.  */
2347
2348                 else if (syntax & RE_CHAR_CLASSES && c == '[' && *p == ':')
2349                   { /* Leave room for the null.  */
2350                     char str[CHAR_CLASS_MAX_LENGTH + 1];
2351
2352                     PATFETCH (c);
2353                     c1 = 0;
2354
2355                     /* If pattern is `[[:'.  */
2356                     if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
2357
2358                     for (;;)
2359                       {
2360                         PATFETCH (c);
2361                         if ((c == ':' && *p == ']') || p == pend)
2362                           break;
2363                         if (c1 < CHAR_CLASS_MAX_LENGTH)
2364                           str[c1++] = c;
2365                         else
2366                           /* This is in any case an invalid class name.  */
2367                           str[0] = '\0';
2368                       }
2369                     str[c1] = '\0';
2370
2371                     /* If isn't a word bracketed by `[:' and `:]':
2372                        undo the ending character, the letters, and leave
2373                        the leading `:' and `[' (but set bits for them).  */
2374                     if (c == ':' && *p == ']')
2375                       {
2376 #if defined _LIBC || WIDE_CHAR_SUPPORT
2377                         boolean is_lower = STREQ (str, "lower");
2378                         boolean is_upper = STREQ (str, "upper");
2379                         wctype_t wt;
2380                         int ch;
2381
2382                         wt = IS_CHAR_CLASS (str);
2383                         if (wt == 0)
2384                           FREE_STACK_RETURN (REG_ECTYPE);
2385
2386                         /* Throw away the ] at the end of the character
2387                            class.  */
2388                         PATFETCH (c);
2389
2390                         if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
2391
2392                         for (ch = 0; ch < 1 << BYTEWIDTH; ++ch)
2393                           {
2394 # ifdef _LIBC
2395                             if (__iswctype (__btowc (ch), wt))
2396                               SET_LIST_BIT (ch);
2397 # else
2398                             if (iswctype (btowc (ch), wt))
2399                               SET_LIST_BIT (ch);
2400 # endif
2401
2402                             if (translate && (is_upper || is_lower)
2403                                 && (ISUPPER (ch) || ISLOWER (ch)))
2404                               SET_LIST_BIT (ch);
2405                           }
2406
2407                         had_char_class = true;
2408 #else
2409                         int ch;
2410                         boolean is_alnum = STREQ (str, "alnum");
2411                         boolean is_alpha = STREQ (str, "alpha");
2412                         boolean is_blank = STREQ (str, "blank");
2413                         boolean is_cntrl = STREQ (str, "cntrl");
2414                         boolean is_digit = STREQ (str, "digit");
2415                         boolean is_graph = STREQ (str, "graph");
2416                         boolean is_lower = STREQ (str, "lower");
2417                         boolean is_print = STREQ (str, "print");
2418                         boolean is_punct = STREQ (str, "punct");
2419                         boolean is_space = STREQ (str, "space");
2420                         boolean is_upper = STREQ (str, "upper");
2421                         boolean is_xdigit = STREQ (str, "xdigit");
2422
2423                         if (!IS_CHAR_CLASS (str))
2424                           FREE_STACK_RETURN (REG_ECTYPE);
2425
2426                         /* Throw away the ] at the end of the character
2427                            class.  */
2428                         PATFETCH (c);
2429
2430                         if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
2431
2432                         for (ch = 0; ch < 1 << BYTEWIDTH; ch++)
2433                           {
2434                             /* This was split into 3 if's to
2435                                avoid an arbitrary limit in some compiler.  */
2436                             if (   (is_alnum  && ISALNUM (ch))
2437                                 || (is_alpha  && ISALPHA (ch))
2438                                 || (is_blank  && ISBLANK (ch))
2439                                 || (is_cntrl  && ISCNTRL (ch)))
2440                               SET_LIST_BIT (ch);
2441                             if (   (is_digit  && ISDIGIT (ch))
2442                                 || (is_graph  && ISGRAPH (ch))
2443                                 || (is_lower  && ISLOWER (ch))
2444                                 || (is_print  && ISPRINT (ch)))
2445                               SET_LIST_BIT (ch);
2446                             if (   (is_punct  && ISPUNCT (ch))
2447                                 || (is_space  && ISSPACE (ch))
2448                                 || (is_upper  && ISUPPER (ch))
2449                                 || (is_xdigit && ISXDIGIT (ch)))
2450                               SET_LIST_BIT (ch);
2451                             if (   translate && (is_upper || is_lower)
2452                                 && (ISUPPER (ch) || ISLOWER (ch)))
2453                               SET_LIST_BIT (ch);
2454                           }
2455                         had_char_class = true;
2456 #endif  /* libc || wctype.h */
2457                       }
2458                     else
2459                       {
2460                         c1++;
2461                         while (c1--)
2462                           PATUNFETCH;
2463                         SET_LIST_BIT ('[');
2464                         SET_LIST_BIT (':');
2465                         range_start = ':';
2466                         had_char_class = false;
2467                       }
2468                   }
2469                 else if (syntax & RE_CHAR_CLASSES && c == '[' && *p == '=')
2470                   {
2471                     unsigned char str[MB_LEN_MAX + 1];
2472 #ifdef _LIBC
2473                     uint32_t nrules =
2474                       _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
2475 #endif
2476
2477                     PATFETCH (c);
2478                     c1 = 0;
2479
2480                     /* If pattern is `[[='.  */
2481                     if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
2482
2483                     for (;;)
2484                       {
2485                         PATFETCH (c);
2486                         if ((c == '=' && *p == ']') || p == pend)
2487                           break;
2488                         if (c1 < MB_LEN_MAX)
2489                           str[c1++] = c;
2490                         else
2491                           /* This is in any case an invalid class name.  */
2492                           str[0] = '\0';
2493                       }
2494                     str[c1] = '\0';
2495
2496                     if (c == '=' && *p == ']' && str[0] != '\0')
2497                       {
2498                         /* If we have no collation data we use the default
2499                            collation in which each character is in a class
2500                            by itself.  It also means that ASCII is the
2501                            character set and therefore we cannot have character
2502                            with more than one byte in the multibyte
2503                            representation.  */
2504 #ifdef _LIBC
2505                         if (nrules == 0)
2506 #endif
2507                           {
2508                             if (c1 != 1)
2509                               FREE_STACK_RETURN (REG_ECOLLATE);
2510
2511                             /* Throw away the ] at the end of the equivalence
2512                                class.  */
2513                             PATFETCH (c);
2514
2515                             /* Set the bit for the character.  */
2516                             SET_LIST_BIT (str[0]);
2517                           }
2518 #ifdef _LIBC
2519                         else
2520                           {
2521                             /* Try to match the byte sequence in `str' against
2522                                those known to the collate implementation.
2523                                First find out whether the bytes in `str' are
2524                                actually from exactly one character.  */
2525                             const int32_t *table;
2526                             const unsigned char *weights;
2527                             const unsigned char *extra;
2528                             const int32_t *indirect;
2529                             int32_t idx;
2530                             const unsigned char *cp = str;
2531                             int ch;
2532
2533                             /* This #include defines a local function!  */
2534 # include <locale/weight.h>
2535
2536                             table = (const int32_t *)
2537                               _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB);
2538                             weights = (const unsigned char *)
2539                               _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTMB);
2540                             extra = (const unsigned char *)
2541                               _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB);
2542                             indirect = (const int32_t *)
2543                               _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB);
2544
2545                             idx = findidx (&cp);
2546                             if (idx == 0 || cp < str + c1)
2547                               /* This is no valid character.  */
2548                               FREE_STACK_RETURN (REG_ECOLLATE);
2549
2550                             /* Throw away the ] at the end of the equivalence
2551                                class.  */
2552                             PATFETCH (c);
2553
2554                             /* Now we have to go throught the whole table
2555                                and find all characters which have the same
2556                                first level weight.
2557
2558                                XXX Note that this is not entirely correct.
2559                                we would have to match multibyte sequences
2560                                but this is not possible with the current
2561                                implementation.  */
2562                             for (ch = 1; ch < 256; ++ch)
2563                               /* XXX This test would have to be changed if we
2564                                  would allow matching multibyte sequences.  */
2565                               if (table[ch] > 0)
2566                                 {
2567                                   int32_t idx2 = table[ch];
2568                                   size_t len = weights[idx2];
2569
2570                                   /* Test whether the lenghts match.  */
2571                                   if (weights[idx] == len)
2572                                     {
2573                                       /* They do.  New compare the bytes of
2574                                          the weight.  */
2575                                       size_t cnt = 0;
2576
2577                                       while (cnt < len
2578                                              && (weights[idx + 1 + cnt]
2579                                                  == weights[idx2 + 1 + cnt]))
2580                                         ++len;
2581
2582                                       if (cnt == len)
2583                                         /* They match.  Mark the character as
2584                                            acceptable.  */
2585                                         SET_LIST_BIT (ch);
2586                                     }
2587                                 }
2588                           }
2589 #endif
2590                         had_char_class = true;
2591                       }
2592                     else
2593                       {
2594                         c1++;
2595                         while (c1--)
2596                           PATUNFETCH;
2597                         SET_LIST_BIT ('[');
2598                         SET_LIST_BIT ('=');
2599                         range_start = '=';
2600                         had_char_class = false;
2601                       }
2602                   }
2603                 else if (syntax & RE_CHAR_CLASSES && c == '[' && *p == '.')
2604                   {
2605                     unsigned char str[128];     /* Should be large enough.  */
2606 #ifdef _LIBC
2607                     uint32_t nrules =
2608                       _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
2609 #endif
2610
2611                     PATFETCH (c);
2612                     c1 = 0;
2613
2614                     /* If pattern is `[[='.  */
2615                     if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
2616
2617                     for (;;)
2618                       {
2619                         PATFETCH (c);
2620                         if ((c == '.' && *p == ']') || p == pend)
2621                           break;
2622                         if (c1 < sizeof (str))
2623                           str[c1++] = c;
2624                         else
2625                           /* This is in any case an invalid class name.  */
2626                           str[0] = '\0';
2627                       }
2628                     str[c1] = '\0';
2629
2630                     if (c == '.' && *p == ']' && str[0] != '\0')
2631                       {
2632                         /* If we have no collation data we use the default
2633                            collation in which each character is the name
2634                            for its own class which contains only the one
2635                            character.  It also means that ASCII is the
2636                            character set and therefore we cannot have character
2637                            with more than one byte in the multibyte
2638                            representation.  */
2639 #ifdef _LIBC
2640                         if (nrules == 0)
2641 #endif
2642                           {
2643                             if (c1 != 1)
2644                               FREE_STACK_RETURN (REG_ECOLLATE);
2645
2646                             /* Throw away the ] at the end of the equivalence
2647                                class.  */
2648                             PATFETCH (c);
2649
2650                             /* Set the bit for the character.  */
2651                             SET_LIST_BIT (str[0]);
2652                             range_start = ((const unsigned char *) str)[0];
2653                           }
2654 #ifdef _LIBC
2655                         else
2656                           {
2657                             /* Try to match the byte sequence in `str' against
2658                                those known to the collate implementation.
2659                                First find out whether the bytes in `str' are
2660                                actually from exactly one character.  */
2661                             int32_t table_size;
2662                             const int32_t *symb_table;
2663                             const unsigned char *extra;
2664                             int32_t idx;
2665                             int32_t elem;
2666                             int32_t second;
2667                             int32_t hash;
2668
2669                             table_size =
2670                               _NL_CURRENT_WORD (LC_COLLATE,
2671                                                 _NL_COLLATE_SYMB_HASH_SIZEMB);
2672                             symb_table = (const int32_t *)
2673                               _NL_CURRENT (LC_COLLATE,
2674                                            _NL_COLLATE_SYMB_TABLEMB);
2675                             extra = (const unsigned char *)
2676                               _NL_CURRENT (LC_COLLATE,
2677                                            _NL_COLLATE_SYMB_EXTRAMB);
2678
2679                             /* Locate the character in the hashing table.  */
2680                             hash = elem_hash (str, c1);
2681
2682                             idx = 0;
2683                             elem = hash % table_size;
2684                             second = hash % (table_size - 2);
2685                             while (symb_table[2 * elem] != 0)
2686                               {
2687                                 /* First compare the hashing value.  */
2688                                 if (symb_table[2 * elem] == hash
2689                                     && c1 == extra[symb_table[2 * elem + 1]]
2690                                     && memcmp (str,
2691                                                &extra[symb_table[2 * elem + 1]
2692                                                      + 1],
2693                                                c1) == 0)
2694                                   {
2695                                     /* Yep, this is the entry.  */
2696                                     idx = symb_table[2 * elem + 1];
2697                                     idx += 1 + extra[idx];
2698                                     break;
2699                                   }
2700
2701                                 /* Next entry.  */
2702                                 elem += second;
2703                               }
2704
2705                             if (symb_table[2 * elem] == 0)
2706                               /* This is no valid character.  */
2707                               FREE_STACK_RETURN (REG_ECOLLATE);
2708
2709                             /* Throw away the ] at the end of the equivalence
2710                                class.  */
2711                             PATFETCH (c);
2712
2713                             /* Now add the multibyte character(s) we found
2714                                to the accept list.
2715
2716                                XXX Note that this is not entirely correct.
2717                                we would have to match multibyte sequences
2718                                but this is not possible with the current
2719                                implementation.  Also, we have to match
2720                                collating symbols, which expand to more than
2721                                one file, as a whole and not allow the
2722                                individual bytes.  */
2723                             c1 = extra[idx++];
2724                             if (c1 == 1)
2725                               range_start = extra[idx];
2726                             while (c1-- > 0)
2727                               SET_LIST_BIT (extra[idx++]);
2728                           }
2729 #endif
2730                         had_char_class = false;
2731                       }
2732                     else
2733                       {
2734                         c1++;
2735                         while (c1--)
2736                           PATUNFETCH;
2737                         SET_LIST_BIT ('[');
2738                         SET_LIST_BIT ('.');
2739                         range_start = '.';
2740                         had_char_class = false;
2741                       }
2742                   }
2743                 else
2744                   {
2745                     had_char_class = false;
2746                     SET_LIST_BIT (c);
2747                     range_start = c;
2748                   }
2749               }
2750
2751             /* Discard any (non)matching list bytes that are all 0 at the
2752                end of the map.  Decrease the map-length byte too.  */
2753             while ((int) b[-1] > 0 && b[b[-1] - 1] == 0)
2754               b[-1]--;
2755             b += b[-1];
2756           }
2757           break;
2758
2759
2760         case '(':
2761           if (syntax & RE_NO_BK_PARENS)
2762             goto handle_open;
2763           else
2764             goto normal_char;
2765
2766
2767         case ')':
2768           if (syntax & RE_NO_BK_PARENS)
2769             goto handle_close;
2770           else
2771             goto normal_char;
2772
2773
2774         case '\n':
2775           if (syntax & RE_NEWLINE_ALT)
2776             goto handle_alt;
2777           else
2778             goto normal_char;
2779
2780
2781         case '|':
2782           if (syntax & RE_NO_BK_VBAR)
2783             goto handle_alt;
2784           else
2785             goto normal_char;
2786
2787
2788         case '{':
2789            if (syntax & RE_INTERVALS && syntax & RE_NO_BK_BRACES)
2790              goto handle_interval;
2791            else
2792              goto normal_char;
2793
2794
2795         case '\\':
2796           if (p == pend) FREE_STACK_RETURN (REG_EESCAPE);
2797
2798           /* Do not translate the character after the \, so that we can
2799              distinguish, e.g., \B from \b, even if we normally would
2800              translate, e.g., B to b.  */
2801           PATFETCH_RAW (c);
2802
2803           switch (c)
2804             {
2805             case '(':
2806               if (syntax & RE_NO_BK_PARENS)
2807                 goto normal_backslash;
2808
2809             handle_open:
2810               bufp->re_nsub++;
2811               regnum++;
2812
2813               if (COMPILE_STACK_FULL)
2814                 {
2815                   RETALLOC (compile_stack.stack, compile_stack.size << 1,
2816                             compile_stack_elt_t);
2817                   if (compile_stack.stack == NULL) return REG_ESPACE;
2818
2819                   compile_stack.size <<= 1;
2820                 }
2821
2822               /* These are the values to restore when we hit end of this
2823                  group.  They are all relative offsets, so that if the
2824                  whole pattern moves because of realloc, they will still
2825                  be valid.  */
2826               COMPILE_STACK_TOP.begalt_offset = begalt - bufp->buffer;
2827               COMPILE_STACK_TOP.fixup_alt_jump
2828                 = fixup_alt_jump ? fixup_alt_jump - bufp->buffer + 1 : 0;
2829               COMPILE_STACK_TOP.laststart_offset = b - bufp->buffer;
2830               COMPILE_STACK_TOP.regnum = regnum;
2831
2832               /* We will eventually replace the 0 with the number of
2833                  groups inner to this one.  But do not push a
2834                  start_memory for groups beyond the last one we can
2835                  represent in the compiled pattern.  */
2836               if (regnum <= MAX_REGNUM)
2837                 {
2838                   COMPILE_STACK_TOP.inner_group_offset = b - bufp->buffer + 2;
2839                   BUF_PUSH_3 (start_memory, regnum, 0);
2840                 }
2841
2842               compile_stack.avail++;
2843
2844               fixup_alt_jump = 0;
2845               laststart = 0;
2846               begalt = b;
2847               /* If we've reached MAX_REGNUM groups, then this open
2848                  won't actually generate any code, so we'll have to
2849                  clear pending_exact explicitly.  */
2850               pending_exact = 0;
2851               break;
2852
2853
2854             case ')':
2855               if (syntax & RE_NO_BK_PARENS) goto normal_backslash;
2856
2857               if (COMPILE_STACK_EMPTY)
2858                 {
2859                   if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD)
2860                     goto normal_backslash;
2861                   else
2862                     FREE_STACK_RETURN (REG_ERPAREN);
2863                 }
2864
2865             handle_close:
2866               if (fixup_alt_jump)
2867                 { /* Push a dummy failure point at the end of the
2868                      alternative for a possible future
2869                      `pop_failure_jump' to pop.  See comments at
2870                      `push_dummy_failure' in `re_match_2'.  */
2871                   BUF_PUSH (push_dummy_failure);
2872
2873                   /* We allocated space for this jump when we assigned
2874                      to `fixup_alt_jump', in the `handle_alt' case below.  */
2875                   STORE_JUMP (jump_past_alt, fixup_alt_jump, b - 1);
2876                 }
2877
2878               /* See similar code for backslashed left paren above.  */
2879               if (COMPILE_STACK_EMPTY)
2880                 {
2881                   if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD)
2882                     goto normal_char;
2883                   else
2884                     FREE_STACK_RETURN (REG_ERPAREN);
2885                 }
2886
2887               /* Since we just checked for an empty stack above, this
2888                  ``can't happen''.  */
2889               assert (compile_stack.avail != 0);
2890               {
2891                 /* We don't just want to restore into `regnum', because
2892                    later groups should continue to be numbered higher,
2893                    as in `(ab)c(de)' -- the second group is #2.  */
2894                 regnum_t this_group_regnum;
2895
2896                 compile_stack.avail--;
2897                 begalt = bufp->buffer + COMPILE_STACK_TOP.begalt_offset;
2898                 fixup_alt_jump
2899                   = COMPILE_STACK_TOP.fixup_alt_jump
2900                     ? bufp->buffer + COMPILE_STACK_TOP.fixup_alt_jump - 1
2901                     : 0;
2902                 laststart = bufp->buffer + COMPILE_STACK_TOP.laststart_offset;
2903                 this_group_regnum = COMPILE_STACK_TOP.regnum;
2904                 /* If we've reached MAX_REGNUM groups, then this open
2905                    won't actually generate any code, so we'll have to
2906                    clear pending_exact explicitly.  */
2907                 pending_exact = 0;
2908
2909                 /* We're at the end of the group, so now we know how many
2910                    groups were inside this one.  */
2911                 if (this_group_regnum <= MAX_REGNUM)
2912                   {
2913                     unsigned char *inner_group_loc
2914                       = bufp->buffer + COMPILE_STACK_TOP.inner_group_offset;
2915
2916                     *inner_group_loc = regnum - this_group_regnum;
2917                     BUF_PUSH_3 (stop_memory, this_group_regnum,
2918                                 regnum - this_group_regnum);
2919                   }
2920               }
2921               break;
2922
2923
2924             case '|':                                   /* `\|'.  */
2925               if (syntax & RE_LIMITED_OPS || syntax & RE_NO_BK_VBAR)
2926                 goto normal_backslash;
2927             handle_alt:
2928               if (syntax & RE_LIMITED_OPS)
2929                 goto normal_char;
2930
2931               /* Insert before the previous alternative a jump which
2932                  jumps to this alternative if the former fails.  */
2933               GET_BUFFER_SPACE (3);
2934               INSERT_JUMP (on_failure_jump, begalt, b + 6);
2935               pending_exact = 0;
2936               b += 3;
2937
2938               /* The alternative before this one has a jump after it
2939                  which gets executed if it gets matched.  Adjust that
2940                  jump so it will jump to this alternative's analogous
2941                  jump (put in below, which in turn will jump to the next
2942                  (if any) alternative's such jump, etc.).  The last such
2943                  jump jumps to the correct final destination.  A picture:
2944                           _____ _____
2945                           |   | |   |
2946                           |   v |   v
2947                          a | b   | c
2948
2949                  If we are at `b', then fixup_alt_jump right now points to a
2950                  three-byte space after `a'.  We'll put in the jump, set
2951                  fixup_alt_jump to right after `b', and leave behind three
2952                  bytes which we'll fill in when we get to after `c'.  */
2953
2954               if (fixup_alt_jump)
2955                 STORE_JUMP (jump_past_alt, fixup_alt_jump, b);
2956
2957               /* Mark and leave space for a jump after this alternative,
2958                  to be filled in later either by next alternative or
2959                  when know we're at the end of a series of alternatives.  */
2960               fixup_alt_jump = b;
2961               GET_BUFFER_SPACE (3);
2962               b += 3;
2963
2964               laststart = 0;
2965               begalt = b;
2966               break;
2967
2968
2969             case '{':
2970               /* If \{ is a literal.  */
2971               if (!(syntax & RE_INTERVALS)
2972                      /* If we're at `\{' and it's not the open-interval
2973                         operator.  */
2974                   || (syntax & RE_NO_BK_BRACES))
2975                 goto normal_backslash;
2976
2977             handle_interval:
2978               {
2979                 /* If got here, then the syntax allows intervals.  */
2980
2981                 /* At least (most) this many matches must be made.  */
2982                 int lower_bound = -1, upper_bound = -1;
2983
2984                 beg_interval = p - 1;
2985
2986                 if (p == pend)
2987                   {
2988                     if (!(syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES))
2989                       goto unfetch_interval;
2990                     else
2991                       FREE_STACK_RETURN (REG_EBRACE);
2992                   }
2993
2994                 GET_UNSIGNED_NUMBER (lower_bound);
2995
2996                 if (c == ',')
2997                   {
2998                     GET_UNSIGNED_NUMBER (upper_bound);
2999                     if ((!(syntax & RE_NO_BK_BRACES) && c != '\\')
3000                         || ((syntax & RE_NO_BK_BRACES) && c != '}'))
3001                       FREE_STACK_RETURN (REG_BADBR);
3002
3003                     if (upper_bound < 0)
3004                       upper_bound = RE_DUP_MAX;
3005                   }
3006                 else
3007                   /* Interval such as `{1}' => match exactly once. */
3008                   upper_bound = lower_bound;
3009
3010                 if (lower_bound < 0 || upper_bound > RE_DUP_MAX
3011                     || lower_bound > upper_bound)
3012                   {
3013                     if (!(syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES))
3014                       goto unfetch_interval;
3015                     else
3016                       FREE_STACK_RETURN (REG_BADBR);
3017                   }
3018
3019                 if (!(syntax & RE_NO_BK_BRACES))
3020                   {
3021                     if (c != '\\') FREE_STACK_RETURN (REG_EBRACE);
3022
3023                     PATFETCH (c);
3024                   }
3025
3026                 if (c != '}')
3027                   {
3028                     if (!(syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES))
3029                       goto unfetch_interval;
3030                     else
3031                       FREE_STACK_RETURN (REG_BADBR);
3032                   }
3033
3034                 /* We just parsed a valid interval.  */
3035
3036                 /* If it's invalid to have no preceding re.  */
3037                 if (!laststart)
3038                   {
3039                     if (syntax & RE_CONTEXT_INVALID_OPS)
3040                       FREE_STACK_RETURN (REG_BADRPT);
3041                     else if (syntax & RE_CONTEXT_INDEP_OPS)
3042                       laststart = b;
3043                     else
3044                       goto unfetch_interval;
3045                   }
3046
3047                 /* If the upper bound is zero, don't want to succeed at
3048                    all; jump from `laststart' to `b + 3', which will be
3049                    the end of the buffer after we insert the jump.  */
3050                  if (upper_bound == 0)
3051                    {
3052                      GET_BUFFER_SPACE (3);
3053                      INSERT_JUMP (jump, laststart, b + 3);
3054                      b += 3;
3055                    }
3056
3057                  /* Otherwise, we have a nontrivial interval.  When
3058                     we're all done, the pattern will look like:
3059                       set_number_at <jump count> <upper bound>
3060                       set_number_at <succeed_n count> <lower bound>
3061                       succeed_n <after jump addr> <succeed_n count>
3062                       <body of loop>
3063                       jump_n <succeed_n addr> <jump count>
3064                     (The upper bound and `jump_n' are omitted if
3065                     `upper_bound' is 1, though.)  */
3066                  else
3067                    { /* If the upper bound is > 1, we need to insert
3068                         more at the end of the loop.  */
3069                      unsigned nbytes = 10 + (upper_bound > 1) * 10;
3070
3071                      GET_BUFFER_SPACE (nbytes);
3072
3073                      /* Initialize lower bound of the `succeed_n', even
3074                         though it will be set during matching by its
3075                         attendant `set_number_at' (inserted next),
3076                         because `re_compile_fastmap' needs to know.
3077                         Jump to the `jump_n' we might insert below.  */
3078                      INSERT_JUMP2 (succeed_n, laststart,
3079                                    b + 5 + (upper_bound > 1) * 5,
3080                                    lower_bound);
3081                      b += 5;
3082
3083                      /* Code to initialize the lower bound.  Insert
3084                         before the `succeed_n'.  The `5' is the last two
3085                         bytes of this `set_number_at', plus 3 bytes of
3086                         the following `succeed_n'.  */
3087                      insert_op2 (set_number_at, laststart, 5, lower_bound, b);
3088                      b += 5;
3089
3090                      if (upper_bound > 1)
3091                        { /* More than one repetition is allowed, so
3092                             append a backward jump to the `succeed_n'
3093                             that starts this interval.
3094
3095                             When we've reached this during matching,
3096                             we'll have matched the interval once, so
3097                             jump back only `upper_bound - 1' times.  */
3098                          STORE_JUMP2 (jump_n, b, laststart + 5,
3099                                       upper_bound - 1);
3100                          b += 5;
3101
3102                          /* The location we want to set is the second
3103                             parameter of the `jump_n'; that is `b-2' as
3104                             an absolute address.  `laststart' will be
3105                             the `set_number_at' we're about to insert;
3106                             `laststart+3' the number to set, the source
3107                             for the relative address.  But we are
3108                             inserting into the middle of the pattern --
3109                             so everything is getting moved up by 5.
3110                             Conclusion: (b - 2) - (laststart + 3) + 5,
3111                             i.e., b - laststart.
3112
3113                             We insert this at the beginning of the loop
3114                             so that if we fail during matching, we'll
3115                             reinitialize the bounds.  */
3116                          insert_op2 (set_number_at, laststart, b - laststart,
3117                                      upper_bound - 1, b);
3118                          b += 5;
3119                        }
3120                    }
3121                 pending_exact = 0;
3122                 beg_interval = NULL;
3123               }
3124               break;
3125
3126             unfetch_interval:
3127               /* If an invalid interval, match the characters as literals.  */
3128                assert (beg_interval);
3129                p = beg_interval;
3130                beg_interval = NULL;
3131
3132                /* normal_char and normal_backslash need `c'.  */
3133                PATFETCH (c);
3134
3135                if (!(syntax & RE_NO_BK_BRACES))
3136                  {
3137                    if (p > pattern  &&  p[-1] == '\\')
3138                      goto normal_backslash;
3139                  }
3140                goto normal_char;
3141
3142 #ifdef emacs
3143             /* There is no way to specify the before_dot and after_dot
3144                operators.  rms says this is ok.  --karl  */
3145             case '=':
3146               BUF_PUSH (at_dot);
3147               break;
3148
3149             case 's':
3150               laststart = b;
3151               PATFETCH (c);
3152               BUF_PUSH_2 (syntaxspec, syntax_spec_code[c]);
3153               break;
3154
3155             case 'S':
3156               laststart = b;
3157               PATFETCH (c);
3158               BUF_PUSH_2 (notsyntaxspec, syntax_spec_code[c]);
3159               break;
3160 #endif /* emacs */
3161
3162
3163             case 'w':
3164               if (syntax & RE_NO_GNU_OPS)
3165                 goto normal_char;
3166               laststart = b;
3167               BUF_PUSH (wordchar);
3168               break;
3169
3170
3171             case 'W':
3172               if (syntax & RE_NO_GNU_OPS)
3173                 goto normal_char;
3174               laststart = b;
3175               BUF_PUSH (notwordchar);
3176               break;
3177
3178
3179             case '<':
3180               if (syntax & RE_NO_GNU_OPS)
3181                 goto normal_char;
3182               BUF_PUSH (wordbeg);
3183               break;
3184
3185             case '>':
3186               if (syntax & RE_NO_GNU_OPS)
3187                 goto normal_char;
3188               BUF_PUSH (wordend);
3189               break;
3190
3191             case 'b':
3192               if (syntax & RE_NO_GNU_OPS)
3193                 goto normal_char;
3194               BUF_PUSH (wordbound);
3195               break;
3196
3197             case 'B':
3198               if (syntax & RE_NO_GNU_OPS)
3199                 goto normal_char;
3200               BUF_PUSH (notwordbound);
3201               break;
3202
3203             case '`':
3204               if (syntax & RE_NO_GNU_OPS)
3205                 goto normal_char;
3206               BUF_PUSH (begbuf);
3207               break;
3208
3209             case '\'':
3210               if (syntax & RE_NO_GNU_OPS)
3211                 goto normal_char;
3212               BUF_PUSH (endbuf);
3213               break;
3214
3215             case '1': case '2': case '3': case '4': case '5':
3216             case '6': case '7': case '8': case '9':
3217               if (syntax & RE_NO_BK_REFS)
3218                 goto normal_char;
3219
3220               c1 = c - '0';
3221
3222               if (c1 > regnum)
3223                 FREE_STACK_RETURN (REG_ESUBREG);
3224
3225               /* Can't back reference to a subexpression if inside of it.  */
3226               if (group_in_compile_stack (compile_stack, (regnum_t) c1))
3227                 goto normal_char;
3228
3229               laststart = b;
3230               BUF_PUSH_2 (duplicate, c1);
3231               break;
3232
3233
3234             case '+':
3235             case '?':
3236               if (syntax & RE_BK_PLUS_QM)
3237                 goto handle_plus;
3238               else
3239                 goto normal_backslash;
3240
3241             default:
3242             normal_backslash:
3243               /* You might think it would be useful for \ to mean
3244                  not to translate; but if we don't translate it
3245                  it will never match anything.  */
3246               c = TRANSLATE (c);
3247               goto normal_char;
3248             }
3249           break;
3250
3251
3252         default:
3253         /* Expects the character in `c'.  */
3254         normal_char:
3255               /* If no exactn currently being built.  */
3256           if (!pending_exact
3257
3258               /* If last exactn not at current position.  */
3259               || pending_exact + *pending_exact + 1 != b
3260
3261               /* We have only one byte following the exactn for the count.  */
3262               || *pending_exact == (1 << BYTEWIDTH) - 1
3263
3264               /* If followed by a repetition operator.  */
3265               || *p == '*' || *p == '^'
3266               || ((syntax & RE_BK_PLUS_QM)
3267                   ? *p == '\\' && (p[1] == '+' || p[1] == '?')
3268                   : (*p == '+' || *p == '?'))
3269               || ((syntax & RE_INTERVALS)
3270                   && ((syntax & RE_NO_BK_BRACES)
3271                       ? *p == '{'
3272                       : (p[0] == '\\' && p[1] == '{'))))
3273             {
3274               /* Start building a new exactn.  */
3275
3276               laststart = b;
3277
3278               BUF_PUSH_2 (exactn, 0);
3279               pending_exact = b - 1;
3280             }
3281
3282           BUF_PUSH (c);
3283           (*pending_exact)++;
3284           break;
3285         } /* switch (c) */
3286     } /* while p != pend */
3287
3288
3289   /* Through the pattern now.  */
3290
3291   if (fixup_alt_jump)
3292     STORE_JUMP (jump_past_alt, fixup_alt_jump, b);
3293
3294   if (!COMPILE_STACK_EMPTY)
3295     FREE_STACK_RETURN (REG_EPAREN);
3296
3297   /* If we don't want backtracking, force success
3298      the first time we reach the end of the compiled pattern.  */
3299   if (syntax & RE_NO_POSIX_BACKTRACKING)
3300     BUF_PUSH (succeed);
3301
3302   free (compile_stack.stack);
3303
3304   /* We have succeeded; set the length of the buffer.  */
3305   bufp->used = b - bufp->buffer;
3306
3307 #ifdef DEBUG
3308   if (debug)
3309     {
3310       DEBUG_PRINT1 ("\nCompiled pattern: \n");
3311       print_compiled_pattern (bufp);
3312     }
3313 #endif /* DEBUG */
3314
3315 #ifndef MATCH_MAY_ALLOCATE
3316   /* Initialize the failure stack to the largest possible stack.  This
3317      isn't necessary unless we're trying to avoid calling alloca in
3318      the search and match routines.  */
3319   {
3320     int num_regs = bufp->re_nsub + 1;
3321
3322     /* Since DOUBLE_FAIL_STACK refuses to double only if the current size
3323        is strictly greater than re_max_failures, the largest possible stack
3324        is 2 * re_max_failures failure points.  */
3325     if (fail_stack.size < (2 * re_max_failures * MAX_FAILURE_ITEMS))
3326       {
3327         fail_stack.size = (2 * re_max_failures * MAX_FAILURE_ITEMS);
3328
3329 # ifdef emacs
3330         if (! fail_stack.stack)
3331           fail_stack.stack
3332             = (fail_stack_elt_t *) xmalloc (fail_stack.size
3333                                             * sizeof (fail_stack_elt_t));
3334         else
3335           fail_stack.stack
3336             = (fail_stack_elt_t *) xrealloc (fail_stack.stack,
3337                                              (fail_stack.size
3338                                               * sizeof (fail_stack_elt_t)));
3339 # else /* not emacs */
3340         if (! fail_stack.stack)
3341           fail_stack.stack
3342             = (fail_stack_elt_t *) malloc (fail_stack.size
3343                                            * sizeof (fail_stack_elt_t));
3344         else
3345           fail_stack.stack
3346             = (fail_stack_elt_t *) realloc (fail_stack.stack,
3347                                             (fail_stack.size
3348                                              * sizeof (fail_stack_elt_t)));
3349 # endif /* not emacs */
3350       }
3351
3352     regex_grow_registers (num_regs);
3353   }
3354 #endif /* not MATCH_MAY_ALLOCATE */
3355
3356   return REG_NOERROR;
3357 } /* regex_compile */
3358 \f
3359 /* Subroutines for `regex_compile'.  */
3360
3361 /* Store OP at LOC followed by two-byte integer parameter ARG.  */
3362
3363 static void
3364 store_op1 (op, loc, arg)
3365     re_opcode_t op;
3366     unsigned char *loc;
3367     int arg;
3368 {
3369   *loc = (unsigned char) op;
3370   STORE_NUMBER (loc + 1, arg);
3371 }
3372
3373
3374 /* Like `store_op1', but for two two-byte parameters ARG1 and ARG2.  */
3375
3376 static void
3377 store_op2 (op, loc, arg1, arg2)
3378     re_opcode_t op;
3379     unsigned char *loc;
3380     int arg1, arg2;
3381 {
3382   *loc = (unsigned char) op;
3383   STORE_NUMBER (loc + 1, arg1);
3384   STORE_NUMBER (loc + 3, arg2);
3385 }
3386
3387
3388 /* Copy the bytes from LOC to END to open up three bytes of space at LOC
3389    for OP followed by two-byte integer parameter ARG.  */
3390
3391 static void
3392 insert_op1 (op, loc, arg, end)
3393     re_opcode_t op;
3394     unsigned char *loc;
3395     int arg;
3396     unsigned char *end;
3397 {
3398   register unsigned char *pfrom = end;
3399   register unsigned char *pto = end + 3;
3400
3401   while (pfrom != loc)
3402     *--pto = *--pfrom;
3403
3404   store_op1 (op, loc, arg);
3405 }
3406
3407
3408 /* Like `insert_op1', but for two two-byte parameters ARG1 and ARG2.  */
3409
3410 static void
3411 insert_op2 (op, loc, arg1, arg2, end)
3412     re_opcode_t op;
3413     unsigned char *loc;
3414     int arg1, arg2;
3415     unsigned char *end;
3416 {
3417   register unsigned char *pfrom = end;
3418   register unsigned char *pto = end + 5;
3419
3420   while (pfrom != loc)
3421     *--pto = *--pfrom;
3422
3423   store_op2 (op, loc, arg1, arg2);
3424 }
3425
3426
3427 /* P points to just after a ^ in PATTERN.  Return true if that ^ comes
3428    after an alternative or a begin-subexpression.  We assume there is at
3429    least one character before the ^.  */
3430
3431 static boolean
3432 at_begline_loc_p (pattern, p, syntax)
3433     const char *pattern, *p;
3434     reg_syntax_t syntax;
3435 {
3436   const char *prev = p - 2;
3437   boolean prev_prev_backslash = prev > pattern && prev[-1] == '\\';
3438
3439   return
3440        /* After a subexpression?  */
3441        (*prev == '(' && (syntax & RE_NO_BK_PARENS || prev_prev_backslash))
3442        /* After an alternative?  */
3443     || (*prev == '|' && (syntax & RE_NO_BK_VBAR || prev_prev_backslash));
3444 }
3445
3446
3447 /* The dual of at_begline_loc_p.  This one is for $.  We assume there is
3448    at least one character after the $, i.e., `P < PEND'.  */
3449
3450 static boolean
3451 at_endline_loc_p (p, pend, syntax)
3452     const char *p, *pend;
3453     reg_syntax_t syntax;
3454 {
3455   const char *next = p;
3456   boolean next_backslash = *next == '\\';
3457   const char *next_next = p + 1 < pend ? p + 1 : 0;
3458
3459   return
3460        /* Before a subexpression?  */
3461        (syntax & RE_NO_BK_PARENS ? *next == ')'
3462         : next_backslash && next_next && *next_next == ')')
3463        /* Before an alternative?  */
3464     || (syntax & RE_NO_BK_VBAR ? *next == '|'
3465         : next_backslash && next_next && *next_next == '|');
3466 }
3467
3468
3469 /* Returns true if REGNUM is in one of COMPILE_STACK's elements and
3470    false if it's not.  */
3471
3472 static boolean
3473 group_in_compile_stack (compile_stack, regnum)
3474     compile_stack_type compile_stack;
3475     regnum_t regnum;
3476 {
3477   int this_element;
3478
3479   for (this_element = compile_stack.avail - 1;
3480        this_element >= 0;
3481        this_element--)
3482     if (compile_stack.stack[this_element].regnum == regnum)
3483       return true;
3484
3485   return false;
3486 }
3487
3488
3489 /* Read the ending character of a range (in a bracket expression) from the
3490    uncompiled pattern *P_PTR (which ends at PEND).  We assume the
3491    starting character is in `P[-2]'.  (`P[-1]' is the character `-'.)
3492    Then we set the translation of all bits between the starting and
3493    ending characters (inclusive) in the compiled pattern B.
3494
3495    Return an error code.
3496
3497    We use these short variable names so we can use the same macros as
3498    `regex_compile' itself.  */
3499
3500 static reg_errcode_t
3501 compile_range (range_start_char, p_ptr, pend, translate, syntax, b)
3502      unsigned int range_start_char;
3503      const char **p_ptr, *pend;
3504      RE_TRANSLATE_TYPE translate;
3505      reg_syntax_t syntax;
3506      unsigned char *b;
3507 {
3508   unsigned this_char;
3509   const char *p = *p_ptr;
3510   reg_errcode_t ret;
3511 #if _LIBC
3512   const unsigned char *collseq;
3513   unsigned int start_colseq;
3514   unsigned int end_colseq;
3515 #else
3516   unsigned end_char;
3517 #endif
3518
3519   if (p == pend)
3520     return REG_ERANGE;
3521
3522   /* Have to increment the pointer into the pattern string, so the
3523      caller isn't still at the ending character.  */
3524   (*p_ptr)++;
3525
3526   /* Report an error if the range is empty and the syntax prohibits this.  */
3527   ret = syntax & RE_NO_EMPTY_RANGES ? REG_ERANGE : REG_NOERROR;
3528
3529 #if _LIBC
3530   collseq = (const unsigned char *) _NL_CURRENT (LC_COLLATE,
3531                                                  _NL_COLLATE_COLLSEQMB);
3532
3533   start_colseq = collseq[(unsigned char) TRANSLATE (range_start_char)];
3534   end_colseq = collseq[(unsigned char) TRANSLATE (p[0])];
3535   for (this_char = 0; this_char <= (unsigned char) -1; ++this_char)
3536     {
3537       unsigned int this_colseq = collseq[(unsigned char) TRANSLATE (this_char)];
3538
3539       if (start_colseq <= this_colseq && this_colseq <= end_colseq)
3540         {
3541           SET_LIST_BIT (TRANSLATE (this_char));
3542           ret = REG_NOERROR;
3543         }
3544     }
3545 #else
3546   /* Here we see why `this_char' has to be larger than an `unsigned
3547      char' -- we would otherwise go into an infinite loop, since all
3548      characters <= 0xff.  */
3549   range_start_char = TRANSLATE (range_start_char);
3550   end_char = TRANSLATE (p[0]);
3551   for (this_char = range_start_char; this_char <= end_char; ++this_char)
3552     {
3553       SET_LIST_BIT (TRANSLATE (this_char));
3554       ret = REG_NOERROR;
3555     }
3556 #endif
3557
3558   return ret;
3559 }
3560 \f
3561 /* re_compile_fastmap computes a ``fastmap'' for the compiled pattern in
3562    BUFP.  A fastmap records which of the (1 << BYTEWIDTH) possible
3563    characters can start a string that matches the pattern.  This fastmap
3564    is used by re_search to skip quickly over impossible starting points.
3565
3566    The caller must supply the address of a (1 << BYTEWIDTH)-byte data
3567    area as BUFP->fastmap.
3568
3569    We set the `fastmap', `fastmap_accurate', and `can_be_null' fields in
3570    the pattern buffer.
3571
3572    Returns 0 if we succeed, -2 if an internal error.   */
3573
3574 int
3575 re_compile_fastmap (bufp)
3576      struct re_pattern_buffer *bufp;
3577 {
3578   int j, k;
3579 #ifdef MATCH_MAY_ALLOCATE
3580   fail_stack_type fail_stack;
3581 #endif
3582 #ifndef REGEX_MALLOC
3583   char *destination;
3584 #endif
3585
3586   register char *fastmap = bufp->fastmap;
3587   unsigned char *pattern = bufp->buffer;
3588   unsigned char *p = pattern;
3589   register unsigned char *pend = pattern + bufp->used;
3590
3591 #ifdef REL_ALLOC
3592   /* This holds the pointer to the failure stack, when
3593      it is allocated relocatably.  */
3594   fail_stack_elt_t *failure_stack_ptr;
3595 #endif
3596
3597   /* Assume that each path through the pattern can be null until
3598      proven otherwise.  We set this false at the bottom of switch
3599      statement, to which we get only if a particular path doesn't
3600      match the empty string.  */
3601   boolean path_can_be_null = true;
3602
3603   /* We aren't doing a `succeed_n' to begin with.  */
3604   boolean succeed_n_p = false;
3605
3606   assert (fastmap != NULL && p != NULL);
3607
3608   INIT_FAIL_STACK ();
3609   bzero (fastmap, 1 << BYTEWIDTH);  /* Assume nothing's valid.  */
3610   bufp->fastmap_accurate = 1;       /* It will be when we're done.  */
3611   bufp->can_be_null = 0;
3612
3613   while (1)
3614     {
3615       if (p == pend || *p == succeed)
3616         {
3617           /* We have reached the (effective) end of pattern.  */
3618           if (!FAIL_STACK_EMPTY ())
3619             {
3620               bufp->can_be_null |= path_can_be_null;
3621
3622               /* Reset for next path.  */
3623               path_can_be_null = true;
3624
3625               p = fail_stack.stack[--fail_stack.avail].pointer;
3626
3627               continue;
3628             }
3629           else
3630             break;
3631         }
3632
3633       /* We should never be about to go beyond the end of the pattern.  */
3634       assert (p < pend);
3635
3636       switch (SWITCH_ENUM_CAST ((re_opcode_t) *p++))
3637         {
3638
3639         /* I guess the idea here is to simply not bother with a fastmap
3640            if a backreference is used, since it's too hard to figure out
3641            the fastmap for the corresponding group.  Setting
3642            `can_be_null' stops `re_search_2' from using the fastmap, so
3643            that is all we do.  */
3644         case duplicate:
3645           bufp->can_be_null = 1;
3646           goto done;
3647
3648
3649       /* Following are the cases which match a character.  These end
3650          with `break'.  */
3651
3652         case exactn:
3653           fastmap[p[1]] = 1;
3654           break;
3655
3656
3657         case charset:
3658           for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--)
3659             if (p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH)))
3660               fastmap[j] = 1;
3661           break;
3662
3663
3664         case charset_not:
3665           /* Chars beyond end of map must be allowed.  */
3666           for (j = *p * BYTEWIDTH; j < (1 << BYTEWIDTH); j++)
3667             fastmap[j] = 1;
3668
3669           for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--)
3670             if (!(p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH))))
3671               fastmap[j] = 1;
3672           break;
3673
3674
3675         case wordchar:
3676           for (j = 0; j < (1 << BYTEWIDTH); j++)
3677             if (SYNTAX (j) == Sword)
3678               fastmap[j] = 1;
3679           break;
3680
3681
3682         case notwordchar:
3683           for (j = 0; j < (1 << BYTEWIDTH); j++)
3684             if (SYNTAX (j) != Sword)
3685               fastmap[j] = 1;
3686           break;
3687
3688
3689         case anychar:
3690           {
3691             int fastmap_newline = fastmap['\n'];
3692
3693             /* `.' matches anything ...  */
3694             for (j = 0; j < (1 << BYTEWIDTH); j++)
3695               fastmap[j] = 1;
3696
3697             /* ... except perhaps newline.  */
3698             if (!(bufp->syntax & RE_DOT_NEWLINE))
3699               fastmap['\n'] = fastmap_newline;
3700
3701             /* Return if we have already set `can_be_null'; if we have,
3702                then the fastmap is irrelevant.  Something's wrong here.  */
3703             else if (bufp->can_be_null)
3704               goto done;
3705
3706             /* Otherwise, have to check alternative paths.  */
3707             break;
3708           }
3709
3710 #ifdef emacs
3711         case syntaxspec:
3712           k = *p++;
3713           for (j = 0; j < (1 << BYTEWIDTH); j++)
3714             if (SYNTAX (j) == (enum syntaxcode) k)
3715               fastmap[j] = 1;
3716           break;
3717
3718
3719         case notsyntaxspec:
3720           k = *p++;
3721           for (j = 0; j < (1 << BYTEWIDTH); j++)
3722             if (SYNTAX (j) != (enum syntaxcode) k)
3723               fastmap[j] = 1;
3724           break;
3725
3726
3727       /* All cases after this match the empty string.  These end with
3728          `continue'.  */
3729
3730
3731         case before_dot:
3732         case at_dot:
3733         case after_dot:
3734           continue;
3735 #endif /* emacs */
3736
3737
3738         case no_op:
3739         case begline:
3740         case endline:
3741         case begbuf:
3742         case endbuf:
3743         case wordbound:
3744         case notwordbound:
3745         case wordbeg:
3746         case wordend:
3747         case push_dummy_failure:
3748           continue;
3749
3750
3751         case jump_n:
3752         case pop_failure_jump:
3753         case maybe_pop_jump:
3754         case jump:
3755         case jump_past_alt:
3756         case dummy_failure_jump:
3757           EXTRACT_NUMBER_AND_INCR (j, p);
3758           p += j;
3759           if (j > 0)
3760             continue;
3761
3762           /* Jump backward implies we just went through the body of a
3763              loop and matched nothing.  Opcode jumped to should be
3764              `on_failure_jump' or `succeed_n'.  Just treat it like an
3765              ordinary jump.  For a * loop, it has pushed its failure
3766              point already; if so, discard that as redundant.  */
3767           if ((re_opcode_t) *p != on_failure_jump
3768               && (re_opcode_t) *p != succeed_n)
3769             continue;
3770
3771           p++;
3772           EXTRACT_NUMBER_AND_INCR (j, p);
3773           p += j;
3774
3775           /* If what's on the stack is where we are now, pop it.  */
3776           if (!FAIL_STACK_EMPTY ()
3777               && fail_stack.stack[fail_stack.avail - 1].pointer == p)
3778             fail_stack.avail--;
3779
3780           continue;
3781
3782
3783         case on_failure_jump:
3784         case on_failure_keep_string_jump:
3785         handle_on_failure_jump:
3786           EXTRACT_NUMBER_AND_INCR (j, p);
3787
3788           /* For some patterns, e.g., `(a?)?', `p+j' here points to the
3789              end of the pattern.  We don't want to push such a point,
3790              since when we restore it above, entering the switch will
3791              increment `p' past the end of the pattern.  We don't need
3792              to push such a point since we obviously won't find any more
3793              fastmap entries beyond `pend'.  Such a pattern can match
3794              the null string, though.  */
3795           if (p + j < pend)
3796             {
3797               if (!PUSH_PATTERN_OP (p + j, fail_stack))
3798                 {
3799                   RESET_FAIL_STACK ();
3800                   return -2;
3801                 }
3802             }
3803           else
3804             bufp->can_be_null = 1;
3805
3806           if (succeed_n_p)
3807             {
3808               EXTRACT_NUMBER_AND_INCR (k, p);   /* Skip the n.  */
3809               succeed_n_p = false;
3810             }
3811
3812           continue;
3813
3814
3815         case succeed_n:
3816           /* Get to the number of times to succeed.  */
3817           p += 2;
3818
3819           /* Increment p past the n for when k != 0.  */
3820           EXTRACT_NUMBER_AND_INCR (k, p);
3821           if (k == 0)
3822             {
3823               p -= 4;
3824               succeed_n_p = true;  /* Spaghetti code alert.  */
3825               goto handle_on_failure_jump;
3826             }
3827           continue;
3828
3829
3830         case set_number_at:
3831           p += 4;
3832           continue;
3833
3834
3835         case start_memory:
3836         case stop_memory:
3837           p += 2;
3838           continue;
3839
3840
3841         default:
3842           abort (); /* We have listed all the cases.  */
3843         } /* switch *p++ */
3844
3845       /* Getting here means we have found the possible starting
3846          characters for one path of the pattern -- and that the empty
3847          string does not match.  We need not follow this path further.
3848          Instead, look at the next alternative (remembered on the
3849          stack), or quit if no more.  The test at the top of the loop
3850          does these things.  */
3851       path_can_be_null = false;
3852       p = pend;
3853     } /* while p */
3854
3855   /* Set `can_be_null' for the last path (also the first path, if the
3856      pattern is empty).  */
3857   bufp->can_be_null |= path_can_be_null;
3858
3859  done:
3860   RESET_FAIL_STACK ();
3861   return 0;
3862 } /* re_compile_fastmap */
3863 #ifdef _LIBC
3864 weak_alias (__re_compile_fastmap, re_compile_fastmap)
3865 #endif
3866 \f
3867 /* Set REGS to hold NUM_REGS registers, storing them in STARTS and
3868    ENDS.  Subsequent matches using PATTERN_BUFFER and REGS will use
3869    this memory for recording register information.  STARTS and ENDS
3870    must be allocated using the malloc library routine, and must each
3871    be at least NUM_REGS * sizeof (regoff_t) bytes long.
3872
3873    If NUM_REGS == 0, then subsequent matches should allocate their own
3874    register data.
3875
3876    Unless this function is called, the first search or match using
3877    PATTERN_BUFFER will allocate its own register data, without
3878    freeing the old data.  */
3879
3880 void
3881 re_set_registers (bufp, regs, num_regs, starts, ends)
3882     struct re_pattern_buffer *bufp;
3883     struct re_registers *regs;
3884     unsigned num_regs;
3885     regoff_t *starts, *ends;
3886 {
3887   if (num_regs)
3888     {
3889       bufp->regs_allocated = REGS_REALLOCATE;
3890       regs->num_regs = num_regs;
3891       regs->start = starts;
3892       regs->end = ends;
3893     }
3894   else
3895     {
3896       bufp->regs_allocated = REGS_UNALLOCATED;
3897       regs->num_regs = 0;
3898       regs->start = regs->end = (regoff_t *) 0;
3899     }
3900 }
3901 #ifdef _LIBC
3902 weak_alias (__re_set_registers, re_set_registers)
3903 #endif
3904 \f
3905 /* Searching routines.  */
3906
3907 /* Like re_search_2, below, but only one string is specified, and
3908    doesn't let you say where to stop matching. */
3909
3910 int
3911 re_search (bufp, string, size, startpos, range, regs)
3912      struct re_pattern_buffer *bufp;
3913      const char *string;
3914      int size, startpos, range;
3915      struct re_registers *regs;
3916 {
3917   return re_search_2 (bufp, NULL, 0, string, size, startpos, range,
3918                       regs, size);
3919 }
3920 #ifdef _LIBC
3921 weak_alias (__re_search, re_search)
3922 #endif
3923
3924
3925 /* Using the compiled pattern in BUFP->buffer, first tries to match the
3926    virtual concatenation of STRING1 and STRING2, starting first at index
3927    STARTPOS, then at STARTPOS + 1, and so on.
3928
3929    STRING1 and STRING2 have length SIZE1 and SIZE2, respectively.
3930
3931    RANGE is how far to scan while trying to match.  RANGE = 0 means try
3932    only at STARTPOS; in general, the last start tried is STARTPOS +
3933    RANGE.
3934
3935    In REGS, return the indices of the virtual concatenation of STRING1
3936    and STRING2 that matched the entire BUFP->buffer and its contained
3937    subexpressions.
3938
3939    Do not consider matching one past the index STOP in the virtual
3940    concatenation of STRING1 and STRING2.
3941
3942    We return either the position in the strings at which the match was
3943    found, -1 if no match, or -2 if error (such as failure
3944    stack overflow).  */
3945
3946 int
3947 re_search_2 (bufp, string1, size1, string2, size2, startpos, range, regs, stop)
3948      struct re_pattern_buffer *bufp;
3949      const char *string1, *string2;
3950      int size1, size2;
3951      int startpos;
3952      int range;
3953      struct re_registers *regs;
3954      int stop;
3955 {
3956   int val;
3957   register char *fastmap = bufp->fastmap;
3958   register RE_TRANSLATE_TYPE translate = bufp->translate;
3959   int total_size = size1 + size2;
3960   int endpos = startpos + range;
3961
3962   /* Check for out-of-range STARTPOS.  */
3963   if (startpos < 0 || startpos > total_size)
3964     return -1;
3965
3966   /* Fix up RANGE if it might eventually take us outside
3967      the virtual concatenation of STRING1 and STRING2.
3968      Make sure we won't move STARTPOS below 0 or above TOTAL_SIZE.  */
3969   if (endpos < 0)
3970     range = 0 - startpos;
3971   else if (endpos > total_size)
3972     range = total_size - startpos;
3973
3974   /* If the search isn't to be a backwards one, don't waste time in a
3975      search for a pattern that must be anchored.  */
3976   if (bufp->used > 0 && range > 0
3977       && ((re_opcode_t) bufp->buffer[0] == begbuf
3978           /* `begline' is like `begbuf' if it cannot match at newlines.  */
3979           || ((re_opcode_t) bufp->buffer[0] == begline
3980               && !bufp->newline_anchor)))
3981     {
3982       if (startpos > 0)
3983         return -1;
3984       else
3985         range = 1;
3986     }
3987
3988 #ifdef emacs
3989   /* In a forward search for something that starts with \=.
3990      don't keep searching past point.  */
3991   if (bufp->used > 0 && (re_opcode_t) bufp->buffer[0] == at_dot && range > 0)
3992     {
3993       range = PT - startpos;
3994       if (range <= 0)
3995         return -1;
3996     }
3997 #endif /* emacs */
3998
3999   /* Update the fastmap now if not correct already.  */
4000   if (fastmap && !bufp->fastmap_accurate)
4001     if (re_compile_fastmap (bufp) == -2)
4002       return -2;
4003
4004   /* Loop through the string, looking for a place to start matching.  */
4005   for (;;)
4006     {
4007       /* If a fastmap is supplied, skip quickly over characters that
4008          cannot be the start of a match.  If the pattern can match the
4009          null string, however, we don't need to skip characters; we want
4010          the first null string.  */
4011       if (fastmap && startpos < total_size && !bufp->can_be_null)
4012         {
4013           if (range > 0)        /* Searching forwards.  */
4014             {
4015               register const char *d;
4016               register int lim = 0;
4017               int irange = range;
4018
4019               if (startpos < size1 && startpos + range >= size1)
4020                 lim = range - (size1 - startpos);
4021
4022               d = (startpos >= size1 ? string2 - size1 : string1) + startpos;
4023
4024               /* Written out as an if-else to avoid testing `translate'
4025                  inside the loop.  */
4026               if (translate)
4027                 while (range > lim
4028                        && !fastmap[(unsigned char)
4029                                    translate[(unsigned char) *d++]])
4030                   range--;
4031               else
4032                 while (range > lim && !fastmap[(unsigned char) *d++])
4033                   range--;
4034
4035               startpos += irange - range;
4036             }
4037           else                          /* Searching backwards.  */
4038             {
4039               register char c = (size1 == 0 || startpos >= size1
4040                                  ? string2[startpos - size1]
4041                                  : string1[startpos]);
4042
4043               if (!fastmap[(unsigned char) TRANSLATE (c)])
4044                 goto advance;
4045             }
4046         }
4047
4048       /* If can't match the null string, and that's all we have left, fail.  */
4049       if (range >= 0 && startpos == total_size && fastmap
4050           && !bufp->can_be_null)
4051         return -1;
4052
4053       val = re_match_2_internal (bufp, string1, size1, string2, size2,
4054                                  startpos, regs, stop);
4055 #ifndef REGEX_MALLOC
4056 # ifdef C_ALLOCA
4057       alloca (0);
4058 # endif
4059 #endif
4060
4061       if (val >= 0)
4062         return startpos;
4063
4064       if (val == -2)
4065         return -2;
4066
4067     advance:
4068       if (!range)
4069         break;
4070       else if (range > 0)
4071         {
4072           range--;
4073           startpos++;
4074         }
4075       else
4076         {
4077           range++;
4078           startpos--;
4079         }
4080     }
4081   return -1;
4082 } /* re_search_2 */
4083 #ifdef _LIBC
4084 weak_alias (__re_search_2, re_search_2)
4085 #endif
4086 \f
4087 /* This converts PTR, a pointer into one of the search strings `string1'
4088    and `string2' into an offset from the beginning of that string.  */
4089 #define POINTER_TO_OFFSET(ptr)                  \
4090   (FIRST_STRING_P (ptr)                         \
4091    ? ((regoff_t) ((ptr) - string1))             \
4092    : ((regoff_t) ((ptr) - string2 + size1)))
4093
4094 /* Macros for dealing with the split strings in re_match_2.  */
4095
4096 #define MATCHING_IN_FIRST_STRING  (dend == end_match_1)
4097
4098 /* Call before fetching a character with *d.  This switches over to
4099    string2 if necessary.  */
4100 #define PREFETCH()                                                      \
4101   while (d == dend)                                                     \
4102     {                                                                   \
4103       /* End of string2 => fail.  */                                    \
4104       if (dend == end_match_2)                                          \
4105         goto fail;                                                      \
4106       /* End of string1 => advance to string2.  */                      \
4107       d = string2;                                                      \
4108       dend = end_match_2;                                               \
4109     }
4110
4111
4112 /* Test if at very beginning or at very end of the virtual concatenation
4113    of `string1' and `string2'.  If only one string, it's `string2'.  */
4114 #define AT_STRINGS_BEG(d) ((d) == (size1 ? string1 : string2) || !size2)
4115 #define AT_STRINGS_END(d) ((d) == end2)
4116
4117
4118 /* Test if D points to a character which is word-constituent.  We have
4119    two special cases to check for: if past the end of string1, look at
4120    the first character in string2; and if before the beginning of
4121    string2, look at the last character in string1.  */
4122 #define WORDCHAR_P(d)                                                   \
4123   (SYNTAX ((d) == end1 ? *string2                                       \
4124            : (d) == string2 - 1 ? *(end1 - 1) : *(d))                   \
4125    == Sword)
4126
4127 /* Disabled due to a compiler bug -- see comment at case wordbound */
4128 #if 0
4129 /* Test if the character before D and the one at D differ with respect
4130    to being word-constituent.  */
4131 #define AT_WORD_BOUNDARY(d)                                             \
4132   (AT_STRINGS_BEG (d) || AT_STRINGS_END (d)                             \
4133    || WORDCHAR_P (d - 1) != WORDCHAR_P (d))
4134 #endif
4135
4136 /* Free everything we malloc.  */
4137 #ifdef MATCH_MAY_ALLOCATE
4138 # define FREE_VAR(var) if (var) REGEX_FREE (var); var = NULL
4139 # define FREE_VARIABLES()                                               \
4140   do {                                                                  \
4141     REGEX_FREE_STACK (fail_stack.stack);                                \
4142     FREE_VAR (regstart);                                                \
4143     FREE_VAR (regend);                                                  \
4144     FREE_VAR (old_regstart);                                            \
4145     FREE_VAR (old_regend);                                              \
4146     FREE_VAR (best_regstart);                                           \
4147     FREE_VAR (best_regend);                                             \
4148     FREE_VAR (reg_info);                                                \
4149     FREE_VAR (reg_dummy);                                               \
4150     FREE_VAR (reg_info_dummy);                                          \
4151   } while (0)
4152 #else
4153 # define FREE_VARIABLES() ((void)0) /* Do nothing!  But inhibit gcc warning. */
4154 #endif /* not MATCH_MAY_ALLOCATE */
4155
4156 /* These values must meet several constraints.  They must not be valid
4157    register values; since we have a limit of 255 registers (because
4158    we use only one byte in the pattern for the register number), we can
4159    use numbers larger than 255.  They must differ by 1, because of
4160    NUM_FAILURE_ITEMS above.  And the value for the lowest register must
4161    be larger than the value for the highest register, so we do not try
4162    to actually save any registers when none are active.  */
4163 #define NO_HIGHEST_ACTIVE_REG (1 << BYTEWIDTH)
4164 #define NO_LOWEST_ACTIVE_REG (NO_HIGHEST_ACTIVE_REG + 1)
4165 \f
4166 /* Matching routines.  */
4167
4168 #ifndef emacs   /* Emacs never uses this.  */
4169 /* re_match is like re_match_2 except it takes only a single string.  */
4170
4171 int
4172 re_match (bufp, string, size, pos, regs)
4173      struct re_pattern_buffer *bufp;
4174      const char *string;
4175      int size, pos;
4176      struct re_registers *regs;
4177 {
4178   int result = re_match_2_internal (bufp, NULL, 0, string, size,
4179                                     pos, regs, size);
4180 # ifndef REGEX_MALLOC
4181 #  ifdef C_ALLOCA
4182   alloca (0);
4183 #  endif
4184 # endif
4185   return result;
4186 }
4187 # ifdef _LIBC
4188 weak_alias (__re_match, re_match)
4189 # endif
4190 #endif /* not emacs */
4191
4192 static boolean group_match_null_string_p _RE_ARGS ((unsigned char **p,
4193                                                     unsigned char *end,
4194                                                 register_info_type *reg_info));
4195 static boolean alt_match_null_string_p _RE_ARGS ((unsigned char *p,
4196                                                   unsigned char *end,
4197                                                 register_info_type *reg_info));
4198 static boolean common_op_match_null_string_p _RE_ARGS ((unsigned char **p,
4199                                                         unsigned char *end,
4200                                                 register_info_type *reg_info));
4201 static int bcmp_translate _RE_ARGS ((const char *s1, const char *s2,
4202                                      int len, char *translate));
4203
4204 /* re_match_2 matches the compiled pattern in BUFP against the
4205    the (virtual) concatenation of STRING1 and STRING2 (of length SIZE1
4206    and SIZE2, respectively).  We start matching at POS, and stop
4207    matching at STOP.
4208
4209    If REGS is non-null and the `no_sub' field of BUFP is nonzero, we
4210    store offsets for the substring each group matched in REGS.  See the
4211    documentation for exactly how many groups we fill.
4212
4213    We return -1 if no match, -2 if an internal error (such as the
4214    failure stack overflowing).  Otherwise, we return the length of the
4215    matched substring.  */
4216
4217 int
4218 re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop)
4219      struct re_pattern_buffer *bufp;
4220      const char *string1, *string2;
4221      int size1, size2;
4222      int pos;
4223      struct re_registers *regs;
4224      int stop;
4225 {
4226   int result = re_match_2_internal (bufp, string1, size1, string2, size2,
4227                                     pos, regs, stop);
4228 #ifndef REGEX_MALLOC
4229 # ifdef C_ALLOCA
4230   alloca (0);
4231 # endif
4232 #endif
4233   return result;
4234 }
4235 #ifdef _LIBC
4236 weak_alias (__re_match_2, re_match_2)
4237 #endif
4238
4239 /* This is a separate function so that we can force an alloca cleanup
4240    afterwards.  */
4241 static int
4242 re_match_2_internal (bufp, string1, size1, string2, size2, pos, regs, stop)
4243      struct re_pattern_buffer *bufp;
4244      const char *string1, *string2;
4245      int size1, size2;
4246      int pos;
4247      struct re_registers *regs;
4248      int stop;
4249 {
4250   /* General temporaries.  */
4251   int mcnt;
4252   unsigned char *p1;
4253
4254   /* Just past the end of the corresponding string.  */
4255   const char *end1, *end2;
4256
4257   /* Pointers into string1 and string2, just past the last characters in
4258      each to consider matching.  */
4259   const char *end_match_1, *end_match_2;
4260
4261   /* Where we are in the data, and the end of the current string.  */
4262   const char *d, *dend;
4263
4264   /* Where we are in the pattern, and the end of the pattern.  */
4265   unsigned char *p = bufp->buffer;
4266   register unsigned char *pend = p + bufp->used;
4267
4268   /* Mark the opcode just after a start_memory, so we can test for an
4269      empty subpattern when we get to the stop_memory.  */
4270   unsigned char *just_past_start_mem = 0;
4271
4272   /* We use this to map every character in the string.  */
4273   RE_TRANSLATE_TYPE translate = bufp->translate;
4274
4275   /* Failure point stack.  Each place that can handle a failure further
4276      down the line pushes a failure point on this stack.  It consists of
4277      restart, regend, and reg_info for all registers corresponding to
4278      the subexpressions we're currently inside, plus the number of such
4279      registers, and, finally, two char *'s.  The first char * is where
4280      to resume scanning the pattern; the second one is where to resume
4281      scanning the strings.  If the latter is zero, the failure point is
4282      a ``dummy''; if a failure happens and the failure point is a dummy,
4283      it gets discarded and the next next one is tried.  */
4284 #ifdef MATCH_MAY_ALLOCATE /* otherwise, this is global.  */
4285   fail_stack_type fail_stack;
4286 #endif
4287 #ifdef DEBUG
4288   static unsigned failure_id;
4289   unsigned nfailure_points_pushed = 0, nfailure_points_popped = 0;
4290 #endif
4291
4292 #ifdef REL_ALLOC
4293   /* This holds the pointer to the failure stack, when
4294      it is allocated relocatably.  */
4295   fail_stack_elt_t *failure_stack_ptr;
4296 #endif
4297
4298   /* We fill all the registers internally, independent of what we
4299      return, for use in backreferences.  The number here includes
4300      an element for register zero.  */
4301   size_t num_regs = bufp->re_nsub + 1;
4302
4303   /* The currently active registers.  */
4304   active_reg_t lowest_active_reg = NO_LOWEST_ACTIVE_REG;
4305   active_reg_t highest_active_reg = NO_HIGHEST_ACTIVE_REG;
4306
4307   /* Information on the contents of registers. These are pointers into
4308      the input strings; they record just what was matched (on this
4309      attempt) by a subexpression part of the pattern, that is, the
4310      regnum-th regstart pointer points to where in the pattern we began
4311      matching and the regnum-th regend points to right after where we
4312      stopped matching the regnum-th subexpression.  (The zeroth register
4313      keeps track of what the whole pattern matches.)  */
4314 #ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global.  */
4315   const char **regstart, **regend;
4316 #endif
4317
4318   /* If a group that's operated upon by a repetition operator fails to
4319      match anything, then the register for its start will need to be
4320      restored because it will have been set to wherever in the string we
4321      are when we last see its open-group operator.  Similarly for a
4322      register's end.  */
4323 #ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global.  */
4324   const char **old_regstart, **old_regend;
4325 #endif
4326
4327   /* The is_active field of reg_info helps us keep track of which (possibly
4328      nested) subexpressions we are currently in. The matched_something
4329      field of reg_info[reg_num] helps us tell whether or not we have
4330      matched any of the pattern so far this time through the reg_num-th
4331      subexpression.  These two fields get reset each time through any
4332      loop their register is in.  */
4333 #ifdef MATCH_MAY_ALLOCATE /* otherwise, this is global.  */
4334   register_info_type *reg_info;
4335 #endif
4336
4337   /* The following record the register info as found in the above
4338      variables when we find a match better than any we've seen before.
4339      This happens as we backtrack through the failure points, which in
4340      turn happens only if we have not yet matched the entire string. */
4341   unsigned best_regs_set = false;
4342 #ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global.  */
4343   const char **best_regstart, **best_regend;
4344 #endif
4345
4346   /* Logically, this is `best_regend[0]'.  But we don't want to have to
4347      allocate space for that if we're not allocating space for anything
4348      else (see below).  Also, we never need info about register 0 for
4349      any of the other register vectors, and it seems rather a kludge to
4350      treat `best_regend' differently than the rest.  So we keep track of
4351      the end of the best match so far in a separate variable.  We
4352      initialize this to NULL so that when we backtrack the first time
4353      and need to test it, it's not garbage.  */
4354   const char *match_end = NULL;
4355
4356   /* This helps SET_REGS_MATCHED avoid doing redundant work.  */
4357   int set_regs_matched_done = 0;
4358
4359   /* Used when we pop values we don't care about.  */
4360 #ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global.  */
4361   const char **reg_dummy;
4362   register_info_type *reg_info_dummy;
4363 #endif
4364
4365 #ifdef DEBUG
4366   /* Counts the total number of registers pushed.  */
4367   unsigned num_regs_pushed = 0;
4368 #endif
4369
4370   DEBUG_PRINT1 ("\n\nEntering re_match_2.\n");
4371
4372   INIT_FAIL_STACK ();
4373
4374 #ifdef MATCH_MAY_ALLOCATE
4375   /* Do not bother to initialize all the register variables if there are
4376      no groups in the pattern, as it takes a fair amount of time.  If
4377      there are groups, we include space for register 0 (the whole
4378      pattern), even though we never use it, since it simplifies the
4379      array indexing.  We should fix this.  */
4380   if (bufp->re_nsub)
4381     {
4382       regstart = REGEX_TALLOC (num_regs, const char *);
4383       regend = REGEX_TALLOC (num_regs, const char *);
4384       old_regstart = REGEX_TALLOC (num_regs, const char *);
4385       old_regend = REGEX_TALLOC (num_regs, const char *);
4386       best_regstart = REGEX_TALLOC (num_regs, const char *);
4387       best_regend = REGEX_TALLOC (num_regs, const char *);
4388       reg_info = REGEX_TALLOC (num_regs, register_info_type);
4389       reg_dummy = REGEX_TALLOC (num_regs, const char *);
4390       reg_info_dummy = REGEX_TALLOC (num_regs, register_info_type);
4391
4392       if (!(regstart && regend && old_regstart && old_regend && reg_info
4393             && best_regstart && best_regend && reg_dummy && reg_info_dummy))
4394         {
4395           FREE_VARIABLES ();
4396           return -2;
4397         }
4398     }
4399   else
4400     {
4401       /* We must initialize all our variables to NULL, so that
4402          `FREE_VARIABLES' doesn't try to free them.  */
4403       regstart = regend = old_regstart = old_regend = best_regstart
4404         = best_regend = reg_dummy = NULL;
4405       reg_info = reg_info_dummy = (register_info_type *) NULL;
4406     }
4407 #endif /* MATCH_MAY_ALLOCATE */
4408
4409   /* The starting position is bogus.  */
4410   if (pos < 0 || pos > size1 + size2)
4411     {
4412       FREE_VARIABLES ();
4413       return -1;
4414     }
4415
4416   /* Initialize subexpression text positions to -1 to mark ones that no
4417      start_memory/stop_memory has been seen for. Also initialize the
4418      register information struct.  */
4419   for (mcnt = 1; (unsigned) mcnt < num_regs; mcnt++)
4420     {
4421       regstart[mcnt] = regend[mcnt]
4422         = old_regstart[mcnt] = old_regend[mcnt] = REG_UNSET_VALUE;
4423
4424       REG_MATCH_NULL_STRING_P (reg_info[mcnt]) = MATCH_NULL_UNSET_VALUE;
4425       IS_ACTIVE (reg_info[mcnt]) = 0;
4426       MATCHED_SOMETHING (reg_info[mcnt]) = 0;
4427       EVER_MATCHED_SOMETHING (reg_info[mcnt]) = 0;
4428     }
4429
4430   /* We move `string1' into `string2' if the latter's empty -- but not if
4431      `string1' is null.  */
4432   if (size2 == 0 && string1 != NULL)
4433     {
4434       string2 = string1;
4435       size2 = size1;
4436       string1 = 0;
4437       size1 = 0;
4438     }
4439   end1 = string1 + size1;
4440   end2 = string2 + size2;
4441
4442   /* Compute where to stop matching, within the two strings.  */
4443   if (stop <= size1)
4444     {
4445       end_match_1 = string1 + stop;
4446       end_match_2 = string2;
4447     }
4448   else
4449     {
4450       end_match_1 = end1;
4451       end_match_2 = string2 + stop - size1;
4452     }
4453
4454   /* `p' scans through the pattern as `d' scans through the data.
4455      `dend' is the end of the input string that `d' points within.  `d'
4456      is advanced into the following input string whenever necessary, but
4457      this happens before fetching; therefore, at the beginning of the
4458      loop, `d' can be pointing at the end of a string, but it cannot
4459      equal `string2'.  */
4460   if (size1 > 0 && pos <= size1)
4461     {
4462       d = string1 + pos;
4463       dend = end_match_1;
4464     }
4465   else
4466     {
4467       d = string2 + pos - size1;
4468       dend = end_match_2;
4469     }
4470
4471   DEBUG_PRINT1 ("The compiled pattern is:\n");
4472   DEBUG_PRINT_COMPILED_PATTERN (bufp, p, pend);
4473   DEBUG_PRINT1 ("The string to match is: `");
4474   DEBUG_PRINT_DOUBLE_STRING (d, string1, size1, string2, size2);
4475   DEBUG_PRINT1 ("'\n");
4476
4477   /* This loops over pattern commands.  It exits by returning from the
4478      function if the match is complete, or it drops through if the match
4479      fails at this starting point in the input data.  */
4480   for (;;)
4481     {
4482 #ifdef _LIBC
4483       DEBUG_PRINT2 ("\n%p: ", p);
4484 #else
4485       DEBUG_PRINT2 ("\n0x%x: ", p);
4486 #endif
4487
4488       if (p == pend)
4489         { /* End of pattern means we might have succeeded.  */
4490           DEBUG_PRINT1 ("end of pattern ... ");
4491
4492           /* If we haven't matched the entire string, and we want the
4493              longest match, try backtracking.  */
4494           if (d != end_match_2)
4495             {
4496               /* 1 if this match ends in the same string (string1 or string2)
4497                  as the best previous match.  */
4498               boolean same_str_p = (FIRST_STRING_P (match_end)
4499                                     == MATCHING_IN_FIRST_STRING);
4500               /* 1 if this match is the best seen so far.  */
4501               boolean best_match_p;
4502
4503               /* AIX compiler got confused when this was combined
4504                  with the previous declaration.  */
4505               if (same_str_p)
4506                 best_match_p = d > match_end;
4507               else
4508                 best_match_p = !MATCHING_IN_FIRST_STRING;
4509
4510               DEBUG_PRINT1 ("backtracking.\n");
4511
4512               if (!FAIL_STACK_EMPTY ())
4513                 { /* More failure points to try.  */
4514
4515                   /* If exceeds best match so far, save it.  */
4516                   if (!best_regs_set || best_match_p)
4517                     {
4518                       best_regs_set = true;
4519                       match_end = d;
4520
4521                       DEBUG_PRINT1 ("\nSAVING match as best so far.\n");
4522
4523                       for (mcnt = 1; (unsigned) mcnt < num_regs; mcnt++)
4524                         {
4525                           best_regstart[mcnt] = regstart[mcnt];
4526                           best_regend[mcnt] = regend[mcnt];
4527                         }
4528                     }
4529                   goto fail;
4530                 }
4531
4532               /* If no failure points, don't restore garbage.  And if
4533                  last match is real best match, don't restore second
4534                  best one. */
4535               else if (best_regs_set && !best_match_p)
4536                 {
4537                 restore_best_regs:
4538                   /* Restore best match.  It may happen that `dend ==
4539                      end_match_1' while the restored d is in string2.
4540                      For example, the pattern `x.*y.*z' against the
4541                      strings `x-' and `y-z-', if the two strings are
4542                      not consecutive in memory.  */
4543                   DEBUG_PRINT1 ("Restoring best registers.\n");
4544
4545                   d = match_end;
4546                   dend = ((d >= string1 && d <= end1)
4547                            ? end_match_1 : end_match_2);
4548
4549                   for (mcnt = 1; (unsigned) mcnt < num_regs; mcnt++)
4550                     {
4551                       regstart[mcnt] = best_regstart[mcnt];
4552                       regend[mcnt] = best_regend[mcnt];
4553                     }
4554                 }
4555             } /* d != end_match_2 */
4556
4557         succeed_label:
4558           DEBUG_PRINT1 ("Accepting match.\n");
4559
4560           /* If caller wants register contents data back, do it.  */
4561           if (regs && !bufp->no_sub)
4562             {
4563               /* Have the register data arrays been allocated?  */
4564               if (bufp->regs_allocated == REGS_UNALLOCATED)
4565                 { /* No.  So allocate them with malloc.  We need one
4566                      extra element beyond `num_regs' for the `-1' marker
4567                      GNU code uses.  */
4568                   regs->num_regs = MAX (RE_NREGS, num_regs + 1);
4569                   regs->start = TALLOC (regs->num_regs, regoff_t);
4570                   regs->end = TALLOC (regs->num_regs, regoff_t);
4571                   if (regs->start == NULL || regs->end == NULL)
4572                     {
4573                       FREE_VARIABLES ();
4574                       return -2;
4575                     }
4576                   bufp->regs_allocated = REGS_REALLOCATE;
4577                 }
4578               else if (bufp->regs_allocated == REGS_REALLOCATE)
4579                 { /* Yes.  If we need more elements than were already
4580                      allocated, reallocate them.  If we need fewer, just
4581                      leave it alone.  */
4582                   if (regs->num_regs < num_regs + 1)
4583                     {
4584                       regs->num_regs = num_regs + 1;
4585                       RETALLOC (regs->start, regs->num_regs, regoff_t);
4586                       RETALLOC (regs->end, regs->num_regs, regoff_t);
4587                       if (regs->start == NULL || regs->end == NULL)
4588                         {
4589                           FREE_VARIABLES ();
4590                           return -2;
4591                         }
4592                     }
4593                 }
4594               else
4595                 {
4596                   /* These braces fend off a "empty body in an else-statement"
4597                      warning under GCC when assert expands to nothing.  */
4598                   assert (bufp->regs_allocated == REGS_FIXED);
4599                 }
4600
4601               /* Convert the pointer data in `regstart' and `regend' to
4602                  indices.  Register zero has to be set differently,
4603                  since we haven't kept track of any info for it.  */
4604               if (regs->num_regs > 0)
4605                 {
4606                   regs->start[0] = pos;
4607                   regs->end[0] = (MATCHING_IN_FIRST_STRING
4608                                   ? ((regoff_t) (d - string1))
4609                                   : ((regoff_t) (d - string2 + size1)));
4610                 }
4611
4612               /* Go through the first `min (num_regs, regs->num_regs)'
4613                  registers, since that is all we initialized.  */
4614               for (mcnt = 1; (unsigned) mcnt < MIN (num_regs, regs->num_regs);
4615                    mcnt++)
4616                 {
4617                   if (REG_UNSET (regstart[mcnt]) || REG_UNSET (regend[mcnt]))
4618                     regs->start[mcnt] = regs->end[mcnt] = -1;
4619                   else
4620                     {
4621                       regs->start[mcnt]
4622                         = (regoff_t) POINTER_TO_OFFSET (regstart[mcnt]);
4623                       regs->end[mcnt]
4624                         = (regoff_t) POINTER_TO_OFFSET (regend[mcnt]);
4625                     }
4626                 }
4627
4628               /* If the regs structure we return has more elements than
4629                  were in the pattern, set the extra elements to -1.  If
4630                  we (re)allocated the registers, this is the case,
4631                  because we always allocate enough to have at least one
4632                  -1 at the end.  */
4633               for (mcnt = num_regs; (unsigned) mcnt < regs->num_regs; mcnt++)
4634                 regs->start[mcnt] = regs->end[mcnt] = -1;
4635             } /* regs && !bufp->no_sub */
4636
4637           DEBUG_PRINT4 ("%u failure points pushed, %u popped (%u remain).\n",
4638                         nfailure_points_pushed, nfailure_points_popped,
4639                         nfailure_points_pushed - nfailure_points_popped);
4640           DEBUG_PRINT2 ("%u registers pushed.\n", num_regs_pushed);
4641
4642           mcnt = d - pos - (MATCHING_IN_FIRST_STRING
4643                             ? string1
4644                             : string2 - size1);
4645
4646           DEBUG_PRINT2 ("Returning %d from re_match_2.\n", mcnt);
4647
4648           FREE_VARIABLES ();
4649           return mcnt;
4650         }
4651
4652       /* Otherwise match next pattern command.  */
4653       switch (SWITCH_ENUM_CAST ((re_opcode_t) *p++))
4654         {
4655         /* Ignore these.  Used to ignore the n of succeed_n's which
4656            currently have n == 0.  */
4657         case no_op:
4658           DEBUG_PRINT1 ("EXECUTING no_op.\n");
4659           break;
4660
4661         case succeed:
4662           DEBUG_PRINT1 ("EXECUTING succeed.\n");
4663           goto succeed_label;
4664
4665         /* Match the next n pattern characters exactly.  The following
4666            byte in the pattern defines n, and the n bytes after that
4667            are the characters to match.  */
4668         case exactn:
4669           mcnt = *p++;
4670           DEBUG_PRINT2 ("EXECUTING exactn %d.\n", mcnt);
4671
4672           /* This is written out as an if-else so we don't waste time
4673              testing `translate' inside the loop.  */
4674           if (translate)
4675             {
4676               do
4677                 {
4678                   PREFETCH ();
4679                   if ((unsigned char) translate[(unsigned char) *d++]
4680                       != (unsigned char) *p++)
4681                     goto fail;
4682                 }
4683               while (--mcnt);
4684             }
4685           else
4686             {
4687               do
4688                 {
4689                   PREFETCH ();
4690                   if (*d++ != (char) *p++) goto fail;
4691                 }
4692               while (--mcnt);
4693             }
4694           SET_REGS_MATCHED ();
4695           break;
4696
4697
4698         /* Match any character except possibly a newline or a null.  */
4699         case anychar:
4700           DEBUG_PRINT1 ("EXECUTING anychar.\n");
4701
4702           PREFETCH ();
4703
4704           if ((!(bufp->syntax & RE_DOT_NEWLINE) && TRANSLATE (*d) == '\n')
4705               || (bufp->syntax & RE_DOT_NOT_NULL && TRANSLATE (*d) == '\000'))
4706             goto fail;
4707
4708           SET_REGS_MATCHED ();
4709           DEBUG_PRINT2 ("  Matched `%d'.\n", *d);
4710           d++;
4711           break;
4712
4713
4714         case charset:
4715         case charset_not:
4716           {
4717             register unsigned char c;
4718             boolean not = (re_opcode_t) *(p - 1) == charset_not;
4719
4720             DEBUG_PRINT2 ("EXECUTING charset%s.\n", not ? "_not" : "");
4721
4722             PREFETCH ();
4723             c = TRANSLATE (*d); /* The character to match.  */
4724
4725             /* Cast to `unsigned' instead of `unsigned char' in case the
4726                bit list is a full 32 bytes long.  */
4727             if (c < (unsigned) (*p * BYTEWIDTH)
4728                 && p[1 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH)))
4729               not = !not;
4730
4731             p += 1 + *p;
4732
4733             if (!not) goto fail;
4734
4735             SET_REGS_MATCHED ();
4736             d++;
4737             break;
4738           }
4739
4740
4741         /* The beginning of a group is represented by start_memory.
4742            The arguments are the register number in the next byte, and the
4743            number of groups inner to this one in the next.  The text
4744            matched within the group is recorded (in the internal
4745            registers data structure) under the register number.  */
4746         case start_memory:
4747           DEBUG_PRINT3 ("EXECUTING start_memory %d (%d):\n", *p, p[1]);
4748
4749           /* Find out if this group can match the empty string.  */
4750           p1 = p;               /* To send to group_match_null_string_p.  */
4751
4752           if (REG_MATCH_NULL_STRING_P (reg_info[*p]) == MATCH_NULL_UNSET_VALUE)
4753             REG_MATCH_NULL_STRING_P (reg_info[*p])
4754               = group_match_null_string_p (&p1, pend, reg_info);
4755
4756           /* Save the position in the string where we were the last time
4757              we were at this open-group operator in case the group is
4758              operated upon by a repetition operator, e.g., with `(a*)*b'
4759              against `ab'; then we want to ignore where we are now in
4760              the string in case this attempt to match fails.  */
4761           old_regstart[*p] = REG_MATCH_NULL_STRING_P (reg_info[*p])
4762                              ? REG_UNSET (regstart[*p]) ? d : regstart[*p]
4763                              : regstart[*p];
4764           DEBUG_PRINT2 ("  old_regstart: %d\n",
4765                          POINTER_TO_OFFSET (old_regstart[*p]));
4766
4767           regstart[*p] = d;
4768           DEBUG_PRINT2 ("  regstart: %d\n", POINTER_TO_OFFSET (regstart[*p]));
4769
4770           IS_ACTIVE (reg_info[*p]) = 1;
4771           MATCHED_SOMETHING (reg_info[*p]) = 0;
4772
4773           /* Clear this whenever we change the register activity status.  */
4774           set_regs_matched_done = 0;
4775
4776           /* This is the new highest active register.  */
4777           highest_active_reg = *p;
4778
4779           /* If nothing was active before, this is the new lowest active
4780              register.  */
4781           if (lowest_active_reg == NO_LOWEST_ACTIVE_REG)
4782             lowest_active_reg = *p;
4783
4784           /* Move past the register number and inner group count.  */
4785           p += 2;
4786           just_past_start_mem = p;
4787
4788           break;
4789
4790
4791         /* The stop_memory opcode represents the end of a group.  Its
4792            arguments are the same as start_memory's: the register
4793            number, and the number of inner groups.  */
4794         case stop_memory:
4795           DEBUG_PRINT3 ("EXECUTING stop_memory %d (%d):\n", *p, p[1]);
4796
4797           /* We need to save the string position the last time we were at
4798              this close-group operator in case the group is operated
4799              upon by a repetition operator, e.g., with `((a*)*(b*)*)*'
4800              against `aba'; then we want to ignore where we are now in
4801              the string in case this attempt to match fails.  */
4802           old_regend[*p] = REG_MATCH_NULL_STRING_P (reg_info[*p])
4803                            ? REG_UNSET (regend[*p]) ? d : regend[*p]
4804                            : regend[*p];
4805           DEBUG_PRINT2 ("      old_regend: %d\n",
4806                          POINTER_TO_OFFSET (old_regend[*p]));
4807
4808           regend[*p] = d;
4809           DEBUG_PRINT2 ("      regend: %d\n", POINTER_TO_OFFSET (regend[*p]));
4810
4811           /* This register isn't active anymore.  */
4812           IS_ACTIVE (reg_info[*p]) = 0;
4813
4814           /* Clear this whenever we change the register activity status.  */
4815           set_regs_matched_done = 0;
4816
4817           /* If this was the only register active, nothing is active
4818              anymore.  */
4819           if (lowest_active_reg == highest_active_reg)
4820             {
4821               lowest_active_reg = NO_LOWEST_ACTIVE_REG;
4822               highest_active_reg = NO_HIGHEST_ACTIVE_REG;
4823             }
4824           else
4825             { /* We must scan for the new highest active register, since
4826                  it isn't necessarily one less than now: consider
4827                  (a(b)c(d(e)f)g).  When group 3 ends, after the f), the
4828                  new highest active register is 1.  */
4829               unsigned char r = *p - 1;
4830               while (r > 0 && !IS_ACTIVE (reg_info[r]))
4831                 r--;
4832
4833               /* If we end up at register zero, that means that we saved
4834                  the registers as the result of an `on_failure_jump', not
4835                  a `start_memory', and we jumped to past the innermost
4836                  `stop_memory'.  For example, in ((.)*) we save
4837                  registers 1 and 2 as a result of the *, but when we pop
4838                  back to the second ), we are at the stop_memory 1.
4839                  Thus, nothing is active.  */
4840               if (r == 0)
4841                 {
4842                   lowest_active_reg = NO_LOWEST_ACTIVE_REG;
4843                   highest_active_reg = NO_HIGHEST_ACTIVE_REG;
4844                 }
4845               else
4846                 highest_active_reg = r;
4847             }
4848
4849           /* If just failed to match something this time around with a
4850              group that's operated on by a repetition operator, try to
4851              force exit from the ``loop'', and restore the register
4852              information for this group that we had before trying this
4853              last match.  */
4854           if ((!MATCHED_SOMETHING (reg_info[*p])
4855                || just_past_start_mem == p - 1)
4856               && (p + 2) < pend)
4857             {
4858               boolean is_a_jump_n = false;
4859
4860               p1 = p + 2;
4861               mcnt = 0;
4862               switch ((re_opcode_t) *p1++)
4863                 {
4864                   case jump_n:
4865                     is_a_jump_n = true;
4866                   case pop_failure_jump:
4867                   case maybe_pop_jump:
4868                   case jump:
4869                   case dummy_failure_jump:
4870                     EXTRACT_NUMBER_AND_INCR (mcnt, p1);
4871                     if (is_a_jump_n)
4872                       p1 += 2;
4873                     break;
4874
4875                   default:
4876                     /* do nothing */ ;
4877                 }
4878               p1 += mcnt;
4879
4880               /* If the next operation is a jump backwards in the pattern
4881                  to an on_failure_jump right before the start_memory
4882                  corresponding to this stop_memory, exit from the loop
4883                  by forcing a failure after pushing on the stack the
4884                  on_failure_jump's jump in the pattern, and d.  */
4885               if (mcnt < 0 && (re_opcode_t) *p1 == on_failure_jump
4886                   && (re_opcode_t) p1[3] == start_memory && p1[4] == *p)
4887                 {
4888                   /* If this group ever matched anything, then restore
4889                      what its registers were before trying this last
4890                      failed match, e.g., with `(a*)*b' against `ab' for
4891                      regstart[1], and, e.g., with `((a*)*(b*)*)*'
4892                      against `aba' for regend[3].
4893
4894                      Also restore the registers for inner groups for,
4895                      e.g., `((a*)(b*))*' against `aba' (register 3 would
4896                      otherwise get trashed).  */
4897
4898                   if (EVER_MATCHED_SOMETHING (reg_info[*p]))
4899                     {
4900                       unsigned r;
4901
4902                       EVER_MATCHED_SOMETHING (reg_info[*p]) = 0;
4903
4904                       /* Restore this and inner groups' (if any) registers.  */
4905                       for (r = *p; r < (unsigned) *p + (unsigned) *(p + 1);
4906                            r++)
4907                         {
4908                           regstart[r] = old_regstart[r];
4909
4910                           /* xx why this test?  */
4911                           if (old_regend[r] >= regstart[r])
4912                             regend[r] = old_regend[r];
4913                         }
4914                     }
4915                   p1++;
4916                   EXTRACT_NUMBER_AND_INCR (mcnt, p1);
4917                   PUSH_FAILURE_POINT (p1 + mcnt, d, -2);
4918
4919                   goto fail;
4920                 }
4921             }
4922
4923           /* Move past the register number and the inner group count.  */
4924           p += 2;
4925           break;
4926
4927
4928         /* \<digit> has been turned into a `duplicate' command which is
4929            followed by the numeric value of <digit> as the register number.  */
4930         case duplicate:
4931           {
4932             register const char *d2, *dend2;
4933             int regno = *p++;   /* Get which register to match against.  */
4934             DEBUG_PRINT2 ("EXECUTING duplicate %d.\n", regno);
4935
4936             /* Can't back reference a group which we've never matched.  */
4937             if (REG_UNSET (regstart[regno]) || REG_UNSET (regend[regno]))
4938               goto fail;
4939
4940             /* Where in input to try to start matching.  */
4941             d2 = regstart[regno];
4942
4943             /* Where to stop matching; if both the place to start and
4944                the place to stop matching are in the same string, then
4945                set to the place to stop, otherwise, for now have to use
4946                the end of the first string.  */
4947
4948             dend2 = ((FIRST_STRING_P (regstart[regno])
4949                       == FIRST_STRING_P (regend[regno]))
4950                      ? regend[regno] : end_match_1);
4951             for (;;)
4952               {
4953                 /* If necessary, advance to next segment in register
4954                    contents.  */
4955                 while (d2 == dend2)
4956                   {
4957                     if (dend2 == end_match_2) break;
4958                     if (dend2 == regend[regno]) break;
4959
4960                     /* End of string1 => advance to string2. */
4961                     d2 = string2;
4962                     dend2 = regend[regno];
4963                   }
4964                 /* At end of register contents => success */
4965                 if (d2 == dend2) break;
4966
4967                 /* If necessary, advance to next segment in data.  */
4968                 PREFETCH ();
4969
4970                 /* How many characters left in this segment to match.  */
4971                 mcnt = dend - d;
4972
4973                 /* Want how many consecutive characters we can match in
4974                    one shot, so, if necessary, adjust the count.  */
4975                 if (mcnt > dend2 - d2)
4976                   mcnt = dend2 - d2;
4977
4978                 /* Compare that many; failure if mismatch, else move
4979                    past them.  */
4980                 if (translate
4981                     ? bcmp_translate (d, d2, mcnt, translate)
4982                     : memcmp (d, d2, mcnt))
4983                   goto fail;
4984                 d += mcnt, d2 += mcnt;
4985
4986                 /* Do this because we've match some characters.  */
4987                 SET_REGS_MATCHED ();
4988               }
4989           }
4990           break;
4991
4992
4993         /* begline matches the empty string at the beginning of the string
4994            (unless `not_bol' is set in `bufp'), and, if
4995            `newline_anchor' is set, after newlines.  */
4996         case begline:
4997           DEBUG_PRINT1 ("EXECUTING begline.\n");
4998
4999           if (AT_STRINGS_BEG (d))
5000             {
5001               if (!bufp->not_bol) break;
5002             }
5003           else if (d[-1] == '\n' && bufp->newline_anchor)
5004             {
5005               break;
5006             }
5007           /* In all other cases, we fail.  */
5008           goto fail;
5009
5010
5011         /* endline is the dual of begline.  */
5012         case endline:
5013           DEBUG_PRINT1 ("EXECUTING endline.\n");
5014
5015           if (AT_STRINGS_END (d))
5016             {
5017               if (!bufp->not_eol) break;
5018             }
5019
5020           /* We have to ``prefetch'' the next character.  */
5021           else if ((d == end1 ? *string2 : *d) == '\n'
5022                    && bufp->newline_anchor)
5023             {
5024               break;
5025             }
5026           goto fail;
5027
5028
5029         /* Match at the very beginning of the data.  */
5030         case begbuf:
5031           DEBUG_PRINT1 ("EXECUTING begbuf.\n");
5032           if (AT_STRINGS_BEG (d))
5033             break;
5034           goto fail;
5035
5036
5037         /* Match at the very end of the data.  */
5038         case endbuf:
5039           DEBUG_PRINT1 ("EXECUTING endbuf.\n");
5040           if (AT_STRINGS_END (d))
5041             break;
5042           goto fail;
5043
5044
5045         /* on_failure_keep_string_jump is used to optimize `.*\n'.  It
5046            pushes NULL as the value for the string on the stack.  Then
5047            `pop_failure_point' will keep the current value for the
5048            string, instead of restoring it.  To see why, consider
5049            matching `foo\nbar' against `.*\n'.  The .* matches the foo;
5050            then the . fails against the \n.  But the next thing we want
5051            to do is match the \n against the \n; if we restored the
5052            string value, we would be back at the foo.
5053
5054            Because this is used only in specific cases, we don't need to
5055            check all the things that `on_failure_jump' does, to make
5056            sure the right things get saved on the stack.  Hence we don't
5057            share its code.  The only reason to push anything on the
5058            stack at all is that otherwise we would have to change
5059            `anychar's code to do something besides goto fail in this
5060            case; that seems worse than this.  */
5061         case on_failure_keep_string_jump:
5062           DEBUG_PRINT1 ("EXECUTING on_failure_keep_string_jump");
5063
5064           EXTRACT_NUMBER_AND_INCR (mcnt, p);
5065 #ifdef _LIBC
5066           DEBUG_PRINT3 (" %d (to %p):\n", mcnt, p + mcnt);
5067 #else
5068           DEBUG_PRINT3 (" %d (to 0x%x):\n", mcnt, p + mcnt);
5069 #endif
5070
5071           PUSH_FAILURE_POINT (p + mcnt, NULL, -2);
5072           break;
5073
5074
5075         /* Uses of on_failure_jump:
5076
5077            Each alternative starts with an on_failure_jump that points
5078            to the beginning of the next alternative.  Each alternative
5079            except the last ends with a jump that in effect jumps past
5080            the rest of the alternatives.  (They really jump to the
5081            ending jump of the following alternative, because tensioning
5082            these jumps is a hassle.)
5083
5084            Repeats start with an on_failure_jump that points past both
5085            the repetition text and either the following jump or
5086            pop_failure_jump back to this on_failure_jump.  */
5087         case on_failure_jump:
5088         on_failure:
5089           DEBUG_PRINT1 ("EXECUTING on_failure_jump");
5090
5091           EXTRACT_NUMBER_AND_INCR (mcnt, p);
5092 #ifdef _LIBC
5093           DEBUG_PRINT3 (" %d (to %p)", mcnt, p + mcnt);
5094 #else
5095           DEBUG_PRINT3 (" %d (to 0x%x)", mcnt, p + mcnt);
5096 #endif
5097
5098           /* If this on_failure_jump comes right before a group (i.e.,
5099              the original * applied to a group), save the information
5100              for that group and all inner ones, so that if we fail back
5101              to this point, the group's information will be correct.
5102              For example, in \(a*\)*\1, we need the preceding group,
5103              and in \(zz\(a*\)b*\)\2, we need the inner group.  */
5104
5105           /* We can't use `p' to check ahead because we push
5106              a failure point to `p + mcnt' after we do this.  */
5107           p1 = p;
5108
5109           /* We need to skip no_op's before we look for the
5110              start_memory in case this on_failure_jump is happening as
5111              the result of a completed succeed_n, as in \(a\)\{1,3\}b\1
5112              against aba.  */
5113           while (p1 < pend && (re_opcode_t) *p1 == no_op)
5114             p1++;
5115
5116           if (p1 < pend && (re_opcode_t) *p1 == start_memory)
5117             {
5118               /* We have a new highest active register now.  This will
5119                  get reset at the start_memory we are about to get to,
5120                  but we will have saved all the registers relevant to
5121                  this repetition op, as described above.  */
5122               highest_active_reg = *(p1 + 1) + *(p1 + 2);
5123               if (lowest_active_reg == NO_LOWEST_ACTIVE_REG)
5124                 lowest_active_reg = *(p1 + 1);
5125             }
5126
5127           DEBUG_PRINT1 (":\n");
5128           PUSH_FAILURE_POINT (p + mcnt, d, -2);
5129           break;
5130
5131
5132         /* A smart repeat ends with `maybe_pop_jump'.
5133            We change it to either `pop_failure_jump' or `jump'.  */
5134         case maybe_pop_jump:
5135           EXTRACT_NUMBER_AND_INCR (mcnt, p);
5136           DEBUG_PRINT2 ("EXECUTING maybe_pop_jump %d.\n", mcnt);
5137           {
5138             register unsigned char *p2 = p;
5139
5140             /* Compare the beginning of the repeat with what in the
5141                pattern follows its end. If we can establish that there
5142                is nothing that they would both match, i.e., that we
5143                would have to backtrack because of (as in, e.g., `a*a')
5144                then we can change to pop_failure_jump, because we'll
5145                never have to backtrack.
5146
5147                This is not true in the case of alternatives: in
5148                `(a|ab)*' we do need to backtrack to the `ab' alternative
5149                (e.g., if the string was `ab').  But instead of trying to
5150                detect that here, the alternative has put on a dummy
5151                failure point which is what we will end up popping.  */
5152
5153             /* Skip over open/close-group commands.
5154                If what follows this loop is a ...+ construct,
5155                look at what begins its body, since we will have to
5156                match at least one of that.  */
5157             while (1)
5158               {
5159                 if (p2 + 2 < pend
5160                     && ((re_opcode_t) *p2 == stop_memory
5161                         || (re_opcode_t) *p2 == start_memory))
5162                   p2 += 3;
5163                 else if (p2 + 6 < pend
5164                          && (re_opcode_t) *p2 == dummy_failure_jump)
5165                   p2 += 6;
5166                 else
5167                   break;
5168               }
5169
5170             p1 = p + mcnt;
5171             /* p1[0] ... p1[2] are the `on_failure_jump' corresponding
5172                to the `maybe_finalize_jump' of this case.  Examine what
5173                follows.  */
5174
5175             /* If we're at the end of the pattern, we can change.  */
5176             if (p2 == pend)
5177               {
5178                 /* Consider what happens when matching ":\(.*\)"
5179                    against ":/".  I don't really understand this code
5180                    yet.  */
5181                 p[-3] = (unsigned char) pop_failure_jump;
5182                 DEBUG_PRINT1
5183                   ("  End of pattern: change to `pop_failure_jump'.\n");
5184               }
5185
5186             else if ((re_opcode_t) *p2 == exactn
5187                      || (bufp->newline_anchor && (re_opcode_t) *p2 == endline))
5188               {
5189                 register unsigned char c
5190                   = *p2 == (unsigned char) endline ? '\n' : p2[2];
5191
5192                 if ((re_opcode_t) p1[3] == exactn && p1[5] != c)
5193                   {
5194                     p[-3] = (unsigned char) pop_failure_jump;
5195                     DEBUG_PRINT3 ("  %c != %c => pop_failure_jump.\n",
5196                                   c, p1[5]);
5197                   }
5198
5199                 else if ((re_opcode_t) p1[3] == charset
5200                          || (re_opcode_t) p1[3] == charset_not)
5201                   {
5202                     int not = (re_opcode_t) p1[3] == charset_not;
5203
5204                     if (c < (unsigned char) (p1[4] * BYTEWIDTH)
5205                         && p1[5 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH)))
5206                       not = !not;
5207
5208                     /* `not' is equal to 1 if c would match, which means
5209                         that we can't change to pop_failure_jump.  */
5210                     if (!not)
5211                       {
5212                         p[-3] = (unsigned char) pop_failure_jump;
5213                         DEBUG_PRINT1 ("  No match => pop_failure_jump.\n");
5214                       }
5215                   }
5216               }
5217             else if ((re_opcode_t) *p2 == charset)
5218               {
5219                 /* We win if the first character of the loop is not part
5220                    of the charset.  */
5221                 if ((re_opcode_t) p1[3] == exactn
5222                     && ! ((int) p2[1] * BYTEWIDTH > (int) p1[5]
5223                           && (p2[2 + p1[5] / BYTEWIDTH]
5224                               & (1 << (p1[5] % BYTEWIDTH)))))
5225                   {
5226                     p[-3] = (unsigned char) pop_failure_jump;
5227                     DEBUG_PRINT1 ("  No match => pop_failure_jump.\n");
5228                   }
5229
5230                 else if ((re_opcode_t) p1[3] == charset_not)
5231                   {
5232                     int idx;
5233                     /* We win if the charset_not inside the loop
5234                        lists every character listed in the charset after.  */
5235                     for (idx = 0; idx < (int) p2[1]; idx++)
5236                       if (! (p2[2 + idx] == 0
5237                              || (idx < (int) p1[4]
5238                                  && ((p2[2 + idx] & ~ p1[5 + idx]) == 0))))
5239                         break;
5240
5241                     if (idx == p2[1])
5242                       {
5243                         p[-3] = (unsigned char) pop_failure_jump;
5244                         DEBUG_PRINT1 ("  No match => pop_failure_jump.\n");
5245                       }
5246                   }
5247                 else if ((re_opcode_t) p1[3] == charset)
5248                   {
5249                     int idx;
5250                     /* We win if the charset inside the loop
5251                        has no overlap with the one after the loop.  */
5252                     for (idx = 0;
5253                          idx < (int) p2[1] && idx < (int) p1[4];
5254                          idx++)
5255                       if ((p2[2 + idx] & p1[5 + idx]) != 0)
5256                         break;
5257
5258                     if (idx == p2[1] || idx == p1[4])
5259                       {
5260                         p[-3] = (unsigned char) pop_failure_jump;
5261                         DEBUG_PRINT1 ("  No match => pop_failure_jump.\n");
5262                       }
5263                   }
5264               }
5265           }
5266           p -= 2;               /* Point at relative address again.  */
5267           if ((re_opcode_t) p[-1] != pop_failure_jump)
5268             {
5269               p[-1] = (unsigned char) jump;
5270               DEBUG_PRINT1 ("  Match => jump.\n");
5271               goto unconditional_jump;
5272             }
5273         /* Note fall through.  */
5274
5275
5276         /* The end of a simple repeat has a pop_failure_jump back to
5277            its matching on_failure_jump, where the latter will push a
5278            failure point.  The pop_failure_jump takes off failure
5279            points put on by this pop_failure_jump's matching
5280            on_failure_jump; we got through the pattern to here from the
5281            matching on_failure_jump, so didn't fail.  */
5282         case pop_failure_jump:
5283           {
5284             /* We need to pass separate storage for the lowest and
5285                highest registers, even though we don't care about the
5286                actual values.  Otherwise, we will restore only one
5287                register from the stack, since lowest will == highest in
5288                `pop_failure_point'.  */
5289             active_reg_t dummy_low_reg, dummy_high_reg;
5290             unsigned char *pdummy;
5291             const char *sdummy;
5292
5293             DEBUG_PRINT1 ("EXECUTING pop_failure_jump.\n");
5294             POP_FAILURE_POINT (sdummy, pdummy,
5295                                dummy_low_reg, dummy_high_reg,
5296                                reg_dummy, reg_dummy, reg_info_dummy);
5297           }
5298           /* Note fall through.  */
5299
5300         unconditional_jump:
5301 #ifdef _LIBC
5302           DEBUG_PRINT2 ("\n%p: ", p);
5303 #else
5304           DEBUG_PRINT2 ("\n0x%x: ", p);
5305 #endif
5306           /* Note fall through.  */
5307
5308         /* Unconditionally jump (without popping any failure points).  */
5309         case jump:
5310           EXTRACT_NUMBER_AND_INCR (mcnt, p);    /* Get the amount to jump.  */
5311           DEBUG_PRINT2 ("EXECUTING jump %d ", mcnt);
5312           p += mcnt;                            /* Do the jump.  */
5313 #ifdef _LIBC
5314           DEBUG_PRINT2 ("(to %p).\n", p);
5315 #else
5316           DEBUG_PRINT2 ("(to 0x%x).\n", p);
5317 #endif
5318           break;
5319
5320
5321         /* We need this opcode so we can detect where alternatives end
5322            in `group_match_null_string_p' et al.  */
5323         case jump_past_alt:
5324           DEBUG_PRINT1 ("EXECUTING jump_past_alt.\n");
5325           goto unconditional_jump;
5326
5327
5328         /* Normally, the on_failure_jump pushes a failure point, which
5329            then gets popped at pop_failure_jump.  We will end up at
5330            pop_failure_jump, also, and with a pattern of, say, `a+', we
5331            are skipping over the on_failure_jump, so we have to push
5332            something meaningless for pop_failure_jump to pop.  */
5333         case dummy_failure_jump:
5334           DEBUG_PRINT1 ("EXECUTING dummy_failure_jump.\n");
5335           /* It doesn't matter what we push for the string here.  What
5336              the code at `fail' tests is the value for the pattern.  */
5337           PUSH_FAILURE_POINT (NULL, NULL, -2);
5338           goto unconditional_jump;
5339
5340
5341         /* At the end of an alternative, we need to push a dummy failure
5342            point in case we are followed by a `pop_failure_jump', because
5343            we don't want the failure point for the alternative to be
5344            popped.  For example, matching `(a|ab)*' against `aab'
5345            requires that we match the `ab' alternative.  */
5346         case push_dummy_failure:
5347           DEBUG_PRINT1 ("EXECUTING push_dummy_failure.\n");
5348           /* See comments just above at `dummy_failure_jump' about the
5349              two zeroes.  */
5350           PUSH_FAILURE_POINT (NULL, NULL, -2);
5351           break;
5352
5353         /* Have to succeed matching what follows at least n times.
5354            After that, handle like `on_failure_jump'.  */
5355         case succeed_n:
5356           EXTRACT_NUMBER (mcnt, p + 2);
5357           DEBUG_PRINT2 ("EXECUTING succeed_n %d.\n", mcnt);
5358
5359           assert (mcnt >= 0);
5360           /* Originally, this is how many times we HAVE to succeed.  */
5361           if (mcnt > 0)
5362             {
5363                mcnt--;
5364                p += 2;
5365                STORE_NUMBER_AND_INCR (p, mcnt);
5366 #ifdef _LIBC
5367                DEBUG_PRINT3 ("  Setting %p to %d.\n", p - 2, mcnt);
5368 #else
5369                DEBUG_PRINT3 ("  Setting 0x%x to %d.\n", p - 2, mcnt);
5370 #endif
5371             }
5372           else if (mcnt == 0)
5373             {
5374 #ifdef _LIBC
5375               DEBUG_PRINT2 ("  Setting two bytes from %p to no_op.\n", p+2);
5376 #else
5377               DEBUG_PRINT2 ("  Setting two bytes from 0x%x to no_op.\n", p+2);
5378 #endif
5379               p[2] = (unsigned char) no_op;
5380               p[3] = (unsigned char) no_op;
5381               goto on_failure;
5382             }
5383           break;
5384
5385         case jump_n:
5386           EXTRACT_NUMBER (mcnt, p + 2);
5387           DEBUG_PRINT2 ("EXECUTING jump_n %d.\n", mcnt);
5388
5389           /* Originally, this is how many times we CAN jump.  */
5390           if (mcnt)
5391             {
5392                mcnt--;
5393                STORE_NUMBER (p + 2, mcnt);
5394 #ifdef _LIBC
5395                DEBUG_PRINT3 ("  Setting %p to %d.\n", p + 2, mcnt);
5396 #else
5397                DEBUG_PRINT3 ("  Setting 0x%x to %d.\n", p + 2, mcnt);
5398 #endif
5399                goto unconditional_jump;
5400             }
5401           /* If don't have to jump any more, skip over the rest of command.  */
5402           else
5403             p += 4;
5404           break;
5405
5406         case set_number_at:
5407           {
5408             DEBUG_PRINT1 ("EXECUTING set_number_at.\n");
5409
5410             EXTRACT_NUMBER_AND_INCR (mcnt, p);
5411             p1 = p + mcnt;
5412             EXTRACT_NUMBER_AND_INCR (mcnt, p);
5413 #ifdef _LIBC
5414             DEBUG_PRINT3 ("  Setting %p to %d.\n", p1, mcnt);
5415 #else
5416             DEBUG_PRINT3 ("  Setting 0x%x to %d.\n", p1, mcnt);
5417 #endif
5418             STORE_NUMBER (p1, mcnt);
5419             break;
5420           }
5421
5422 #if 0
5423         /* The DEC Alpha C compiler 3.x generates incorrect code for the
5424            test  WORDCHAR_P (d - 1) != WORDCHAR_P (d)  in the expansion of
5425            AT_WORD_BOUNDARY, so this code is disabled.  Expanding the
5426            macro and introducing temporary variables works around the bug.  */
5427
5428         case wordbound:
5429           DEBUG_PRINT1 ("EXECUTING wordbound.\n");
5430           if (AT_WORD_BOUNDARY (d))
5431             break;
5432           goto fail;
5433
5434         case notwordbound:
5435           DEBUG_PRINT1 ("EXECUTING notwordbound.\n");
5436           if (AT_WORD_BOUNDARY (d))
5437             goto fail;
5438           break;
5439 #else
5440         case wordbound:
5441         {
5442           boolean prevchar, thischar;
5443
5444           DEBUG_PRINT1 ("EXECUTING wordbound.\n");
5445           if (AT_STRINGS_BEG (d) || AT_STRINGS_END (d))
5446             break;
5447
5448           prevchar = WORDCHAR_P (d - 1);
5449           thischar = WORDCHAR_P (d);
5450           if (prevchar != thischar)
5451             break;
5452           goto fail;
5453         }
5454
5455       case notwordbound:
5456         {
5457           boolean prevchar, thischar;
5458
5459           DEBUG_PRINT1 ("EXECUTING notwordbound.\n");
5460           if (AT_STRINGS_BEG (d) || AT_STRINGS_END (d))
5461             goto fail;
5462
5463           prevchar = WORDCHAR_P (d - 1);
5464           thischar = WORDCHAR_P (d);
5465           if (prevchar != thischar)
5466             goto fail;
5467           break;
5468         }
5469 #endif
5470
5471         case wordbeg:
5472           DEBUG_PRINT1 ("EXECUTING wordbeg.\n");
5473           if (WORDCHAR_P (d) && (AT_STRINGS_BEG (d) || !WORDCHAR_P (d - 1)))
5474             break;
5475           goto fail;
5476
5477         case wordend:
5478           DEBUG_PRINT1 ("EXECUTING wordend.\n");
5479           if (!AT_STRINGS_BEG (d) && WORDCHAR_P (d - 1)
5480               && (!WORDCHAR_P (d) || AT_STRINGS_END (d)))
5481             break;
5482           goto fail;
5483
5484 #ifdef emacs
5485         case before_dot:
5486           DEBUG_PRINT1 ("EXECUTING before_dot.\n");
5487           if (PTR_CHAR_POS ((unsigned char *) d) >= point)
5488             goto fail;
5489           break;
5490
5491         case at_dot:
5492           DEBUG_PRINT1 ("EXECUTING at_dot.\n");
5493           if (PTR_CHAR_POS ((unsigned char *) d) != point)
5494             goto fail;
5495           break;
5496
5497         case after_dot:
5498           DEBUG_PRINT1 ("EXECUTING after_dot.\n");
5499           if (PTR_CHAR_POS ((unsigned char *) d) <= point)
5500             goto fail;
5501           break;
5502
5503         case syntaxspec:
5504           DEBUG_PRINT2 ("EXECUTING syntaxspec %d.\n", mcnt);
5505           mcnt = *p++;
5506           goto matchsyntax;
5507
5508         case wordchar:
5509           DEBUG_PRINT1 ("EXECUTING Emacs wordchar.\n");
5510           mcnt = (int) Sword;
5511         matchsyntax:
5512           PREFETCH ();
5513           /* Can't use *d++ here; SYNTAX may be an unsafe macro.  */
5514           d++;
5515           if (SYNTAX (d[-1]) != (enum syntaxcode) mcnt)
5516             goto fail;
5517           SET_REGS_MATCHED ();
5518           break;
5519
5520         case notsyntaxspec:
5521           DEBUG_PRINT2 ("EXECUTING notsyntaxspec %d.\n", mcnt);
5522           mcnt = *p++;
5523           goto matchnotsyntax;
5524
5525         case notwordchar:
5526           DEBUG_PRINT1 ("EXECUTING Emacs notwordchar.\n");
5527           mcnt = (int) Sword;
5528         matchnotsyntax:
5529           PREFETCH ();
5530           /* Can't use *d++ here; SYNTAX may be an unsafe macro.  */
5531           d++;
5532           if (SYNTAX (d[-1]) == (enum syntaxcode) mcnt)
5533             goto fail;
5534           SET_REGS_MATCHED ();
5535           break;
5536
5537 #else /* not emacs */
5538         case wordchar:
5539           DEBUG_PRINT1 ("EXECUTING non-Emacs wordchar.\n");
5540           PREFETCH ();
5541           if (!WORDCHAR_P (d))
5542             goto fail;
5543           SET_REGS_MATCHED ();
5544           d++;
5545           break;
5546
5547         case notwordchar:
5548           DEBUG_PRINT1 ("EXECUTING non-Emacs notwordchar.\n");
5549           PREFETCH ();
5550           if (WORDCHAR_P (d))
5551             goto fail;
5552           SET_REGS_MATCHED ();
5553           d++;
5554           break;
5555 #endif /* not emacs */
5556
5557         default:
5558           abort ();
5559         }
5560       continue;  /* Successfully executed one pattern command; keep going.  */
5561
5562
5563     /* We goto here if a matching operation fails. */
5564     fail:
5565       if (!FAIL_STACK_EMPTY ())
5566         { /* A restart point is known.  Restore to that state.  */
5567           DEBUG_PRINT1 ("\nFAIL:\n");
5568           POP_FAILURE_POINT (d, p,
5569                              lowest_active_reg, highest_active_reg,
5570                              regstart, regend, reg_info);
5571
5572           /* If this failure point is a dummy, try the next one.  */
5573           if (!p)
5574             goto fail;
5575
5576           /* If we failed to the end of the pattern, don't examine *p.  */
5577           assert (p <= pend);
5578           if (p < pend)
5579             {
5580               boolean is_a_jump_n = false;
5581
5582               /* If failed to a backwards jump that's part of a repetition
5583                  loop, need to pop this failure point and use the next one.  */
5584               switch ((re_opcode_t) *p)
5585                 {
5586                 case jump_n:
5587                   is_a_jump_n = true;
5588                 case maybe_pop_jump:
5589                 case pop_failure_jump:
5590                 case jump:
5591                   p1 = p + 1;
5592                   EXTRACT_NUMBER_AND_INCR (mcnt, p1);
5593                   p1 += mcnt;
5594
5595                   if ((is_a_jump_n && (re_opcode_t) *p1 == succeed_n)
5596                       || (!is_a_jump_n
5597                           && (re_opcode_t) *p1 == on_failure_jump))
5598                     goto fail;
5599                   break;
5600                 default:
5601                   /* do nothing */ ;
5602                 }
5603             }
5604
5605           if (d >= string1 && d <= end1)
5606             dend = end_match_1;
5607         }
5608       else
5609         break;   /* Matching at this starting point really fails.  */
5610     } /* for (;;) */
5611
5612   if (best_regs_set)
5613     goto restore_best_regs;
5614
5615   FREE_VARIABLES ();
5616
5617   return -1;                            /* Failure to match.  */
5618 } /* re_match_2 */
5619 \f
5620 /* Subroutine definitions for re_match_2.  */
5621
5622
5623 /* We are passed P pointing to a register number after a start_memory.
5624
5625    Return true if the pattern up to the corresponding stop_memory can
5626    match the empty string, and false otherwise.
5627
5628    If we find the matching stop_memory, sets P to point to one past its number.
5629    Otherwise, sets P to an undefined byte less than or equal to END.
5630
5631    We don't handle duplicates properly (yet).  */
5632
5633 static boolean
5634 group_match_null_string_p (p, end, reg_info)
5635     unsigned char **p, *end;
5636     register_info_type *reg_info;
5637 {
5638   int mcnt;
5639   /* Point to after the args to the start_memory.  */
5640   unsigned char *p1 = *p + 2;
5641
5642   while (p1 < end)
5643     {
5644       /* Skip over opcodes that can match nothing, and return true or
5645          false, as appropriate, when we get to one that can't, or to the
5646          matching stop_memory.  */
5647
5648       switch ((re_opcode_t) *p1)
5649         {
5650         /* Could be either a loop or a series of alternatives.  */
5651         case on_failure_jump:
5652           p1++;
5653           EXTRACT_NUMBER_AND_INCR (mcnt, p1);
5654
5655           /* If the next operation is not a jump backwards in the
5656              pattern.  */
5657
5658           if (mcnt >= 0)
5659             {
5660               /* Go through the on_failure_jumps of the alternatives,
5661                  seeing if any of the alternatives cannot match nothing.
5662                  The last alternative starts with only a jump,
5663                  whereas the rest start with on_failure_jump and end
5664                  with a jump, e.g., here is the pattern for `a|b|c':
5665
5666                  /on_failure_jump/0/6/exactn/1/a/jump_past_alt/0/6
5667                  /on_failure_jump/0/6/exactn/1/b/jump_past_alt/0/3
5668                  /exactn/1/c
5669
5670                  So, we have to first go through the first (n-1)
5671                  alternatives and then deal with the last one separately.  */
5672
5673
5674               /* Deal with the first (n-1) alternatives, which start
5675                  with an on_failure_jump (see above) that jumps to right
5676                  past a jump_past_alt.  */
5677
5678               while ((re_opcode_t) p1[mcnt-3] == jump_past_alt)
5679                 {
5680                   /* `mcnt' holds how many bytes long the alternative
5681                      is, including the ending `jump_past_alt' and
5682                      its number.  */
5683
5684                   if (!alt_match_null_string_p (p1, p1 + mcnt - 3,
5685                                                       reg_info))
5686                     return false;
5687
5688                   /* Move to right after this alternative, including the
5689                      jump_past_alt.  */
5690                   p1 += mcnt;
5691
5692                   /* Break if it's the beginning of an n-th alternative
5693                      that doesn't begin with an on_failure_jump.  */
5694                   if ((re_opcode_t) *p1 != on_failure_jump)
5695                     break;
5696
5697                   /* Still have to check that it's not an n-th
5698                      alternative that starts with an on_failure_jump.  */
5699                   p1++;
5700                   EXTRACT_NUMBER_AND_INCR (mcnt, p1);
5701                   if ((re_opcode_t) p1[mcnt-3] != jump_past_alt)
5702                     {
5703                       /* Get to the beginning of the n-th alternative.  */
5704                       p1 -= 3;
5705                       break;
5706                     }
5707                 }
5708
5709               /* Deal with the last alternative: go back and get number
5710                  of the `jump_past_alt' just before it.  `mcnt' contains
5711                  the length of the alternative.  */
5712               EXTRACT_NUMBER (mcnt, p1 - 2);
5713
5714               if (!alt_match_null_string_p (p1, p1 + mcnt, reg_info))
5715                 return false;
5716
5717               p1 += mcnt;       /* Get past the n-th alternative.  */
5718             } /* if mcnt > 0 */
5719           break;
5720
5721
5722         case stop_memory:
5723           assert (p1[1] == **p);
5724           *p = p1 + 2;
5725           return true;
5726
5727
5728         default:
5729           if (!common_op_match_null_string_p (&p1, end, reg_info))
5730             return false;
5731         }
5732     } /* while p1 < end */
5733
5734   return false;
5735 } /* group_match_null_string_p */
5736
5737
5738 /* Similar to group_match_null_string_p, but doesn't deal with alternatives:
5739    It expects P to be the first byte of a single alternative and END one
5740    byte past the last. The alternative can contain groups.  */
5741
5742 static boolean
5743 alt_match_null_string_p (p, end, reg_info)
5744     unsigned char *p, *end;
5745     register_info_type *reg_info;
5746 {
5747   int mcnt;
5748   unsigned char *p1 = p;
5749
5750   while (p1 < end)
5751     {
5752       /* Skip over opcodes that can match nothing, and break when we get
5753          to one that can't.  */
5754
5755       switch ((re_opcode_t) *p1)
5756         {
5757         /* It's a loop.  */
5758         case on_failure_jump:
5759           p1++;
5760           EXTRACT_NUMBER_AND_INCR (mcnt, p1);
5761           p1 += mcnt;
5762           break;
5763
5764         default:
5765           if (!common_op_match_null_string_p (&p1, end, reg_info))
5766             return false;
5767         }
5768     }  /* while p1 < end */
5769
5770   return true;
5771 } /* alt_match_null_string_p */
5772
5773
5774 /* Deals with the ops common to group_match_null_string_p and
5775    alt_match_null_string_p.
5776
5777    Sets P to one after the op and its arguments, if any.  */
5778
5779 static boolean
5780 common_op_match_null_string_p (p, end, reg_info)
5781     unsigned char **p, *end;
5782     register_info_type *reg_info;
5783 {
5784   int mcnt;
5785   boolean ret;
5786   int reg_no;
5787   unsigned char *p1 = *p;
5788
5789   switch ((re_opcode_t) *p1++)
5790     {
5791     case no_op:
5792     case begline:
5793     case endline:
5794     case begbuf:
5795     case endbuf:
5796     case wordbeg:
5797     case wordend:
5798     case wordbound:
5799     case notwordbound:
5800 #ifdef emacs
5801     case before_dot:
5802     case at_dot:
5803     case after_dot:
5804 #endif
5805       break;
5806
5807     case start_memory:
5808       reg_no = *p1;
5809       assert (reg_no > 0 && reg_no <= MAX_REGNUM);
5810       ret = group_match_null_string_p (&p1, end, reg_info);
5811
5812       /* Have to set this here in case we're checking a group which
5813          contains a group and a back reference to it.  */
5814
5815       if (REG_MATCH_NULL_STRING_P (reg_info[reg_no]) == MATCH_NULL_UNSET_VALUE)
5816         REG_MATCH_NULL_STRING_P (reg_info[reg_no]) = ret;
5817
5818       if (!ret)
5819         return false;
5820       break;
5821
5822     /* If this is an optimized succeed_n for zero times, make the jump.  */
5823     case jump:
5824       EXTRACT_NUMBER_AND_INCR (mcnt, p1);
5825       if (mcnt >= 0)
5826         p1 += mcnt;
5827       else
5828         return false;
5829       break;
5830
5831     case succeed_n:
5832       /* Get to the number of times to succeed.  */
5833       p1 += 2;
5834       EXTRACT_NUMBER_AND_INCR (mcnt, p1);
5835
5836       if (mcnt == 0)
5837         {
5838           p1 -= 4;
5839           EXTRACT_NUMBER_AND_INCR (mcnt, p1);
5840           p1 += mcnt;
5841         }
5842       else
5843         return false;
5844       break;
5845
5846     case duplicate:
5847       if (!REG_MATCH_NULL_STRING_P (reg_info[*p1]))
5848         return false;
5849       break;
5850
5851     case set_number_at:
5852       p1 += 4;
5853
5854     default:
5855       /* All other opcodes mean we cannot match the empty string.  */
5856       return false;
5857   }
5858
5859   *p = p1;
5860   return true;
5861 } /* common_op_match_null_string_p */
5862
5863
5864 /* Return zero if TRANSLATE[S1] and TRANSLATE[S2] are identical for LEN
5865    bytes; nonzero otherwise.  */
5866
5867 static int
5868 bcmp_translate (s1, s2, len, translate)
5869      const char *s1, *s2;
5870      register int len;
5871      RE_TRANSLATE_TYPE translate;
5872 {
5873   register const unsigned char *p1 = (const unsigned char *) s1;
5874   register const unsigned char *p2 = (const unsigned char *) s2;
5875   while (len)
5876     {
5877       if (translate[*p1++] != translate[*p2++]) return 1;
5878       len--;
5879     }
5880   return 0;
5881 }
5882 \f
5883 /* Entry points for GNU code.  */
5884
5885 /* re_compile_pattern is the GNU regular expression compiler: it
5886    compiles PATTERN (of length SIZE) and puts the result in BUFP.
5887    Returns 0 if the pattern was valid, otherwise an error string.
5888
5889    Assumes the `allocated' (and perhaps `buffer') and `translate' fields
5890    are set in BUFP on entry.
5891
5892    We call regex_compile to do the actual compilation.  */
5893
5894 const char *
5895 re_compile_pattern (pattern, length, bufp)
5896      const char *pattern;
5897      size_t length;
5898      struct re_pattern_buffer *bufp;
5899 {
5900   reg_errcode_t ret;
5901
5902   /* GNU code is written to assume at least RE_NREGS registers will be set
5903      (and at least one extra will be -1).  */
5904   bufp->regs_allocated = REGS_UNALLOCATED;
5905
5906   /* And GNU code determines whether or not to get register information
5907      by passing null for the REGS argument to re_match, etc., not by
5908      setting no_sub.  */
5909   bufp->no_sub = 0;
5910
5911   /* Match anchors at newline.  */
5912   bufp->newline_anchor = 1;
5913
5914   ret = regex_compile (pattern, length, re_syntax_options, bufp);
5915
5916   if (!ret)
5917     return NULL;
5918   return gettext (re_error_msgid + re_error_msgid_idx[(int) ret]);
5919 }
5920 #ifdef _LIBC
5921 weak_alias (__re_compile_pattern, re_compile_pattern)
5922 #endif
5923 \f
5924 /* Entry points compatible with 4.2 BSD regex library.  We don't define
5925    them unless specifically requested.  */
5926
5927 #if defined _REGEX_RE_COMP || defined _LIBC
5928
5929 /* BSD has one and only one pattern buffer.  */
5930 static struct re_pattern_buffer re_comp_buf;
5931
5932 char *
5933 #ifdef _LIBC
5934 /* Make these definitions weak in libc, so POSIX programs can redefine
5935    these names if they don't use our functions, and still use
5936    regcomp/regexec below without link errors.  */
5937 weak_function
5938 #endif
5939 re_comp (s)
5940     const char *s;
5941 {
5942   reg_errcode_t ret;
5943
5944   if (!s)
5945     {
5946       if (!re_comp_buf.buffer)
5947         return gettext ("No previous regular expression");
5948       return 0;
5949     }
5950
5951   if (!re_comp_buf.buffer)
5952     {
5953       re_comp_buf.buffer = (unsigned char *) malloc (200);
5954       if (re_comp_buf.buffer == NULL)
5955         return (char *) gettext (re_error_msgid
5956                                  + re_error_msgid_idx[(int) REG_ESPACE]);
5957       re_comp_buf.allocated = 200;
5958
5959       re_comp_buf.fastmap = (char *) malloc (1 << BYTEWIDTH);
5960       if (re_comp_buf.fastmap == NULL)
5961         return (char *) gettext (re_error_msgid
5962                                  + re_error_msgid_idx[(int) REG_ESPACE]);
5963     }
5964
5965   /* Since `re_exec' always passes NULL for the `regs' argument, we
5966      don't need to initialize the pattern buffer fields which affect it.  */
5967
5968   /* Match anchors at newlines.  */
5969   re_comp_buf.newline_anchor = 1;
5970
5971   ret = regex_compile (s, strlen (s), re_syntax_options, &re_comp_buf);
5972
5973   if (!ret)
5974     return NULL;
5975
5976   /* Yes, we're discarding `const' here if !HAVE_LIBINTL.  */
5977   return (char *) gettext (re_error_msgid + re_error_msgid_idx[(int) ret]);
5978 }
5979
5980
5981 int
5982 #ifdef _LIBC
5983 weak_function
5984 #endif
5985 re_exec (s)
5986     const char *s;
5987 {
5988   const int len = strlen (s);
5989   return
5990     0 <= re_search (&re_comp_buf, s, len, 0, len, (struct re_registers *) 0);
5991 }
5992
5993 #endif /* _REGEX_RE_COMP */
5994 \f
5995 /* POSIX.2 functions.  Don't define these for Emacs.  */
5996
5997 #ifndef emacs
5998
5999 /* regcomp takes a regular expression as a string and compiles it.
6000
6001    PREG is a regex_t *.  We do not expect any fields to be initialized,
6002    since POSIX says we shouldn't.  Thus, we set
6003
6004      `buffer' to the compiled pattern;
6005      `used' to the length of the compiled pattern;
6006      `syntax' to RE_SYNTAX_POSIX_EXTENDED if the
6007        REG_EXTENDED bit in CFLAGS is set; otherwise, to
6008        RE_SYNTAX_POSIX_BASIC;
6009      `newline_anchor' to REG_NEWLINE being set in CFLAGS;
6010      `fastmap' to an allocated space for the fastmap;
6011      `fastmap_accurate' to zero;
6012      `re_nsub' to the number of subexpressions in PATTERN.
6013
6014    PATTERN is the address of the pattern string.
6015
6016    CFLAGS is a series of bits which affect compilation.
6017
6018      If REG_EXTENDED is set, we use POSIX extended syntax; otherwise, we
6019      use POSIX basic syntax.
6020
6021      If REG_NEWLINE is set, then . and [^...] don't match newline.
6022      Also, regexec will try a match beginning after every newline.
6023
6024      If REG_ICASE is set, then we considers upper- and lowercase
6025      versions of letters to be equivalent when matching.
6026
6027      If REG_NOSUB is set, then when PREG is passed to regexec, that
6028      routine will report only success or failure, and nothing about the
6029      registers.
6030
6031    It returns 0 if it succeeds, nonzero if it doesn't.  (See regex.h for
6032    the return codes and their meanings.)  */
6033
6034 int
6035 regcomp (preg, pattern, cflags)
6036     regex_t *preg;
6037     const char *pattern;
6038     int cflags;
6039 {
6040   reg_errcode_t ret;
6041   reg_syntax_t syntax
6042     = (cflags & REG_EXTENDED) ?
6043       RE_SYNTAX_POSIX_EXTENDED : RE_SYNTAX_POSIX_BASIC;
6044
6045   /* regex_compile will allocate the space for the compiled pattern.  */
6046   preg->buffer = 0;
6047   preg->allocated = 0;
6048   preg->used = 0;
6049
6050   /* Try to allocate space for the fastmap.  */
6051   preg->fastmap = (char *) malloc (1 << BYTEWIDTH);
6052
6053   if (cflags & REG_ICASE)
6054     {
6055       unsigned i;
6056
6057       preg->translate
6058         = (RE_TRANSLATE_TYPE) malloc (CHAR_SET_SIZE
6059                                       * sizeof (*(RE_TRANSLATE_TYPE)0));
6060       if (preg->translate == NULL)
6061         return (int) REG_ESPACE;
6062
6063       /* Map uppercase characters to corresponding lowercase ones.  */
6064       for (i = 0; i < CHAR_SET_SIZE; i++)
6065         preg->translate[i] = ISUPPER (i) ? TOLOWER (i) : i;
6066     }
6067   else
6068     preg->translate = NULL;
6069
6070   /* If REG_NEWLINE is set, newlines are treated differently.  */
6071   if (cflags & REG_NEWLINE)
6072     { /* REG_NEWLINE implies neither . nor [^...] match newline.  */
6073       syntax &= ~RE_DOT_NEWLINE;
6074       syntax |= RE_HAT_LISTS_NOT_NEWLINE;
6075       /* It also changes the matching behavior.  */
6076       preg->newline_anchor = 1;
6077     }
6078   else
6079     preg->newline_anchor = 0;
6080
6081   preg->no_sub = !!(cflags & REG_NOSUB);
6082
6083   /* POSIX says a null character in the pattern terminates it, so we
6084      can use strlen here in compiling the pattern.  */
6085   ret = regex_compile (pattern, strlen (pattern), syntax, preg);
6086
6087   /* POSIX doesn't distinguish between an unmatched open-group and an
6088      unmatched close-group: both are REG_EPAREN.  */
6089   if (ret == REG_ERPAREN) ret = REG_EPAREN;
6090
6091   if (ret == REG_NOERROR && preg->fastmap)
6092     {
6093       /* Compute the fastmap now, since regexec cannot modify the pattern
6094          buffer.  */
6095       if (re_compile_fastmap (preg) == -2)
6096         {
6097           /* Some error occurred while computing the fastmap, just forget
6098              about it.  */
6099           free (preg->fastmap);
6100           preg->fastmap = NULL;
6101         }
6102     }
6103
6104   return (int) ret;
6105 }
6106 #ifdef _LIBC
6107 weak_alias (__regcomp, regcomp)
6108 #endif
6109
6110
6111 /* regexec searches for a given pattern, specified by PREG, in the
6112    string STRING.
6113
6114    If NMATCH is zero or REG_NOSUB was set in the cflags argument to
6115    `regcomp', we ignore PMATCH.  Otherwise, we assume PMATCH has at
6116    least NMATCH elements, and we set them to the offsets of the
6117    corresponding matched substrings.
6118
6119    EFLAGS specifies `execution flags' which affect matching: if
6120    REG_NOTBOL is set, then ^ does not match at the beginning of the
6121    string; if REG_NOTEOL is set, then $ does not match at the end.
6122
6123    We return 0 if we find a match and REG_NOMATCH if not.  */
6124
6125 int
6126 regexec (preg, string, nmatch, pmatch, eflags)
6127     const regex_t *preg;
6128     const char *string;
6129     size_t nmatch;
6130     regmatch_t pmatch[];
6131     int eflags;
6132 {
6133   int ret;
6134   struct re_registers regs;
6135   regex_t private_preg;
6136   int len = strlen (string);
6137   boolean want_reg_info = !preg->no_sub && nmatch > 0;
6138
6139   private_preg = *preg;
6140
6141   private_preg.not_bol = !!(eflags & REG_NOTBOL);
6142   private_preg.not_eol = !!(eflags & REG_NOTEOL);
6143
6144   /* The user has told us exactly how many registers to return
6145      information about, via `nmatch'.  We have to pass that on to the
6146      matching routines.  */
6147   private_preg.regs_allocated = REGS_FIXED;
6148
6149   if (want_reg_info)
6150     {
6151       regs.num_regs = nmatch;
6152       regs.start = TALLOC (nmatch * 2, regoff_t);
6153       if (regs.start == NULL)
6154         return (int) REG_NOMATCH;
6155       regs.end = regs.start + nmatch;
6156     }
6157
6158   /* Perform the searching operation.  */
6159   ret = re_search (&private_preg, string, len,
6160                    /* start: */ 0, /* range: */ len,
6161                    want_reg_info ? &regs : (struct re_registers *) 0);
6162
6163   /* Copy the register information to the POSIX structure.  */
6164   if (want_reg_info)
6165     {
6166       if (ret >= 0)
6167         {
6168           unsigned r;
6169
6170           for (r = 0; r < nmatch; r++)
6171             {
6172               pmatch[r].rm_so = regs.start[r];
6173               pmatch[r].rm_eo = regs.end[r];
6174             }
6175         }
6176
6177       /* If we needed the temporary register info, free the space now.  */
6178       free (regs.start);
6179     }
6180
6181   /* We want zero return to mean success, unlike `re_search'.  */
6182   return ret >= 0 ? (int) REG_NOERROR : (int) REG_NOMATCH;
6183 }
6184 #ifdef _LIBC
6185 weak_alias (__regexec, regexec)
6186 #endif
6187
6188
6189 /* Returns a message corresponding to an error code, ERRCODE, returned
6190    from either regcomp or regexec.   We don't use PREG here.  */
6191
6192 size_t
6193 regerror (errcode, preg, errbuf, errbuf_size)
6194     int errcode;
6195     const regex_t *preg;
6196     char *errbuf;
6197     size_t errbuf_size;
6198 {
6199   const char *msg;
6200   size_t msg_size;
6201
6202   if (errcode < 0
6203       || errcode >= (int) (sizeof (re_error_msgid_idx)
6204                            / sizeof (re_error_msgid_idx[0])))
6205     /* Only error codes returned by the rest of the code should be passed
6206        to this routine.  If we are given anything else, or if other regex
6207        code generates an invalid error code, then the program has a bug.
6208        Dump core so we can fix it.  */
6209     abort ();
6210
6211   msg = gettext (re_error_msgid + re_error_msgid_idx[errcode]);
6212
6213   msg_size = strlen (msg) + 1; /* Includes the null.  */
6214
6215   if (errbuf_size != 0)
6216     {
6217       if (msg_size > errbuf_size)
6218         {
6219 #if defined HAVE_MEMPCPY || defined _LIBC
6220           *((char *) __mempcpy (errbuf, msg, errbuf_size - 1)) = '\0';
6221 #else
6222           memcpy (errbuf, msg, errbuf_size - 1);
6223           errbuf[errbuf_size - 1] = 0;
6224 #endif
6225         }
6226       else
6227         memcpy (errbuf, msg, msg_size);
6228     }
6229
6230   return msg_size;
6231 }
6232 #ifdef _LIBC
6233 weak_alias (__regerror, regerror)
6234 #endif
6235
6236
6237 /* Free dynamically allocated space used by PREG.  */
6238
6239 void
6240 regfree (preg)
6241     regex_t *preg;
6242 {
6243   if (preg->buffer != NULL)
6244     free (preg->buffer);
6245   preg->buffer = NULL;
6246
6247   preg->allocated = 0;
6248   preg->used = 0;
6249
6250   if (preg->fastmap != NULL)
6251     free (preg->fastmap);
6252   preg->fastmap = NULL;
6253   preg->fastmap_accurate = 0;
6254
6255   if (preg->translate != NULL)
6256     free (preg->translate);
6257   preg->translate = NULL;
6258 }
6259 #ifdef _LIBC
6260 weak_alias (__regfree, regfree)
6261 #endif
6262
6263 #endif /* not emacs  */