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