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