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