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