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