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