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