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