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