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