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