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