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