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