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