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