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