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