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