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