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