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