(REGEX_FREE): Add back the `while (0)' hack
[gnulib.git] / lib / 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) while (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 #ifdef REL_ALLOC_STMT
2869   fail_stack_elt_t *failure_stack_ptr;
2870 #endif
2871
2872   /* Assume that each path through the pattern can be null until
2873      proven otherwise.  We set this false at the bottom of switch
2874      statement, to which we get only if a particular path doesn't
2875      match the empty string.  */
2876   boolean path_can_be_null = true;
2877
2878   /* We aren't doing a `succeed_n' to begin with.  */
2879   boolean succeed_n_p = false;
2880
2881   assert (fastmap != NULL && p != NULL);
2882   
2883   INIT_FAIL_STACK ();
2884   bzero (fastmap, 1 << BYTEWIDTH);  /* Assume nothing's valid.  */
2885   bufp->fastmap_accurate = 1;       /* It will be when we're done.  */
2886   bufp->can_be_null = 0;
2887       
2888   while (1)
2889     {
2890       if (p == pend || *p == succeed)
2891         {
2892           /* We have reached the (effective) end of pattern.  */
2893           if (!FAIL_STACK_EMPTY ())
2894             {
2895               bufp->can_be_null |= path_can_be_null;
2896
2897               /* Reset for next path.  */
2898               path_can_be_null = true;
2899
2900               p = fail_stack.stack[--fail_stack.avail];
2901
2902               continue;
2903             }
2904           else
2905             break;
2906         }
2907
2908       /* We should never be about to go beyond the end of the pattern.  */
2909       assert (p < pend);
2910       
2911       switch (SWITCH_ENUM_CAST ((re_opcode_t) *p++))
2912         {
2913
2914         /* I guess the idea here is to simply not bother with a fastmap
2915            if a backreference is used, since it's too hard to figure out
2916            the fastmap for the corresponding group.  Setting
2917            `can_be_null' stops `re_search_2' from using the fastmap, so
2918            that is all we do.  */
2919         case duplicate:
2920           bufp->can_be_null = 1;
2921           goto done;
2922
2923
2924       /* Following are the cases which match a character.  These end
2925          with `break'.  */
2926
2927         case exactn:
2928           fastmap[p[1]] = 1;
2929           break;
2930
2931
2932         case charset:
2933           for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--)
2934             if (p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH)))
2935               fastmap[j] = 1;
2936           break;
2937
2938
2939         case charset_not:
2940           /* Chars beyond end of map must be allowed.  */
2941           for (j = *p * BYTEWIDTH; j < (1 << BYTEWIDTH); j++)
2942             fastmap[j] = 1;
2943
2944           for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--)
2945             if (!(p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH))))
2946               fastmap[j] = 1;
2947           break;
2948
2949
2950         case wordchar:
2951           for (j = 0; j < (1 << BYTEWIDTH); j++)
2952             if (SYNTAX (j) == Sword)
2953               fastmap[j] = 1;
2954           break;
2955
2956
2957         case notwordchar:
2958           for (j = 0; j < (1 << BYTEWIDTH); j++)
2959             if (SYNTAX (j) != Sword)
2960               fastmap[j] = 1;
2961           break;
2962
2963
2964         case anychar:
2965           {
2966             int fastmap_newline = fastmap['\n'];
2967
2968             /* `.' matches anything ...  */
2969             for (j = 0; j < (1 << BYTEWIDTH); j++)
2970               fastmap[j] = 1;
2971
2972             /* ... except perhaps newline.  */
2973             if (!(bufp->syntax & RE_DOT_NEWLINE))
2974               fastmap['\n'] = fastmap_newline;
2975
2976             /* Return if we have already set `can_be_null'; if we have,
2977                then the fastmap is irrelevant.  Something's wrong here.  */
2978             else if (bufp->can_be_null)
2979               goto done;
2980
2981             /* Otherwise, have to check alternative paths.  */
2982             break;
2983           }
2984
2985 #ifdef emacs
2986         case syntaxspec:
2987           k = *p++;
2988           for (j = 0; j < (1 << BYTEWIDTH); j++)
2989             if (SYNTAX (j) == (enum syntaxcode) k)
2990               fastmap[j] = 1;
2991           break;
2992
2993
2994         case notsyntaxspec:
2995           k = *p++;
2996           for (j = 0; j < (1 << BYTEWIDTH); j++)
2997             if (SYNTAX (j) != (enum syntaxcode) k)
2998               fastmap[j] = 1;
2999           break;
3000
3001
3002       /* All cases after this match the empty string.  These end with
3003          `continue'.  */
3004
3005
3006         case before_dot:
3007         case at_dot:
3008         case after_dot:
3009           continue;
3010 #endif /* not emacs */
3011
3012
3013         case no_op:
3014         case begline:
3015         case endline:
3016         case begbuf:
3017         case endbuf:
3018         case wordbound:
3019         case notwordbound:
3020         case wordbeg:
3021         case wordend:
3022         case push_dummy_failure:
3023           continue;
3024
3025
3026         case jump_n:
3027         case pop_failure_jump:
3028         case maybe_pop_jump:
3029         case jump:
3030         case jump_past_alt:
3031         case dummy_failure_jump:
3032           EXTRACT_NUMBER_AND_INCR (j, p);
3033           p += j;       
3034           if (j > 0)
3035             continue;
3036             
3037           /* Jump backward implies we just went through the body of a
3038              loop and matched nothing.  Opcode jumped to should be
3039              `on_failure_jump' or `succeed_n'.  Just treat it like an
3040              ordinary jump.  For a * loop, it has pushed its failure
3041              point already; if so, discard that as redundant.  */
3042           if ((re_opcode_t) *p != on_failure_jump
3043               && (re_opcode_t) *p != succeed_n)
3044             continue;
3045
3046           p++;
3047           EXTRACT_NUMBER_AND_INCR (j, p);
3048           p += j;               
3049           
3050           /* If what's on the stack is where we are now, pop it.  */
3051           if (!FAIL_STACK_EMPTY () 
3052               && fail_stack.stack[fail_stack.avail - 1] == p)
3053             fail_stack.avail--;
3054
3055           continue;
3056
3057
3058         case on_failure_jump:
3059         case on_failure_keep_string_jump:
3060         handle_on_failure_jump:
3061           EXTRACT_NUMBER_AND_INCR (j, p);
3062
3063           /* For some patterns, e.g., `(a?)?', `p+j' here points to the
3064              end of the pattern.  We don't want to push such a point,
3065              since when we restore it above, entering the switch will
3066              increment `p' past the end of the pattern.  We don't need
3067              to push such a point since we obviously won't find any more
3068              fastmap entries beyond `pend'.  Such a pattern can match
3069              the null string, though.  */
3070           if (p + j < pend)
3071             {
3072               if (!PUSH_PATTERN_OP (p + j, fail_stack))
3073                 {
3074                   REGEX_FREE_STACK (fail_stack.stack);
3075                   return -2;
3076                 }
3077             }
3078           else
3079             bufp->can_be_null = 1;
3080
3081           if (succeed_n_p)
3082             {
3083               EXTRACT_NUMBER_AND_INCR (k, p);   /* Skip the n.  */
3084               succeed_n_p = false;
3085             }
3086
3087           continue;
3088
3089
3090         case succeed_n:
3091           /* Get to the number of times to succeed.  */
3092           p += 2;               
3093
3094           /* Increment p past the n for when k != 0.  */
3095           EXTRACT_NUMBER_AND_INCR (k, p);
3096           if (k == 0)
3097             {
3098               p -= 4;
3099               succeed_n_p = true;  /* Spaghetti code alert.  */
3100               goto handle_on_failure_jump;
3101             }
3102           continue;
3103
3104
3105         case set_number_at:
3106           p += 4;
3107           continue;
3108
3109
3110         case start_memory:
3111         case stop_memory:
3112           p += 2;
3113           continue;
3114
3115
3116         default:
3117           abort (); /* We have listed all the cases.  */
3118         } /* switch *p++ */
3119
3120       /* Getting here means we have found the possible starting
3121          characters for one path of the pattern -- and that the empty
3122          string does not match.  We need not follow this path further.
3123          Instead, look at the next alternative (remembered on the
3124          stack), or quit if no more.  The test at the top of the loop
3125          does these things.  */
3126       path_can_be_null = false;
3127       p = pend;
3128     } /* while p */
3129
3130   /* Set `can_be_null' for the last path (also the first path, if the
3131      pattern is empty).  */
3132   bufp->can_be_null |= path_can_be_null;
3133
3134  done:
3135   REGEX_FREE_STACK (fail_stack.stack);
3136   return 0;
3137 } /* re_compile_fastmap */
3138 \f
3139 /* Set REGS to hold NUM_REGS registers, storing them in STARTS and
3140    ENDS.  Subsequent matches using PATTERN_BUFFER and REGS will use
3141    this memory for recording register information.  STARTS and ENDS
3142    must be allocated using the malloc library routine, and must each
3143    be at least NUM_REGS * sizeof (regoff_t) bytes long.
3144
3145    If NUM_REGS == 0, then subsequent matches should allocate their own
3146    register data.
3147
3148    Unless this function is called, the first search or match using
3149    PATTERN_BUFFER will allocate its own register data, without
3150    freeing the old data.  */
3151
3152 void
3153 re_set_registers (bufp, regs, num_regs, starts, ends)
3154     struct re_pattern_buffer *bufp;
3155     struct re_registers *regs;
3156     unsigned num_regs;
3157     regoff_t *starts, *ends;
3158 {
3159   if (num_regs)
3160     {
3161       bufp->regs_allocated = REGS_REALLOCATE;
3162       regs->num_regs = num_regs;
3163       regs->start = starts;
3164       regs->end = ends;
3165     }
3166   else
3167     {
3168       bufp->regs_allocated = REGS_UNALLOCATED;
3169       regs->num_regs = 0;
3170       regs->start = regs->end = (regoff_t *) 0;
3171     }
3172 }
3173 \f
3174 /* Searching routines.  */
3175
3176 /* Like re_search_2, below, but only one string is specified, and
3177    doesn't let you say where to stop matching. */
3178
3179 int
3180 re_search (bufp, string, size, startpos, range, regs)
3181      struct re_pattern_buffer *bufp;
3182      const char *string;
3183      int size, startpos, range;
3184      struct re_registers *regs;
3185 {
3186   return re_search_2 (bufp, NULL, 0, string, size, startpos, range, 
3187                       regs, size);
3188 }
3189
3190
3191 /* Using the compiled pattern in BUFP->buffer, first tries to match the
3192    virtual concatenation of STRING1 and STRING2, starting first at index
3193    STARTPOS, then at STARTPOS + 1, and so on.
3194    
3195    STRING1 and STRING2 have length SIZE1 and SIZE2, respectively.
3196    
3197    RANGE is how far to scan while trying to match.  RANGE = 0 means try
3198    only at STARTPOS; in general, the last start tried is STARTPOS +
3199    RANGE.
3200    
3201    In REGS, return the indices of the virtual concatenation of STRING1
3202    and STRING2 that matched the entire BUFP->buffer and its contained
3203    subexpressions.
3204    
3205    Do not consider matching one past the index STOP in the virtual
3206    concatenation of STRING1 and STRING2.
3207
3208    We return either the position in the strings at which the match was
3209    found, -1 if no match, or -2 if error (such as failure
3210    stack overflow).  */
3211
3212 int
3213 re_search_2 (bufp, string1, size1, string2, size2, startpos, range, regs, stop)
3214      struct re_pattern_buffer *bufp;
3215      const char *string1, *string2;
3216      int size1, size2;
3217      int startpos;
3218      int range;
3219      struct re_registers *regs;
3220      int stop;
3221 {
3222   int val;
3223   register char *fastmap = bufp->fastmap;
3224   register char *translate = bufp->translate;
3225   int total_size = size1 + size2;
3226   int endpos = startpos + range;
3227
3228   /* Check for out-of-range STARTPOS.  */
3229   if (startpos < 0 || startpos > total_size)
3230     return -1;
3231     
3232   /* Fix up RANGE if it might eventually take us outside
3233      the virtual concatenation of STRING1 and STRING2.  */
3234   if (endpos < -1)
3235     range = -1 - startpos;
3236   else if (endpos > total_size)
3237     range = total_size - startpos;
3238
3239   /* If the search isn't to be a backwards one, don't waste time in a
3240      search for a pattern that must be anchored.  */
3241   if (bufp->used > 0 && (re_opcode_t) bufp->buffer[0] == begbuf && range > 0)
3242     {
3243       if (startpos > 0)
3244         return -1;
3245       else
3246         range = 1;
3247     }
3248
3249   /* Update the fastmap now if not correct already.  */
3250   if (fastmap && !bufp->fastmap_accurate)
3251     if (re_compile_fastmap (bufp) == -2)
3252       return -2;
3253   
3254   /* Loop through the string, looking for a place to start matching.  */
3255   for (;;)
3256     { 
3257       /* If a fastmap is supplied, skip quickly over characters that
3258          cannot be the start of a match.  If the pattern can match the
3259          null string, however, we don't need to skip characters; we want
3260          the first null string.  */
3261       if (fastmap && startpos < total_size && !bufp->can_be_null)
3262         {
3263           if (range > 0)        /* Searching forwards.  */
3264             {
3265               register const char *d;
3266               register int lim = 0;
3267               int irange = range;
3268
3269               if (startpos < size1 && startpos + range >= size1)
3270                 lim = range - (size1 - startpos);
3271
3272               d = (startpos >= size1 ? string2 - size1 : string1) + startpos;
3273    
3274               /* Written out as an if-else to avoid testing `translate'
3275                  inside the loop.  */
3276               if (translate)
3277                 while (range > lim
3278                        && !fastmap[(unsigned char)
3279                                    translate[(unsigned char) *d++]])
3280                   range--;
3281               else
3282                 while (range > lim && !fastmap[(unsigned char) *d++])
3283                   range--;
3284
3285               startpos += irange - range;
3286             }
3287           else                          /* Searching backwards.  */
3288             {
3289               register char c = (size1 == 0 || startpos >= size1
3290                                  ? string2[startpos - size1] 
3291                                  : string1[startpos]);
3292
3293               if (!fastmap[(unsigned char) TRANSLATE (c)])
3294                 goto advance;
3295             }
3296         }
3297
3298       /* If can't match the null string, and that's all we have left, fail.  */
3299       if (range >= 0 && startpos == total_size && fastmap
3300           && !bufp->can_be_null)
3301         return -1;
3302
3303       val = re_match_2_internal (bufp, string1, size1, string2, size2,
3304                                  startpos, regs, stop);
3305 #ifndef REGEX_MALLOC
3306 #ifdef C_ALLOCA
3307       alloca (0);
3308 #endif
3309 #endif
3310
3311       if (val >= 0)
3312         return startpos;
3313         
3314       if (val == -2)
3315         return -2;
3316
3317     advance:
3318       if (!range) 
3319         break;
3320       else if (range > 0) 
3321         {
3322           range--; 
3323           startpos++;
3324         }
3325       else
3326         {
3327           range++; 
3328           startpos--;
3329         }
3330     }
3331   return -1;
3332 } /* re_search_2 */
3333 \f
3334 /* Declarations and macros for re_match_2.  */
3335
3336 static int bcmp_translate ();
3337 static boolean alt_match_null_string_p (),
3338                common_op_match_null_string_p (),
3339                group_match_null_string_p ();
3340
3341 /* This converts PTR, a pointer into one of the search strings `string1'
3342    and `string2' into an offset from the beginning of that string.  */
3343 #define POINTER_TO_OFFSET(ptr)                  \
3344   (FIRST_STRING_P (ptr)                         \
3345    ? ((regoff_t) ((ptr) - string1))             \
3346    : ((regoff_t) ((ptr) - string2 + size1)))
3347
3348 /* Macros for dealing with the split strings in re_match_2.  */
3349
3350 #define MATCHING_IN_FIRST_STRING  (dend == end_match_1)
3351
3352 /* Call before fetching a character with *d.  This switches over to
3353    string2 if necessary.  */
3354 #define PREFETCH()                                                      \
3355   while (d == dend)                                                     \
3356     {                                                                   \
3357       /* End of string2 => fail.  */                                    \
3358       if (dend == end_match_2)                                          \
3359         goto fail;                                                      \
3360       /* End of string1 => advance to string2.  */                      \
3361       d = string2;                                                      \
3362       dend = end_match_2;                                               \
3363     }
3364
3365
3366 /* Test if at very beginning or at very end of the virtual concatenation
3367    of `string1' and `string2'.  If only one string, it's `string2'.  */
3368 #define AT_STRINGS_BEG(d) ((d) == (size1 ? string1 : string2) || !size2)
3369 #define AT_STRINGS_END(d) ((d) == end2) 
3370
3371
3372 /* Test if D points to a character which is word-constituent.  We have
3373    two special cases to check for: if past the end of string1, look at
3374    the first character in string2; and if before the beginning of
3375    string2, look at the last character in string1.  */
3376 #define WORDCHAR_P(d)                                                   \
3377   (SYNTAX ((d) == end1 ? *string2                                       \
3378            : (d) == string2 - 1 ? *(end1 - 1) : *(d))                   \
3379    == Sword)
3380
3381 /* Test if the character before D and the one at D differ with respect
3382    to being word-constituent.  */
3383 #define AT_WORD_BOUNDARY(d)                                             \
3384   (AT_STRINGS_BEG (d) || AT_STRINGS_END (d)                             \
3385    || WORDCHAR_P (d - 1) != WORDCHAR_P (d))
3386
3387
3388 /* Free everything we malloc.  */
3389 #ifdef MATCH_MAY_ALLOCATE
3390 #define FREE_VAR(var) if (var) REGEX_FREE (var); var = NULL
3391 #define FREE_VARIABLES()                                                \
3392   do {                                                                  \
3393     REGEX_FREE_STACK (fail_stack.stack);                                \
3394     FREE_VAR (regstart);                                                \
3395     FREE_VAR (regend);                                                  \
3396     FREE_VAR (old_regstart);                                            \
3397     FREE_VAR (old_regend);                                              \
3398     FREE_VAR (best_regstart);                                           \
3399     FREE_VAR (best_regend);                                             \
3400     FREE_VAR (reg_info);                                                \
3401     FREE_VAR (reg_dummy);                                               \
3402     FREE_VAR (reg_info_dummy);                                          \
3403   } while (0)
3404 #else
3405 #define FREE_VARIABLES() /* Do nothing!  */
3406 #endif /* not MATCH_MAY_ALLOCATE */
3407
3408 /* These values must meet several constraints.  They must not be valid
3409    register values; since we have a limit of 255 registers (because
3410    we use only one byte in the pattern for the register number), we can
3411    use numbers larger than 255.  They must differ by 1, because of
3412    NUM_FAILURE_ITEMS above.  And the value for the lowest register must
3413    be larger than the value for the highest register, so we do not try
3414    to actually save any registers when none are active.  */
3415 #define NO_HIGHEST_ACTIVE_REG (1 << BYTEWIDTH)
3416 #define NO_LOWEST_ACTIVE_REG (NO_HIGHEST_ACTIVE_REG + 1)
3417 \f
3418 /* Matching routines.  */
3419
3420 #ifndef emacs   /* Emacs never uses this.  */
3421 /* re_match is like re_match_2 except it takes only a single string.  */
3422
3423 int
3424 re_match (bufp, string, size, pos, regs)
3425      struct re_pattern_buffer *bufp;
3426      const char *string;
3427      int size, pos;
3428      struct re_registers *regs;
3429 {
3430   int result = re_match_2_internal (bufp, NULL, 0, string, size,
3431                                     pos, regs, size);
3432   alloca (0);
3433   return result;
3434 }
3435 #endif /* not emacs */
3436
3437
3438 /* re_match_2 matches the compiled pattern in BUFP against the
3439    the (virtual) concatenation of STRING1 and STRING2 (of length SIZE1
3440    and SIZE2, respectively).  We start matching at POS, and stop
3441    matching at STOP.
3442    
3443    If REGS is non-null and the `no_sub' field of BUFP is nonzero, we
3444    store offsets for the substring each group matched in REGS.  See the
3445    documentation for exactly how many groups we fill.
3446
3447    We return -1 if no match, -2 if an internal error (such as the
3448    failure stack overflowing).  Otherwise, we return the length of the
3449    matched substring.  */
3450
3451 int
3452 re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop)
3453      struct re_pattern_buffer *bufp;
3454      const char *string1, *string2;
3455      int size1, size2;
3456      int pos;
3457      struct re_registers *regs;
3458      int stop;
3459 {
3460   int result = re_match_2_internal (bufp, string1, size1, string2, size2,
3461                                     pos, regs, stop);
3462   alloca (0);
3463   return result;
3464 }
3465
3466 /* This is a separate function so that we can force an alloca cleanup
3467    afterwards.  */
3468 static int
3469 re_match_2_internal (bufp, string1, size1, string2, size2, pos, regs, stop)
3470      struct re_pattern_buffer *bufp;
3471      const char *string1, *string2;
3472      int size1, size2;
3473      int pos;
3474      struct re_registers *regs;
3475      int stop;
3476 {
3477   /* General temporaries.  */
3478   int mcnt;
3479   unsigned char *p1;
3480
3481   /* Just past the end of the corresponding string.  */
3482   const char *end1, *end2;
3483
3484   /* Pointers into string1 and string2, just past the last characters in
3485      each to consider matching.  */
3486   const char *end_match_1, *end_match_2;
3487
3488   /* Where we are in the data, and the end of the current string.  */
3489   const char *d, *dend;
3490   
3491   /* Where we are in the pattern, and the end of the pattern.  */
3492   unsigned char *p = bufp->buffer;
3493   register unsigned char *pend = p + bufp->used;
3494
3495   /* Mark the opcode just after a start_memory, so we can test for an
3496      empty subpattern when we get to the stop_memory.  */
3497   unsigned char *just_past_start_mem = 0;
3498
3499   /* We use this to map every character in the string.  */
3500   char *translate = bufp->translate;
3501
3502   /* Failure point stack.  Each place that can handle a failure further
3503      down the line pushes a failure point on this stack.  It consists of
3504      restart, regend, and reg_info for all registers corresponding to
3505      the subexpressions we're currently inside, plus the number of such
3506      registers, and, finally, two char *'s.  The first char * is where
3507      to resume scanning the pattern; the second one is where to resume
3508      scanning the strings.  If the latter is zero, the failure point is
3509      a ``dummy''; if a failure happens and the failure point is a dummy,
3510      it gets discarded and the next next one is tried.  */
3511 #ifdef MATCH_MAY_ALLOCATE /* otherwise, this is global.  */
3512   fail_stack_type fail_stack;
3513 #endif
3514 #ifdef DEBUG
3515   static unsigned failure_id = 0;
3516   unsigned nfailure_points_pushed = 0, nfailure_points_popped = 0;
3517 #endif
3518
3519   /* This holds the pointer to the failure stack, when
3520      it is allocated relocatably.  */
3521 #ifdef REL_ALLOC_STMT
3522   fail_stack_elt_t *failure_stack_ptr;
3523 #endif
3524
3525   /* We fill all the registers internally, independent of what we
3526      return, for use in backreferences.  The number here includes
3527      an element for register zero.  */
3528   unsigned num_regs = bufp->re_nsub + 1;
3529   
3530   /* The currently active registers.  */
3531   unsigned lowest_active_reg = NO_LOWEST_ACTIVE_REG;
3532   unsigned highest_active_reg = NO_HIGHEST_ACTIVE_REG;
3533
3534   /* Information on the contents of registers. These are pointers into
3535      the input strings; they record just what was matched (on this
3536      attempt) by a subexpression part of the pattern, that is, the
3537      regnum-th regstart pointer points to where in the pattern we began
3538      matching and the regnum-th regend points to right after where we
3539      stopped matching the regnum-th subexpression.  (The zeroth register
3540      keeps track of what the whole pattern matches.)  */
3541 #ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global.  */
3542   const char **regstart, **regend;
3543 #endif
3544
3545   /* If a group that's operated upon by a repetition operator fails to
3546      match anything, then the register for its start will need to be
3547      restored because it will have been set to wherever in the string we
3548      are when we last see its open-group operator.  Similarly for a
3549      register's end.  */
3550 #ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global.  */
3551   const char **old_regstart, **old_regend;
3552 #endif
3553
3554   /* The is_active field of reg_info helps us keep track of which (possibly
3555      nested) subexpressions we are currently in. The matched_something
3556      field of reg_info[reg_num] helps us tell whether or not we have
3557      matched any of the pattern so far this time through the reg_num-th
3558      subexpression.  These two fields get reset each time through any
3559      loop their register is in.  */
3560 #ifdef MATCH_MAY_ALLOCATE /* otherwise, this is global.  */
3561   register_info_type *reg_info; 
3562 #endif
3563
3564   /* The following record the register info as found in the above
3565      variables when we find a match better than any we've seen before. 
3566      This happens as we backtrack through the failure points, which in
3567      turn happens only if we have not yet matched the entire string. */
3568   unsigned best_regs_set = false;
3569 #ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global.  */
3570   const char **best_regstart, **best_regend;
3571 #endif
3572   
3573   /* Logically, this is `best_regend[0]'.  But we don't want to have to
3574      allocate space for that if we're not allocating space for anything
3575      else (see below).  Also, we never need info about register 0 for
3576      any of the other register vectors, and it seems rather a kludge to
3577      treat `best_regend' differently than the rest.  So we keep track of
3578      the end of the best match so far in a separate variable.  We
3579      initialize this to NULL so that when we backtrack the first time
3580      and need to test it, it's not garbage.  */
3581   const char *match_end = NULL;
3582
3583   /* This helps SET_REGS_MATCHED avoid doing redundant work.  */
3584   int set_regs_matched_done = 0;
3585
3586   /* Used when we pop values we don't care about.  */
3587 #ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global.  */
3588   const char **reg_dummy;
3589   register_info_type *reg_info_dummy;
3590 #endif
3591
3592 #ifdef DEBUG
3593   /* Counts the total number of registers pushed.  */
3594   unsigned num_regs_pushed = 0;         
3595 #endif
3596
3597   DEBUG_PRINT1 ("\n\nEntering re_match_2.\n");
3598   
3599   INIT_FAIL_STACK ();
3600   
3601 #ifdef MATCH_MAY_ALLOCATE
3602   /* Do not bother to initialize all the register variables if there are
3603      no groups in the pattern, as it takes a fair amount of time.  If
3604      there are groups, we include space for register 0 (the whole
3605      pattern), even though we never use it, since it simplifies the
3606      array indexing.  We should fix this.  */
3607   if (bufp->re_nsub)
3608     {
3609       regstart = REGEX_TALLOC (num_regs, const char *);
3610       regend = REGEX_TALLOC (num_regs, const char *);
3611       old_regstart = REGEX_TALLOC (num_regs, const char *);
3612       old_regend = REGEX_TALLOC (num_regs, const char *);
3613       best_regstart = REGEX_TALLOC (num_regs, const char *);
3614       best_regend = REGEX_TALLOC (num_regs, const char *);
3615       reg_info = REGEX_TALLOC (num_regs, register_info_type);
3616       reg_dummy = REGEX_TALLOC (num_regs, const char *);
3617       reg_info_dummy = REGEX_TALLOC (num_regs, register_info_type);
3618
3619       if (!(regstart && regend && old_regstart && old_regend && reg_info 
3620             && best_regstart && best_regend && reg_dummy && reg_info_dummy)) 
3621         {
3622           FREE_VARIABLES ();
3623           return -2;
3624         }
3625     }
3626   else
3627     {
3628       /* We must initialize all our variables to NULL, so that
3629          `FREE_VARIABLES' doesn't try to free them.  */
3630       regstart = regend = old_regstart = old_regend = best_regstart
3631         = best_regend = reg_dummy = NULL;
3632       reg_info = reg_info_dummy = (register_info_type *) NULL;
3633     }
3634 #endif /* MATCH_MAY_ALLOCATE */
3635
3636   /* The starting position is bogus.  */
3637   if (pos < 0 || pos > size1 + size2)
3638     {
3639       FREE_VARIABLES ();
3640       return -1;
3641     }
3642     
3643   /* Initialize subexpression text positions to -1 to mark ones that no
3644      start_memory/stop_memory has been seen for. Also initialize the
3645      register information struct.  */
3646   for (mcnt = 1; mcnt < num_regs; mcnt++)
3647     {
3648       regstart[mcnt] = regend[mcnt] 
3649         = old_regstart[mcnt] = old_regend[mcnt] = REG_UNSET_VALUE;
3650         
3651       REG_MATCH_NULL_STRING_P (reg_info[mcnt]) = MATCH_NULL_UNSET_VALUE;
3652       IS_ACTIVE (reg_info[mcnt]) = 0;
3653       MATCHED_SOMETHING (reg_info[mcnt]) = 0;
3654       EVER_MATCHED_SOMETHING (reg_info[mcnt]) = 0;
3655     }
3656   
3657   /* We move `string1' into `string2' if the latter's empty -- but not if
3658      `string1' is null.  */
3659   if (size2 == 0 && string1 != NULL)
3660     {
3661       string2 = string1;
3662       size2 = size1;
3663       string1 = 0;
3664       size1 = 0;
3665     }
3666   end1 = string1 + size1;
3667   end2 = string2 + size2;
3668
3669   /* Compute where to stop matching, within the two strings.  */
3670   if (stop <= size1)
3671     {
3672       end_match_1 = string1 + stop;
3673       end_match_2 = string2;
3674     }
3675   else
3676     {
3677       end_match_1 = end1;
3678       end_match_2 = string2 + stop - size1;
3679     }
3680
3681   /* `p' scans through the pattern as `d' scans through the data. 
3682      `dend' is the end of the input string that `d' points within.  `d'
3683      is advanced into the following input string whenever necessary, but
3684      this happens before fetching; therefore, at the beginning of the
3685      loop, `d' can be pointing at the end of a string, but it cannot
3686      equal `string2'.  */
3687   if (size1 > 0 && pos <= size1)
3688     {
3689       d = string1 + pos;
3690       dend = end_match_1;
3691     }
3692   else
3693     {
3694       d = string2 + pos - size1;
3695       dend = end_match_2;
3696     }
3697
3698   DEBUG_PRINT1 ("The compiled pattern is: ");
3699   DEBUG_PRINT_COMPILED_PATTERN (bufp, p, pend);
3700   DEBUG_PRINT1 ("The string to match is: `");
3701   DEBUG_PRINT_DOUBLE_STRING (d, string1, size1, string2, size2);
3702   DEBUG_PRINT1 ("'\n");
3703   
3704   /* This loops over pattern commands.  It exits by returning from the
3705      function if the match is complete, or it drops through if the match
3706      fails at this starting point in the input data.  */
3707   for (;;)
3708     {
3709       DEBUG_PRINT2 ("\n0x%x: ", p);
3710
3711       if (p == pend)
3712         { /* End of pattern means we might have succeeded.  */
3713           DEBUG_PRINT1 ("end of pattern ... ");
3714           
3715           /* If we haven't matched the entire string, and we want the
3716              longest match, try backtracking.  */
3717           if (d != end_match_2)
3718             {
3719               /* 1 if this match ends in the same string (string1 or string2)
3720                  as the best previous match.  */
3721               boolean same_str_p = (FIRST_STRING_P (match_end) 
3722                                     == MATCHING_IN_FIRST_STRING);
3723               /* 1 if this match is the best seen so far.  */
3724               boolean best_match_p;
3725
3726               /* AIX compiler got confused when this was combined
3727                  with the previous declaration.  */
3728               if (same_str_p)
3729                 best_match_p = d > match_end;
3730               else
3731                 best_match_p = !MATCHING_IN_FIRST_STRING;
3732
3733               DEBUG_PRINT1 ("backtracking.\n");
3734               
3735               if (!FAIL_STACK_EMPTY ())
3736                 { /* More failure points to try.  */
3737
3738                   /* If exceeds best match so far, save it.  */
3739                   if (!best_regs_set || best_match_p)
3740                     {
3741                       best_regs_set = true;
3742                       match_end = d;
3743                       
3744                       DEBUG_PRINT1 ("\nSAVING match as best so far.\n");
3745                       
3746                       for (mcnt = 1; mcnt < num_regs; mcnt++)
3747                         {
3748                           best_regstart[mcnt] = regstart[mcnt];
3749                           best_regend[mcnt] = regend[mcnt];
3750                         }
3751                     }
3752                   goto fail;           
3753                 }
3754
3755               /* If no failure points, don't restore garbage.  And if
3756                  last match is real best match, don't restore second
3757                  best one. */
3758               else if (best_regs_set && !best_match_p)
3759                 {
3760                 restore_best_regs:
3761                   /* Restore best match.  It may happen that `dend ==
3762                      end_match_1' while the restored d is in string2.
3763                      For example, the pattern `x.*y.*z' against the
3764                      strings `x-' and `y-z-', if the two strings are
3765                      not consecutive in memory.  */
3766                   DEBUG_PRINT1 ("Restoring best registers.\n");
3767                   
3768                   d = match_end;
3769                   dend = ((d >= string1 && d <= end1)
3770                            ? end_match_1 : end_match_2);
3771
3772                   for (mcnt = 1; mcnt < num_regs; mcnt++)
3773                     {
3774                       regstart[mcnt] = best_regstart[mcnt];
3775                       regend[mcnt] = best_regend[mcnt];
3776                     }
3777                 }
3778             } /* d != end_match_2 */
3779
3780         succeed_label:
3781           DEBUG_PRINT1 ("Accepting match.\n");
3782
3783           /* If caller wants register contents data back, do it.  */
3784           if (regs && !bufp->no_sub)
3785             {
3786               /* Have the register data arrays been allocated?  */
3787               if (bufp->regs_allocated == REGS_UNALLOCATED)
3788                 { /* No.  So allocate them with malloc.  We need one
3789                      extra element beyond `num_regs' for the `-1' marker
3790                      GNU code uses.  */
3791                   regs->num_regs = MAX (RE_NREGS, num_regs + 1);
3792                   regs->start = TALLOC (regs->num_regs, regoff_t);
3793                   regs->end = TALLOC (regs->num_regs, regoff_t);
3794                   if (regs->start == NULL || regs->end == NULL)
3795                     {
3796                       FREE_VARIABLES ();
3797                       return -2;
3798                     }
3799                   bufp->regs_allocated = REGS_REALLOCATE;
3800                 }
3801               else if (bufp->regs_allocated == REGS_REALLOCATE)
3802                 { /* Yes.  If we need more elements than were already
3803                      allocated, reallocate them.  If we need fewer, just
3804                      leave it alone.  */
3805                   if (regs->num_regs < num_regs + 1)
3806                     {
3807                       regs->num_regs = num_regs + 1;
3808                       RETALLOC (regs->start, regs->num_regs, regoff_t);
3809                       RETALLOC (regs->end, regs->num_regs, regoff_t);
3810                       if (regs->start == NULL || regs->end == NULL)
3811                         {
3812                           FREE_VARIABLES ();
3813                           return -2;
3814                         }
3815                     }
3816                 }
3817               else
3818                 {
3819                   /* These braces fend off a "empty body in an else-statement"
3820                      warning under GCC when assert expands to nothing.  */
3821                   assert (bufp->regs_allocated == REGS_FIXED);
3822                 }
3823
3824               /* Convert the pointer data in `regstart' and `regend' to
3825                  indices.  Register zero has to be set differently,
3826                  since we haven't kept track of any info for it.  */
3827               if (regs->num_regs > 0)
3828                 {
3829                   regs->start[0] = pos;
3830                   regs->end[0] = (MATCHING_IN_FIRST_STRING
3831                                   ? ((regoff_t) (d - string1))
3832                                   : ((regoff_t) (d - string2 + size1)));
3833                 }
3834               
3835               /* Go through the first `min (num_regs, regs->num_regs)'
3836                  registers, since that is all we initialized.  */
3837               for (mcnt = 1; mcnt < MIN (num_regs, regs->num_regs); mcnt++)
3838                 {
3839                   if (REG_UNSET (regstart[mcnt]) || REG_UNSET (regend[mcnt]))
3840                     regs->start[mcnt] = regs->end[mcnt] = -1;
3841                   else
3842                     {
3843                       regs->start[mcnt]
3844                         = (regoff_t) POINTER_TO_OFFSET (regstart[mcnt]);
3845                       regs->end[mcnt]
3846                         = (regoff_t) POINTER_TO_OFFSET (regend[mcnt]);
3847                     }
3848                 }
3849               
3850               /* If the regs structure we return has more elements than
3851                  were in the pattern, set the extra elements to -1.  If
3852                  we (re)allocated the registers, this is the case,
3853                  because we always allocate enough to have at least one
3854                  -1 at the end.  */
3855               for (mcnt = num_regs; mcnt < regs->num_regs; mcnt++)
3856                 regs->start[mcnt] = regs->end[mcnt] = -1;
3857             } /* regs && !bufp->no_sub */
3858
3859           DEBUG_PRINT4 ("%u failure points pushed, %u popped (%u remain).\n",
3860                         nfailure_points_pushed, nfailure_points_popped,
3861                         nfailure_points_pushed - nfailure_points_popped);
3862           DEBUG_PRINT2 ("%u registers pushed.\n", num_regs_pushed);
3863
3864           mcnt = d - pos - (MATCHING_IN_FIRST_STRING 
3865                             ? string1 
3866                             : string2 - size1);
3867
3868           DEBUG_PRINT2 ("Returning %d from re_match_2.\n", mcnt);
3869
3870           FREE_VARIABLES ();
3871           return mcnt;
3872         }
3873
3874       /* Otherwise match next pattern command.  */
3875       switch (SWITCH_ENUM_CAST ((re_opcode_t) *p++))
3876         {
3877         /* Ignore these.  Used to ignore the n of succeed_n's which
3878            currently have n == 0.  */
3879         case no_op:
3880           DEBUG_PRINT1 ("EXECUTING no_op.\n");
3881           break;
3882
3883         case succeed:
3884           DEBUG_PRINT1 ("EXECUTING succeed.\n");
3885           goto succeed_label;
3886
3887         /* Match the next n pattern characters exactly.  The following
3888            byte in the pattern defines n, and the n bytes after that
3889            are the characters to match.  */
3890         case exactn:
3891           mcnt = *p++;
3892           DEBUG_PRINT2 ("EXECUTING exactn %d.\n", mcnt);
3893
3894           /* This is written out as an if-else so we don't waste time
3895              testing `translate' inside the loop.  */
3896           if (translate)
3897             {
3898               do
3899                 {
3900                   PREFETCH ();
3901                   if (translate[(unsigned char) *d++] != (char) *p++)
3902                     goto fail;
3903                 }
3904               while (--mcnt);
3905             }
3906           else
3907             {
3908               do
3909                 {
3910                   PREFETCH ();
3911                   if (*d++ != (char) *p++) goto fail;
3912                 }
3913               while (--mcnt);
3914             }
3915           SET_REGS_MATCHED ();
3916           break;
3917
3918
3919         /* Match any character except possibly a newline or a null.  */
3920         case anychar:
3921           DEBUG_PRINT1 ("EXECUTING anychar.\n");
3922
3923           PREFETCH ();
3924
3925           if ((!(bufp->syntax & RE_DOT_NEWLINE) && TRANSLATE (*d) == '\n')
3926               || (bufp->syntax & RE_DOT_NOT_NULL && TRANSLATE (*d) == '\000'))
3927             goto fail;
3928
3929           SET_REGS_MATCHED ();
3930           DEBUG_PRINT2 ("  Matched `%d'.\n", *d);
3931           d++;
3932           break;
3933
3934
3935         case charset:
3936         case charset_not:
3937           {
3938             register unsigned char c;
3939             boolean not = (re_opcode_t) *(p - 1) == charset_not;
3940
3941             DEBUG_PRINT2 ("EXECUTING charset%s.\n", not ? "_not" : "");
3942
3943             PREFETCH ();
3944             c = TRANSLATE (*d); /* The character to match.  */
3945
3946             /* Cast to `unsigned' instead of `unsigned char' in case the
3947                bit list is a full 32 bytes long.  */
3948             if (c < (unsigned) (*p * BYTEWIDTH)
3949                 && p[1 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH)))
3950               not = !not;
3951
3952             p += 1 + *p;
3953
3954             if (!not) goto fail;
3955             
3956             SET_REGS_MATCHED ();
3957             d++;
3958             break;
3959           }
3960
3961
3962         /* The beginning of a group is represented by start_memory.
3963            The arguments are the register number in the next byte, and the
3964            number of groups inner to this one in the next.  The text
3965            matched within the group is recorded (in the internal
3966            registers data structure) under the register number.  */
3967         case start_memory:
3968           DEBUG_PRINT3 ("EXECUTING start_memory %d (%d):\n", *p, p[1]);
3969
3970           /* Find out if this group can match the empty string.  */
3971           p1 = p;               /* To send to group_match_null_string_p.  */
3972           
3973           if (REG_MATCH_NULL_STRING_P (reg_info[*p]) == MATCH_NULL_UNSET_VALUE)
3974             REG_MATCH_NULL_STRING_P (reg_info[*p]) 
3975               = group_match_null_string_p (&p1, pend, reg_info);
3976
3977           /* Save the position in the string where we were the last time
3978              we were at this open-group operator in case the group is
3979              operated upon by a repetition operator, e.g., with `(a*)*b'
3980              against `ab'; then we want to ignore where we are now in
3981              the string in case this attempt to match fails.  */
3982           old_regstart[*p] = REG_MATCH_NULL_STRING_P (reg_info[*p])
3983                              ? REG_UNSET (regstart[*p]) ? d : regstart[*p]
3984                              : regstart[*p];
3985           DEBUG_PRINT2 ("  old_regstart: %d\n", 
3986                          POINTER_TO_OFFSET (old_regstart[*p]));
3987
3988           regstart[*p] = d;
3989           DEBUG_PRINT2 ("  regstart: %d\n", POINTER_TO_OFFSET (regstart[*p]));
3990
3991           IS_ACTIVE (reg_info[*p]) = 1;
3992           MATCHED_SOMETHING (reg_info[*p]) = 0;
3993
3994           /* Clear this whenever we change the register activity status.  */
3995           set_regs_matched_done = 0;
3996           
3997           /* This is the new highest active register.  */
3998           highest_active_reg = *p;
3999           
4000           /* If nothing was active before, this is the new lowest active
4001              register.  */
4002           if (lowest_active_reg == NO_LOWEST_ACTIVE_REG)
4003             lowest_active_reg = *p;
4004
4005           /* Move past the register number and inner group count.  */
4006           p += 2;
4007           just_past_start_mem = p;
4008
4009           break;
4010
4011
4012         /* The stop_memory opcode represents the end of a group.  Its
4013            arguments are the same as start_memory's: the register
4014            number, and the number of inner groups.  */
4015         case stop_memory:
4016           DEBUG_PRINT3 ("EXECUTING stop_memory %d (%d):\n", *p, p[1]);
4017              
4018           /* We need to save the string position the last time we were at
4019              this close-group operator in case the group is operated
4020              upon by a repetition operator, e.g., with `((a*)*(b*)*)*'
4021              against `aba'; then we want to ignore where we are now in
4022              the string in case this attempt to match fails.  */
4023           old_regend[*p] = REG_MATCH_NULL_STRING_P (reg_info[*p])
4024                            ? REG_UNSET (regend[*p]) ? d : regend[*p]
4025                            : regend[*p];
4026           DEBUG_PRINT2 ("      old_regend: %d\n", 
4027                          POINTER_TO_OFFSET (old_regend[*p]));
4028
4029           regend[*p] = d;
4030           DEBUG_PRINT2 ("      regend: %d\n", POINTER_TO_OFFSET (regend[*p]));
4031
4032           /* This register isn't active anymore.  */
4033           IS_ACTIVE (reg_info[*p]) = 0;
4034
4035           /* Clear this whenever we change the register activity status.  */
4036           set_regs_matched_done = 0;
4037
4038           /* If this was the only register active, nothing is active
4039              anymore.  */
4040           if (lowest_active_reg == highest_active_reg)
4041             {
4042               lowest_active_reg = NO_LOWEST_ACTIVE_REG;
4043               highest_active_reg = NO_HIGHEST_ACTIVE_REG;
4044             }
4045           else
4046             { /* We must scan for the new highest active register, since
4047                  it isn't necessarily one less than now: consider
4048                  (a(b)c(d(e)f)g).  When group 3 ends, after the f), the
4049                  new highest active register is 1.  */
4050               unsigned char r = *p - 1;
4051               while (r > 0 && !IS_ACTIVE (reg_info[r]))
4052                 r--;
4053               
4054               /* If we end up at register zero, that means that we saved
4055                  the registers as the result of an `on_failure_jump', not
4056                  a `start_memory', and we jumped to past the innermost
4057                  `stop_memory'.  For example, in ((.)*) we save
4058                  registers 1 and 2 as a result of the *, but when we pop
4059                  back to the second ), we are at the stop_memory 1.
4060                  Thus, nothing is active.  */
4061               if (r == 0)
4062                 {
4063                   lowest_active_reg = NO_LOWEST_ACTIVE_REG;
4064                   highest_active_reg = NO_HIGHEST_ACTIVE_REG;
4065                 }
4066               else
4067                 highest_active_reg = r;
4068             }
4069           
4070           /* If just failed to match something this time around with a
4071              group that's operated on by a repetition operator, try to
4072              force exit from the ``loop'', and restore the register
4073              information for this group that we had before trying this
4074              last match.  */
4075           if ((!MATCHED_SOMETHING (reg_info[*p])
4076                || just_past_start_mem == p - 1)
4077               && (p + 2) < pend)              
4078             {
4079               boolean is_a_jump_n = false;
4080               
4081               p1 = p + 2;
4082               mcnt = 0;
4083               switch ((re_opcode_t) *p1++)
4084                 {
4085                   case jump_n:
4086                     is_a_jump_n = true;
4087                   case pop_failure_jump:
4088                   case maybe_pop_jump:
4089                   case jump:
4090                   case dummy_failure_jump:
4091                     EXTRACT_NUMBER_AND_INCR (mcnt, p1);
4092                     if (is_a_jump_n)
4093                       p1 += 2;
4094                     break;
4095                   
4096                   default:
4097                     /* do nothing */ ;
4098                 }
4099               p1 += mcnt;
4100         
4101               /* If the next operation is a jump backwards in the pattern
4102                  to an on_failure_jump right before the start_memory
4103                  corresponding to this stop_memory, exit from the loop
4104                  by forcing a failure after pushing on the stack the
4105                  on_failure_jump's jump in the pattern, and d.  */
4106               if (mcnt < 0 && (re_opcode_t) *p1 == on_failure_jump
4107                   && (re_opcode_t) p1[3] == start_memory && p1[4] == *p)
4108                 {
4109                   /* If this group ever matched anything, then restore
4110                      what its registers were before trying this last
4111                      failed match, e.g., with `(a*)*b' against `ab' for
4112                      regstart[1], and, e.g., with `((a*)*(b*)*)*'
4113                      against `aba' for regend[3].
4114                      
4115                      Also restore the registers for inner groups for,
4116                      e.g., `((a*)(b*))*' against `aba' (register 3 would
4117                      otherwise get trashed).  */
4118                      
4119                   if (EVER_MATCHED_SOMETHING (reg_info[*p]))
4120                     {
4121                       unsigned r; 
4122         
4123                       EVER_MATCHED_SOMETHING (reg_info[*p]) = 0;
4124                       
4125                       /* Restore this and inner groups' (if any) registers.  */
4126                       for (r = *p; r < *p + *(p + 1); r++)
4127                         {
4128                           regstart[r] = old_regstart[r];
4129
4130                           /* xx why this test?  */
4131                           if (old_regend[r] >= regstart[r])
4132                             regend[r] = old_regend[r];
4133                         }     
4134                     }
4135                   p1++;
4136                   EXTRACT_NUMBER_AND_INCR (mcnt, p1);
4137                   PUSH_FAILURE_POINT (p1 + mcnt, d, -2);
4138
4139                   goto fail;
4140                 }
4141             }
4142           
4143           /* Move past the register number and the inner group count.  */
4144           p += 2;
4145           break;
4146
4147
4148         /* \<digit> has been turned into a `duplicate' command which is
4149            followed by the numeric value of <digit> as the register number.  */
4150         case duplicate:
4151           {
4152             register const char *d2, *dend2;
4153             int regno = *p++;   /* Get which register to match against.  */
4154             DEBUG_PRINT2 ("EXECUTING duplicate %d.\n", regno);
4155
4156             /* Can't back reference a group which we've never matched.  */
4157             if (REG_UNSET (regstart[regno]) || REG_UNSET (regend[regno]))
4158               goto fail;
4159               
4160             /* Where in input to try to start matching.  */
4161             d2 = regstart[regno];
4162             
4163             /* Where to stop matching; if both the place to start and
4164                the place to stop matching are in the same string, then
4165                set to the place to stop, otherwise, for now have to use
4166                the end of the first string.  */
4167
4168             dend2 = ((FIRST_STRING_P (regstart[regno]) 
4169                       == FIRST_STRING_P (regend[regno]))
4170                      ? regend[regno] : end_match_1);
4171             for (;;)
4172               {
4173                 /* If necessary, advance to next segment in register
4174                    contents.  */
4175                 while (d2 == dend2)
4176                   {
4177                     if (dend2 == end_match_2) break;
4178                     if (dend2 == regend[regno]) break;
4179
4180                     /* End of string1 => advance to string2. */
4181                     d2 = string2;
4182                     dend2 = regend[regno];
4183                   }
4184                 /* At end of register contents => success */
4185                 if (d2 == dend2) break;
4186
4187                 /* If necessary, advance to next segment in data.  */
4188                 PREFETCH ();
4189
4190                 /* How many characters left in this segment to match.  */
4191                 mcnt = dend - d;
4192                 
4193                 /* Want how many consecutive characters we can match in
4194                    one shot, so, if necessary, adjust the count.  */
4195                 if (mcnt > dend2 - d2)
4196                   mcnt = dend2 - d2;
4197                   
4198                 /* Compare that many; failure if mismatch, else move
4199                    past them.  */
4200                 if (translate 
4201                     ? bcmp_translate (d, d2, mcnt, translate) 
4202                     : bcmp (d, d2, mcnt))
4203                   goto fail;
4204                 d += mcnt, d2 += mcnt;
4205
4206                 /* Do this because we've match some characters.  */
4207                 SET_REGS_MATCHED ();
4208               }
4209           }
4210           break;
4211
4212
4213         /* begline matches the empty string at the beginning of the string
4214            (unless `not_bol' is set in `bufp'), and, if
4215            `newline_anchor' is set, after newlines.  */
4216         case begline:
4217           DEBUG_PRINT1 ("EXECUTING begline.\n");
4218           
4219           if (AT_STRINGS_BEG (d))
4220             {
4221               if (!bufp->not_bol) break;
4222             }
4223           else if (d[-1] == '\n' && bufp->newline_anchor)
4224             {
4225               break;
4226             }
4227           /* In all other cases, we fail.  */
4228           goto fail;
4229
4230
4231         /* endline is the dual of begline.  */
4232         case endline:
4233           DEBUG_PRINT1 ("EXECUTING endline.\n");
4234
4235           if (AT_STRINGS_END (d))
4236             {
4237               if (!bufp->not_eol) break;
4238             }
4239           
4240           /* We have to ``prefetch'' the next character.  */
4241           else if ((d == end1 ? *string2 : *d) == '\n'
4242                    && bufp->newline_anchor)
4243             {
4244               break;
4245             }
4246           goto fail;
4247
4248
4249         /* Match at the very beginning of the data.  */
4250         case begbuf:
4251           DEBUG_PRINT1 ("EXECUTING begbuf.\n");
4252           if (AT_STRINGS_BEG (d))
4253             break;
4254           goto fail;
4255
4256
4257         /* Match at the very end of the data.  */
4258         case endbuf:
4259           DEBUG_PRINT1 ("EXECUTING endbuf.\n");
4260           if (AT_STRINGS_END (d))
4261             break;
4262           goto fail;
4263
4264
4265         /* on_failure_keep_string_jump is used to optimize `.*\n'.  It
4266            pushes NULL as the value for the string on the stack.  Then
4267            `pop_failure_point' will keep the current value for the
4268            string, instead of restoring it.  To see why, consider
4269            matching `foo\nbar' against `.*\n'.  The .* matches the foo;
4270            then the . fails against the \n.  But the next thing we want
4271            to do is match the \n against the \n; if we restored the
4272            string value, we would be back at the foo.
4273            
4274            Because this is used only in specific cases, we don't need to
4275            check all the things that `on_failure_jump' does, to make
4276            sure the right things get saved on the stack.  Hence we don't
4277            share its code.  The only reason to push anything on the
4278            stack at all is that otherwise we would have to change
4279            `anychar's code to do something besides goto fail in this
4280            case; that seems worse than this.  */
4281         case on_failure_keep_string_jump:
4282           DEBUG_PRINT1 ("EXECUTING on_failure_keep_string_jump");
4283           
4284           EXTRACT_NUMBER_AND_INCR (mcnt, p);
4285           DEBUG_PRINT3 (" %d (to 0x%x):\n", mcnt, p + mcnt);
4286
4287           PUSH_FAILURE_POINT (p + mcnt, NULL, -2);
4288           break;
4289
4290
4291         /* Uses of on_failure_jump:
4292         
4293            Each alternative starts with an on_failure_jump that points
4294            to the beginning of the next alternative.  Each alternative
4295            except the last ends with a jump that in effect jumps past
4296            the rest of the alternatives.  (They really jump to the
4297            ending jump of the following alternative, because tensioning
4298            these jumps is a hassle.)
4299
4300            Repeats start with an on_failure_jump that points past both
4301            the repetition text and either the following jump or
4302            pop_failure_jump back to this on_failure_jump.  */
4303         case on_failure_jump:
4304         on_failure:
4305           DEBUG_PRINT1 ("EXECUTING on_failure_jump");
4306
4307           EXTRACT_NUMBER_AND_INCR (mcnt, p);
4308           DEBUG_PRINT3 (" %d (to 0x%x)", mcnt, p + mcnt);
4309
4310           /* If this on_failure_jump comes right before a group (i.e.,
4311              the original * applied to a group), save the information
4312              for that group and all inner ones, so that if we fail back
4313              to this point, the group's information will be correct.
4314              For example, in \(a*\)*\1, we need the preceding group,
4315              and in \(\(a*\)b*\)\2, we need the inner group.  */
4316
4317           /* We can't use `p' to check ahead because we push
4318              a failure point to `p + mcnt' after we do this.  */
4319           p1 = p;
4320
4321           /* We need to skip no_op's before we look for the
4322              start_memory in case this on_failure_jump is happening as
4323              the result of a completed succeed_n, as in \(a\)\{1,3\}b\1
4324              against aba.  */
4325           while (p1 < pend && (re_opcode_t) *p1 == no_op)
4326             p1++;
4327
4328           if (p1 < pend && (re_opcode_t) *p1 == start_memory)
4329             {
4330               /* We have a new highest active register now.  This will
4331                  get reset at the start_memory we are about to get to,
4332                  but we will have saved all the registers relevant to
4333                  this repetition op, as described above.  */
4334               highest_active_reg = *(p1 + 1) + *(p1 + 2);
4335               if (lowest_active_reg == NO_LOWEST_ACTIVE_REG)
4336                 lowest_active_reg = *(p1 + 1);
4337             }
4338
4339           DEBUG_PRINT1 (":\n");
4340           PUSH_FAILURE_POINT (p + mcnt, d, -2);
4341           break;
4342
4343
4344         /* A smart repeat ends with `maybe_pop_jump'.
4345            We change it to either `pop_failure_jump' or `jump'.  */
4346         case maybe_pop_jump:
4347           EXTRACT_NUMBER_AND_INCR (mcnt, p);
4348           DEBUG_PRINT2 ("EXECUTING maybe_pop_jump %d.\n", mcnt);
4349           {
4350             register unsigned char *p2 = p;
4351
4352             /* Compare the beginning of the repeat with what in the
4353                pattern follows its end. If we can establish that there
4354                is nothing that they would both match, i.e., that we
4355                would have to backtrack because of (as in, e.g., `a*a')
4356                then we can change to pop_failure_jump, because we'll
4357                never have to backtrack.
4358                
4359                This is not true in the case of alternatives: in
4360                `(a|ab)*' we do need to backtrack to the `ab' alternative
4361                (e.g., if the string was `ab').  But instead of trying to
4362                detect that here, the alternative has put on a dummy
4363                failure point which is what we will end up popping.  */
4364
4365             /* Skip over open/close-group commands.
4366                If what follows this loop is a ...+ construct,
4367                look at what begins its body, since we will have to
4368                match at least one of that.  */
4369             while (1)
4370               {
4371                 if (p2 + 2 < pend
4372                     && ((re_opcode_t) *p2 == stop_memory
4373                         || (re_opcode_t) *p2 == start_memory))
4374                   p2 += 3;
4375                 else if (p2 + 6 < pend
4376                          && (re_opcode_t) *p2 == dummy_failure_jump)
4377                   p2 += 6;
4378                 else
4379                   break;
4380               }
4381
4382             p1 = p + mcnt;
4383             /* p1[0] ... p1[2] are the `on_failure_jump' corresponding
4384                to the `maybe_finalize_jump' of this case.  Examine what 
4385                follows.  */
4386
4387             /* If we're at the end of the pattern, we can change.  */
4388             if (p2 == pend)
4389               {
4390                 /* Consider what happens when matching ":\(.*\)"
4391                    against ":/".  I don't really understand this code
4392                    yet.  */
4393                 p[-3] = (unsigned char) pop_failure_jump;
4394                 DEBUG_PRINT1
4395                   ("  End of pattern: change to `pop_failure_jump'.\n");
4396               }
4397
4398             else if ((re_opcode_t) *p2 == exactn
4399                      || (bufp->newline_anchor && (re_opcode_t) *p2 == endline))
4400               {
4401                 register unsigned char c
4402                   = *p2 == (unsigned char) endline ? '\n' : p2[2];
4403
4404                 if ((re_opcode_t) p1[3] == exactn && p1[5] != c)
4405                   {
4406                     p[-3] = (unsigned char) pop_failure_jump;
4407                     DEBUG_PRINT3 ("  %c != %c => pop_failure_jump.\n",
4408                                   c, p1[5]);
4409                   }
4410                   
4411                 else if ((re_opcode_t) p1[3] == charset
4412                          || (re_opcode_t) p1[3] == charset_not)
4413                   {
4414                     int not = (re_opcode_t) p1[3] == charset_not;
4415                     
4416                     if (c < (unsigned char) (p1[4] * BYTEWIDTH)
4417                         && p1[5 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH)))
4418                       not = !not;
4419
4420                     /* `not' is equal to 1 if c would match, which means
4421                         that we can't change to pop_failure_jump.  */
4422                     if (!not)
4423                       {
4424                         p[-3] = (unsigned char) pop_failure_jump;
4425                         DEBUG_PRINT1 ("  No match => pop_failure_jump.\n");
4426                       }
4427                   }
4428               }
4429             else if ((re_opcode_t) *p2 == charset)
4430               {
4431 #ifdef DEBUG
4432                 register unsigned char c
4433                   = *p2 == (unsigned char) endline ? '\n' : p2[2];
4434 #endif
4435
4436                 if ((re_opcode_t) p1[3] == exactn
4437                     && ! ((int) p2[1] * BYTEWIDTH > (int) p1[4]
4438                           && (p2[1 + p1[4] / BYTEWIDTH]
4439                               & (1 << (p1[4] % BYTEWIDTH)))))
4440                   {
4441                     p[-3] = (unsigned char) pop_failure_jump;
4442                     DEBUG_PRINT3 ("  %c != %c => pop_failure_jump.\n",
4443                                   c, p1[5]);
4444                   }
4445                   
4446                 else if ((re_opcode_t) p1[3] == charset_not)
4447                   {
4448                     int idx;
4449                     /* We win if the charset_not inside the loop
4450                        lists every character listed in the charset after.  */
4451                     for (idx = 0; idx < (int) p2[1]; idx++)
4452                       if (! (p2[2 + idx] == 0
4453                              || (idx < (int) p1[4]
4454                                  && ((p2[2 + idx] & ~ p1[5 + idx]) == 0))))
4455                         break;
4456
4457                     if (idx == p2[1])
4458                       {
4459                         p[-3] = (unsigned char) pop_failure_jump;
4460                         DEBUG_PRINT1 ("  No match => pop_failure_jump.\n");
4461                       }
4462                   }
4463                 else if ((re_opcode_t) p1[3] == charset)
4464                   {
4465                     int idx;
4466                     /* We win if the charset inside the loop
4467                        has no overlap with the one after the loop.  */
4468                     for (idx = 0;
4469                          idx < (int) p2[1] && idx < (int) p1[4];
4470                          idx++)
4471                       if ((p2[2 + idx] & p1[5 + idx]) != 0)
4472                         break;
4473
4474                     if (idx == p2[1] || idx == p1[4])
4475                       {
4476                         p[-3] = (unsigned char) pop_failure_jump;
4477                         DEBUG_PRINT1 ("  No match => pop_failure_jump.\n");
4478                       }
4479                   }
4480               }
4481           }
4482           p -= 2;               /* Point at relative address again.  */
4483           if ((re_opcode_t) p[-1] != pop_failure_jump)
4484             {
4485               p[-1] = (unsigned char) jump;
4486               DEBUG_PRINT1 ("  Match => jump.\n");
4487               goto unconditional_jump;
4488             }
4489         /* Note fall through.  */
4490
4491
4492         /* The end of a simple repeat has a pop_failure_jump back to
4493            its matching on_failure_jump, where the latter will push a
4494            failure point.  The pop_failure_jump takes off failure
4495            points put on by this pop_failure_jump's matching
4496            on_failure_jump; we got through the pattern to here from the
4497            matching on_failure_jump, so didn't fail.  */
4498         case pop_failure_jump:
4499           {
4500             /* We need to pass separate storage for the lowest and
4501                highest registers, even though we don't care about the
4502                actual values.  Otherwise, we will restore only one
4503                register from the stack, since lowest will == highest in
4504                `pop_failure_point'.  */
4505             unsigned dummy_low_reg, dummy_high_reg;
4506             unsigned char *pdummy;
4507             const char *sdummy;
4508
4509             DEBUG_PRINT1 ("EXECUTING pop_failure_jump.\n");
4510             POP_FAILURE_POINT (sdummy, pdummy,
4511                                dummy_low_reg, dummy_high_reg,
4512                                reg_dummy, reg_dummy, reg_info_dummy);
4513           }
4514           /* Note fall through.  */
4515
4516           
4517         /* Unconditionally jump (without popping any failure points).  */
4518         case jump:
4519         unconditional_jump:
4520           EXTRACT_NUMBER_AND_INCR (mcnt, p);    /* Get the amount to jump.  */
4521           DEBUG_PRINT2 ("EXECUTING jump %d ", mcnt);
4522           p += mcnt;                            /* Do the jump.  */
4523           DEBUG_PRINT2 ("(to 0x%x).\n", p);
4524           break;
4525
4526         
4527         /* We need this opcode so we can detect where alternatives end
4528            in `group_match_null_string_p' et al.  */
4529         case jump_past_alt:
4530           DEBUG_PRINT1 ("EXECUTING jump_past_alt.\n");
4531           goto unconditional_jump;
4532
4533
4534         /* Normally, the on_failure_jump pushes a failure point, which
4535            then gets popped at pop_failure_jump.  We will end up at
4536            pop_failure_jump, also, and with a pattern of, say, `a+', we
4537            are skipping over the on_failure_jump, so we have to push
4538            something meaningless for pop_failure_jump to pop.  */
4539         case dummy_failure_jump:
4540           DEBUG_PRINT1 ("EXECUTING dummy_failure_jump.\n");
4541           /* It doesn't matter what we push for the string here.  What
4542              the code at `fail' tests is the value for the pattern.  */
4543           PUSH_FAILURE_POINT (0, 0, -2);
4544           goto unconditional_jump;
4545
4546
4547         /* At the end of an alternative, we need to push a dummy failure
4548            point in case we are followed by a `pop_failure_jump', because
4549            we don't want the failure point for the alternative to be
4550            popped.  For example, matching `(a|ab)*' against `aab'
4551            requires that we match the `ab' alternative.  */
4552         case push_dummy_failure:
4553           DEBUG_PRINT1 ("EXECUTING push_dummy_failure.\n");
4554           /* See comments just above at `dummy_failure_jump' about the
4555              two zeroes.  */
4556           PUSH_FAILURE_POINT (0, 0, -2);
4557           break;
4558
4559         /* Have to succeed matching what follows at least n times.
4560            After that, handle like `on_failure_jump'.  */
4561         case succeed_n: 
4562           EXTRACT_NUMBER (mcnt, p + 2);
4563           DEBUG_PRINT2 ("EXECUTING succeed_n %d.\n", mcnt);
4564
4565           assert (mcnt >= 0);
4566           /* Originally, this is how many times we HAVE to succeed.  */
4567           if (mcnt > 0)
4568             {
4569                mcnt--;
4570                p += 2;
4571                STORE_NUMBER_AND_INCR (p, mcnt);
4572                DEBUG_PRINT3 ("  Setting 0x%x to %d.\n", p, mcnt);
4573             }
4574           else if (mcnt == 0)
4575             {
4576               DEBUG_PRINT2 ("  Setting two bytes from 0x%x to no_op.\n", p+2);
4577               p[2] = (unsigned char) no_op;
4578               p[3] = (unsigned char) no_op;
4579               goto on_failure;
4580             }
4581           break;
4582         
4583         case jump_n: 
4584           EXTRACT_NUMBER (mcnt, p + 2);
4585           DEBUG_PRINT2 ("EXECUTING jump_n %d.\n", mcnt);
4586
4587           /* Originally, this is how many times we CAN jump.  */
4588           if (mcnt)
4589             {
4590                mcnt--;
4591                STORE_NUMBER (p + 2, mcnt);
4592                goto unconditional_jump;      
4593             }
4594           /* If don't have to jump any more, skip over the rest of command.  */
4595           else      
4596             p += 4;                  
4597           break;
4598         
4599         case set_number_at:
4600           {
4601             DEBUG_PRINT1 ("EXECUTING set_number_at.\n");
4602
4603             EXTRACT_NUMBER_AND_INCR (mcnt, p);
4604             p1 = p + mcnt;
4605             EXTRACT_NUMBER_AND_INCR (mcnt, p);
4606             DEBUG_PRINT3 ("  Setting 0x%x to %d.\n", p1, mcnt);
4607             STORE_NUMBER (p1, mcnt);
4608             break;
4609           }
4610
4611         case wordbound:
4612           DEBUG_PRINT1 ("EXECUTING wordbound.\n");
4613           if (AT_WORD_BOUNDARY (d))
4614             break;
4615           goto fail;
4616
4617         case notwordbound:
4618           DEBUG_PRINT1 ("EXECUTING notwordbound.\n");
4619           if (AT_WORD_BOUNDARY (d))
4620             goto fail;
4621           break;
4622
4623         case wordbeg:
4624           DEBUG_PRINT1 ("EXECUTING wordbeg.\n");
4625           if (WORDCHAR_P (d) && (AT_STRINGS_BEG (d) || !WORDCHAR_P (d - 1)))
4626             break;
4627           goto fail;
4628
4629         case wordend:
4630           DEBUG_PRINT1 ("EXECUTING wordend.\n");
4631           if (!AT_STRINGS_BEG (d) && WORDCHAR_P (d - 1)
4632               && (!WORDCHAR_P (d) || AT_STRINGS_END (d)))
4633             break;
4634           goto fail;
4635
4636 #ifdef emacs
4637         case before_dot:
4638           DEBUG_PRINT1 ("EXECUTING before_dot.\n");
4639           if (PTR_CHAR_POS ((unsigned char *) d) >= point)
4640             goto fail;
4641           break;
4642   
4643         case at_dot:
4644           DEBUG_PRINT1 ("EXECUTING at_dot.\n");
4645           if (PTR_CHAR_POS ((unsigned char *) d) != point)
4646             goto fail;
4647           break;
4648   
4649         case after_dot:
4650           DEBUG_PRINT1 ("EXECUTING after_dot.\n");
4651           if (PTR_CHAR_POS ((unsigned char *) d) <= point)
4652             goto fail;
4653           break;
4654 #if 0 /* not emacs19 */
4655         case at_dot:
4656           DEBUG_PRINT1 ("EXECUTING at_dot.\n");
4657           if (PTR_CHAR_POS ((unsigned char *) d) + 1 != point)
4658             goto fail;
4659           break;
4660 #endif /* not emacs19 */
4661
4662         case syntaxspec:
4663           DEBUG_PRINT2 ("EXECUTING syntaxspec %d.\n", mcnt);
4664           mcnt = *p++;
4665           goto matchsyntax;
4666
4667         case wordchar:
4668           DEBUG_PRINT1 ("EXECUTING Emacs wordchar.\n");
4669           mcnt = (int) Sword;
4670         matchsyntax:
4671           PREFETCH ();
4672           /* Can't use *d++ here; SYNTAX may be an unsafe macro.  */
4673           d++;
4674           if (SYNTAX (d[-1]) != (enum syntaxcode) mcnt)
4675             goto fail;
4676           SET_REGS_MATCHED ();
4677           break;
4678
4679         case notsyntaxspec:
4680           DEBUG_PRINT2 ("EXECUTING notsyntaxspec %d.\n", mcnt);
4681           mcnt = *p++;
4682           goto matchnotsyntax;
4683
4684         case notwordchar:
4685           DEBUG_PRINT1 ("EXECUTING Emacs notwordchar.\n");
4686           mcnt = (int) Sword;
4687         matchnotsyntax:
4688           PREFETCH ();
4689           /* Can't use *d++ here; SYNTAX may be an unsafe macro.  */
4690           d++;
4691           if (SYNTAX (d[-1]) == (enum syntaxcode) mcnt)
4692             goto fail;
4693           SET_REGS_MATCHED ();
4694           break;
4695
4696 #else /* not emacs */
4697         case wordchar:
4698           DEBUG_PRINT1 ("EXECUTING non-Emacs wordchar.\n");
4699           PREFETCH ();
4700           if (!WORDCHAR_P (d))
4701             goto fail;
4702           SET_REGS_MATCHED ();
4703           d++;
4704           break;
4705           
4706         case notwordchar:
4707           DEBUG_PRINT1 ("EXECUTING non-Emacs notwordchar.\n");
4708           PREFETCH ();
4709           if (WORDCHAR_P (d))
4710             goto fail;
4711           SET_REGS_MATCHED ();
4712           d++;
4713           break;
4714 #endif /* not emacs */
4715           
4716         default:
4717           abort ();
4718         }
4719       continue;  /* Successfully executed one pattern command; keep going.  */
4720
4721
4722     /* We goto here if a matching operation fails. */
4723     fail:
4724       if (!FAIL_STACK_EMPTY ())
4725         { /* A restart point is known.  Restore to that state.  */
4726           DEBUG_PRINT1 ("\nFAIL:\n");
4727           POP_FAILURE_POINT (d, p,
4728                              lowest_active_reg, highest_active_reg,
4729                              regstart, regend, reg_info);
4730
4731           /* If this failure point is a dummy, try the next one.  */
4732           if (!p)
4733             goto fail;
4734
4735           /* If we failed to the end of the pattern, don't examine *p.  */
4736           assert (p <= pend);
4737           if (p < pend)
4738             {
4739               boolean is_a_jump_n = false;
4740               
4741               /* If failed to a backwards jump that's part of a repetition
4742                  loop, need to pop this failure point and use the next one.  */
4743               switch ((re_opcode_t) *p)
4744                 {
4745                 case jump_n:
4746                   is_a_jump_n = true;
4747                 case maybe_pop_jump:
4748                 case pop_failure_jump:
4749                 case jump:
4750                   p1 = p + 1;
4751                   EXTRACT_NUMBER_AND_INCR (mcnt, p1);
4752                   p1 += mcnt;   
4753
4754                   if ((is_a_jump_n && (re_opcode_t) *p1 == succeed_n)
4755                       || (!is_a_jump_n
4756                           && (re_opcode_t) *p1 == on_failure_jump))
4757                     goto fail;
4758                   break;
4759                 default:
4760                   /* do nothing */ ;
4761                 }
4762             }
4763
4764           if (d >= string1 && d <= end1)
4765             dend = end_match_1;
4766         }
4767       else
4768         break;   /* Matching at this starting point really fails.  */
4769     } /* for (;;) */
4770
4771   if (best_regs_set)
4772     goto restore_best_regs;
4773
4774   FREE_VARIABLES ();
4775
4776   return -1;                            /* Failure to match.  */
4777 } /* re_match_2 */
4778 \f
4779 /* Subroutine definitions for re_match_2.  */
4780
4781
4782 /* We are passed P pointing to a register number after a start_memory.
4783    
4784    Return true if the pattern up to the corresponding stop_memory can
4785    match the empty string, and false otherwise.
4786    
4787    If we find the matching stop_memory, sets P to point to one past its number.
4788    Otherwise, sets P to an undefined byte less than or equal to END.
4789
4790    We don't handle duplicates properly (yet).  */
4791
4792 static boolean
4793 group_match_null_string_p (p, end, reg_info)
4794     unsigned char **p, *end;
4795     register_info_type *reg_info;
4796 {
4797   int mcnt;
4798   /* Point to after the args to the start_memory.  */
4799   unsigned char *p1 = *p + 2;
4800   
4801   while (p1 < end)
4802     {
4803       /* Skip over opcodes that can match nothing, and return true or
4804          false, as appropriate, when we get to one that can't, or to the
4805          matching stop_memory.  */
4806       
4807       switch ((re_opcode_t) *p1)
4808         {
4809         /* Could be either a loop or a series of alternatives.  */
4810         case on_failure_jump:
4811           p1++;
4812           EXTRACT_NUMBER_AND_INCR (mcnt, p1);
4813           
4814           /* If the next operation is not a jump backwards in the
4815              pattern.  */
4816
4817           if (mcnt >= 0)
4818             {
4819               /* Go through the on_failure_jumps of the alternatives,
4820                  seeing if any of the alternatives cannot match nothing.
4821                  The last alternative starts with only a jump,
4822                  whereas the rest start with on_failure_jump and end
4823                  with a jump, e.g., here is the pattern for `a|b|c':
4824
4825                  /on_failure_jump/0/6/exactn/1/a/jump_past_alt/0/6
4826                  /on_failure_jump/0/6/exactn/1/b/jump_past_alt/0/3
4827                  /exactn/1/c                                            
4828
4829                  So, we have to first go through the first (n-1)
4830                  alternatives and then deal with the last one separately.  */
4831
4832
4833               /* Deal with the first (n-1) alternatives, which start
4834                  with an on_failure_jump (see above) that jumps to right
4835                  past a jump_past_alt.  */
4836
4837               while ((re_opcode_t) p1[mcnt-3] == jump_past_alt)
4838                 {
4839                   /* `mcnt' holds how many bytes long the alternative
4840                      is, including the ending `jump_past_alt' and
4841                      its number.  */
4842
4843                   if (!alt_match_null_string_p (p1, p1 + mcnt - 3, 
4844                                                       reg_info))
4845                     return false;
4846
4847                   /* Move to right after this alternative, including the
4848                      jump_past_alt.  */
4849                   p1 += mcnt;   
4850
4851                   /* Break if it's the beginning of an n-th alternative
4852                      that doesn't begin with an on_failure_jump.  */
4853                   if ((re_opcode_t) *p1 != on_failure_jump)
4854                     break;
4855                 
4856                   /* Still have to check that it's not an n-th
4857                      alternative that starts with an on_failure_jump.  */
4858                   p1++;
4859                   EXTRACT_NUMBER_AND_INCR (mcnt, p1);
4860                   if ((re_opcode_t) p1[mcnt-3] != jump_past_alt)
4861                     {
4862                       /* Get to the beginning of the n-th alternative.  */
4863                       p1 -= 3;
4864                       break;
4865                     }
4866                 }
4867
4868               /* Deal with the last alternative: go back and get number
4869                  of the `jump_past_alt' just before it.  `mcnt' contains
4870                  the length of the alternative.  */
4871               EXTRACT_NUMBER (mcnt, p1 - 2);
4872
4873               if (!alt_match_null_string_p (p1, p1 + mcnt, reg_info))
4874                 return false;
4875
4876               p1 += mcnt;       /* Get past the n-th alternative.  */
4877             } /* if mcnt > 0 */
4878           break;
4879
4880           
4881         case stop_memory:
4882           assert (p1[1] == **p);
4883           *p = p1 + 2;
4884           return true;
4885
4886         
4887         default: 
4888           if (!common_op_match_null_string_p (&p1, end, reg_info))
4889             return false;
4890         }
4891     } /* while p1 < end */
4892
4893   return false;
4894 } /* group_match_null_string_p */
4895
4896
4897 /* Similar to group_match_null_string_p, but doesn't deal with alternatives:
4898    It expects P to be the first byte of a single alternative and END one
4899    byte past the last. The alternative can contain groups.  */
4900    
4901 static boolean
4902 alt_match_null_string_p (p, end, reg_info)
4903     unsigned char *p, *end;
4904     register_info_type *reg_info;
4905 {
4906   int mcnt;
4907   unsigned char *p1 = p;
4908   
4909   while (p1 < end)
4910     {
4911       /* Skip over opcodes that can match nothing, and break when we get 
4912          to one that can't.  */
4913       
4914       switch ((re_opcode_t) *p1)
4915         {
4916         /* It's a loop.  */
4917         case on_failure_jump:
4918           p1++;
4919           EXTRACT_NUMBER_AND_INCR (mcnt, p1);
4920           p1 += mcnt;
4921           break;
4922           
4923         default: 
4924           if (!common_op_match_null_string_p (&p1, end, reg_info))
4925             return false;
4926         }
4927     }  /* while p1 < end */
4928
4929   return true;
4930 } /* alt_match_null_string_p */
4931
4932
4933 /* Deals with the ops common to group_match_null_string_p and
4934    alt_match_null_string_p.  
4935    
4936    Sets P to one after the op and its arguments, if any.  */
4937
4938 static boolean
4939 common_op_match_null_string_p (p, end, reg_info)
4940     unsigned char **p, *end;
4941     register_info_type *reg_info;
4942 {
4943   int mcnt;
4944   boolean ret;
4945   int reg_no;
4946   unsigned char *p1 = *p;
4947
4948   switch ((re_opcode_t) *p1++)
4949     {
4950     case no_op:
4951     case begline:
4952     case endline:
4953     case begbuf:
4954     case endbuf:
4955     case wordbeg:
4956     case wordend:
4957     case wordbound:
4958     case notwordbound:
4959 #ifdef emacs
4960     case before_dot:
4961     case at_dot:
4962     case after_dot:
4963 #endif
4964       break;
4965
4966     case start_memory:
4967       reg_no = *p1;
4968       assert (reg_no > 0 && reg_no <= MAX_REGNUM);
4969       ret = group_match_null_string_p (&p1, end, reg_info);
4970       
4971       /* Have to set this here in case we're checking a group which
4972          contains a group and a back reference to it.  */
4973
4974       if (REG_MATCH_NULL_STRING_P (reg_info[reg_no]) == MATCH_NULL_UNSET_VALUE)
4975         REG_MATCH_NULL_STRING_P (reg_info[reg_no]) = ret;
4976
4977       if (!ret)
4978         return false;
4979       break;
4980           
4981     /* If this is an optimized succeed_n for zero times, make the jump.  */
4982     case jump:
4983       EXTRACT_NUMBER_AND_INCR (mcnt, p1);
4984       if (mcnt >= 0)
4985         p1 += mcnt;
4986       else
4987         return false;
4988       break;
4989
4990     case succeed_n:
4991       /* Get to the number of times to succeed.  */
4992       p1 += 2;          
4993       EXTRACT_NUMBER_AND_INCR (mcnt, p1);
4994
4995       if (mcnt == 0)
4996         {
4997           p1 -= 4;
4998           EXTRACT_NUMBER_AND_INCR (mcnt, p1);
4999           p1 += mcnt;
5000         }
5001       else
5002         return false;
5003       break;
5004
5005     case duplicate: 
5006       if (!REG_MATCH_NULL_STRING_P (reg_info[*p1]))
5007         return false;
5008       break;
5009
5010     case set_number_at:
5011       p1 += 4;
5012
5013     default:
5014       /* All other opcodes mean we cannot match the empty string.  */
5015       return false;
5016   }
5017
5018   *p = p1;
5019   return true;
5020 } /* common_op_match_null_string_p */
5021
5022
5023 /* Return zero if TRANSLATE[S1] and TRANSLATE[S2] are identical for LEN
5024    bytes; nonzero otherwise.  */
5025    
5026 static int
5027 bcmp_translate (s1, s2, len, translate)
5028      unsigned char *s1, *s2;
5029      register int len;
5030      char *translate;
5031 {
5032   register unsigned char *p1 = s1, *p2 = s2;
5033   while (len)
5034     {
5035       if (translate[*p1++] != translate[*p2++]) return 1;
5036       len--;
5037     }
5038   return 0;
5039 }
5040 \f
5041 /* Entry points for GNU code.  */
5042
5043 /* re_compile_pattern is the GNU regular expression compiler: it
5044    compiles PATTERN (of length SIZE) and puts the result in BUFP.
5045    Returns 0 if the pattern was valid, otherwise an error string.
5046    
5047    Assumes the `allocated' (and perhaps `buffer') and `translate' fields
5048    are set in BUFP on entry.
5049    
5050    We call regex_compile to do the actual compilation.  */
5051
5052 const char *
5053 re_compile_pattern (pattern, length, bufp)
5054      const char *pattern;
5055      int length;
5056      struct re_pattern_buffer *bufp;
5057 {
5058   reg_errcode_t ret;
5059   
5060   /* GNU code is written to assume at least RE_NREGS registers will be set
5061      (and at least one extra will be -1).  */
5062   bufp->regs_allocated = REGS_UNALLOCATED;
5063   
5064   /* And GNU code determines whether or not to get register information
5065      by passing null for the REGS argument to re_match, etc., not by
5066      setting no_sub.  */
5067   bufp->no_sub = 0;
5068   
5069   /* Match anchors at newline.  */
5070   bufp->newline_anchor = 1;
5071   
5072   ret = regex_compile (pattern, length, re_syntax_options, bufp);
5073
5074   if (!ret)
5075     return NULL;
5076   return gettext (re_error_msgid[(int) ret]);
5077 }     
5078 \f
5079 /* Entry points compatible with 4.2 BSD regex library.  We don't define
5080    them unless specifically requested.  */
5081
5082 #ifdef _REGEX_RE_COMP
5083
5084 /* BSD has one and only one pattern buffer.  */
5085 static struct re_pattern_buffer re_comp_buf;
5086
5087 char *
5088 re_comp (s)
5089     const char *s;
5090 {
5091   reg_errcode_t ret;
5092   
5093   if (!s)
5094     {
5095       if (!re_comp_buf.buffer)
5096         return gettext ("No previous regular expression");
5097       return 0;
5098     }
5099
5100   if (!re_comp_buf.buffer)
5101     {
5102       re_comp_buf.buffer = (unsigned char *) malloc (200);
5103       if (re_comp_buf.buffer == NULL)
5104         return gettext (re_error_msgid[(int) REG_ESPACE]);
5105       re_comp_buf.allocated = 200;
5106
5107       re_comp_buf.fastmap = (char *) malloc (1 << BYTEWIDTH);
5108       if (re_comp_buf.fastmap == NULL)
5109         return gettext (re_error_msgid[(int) REG_ESPACE]);
5110     }
5111
5112   /* Since `re_exec' always passes NULL for the `regs' argument, we
5113      don't need to initialize the pattern buffer fields which affect it.  */
5114
5115   /* Match anchors at newlines.  */
5116   re_comp_buf.newline_anchor = 1;
5117
5118   ret = regex_compile (s, strlen (s), re_syntax_options, &re_comp_buf);
5119   
5120   if (!ret)
5121     return NULL;
5122
5123   /* Yes, we're discarding `const' here if !HAVE_LIBINTL.  */
5124   return (char *) gettext (re_error_msgid[(int) ret]);
5125 }
5126
5127
5128 int
5129 re_exec (s)
5130     const char *s;
5131 {
5132   const int len = strlen (s);
5133   return
5134     0 <= re_search (&re_comp_buf, s, len, 0, len, (struct re_registers *) 0);
5135 }
5136 #endif /* _REGEX_RE_COMP */
5137 \f
5138 /* POSIX.2 functions.  Don't define these for Emacs.  */
5139
5140 #ifndef emacs
5141
5142 /* regcomp takes a regular expression as a string and compiles it.
5143
5144    PREG is a regex_t *.  We do not expect any fields to be initialized,
5145    since POSIX says we shouldn't.  Thus, we set
5146
5147      `buffer' to the compiled pattern;
5148      `used' to the length of the compiled pattern;
5149      `syntax' to RE_SYNTAX_POSIX_EXTENDED if the
5150        REG_EXTENDED bit in CFLAGS is set; otherwise, to
5151        RE_SYNTAX_POSIX_BASIC;
5152      `newline_anchor' to REG_NEWLINE being set in CFLAGS;
5153      `fastmap' and `fastmap_accurate' to zero;
5154      `re_nsub' to the number of subexpressions in PATTERN.
5155
5156    PATTERN is the address of the pattern string.
5157
5158    CFLAGS is a series of bits which affect compilation.
5159
5160      If REG_EXTENDED is set, we use POSIX extended syntax; otherwise, we
5161      use POSIX basic syntax.
5162
5163      If REG_NEWLINE is set, then . and [^...] don't match newline.
5164      Also, regexec will try a match beginning after every newline.
5165
5166      If REG_ICASE is set, then we considers upper- and lowercase
5167      versions of letters to be equivalent when matching.
5168
5169      If REG_NOSUB is set, then when PREG is passed to regexec, that
5170      routine will report only success or failure, and nothing about the
5171      registers.
5172
5173    It returns 0 if it succeeds, nonzero if it doesn't.  (See regex.h for
5174    the return codes and their meanings.)  */
5175
5176 int
5177 regcomp (preg, pattern, cflags)
5178     regex_t *preg;
5179     const char *pattern; 
5180     int cflags;
5181 {
5182   reg_errcode_t ret;
5183   unsigned syntax
5184     = (cflags & REG_EXTENDED) ?
5185       RE_SYNTAX_POSIX_EXTENDED : RE_SYNTAX_POSIX_BASIC;
5186
5187   /* regex_compile will allocate the space for the compiled pattern.  */
5188   preg->buffer = 0;
5189   preg->allocated = 0;
5190   preg->used = 0;
5191   
5192   /* Don't bother to use a fastmap when searching.  This simplifies the
5193      REG_NEWLINE case: if we used a fastmap, we'd have to put all the
5194      characters after newlines into the fastmap.  This way, we just try
5195      every character.  */
5196   preg->fastmap = 0;
5197   
5198   if (cflags & REG_ICASE)
5199     {
5200       unsigned i;
5201       
5202       preg->translate = (char *) malloc (CHAR_SET_SIZE);
5203       if (preg->translate == NULL)
5204         return (int) REG_ESPACE;
5205
5206       /* Map uppercase characters to corresponding lowercase ones.  */
5207       for (i = 0; i < CHAR_SET_SIZE; i++)
5208         preg->translate[i] = ISUPPER (i) ? tolower (i) : i;
5209     }
5210   else
5211     preg->translate = NULL;
5212
5213   /* If REG_NEWLINE is set, newlines are treated differently.  */
5214   if (cflags & REG_NEWLINE)
5215     { /* REG_NEWLINE implies neither . nor [^...] match newline.  */
5216       syntax &= ~RE_DOT_NEWLINE;
5217       syntax |= RE_HAT_LISTS_NOT_NEWLINE;
5218       /* It also changes the matching behavior.  */
5219       preg->newline_anchor = 1;
5220     }
5221   else
5222     preg->newline_anchor = 0;
5223
5224   preg->no_sub = !!(cflags & REG_NOSUB);
5225
5226   /* POSIX says a null character in the pattern terminates it, so we 
5227      can use strlen here in compiling the pattern.  */
5228   ret = regex_compile (pattern, strlen (pattern), syntax, preg);
5229   
5230   /* POSIX doesn't distinguish between an unmatched open-group and an
5231      unmatched close-group: both are REG_EPAREN.  */
5232   if (ret == REG_ERPAREN) ret = REG_EPAREN;
5233   
5234   return (int) ret;
5235 }
5236
5237
5238 /* regexec searches for a given pattern, specified by PREG, in the
5239    string STRING.
5240    
5241    If NMATCH is zero or REG_NOSUB was set in the cflags argument to
5242    `regcomp', we ignore PMATCH.  Otherwise, we assume PMATCH has at
5243    least NMATCH elements, and we set them to the offsets of the
5244    corresponding matched substrings.
5245    
5246    EFLAGS specifies `execution flags' which affect matching: if
5247    REG_NOTBOL is set, then ^ does not match at the beginning of the
5248    string; if REG_NOTEOL is set, then $ does not match at the end.
5249    
5250    We return 0 if we find a match and REG_NOMATCH if not.  */
5251
5252 int
5253 regexec (preg, string, nmatch, pmatch, eflags)
5254     const regex_t *preg;
5255     const char *string; 
5256     size_t nmatch; 
5257     regmatch_t pmatch[]; 
5258     int eflags;
5259 {
5260   int ret;
5261   struct re_registers regs;
5262   regex_t private_preg;
5263   int len = strlen (string);
5264   boolean want_reg_info = !preg->no_sub && nmatch > 0;
5265
5266   private_preg = *preg;
5267   
5268   private_preg.not_bol = !!(eflags & REG_NOTBOL);
5269   private_preg.not_eol = !!(eflags & REG_NOTEOL);
5270   
5271   /* The user has told us exactly how many registers to return
5272      information about, via `nmatch'.  We have to pass that on to the
5273      matching routines.  */
5274   private_preg.regs_allocated = REGS_FIXED;
5275   
5276   if (want_reg_info)
5277     {
5278       regs.num_regs = nmatch;
5279       regs.start = TALLOC (nmatch, regoff_t);
5280       regs.end = TALLOC (nmatch, regoff_t);
5281       if (regs.start == NULL || regs.end == NULL)
5282         return (int) REG_NOMATCH;
5283     }
5284
5285   /* Perform the searching operation.  */
5286   ret = re_search (&private_preg, string, len,
5287                    /* start: */ 0, /* range: */ len,
5288                    want_reg_info ? &regs : (struct re_registers *) 0);
5289   
5290   /* Copy the register information to the POSIX structure.  */
5291   if (want_reg_info)
5292     {
5293       if (ret >= 0)
5294         {
5295           unsigned r;
5296
5297           for (r = 0; r < nmatch; r++)
5298             {
5299               pmatch[r].rm_so = regs.start[r];
5300               pmatch[r].rm_eo = regs.end[r];
5301             }
5302         }
5303
5304       /* If we needed the temporary register info, free the space now.  */
5305       free (regs.start);
5306       free (regs.end);
5307     }
5308
5309   /* We want zero return to mean success, unlike `re_search'.  */
5310   return ret >= 0 ? (int) REG_NOERROR : (int) REG_NOMATCH;
5311 }
5312
5313
5314 /* Returns a message corresponding to an error code, ERRCODE, returned
5315    from either regcomp or regexec.   We don't use PREG here.  */
5316
5317 size_t
5318 regerror (errcode, preg, errbuf, errbuf_size)
5319     int errcode;
5320     const regex_t *preg;
5321     char *errbuf;
5322     size_t errbuf_size;
5323 {
5324   const char *msg;
5325   size_t msg_size;
5326
5327   if (errcode < 0
5328       || errcode >= (sizeof (re_error_msgid) / sizeof (re_error_msgid[0])))
5329     /* Only error codes returned by the rest of the code should be passed 
5330        to this routine.  If we are given anything else, or if other regex
5331        code generates an invalid error code, then the program has a bug.
5332        Dump core so we can fix it.  */
5333     abort ();
5334
5335   msg = gettext (re_error_msgid[errcode]);
5336
5337   msg_size = strlen (msg) + 1; /* Includes the null.  */
5338   
5339   if (errbuf_size != 0)
5340     {
5341       if (msg_size > errbuf_size)
5342         {
5343           strncpy (errbuf, msg, errbuf_size - 1);
5344           errbuf[errbuf_size - 1] = 0;
5345         }
5346       else
5347         strcpy (errbuf, msg);
5348     }
5349
5350   return msg_size;
5351 }
5352
5353
5354 /* Free dynamically allocated space used by PREG.  */
5355
5356 void
5357 regfree (preg)
5358     regex_t *preg;
5359 {
5360   if (preg->buffer != NULL)
5361     free (preg->buffer);
5362   preg->buffer = NULL;
5363   
5364   preg->allocated = 0;
5365   preg->used = 0;
5366
5367   if (preg->fastmap != NULL)
5368     free (preg->fastmap);
5369   preg->fastmap = NULL;
5370   preg->fastmap_accurate = 0;
5371
5372   if (preg->translate != NULL)
5373     free (preg->translate);
5374   preg->translate = NULL;
5375 }
5376
5377 #endif /* not emacs  */
5378 \f
5379 /*
5380 Local variables:
5381 make-backup-files: t
5382 version-control: t
5383 trim-versions-without-asking: nil
5384 End:
5385 */