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