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