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