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