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