Trailing whitespace deleted.
[gnulib.git] / regex.c
1 /* Extended regular expression matching and search library, version
2    0.12.  (Implements POSIX draft P1003.2/D11.2, except for some of the
3    internationalization features.)
4
5    Copyright (C) 1993,94,95,96,97,98,99,2000 Free Software Foundation, Inc.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 2, or (at your option)
10    any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program; if not, write to the Free Software
19    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
20    USA.  */
21
22 /* TODO:
23    - structure the opcode space into opcode+flag.
24    - merge with glibc's regex.[ch].
25    - replace (succeed_n + jump_n + set_number_at) with something that doesn't
26      need to modify the compiled regexp so that re_match can be reentrant.
27    - get rid of on_failure_jump_smart by doing the optimization in re_comp
28      rather than at run-time, so that re_match can be reentrant.
29 */
30
31 /* AIX requires this to be the first thing in the file. */
32 #if defined _AIX && !defined REGEX_MALLOC
33   #pragma alloca
34 #endif
35
36 #ifdef HAVE_CONFIG_H
37 # include <config.h>
38 #endif
39
40 #if defined STDC_HEADERS && !defined emacs
41 # include <stddef.h>
42 #else
43 /* We need this for `regex.h', and perhaps for the Emacs include files.  */
44 # include <sys/types.h>
45 #endif
46
47 /* Whether to use ISO C Amendment 1 wide char functions.
48    Those should not be used for Emacs since it uses its own.  */
49 #if defined _LIBC
50 #define WIDE_CHAR_SUPPORT 1
51 #else
52 #define WIDE_CHAR_SUPPORT \
53         (HAVE_WCTYPE_H && HAVE_WCHAR_H && HAVE_BTOWC && !emacs)
54 #endif
55
56 /* For platform which support the ISO C amendement 1 functionality we
57    support user defined character classes.  */
58 #if WIDE_CHAR_SUPPORT
59 /* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>.  */
60 # include <wchar.h>
61 # include <wctype.h>
62 #endif
63
64 #ifdef _LIBC
65 /* We have to keep the namespace clean.  */
66 # define regfree(preg) __regfree (preg)
67 # define regexec(pr, st, nm, pm, ef) __regexec (pr, st, nm, pm, ef)
68 # define regcomp(preg, pattern, cflags) __regcomp (preg, pattern, cflags)
69 # define regerror(errcode, preg, errbuf, errbuf_size) \
70         __regerror(errcode, preg, errbuf, errbuf_size)
71 # define re_set_registers(bu, re, nu, st, en) \
72         __re_set_registers (bu, re, nu, st, en)
73 # define re_match_2(bufp, string1, size1, string2, size2, pos, regs, stop) \
74         __re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop)
75 # define re_match(bufp, string, size, pos, regs) \
76         __re_match (bufp, string, size, pos, regs)
77 # define re_search(bufp, string, size, startpos, range, regs) \
78         __re_search (bufp, string, size, startpos, range, regs)
79 # define re_compile_pattern(pattern, length, bufp) \
80         __re_compile_pattern (pattern, length, bufp)
81 # define re_set_syntax(syntax) __re_set_syntax (syntax)
82 # define re_search_2(bufp, st1, s1, st2, s2, startpos, range, regs, stop) \
83         __re_search_2 (bufp, st1, s1, st2, s2, startpos, range, regs, stop)
84 # define re_compile_fastmap(bufp) __re_compile_fastmap (bufp)
85
86 /* Make sure we call libc's function even if the user overrides them.  */
87 # define btowc __btowc
88 # define iswctype __iswctype
89 # define wctype __wctype
90
91 # define WEAK_ALIAS(a,b) weak_alias (a, b)
92
93 /* We are also using some library internals.  */
94 # include <locale/localeinfo.h>
95 # include <locale/elem-hash.h>
96 # include <langinfo.h>
97 #else
98 # define WEAK_ALIAS(a,b)
99 #endif
100
101 /* This is for other GNU distributions with internationalized messages.  */
102 #if HAVE_LIBINTL_H || defined _LIBC
103 # include <libintl.h>
104 #else
105 # define gettext(msgid) (msgid)
106 #endif
107
108 #ifndef gettext_noop
109 /* This define is so xgettext can find the internationalizable
110    strings.  */
111 # define gettext_noop(String) String
112 #endif
113
114 /* The `emacs' switch turns on certain matching commands
115    that make sense only in Emacs. */
116 #ifdef emacs
117
118 # include "lisp.h"
119 # include "buffer.h"
120
121 /* Make syntax table lookup grant data in gl_state.  */
122 # define SYNTAX_ENTRY_VIA_PROPERTY
123
124 # include "syntax.h"
125 # include "charset.h"
126 # include "category.h"
127
128 # ifdef malloc
129 #  undef malloc
130 # endif
131 # define malloc xmalloc
132 # ifdef realloc
133 #  undef realloc
134 # endif
135 # define realloc xrealloc
136 # ifdef free
137 #  undef free
138 # endif
139 # define free xfree
140
141 /* Converts the pointer to the char to BEG-based offset from the start.  */
142 # define PTR_TO_OFFSET(d) POS_AS_IN_BUFFER (POINTER_TO_OFFSET (d))
143 # define POS_AS_IN_BUFFER(p) ((p) + (NILP (re_match_object) || BUFFERP (re_match_object)))
144
145 # define RE_MULTIBYTE_P(bufp) ((bufp)->multibyte)
146 # define RE_STRING_CHAR(p, s) \
147   (multibyte ? (STRING_CHAR (p, s)) : (*(p)))
148 # define RE_STRING_CHAR_AND_LENGTH(p, s, len) \
149   (multibyte ? (STRING_CHAR_AND_LENGTH (p, s, len)) : ((len) = 1, *(p)))
150
151 /* Set C a (possibly multibyte) character before P.  P points into a
152    string which is the virtual concatenation of STR1 (which ends at
153    END1) or STR2 (which ends at END2).  */
154 # define GET_CHAR_BEFORE_2(c, p, str1, end1, str2, end2)                \
155   do {                                                                  \
156     if (multibyte)                                                      \
157        {                                                                \
158          re_char *dtemp = (p) == (str2) ? (end1) : (p);                 \
159          re_char *dlimit = ((p) > (str2) && (p) <= (end2)) ? (str2) : (str1); \
160          re_char *d0 = dtemp;                                           \
161          PREV_CHAR_BOUNDARY (d0, dlimit);                               \
162          c = STRING_CHAR (d0, dtemp - d0);                              \
163        }                                                                \
164      else                                                               \
165        (c = ((p) == (str2) ? (end1) : (p))[-1]);                        \
166   } while (0)
167
168
169 #else  /* not emacs */
170
171 /* If we are not linking with Emacs proper,
172    we can't use the relocating allocator
173    even if config.h says that we can.  */
174 # undef REL_ALLOC
175
176 # if defined STDC_HEADERS || defined _LIBC
177 #  include <stdlib.h>
178 # else
179 char *malloc ();
180 char *realloc ();
181 # endif
182
183 /* When used in Emacs's lib-src, we need to get bzero and bcopy somehow.
184    If nothing else has been done, use the method below.  */
185 # ifdef INHIBIT_STRING_HEADER
186 #  if !(defined HAVE_BZERO && defined HAVE_BCOPY)
187 #   if !defined bzero && !defined bcopy
188 #    undef INHIBIT_STRING_HEADER
189 #   endif
190 #  endif
191 # endif
192
193 /* This is the normal way of making sure we have memcpy, memcmp and bzero.
194    This is used in most programs--a few other programs avoid this
195    by defining INHIBIT_STRING_HEADER.  */
196 # ifndef INHIBIT_STRING_HEADER
197 #  if defined HAVE_STRING_H || defined STDC_HEADERS || defined _LIBC
198 #   include <string.h>
199 #   ifndef bzero
200 #    ifndef _LIBC
201 #     define bzero(s, n)        (memset (s, '\0', n), (s))
202 #    else
203 #     define bzero(s, n)        __bzero (s, n)
204 #    endif
205 #   endif
206 #  else
207 #   include <strings.h>
208 #   ifndef memcmp
209 #    define memcmp(s1, s2, n)   bcmp (s1, s2, n)
210 #   endif
211 #   ifndef memcpy
212 #    define memcpy(d, s, n)     (bcopy (s, d, n), (d))
213 #   endif
214 #  endif
215 # endif
216
217 /* Define the syntax stuff for \<, \>, etc.  */
218
219 /* Sword must be nonzero for the wordchar pattern commands in re_match_2.  */
220 enum syntaxcode { Swhitespace = 0, Sword = 1 };
221
222 # ifdef SWITCH_ENUM_BUG
223 #  define SWITCH_ENUM_CAST(x) ((int)(x))
224 # else
225 #  define SWITCH_ENUM_CAST(x) (x)
226 # endif
227
228 /* Dummy macros for non-Emacs environments.  */
229 # define BASE_LEADING_CODE_P(c) (0)
230 # define CHAR_CHARSET(c) 0
231 # define CHARSET_LEADING_CODE_BASE(c) 0
232 # define MAX_MULTIBYTE_LENGTH 1
233 # define RE_MULTIBYTE_P(x) 0
234 # define WORD_BOUNDARY_P(c1, c2) (0)
235 # define CHAR_HEAD_P(p) (1)
236 # define SINGLE_BYTE_CHAR_P(c) (1)
237 # define SAME_CHARSET_P(c1, c2) (1)
238 # define MULTIBYTE_FORM_LENGTH(p, s) (1)
239 # define PREV_CHAR_BOUNDARY(p, limit) ((p)--)
240 # define STRING_CHAR(p, s) (*(p))
241 # define RE_STRING_CHAR STRING_CHAR
242 # define CHAR_STRING(c, s) (*(s) = (c), 1)
243 # define STRING_CHAR_AND_LENGTH(p, s, actual_len) ((actual_len) = 1, *(p))
244 # define RE_STRING_CHAR_AND_LENGTH STRING_CHAR_AND_LENGTH
245 # define GET_CHAR_BEFORE_2(c, p, str1, end1, str2, end2) \
246   (c = ((p) == (str2) ? *((end1) - 1) : *((p) - 1)))
247 # define MAKE_CHAR(charset, c1, c2) (c1)
248 #endif /* not emacs */
249
250 #ifndef RE_TRANSLATE
251 # define RE_TRANSLATE(TBL, C) ((unsigned char)(TBL)[C])
252 # define RE_TRANSLATE_P(TBL) (TBL)
253 #endif
254 \f
255 /* Get the interface, including the syntax bits.  */
256 #include "regex.h"
257
258 /* isalpha etc. are used for the character classes.  */
259 #include <ctype.h>
260
261 #ifdef emacs
262
263 /* 1 if C is an ASCII character.  */
264 # define IS_REAL_ASCII(c) ((c) < 0200)
265
266 /* 1 if C is a unibyte character.  */
267 # define ISUNIBYTE(c) (SINGLE_BYTE_CHAR_P ((c)))
268
269 /* The Emacs definitions should not be directly affected by locales.  */
270
271 /* In Emacs, these are only used for single-byte characters.  */
272 # define ISDIGIT(c) ((c) >= '0' && (c) <= '9')
273 # define ISCNTRL(c) ((c) < ' ')
274 # define ISXDIGIT(c) (((c) >= '0' && (c) <= '9')                \
275                      || ((c) >= 'a' && (c) <= 'f')      \
276                      || ((c) >= 'A' && (c) <= 'F'))
277
278 /* This is only used for single-byte characters.  */
279 # define ISBLANK(c) ((c) == ' ' || (c) == '\t')
280
281 /* The rest must handle multibyte characters.  */
282
283 # define ISGRAPH(c) (SINGLE_BYTE_CHAR_P (c)                             \
284                     ? (c) > ' ' && !((c) >= 0177 && (c) <= 0237)        \
285                     : 1)
286
287 # define ISPRINT(c) (SINGLE_BYTE_CHAR_P (c)                             \
288                     ? (c) >= ' ' && !((c) >= 0177 && (c) <= 0237)       \
289                     : 1)
290
291 # define ISALNUM(c) (IS_REAL_ASCII (c)                  \
292                     ? (((c) >= 'a' && (c) <= 'z')       \
293                        || ((c) >= 'A' && (c) <= 'Z')    \
294                        || ((c) >= '0' && (c) <= '9'))   \
295                     : SYNTAX (c) == Sword)
296
297 # define ISALPHA(c) (IS_REAL_ASCII (c)                  \
298                     ? (((c) >= 'a' && (c) <= 'z')       \
299                        || ((c) >= 'A' && (c) <= 'Z'))   \
300                     : SYNTAX (c) == Sword)
301
302 # define ISLOWER(c) (LOWERCASEP (c))
303
304 # define ISPUNCT(c) (IS_REAL_ASCII (c)                          \
305                     ? ((c) > ' ' && (c) < 0177                  \
306                        && !(((c) >= 'a' && (c) <= 'z')          \
307                             || ((c) >= 'A' && (c) <= 'Z')       \
308                             || ((c) >= '0' && (c) <= '9')))     \
309                     : SYNTAX (c) != Sword)
310
311 # define ISSPACE(c) (SYNTAX (c) == Swhitespace)
312
313 # define ISUPPER(c) (UPPERCASEP (c))
314
315 # define ISWORD(c) (SYNTAX (c) == Sword)
316
317 #else /* not emacs */
318
319 /* Jim Meyering writes:
320
321    "... Some ctype macros are valid only for character codes that
322    isascii says are ASCII (SGI's IRIX-4.0.5 is one such system --when
323    using /bin/cc or gcc but without giving an ansi option).  So, all
324    ctype uses should be through macros like ISPRINT...  If
325    STDC_HEADERS is defined, then autoconf has verified that the ctype
326    macros don't need to be guarded with references to isascii. ...
327    Defining isascii to 1 should let any compiler worth its salt
328    eliminate the && through constant folding."
329    Solaris defines some of these symbols so we must undefine them first.  */
330
331 # undef ISASCII
332 # if defined STDC_HEADERS || (!defined isascii && !defined HAVE_ISASCII)
333 #  define ISASCII(c) 1
334 # else
335 #  define ISASCII(c) isascii(c)
336 # endif
337
338 /* 1 if C is an ASCII character.  */
339 # define IS_REAL_ASCII(c) ((c) < 0200)
340
341 /* This distinction is not meaningful, except in Emacs.  */
342 # define ISUNIBYTE(c) 1
343
344 # ifdef isblank
345 #  define ISBLANK(c) (ISASCII (c) && isblank (c))
346 # else
347 #  define ISBLANK(c) ((c) == ' ' || (c) == '\t')
348 # endif
349 # ifdef isgraph
350 #  define ISGRAPH(c) (ISASCII (c) && isgraph (c))
351 # else
352 #  define ISGRAPH(c) (ISASCII (c) && isprint (c) && !isspace (c))
353 # endif
354
355 # undef ISPRINT
356 # define ISPRINT(c) (ISASCII (c) && isprint (c))
357 # define ISDIGIT(c) (ISASCII (c) && isdigit (c))
358 # define ISALNUM(c) (ISASCII (c) && isalnum (c))
359 # define ISALPHA(c) (ISASCII (c) && isalpha (c))
360 # define ISCNTRL(c) (ISASCII (c) && iscntrl (c))
361 # define ISLOWER(c) (ISASCII (c) && islower (c))
362 # define ISPUNCT(c) (ISASCII (c) && ispunct (c))
363 # define ISSPACE(c) (ISASCII (c) && isspace (c))
364 # define ISUPPER(c) (ISASCII (c) && isupper (c))
365 # define ISXDIGIT(c) (ISASCII (c) && isxdigit (c))
366
367 # define ISWORD(c) ISALPHA(c)
368
369 # ifdef _tolower
370 #  define TOLOWER(c) _tolower(c)
371 # else
372 #  define TOLOWER(c) tolower(c)
373 # endif
374
375 /* How many characters in the character set.  */
376 # define CHAR_SET_SIZE 256
377
378 # ifdef SYNTAX_TABLE
379
380 extern char *re_syntax_table;
381
382 # else /* not SYNTAX_TABLE */
383
384 static char re_syntax_table[CHAR_SET_SIZE];
385
386 static void
387 init_syntax_once ()
388 {
389    register int c;
390    static int done = 0;
391
392    if (done)
393      return;
394
395    bzero (re_syntax_table, sizeof re_syntax_table);
396
397    for (c = 0; c < CHAR_SET_SIZE; ++c)
398      if (ISALNUM (c))
399         re_syntax_table[c] = Sword;
400
401    re_syntax_table['_'] = Sword;
402
403    done = 1;
404 }
405
406 # endif /* not SYNTAX_TABLE */
407
408 # define SYNTAX(c) re_syntax_table[(c)]
409
410 #endif /* not emacs */
411 \f
412 #ifndef NULL
413 # define NULL (void *)0
414 #endif
415
416 /* We remove any previous definition of `SIGN_EXTEND_CHAR',
417    since ours (we hope) works properly with all combinations of
418    machines, compilers, `char' and `unsigned char' argument types.
419    (Per Bothner suggested the basic approach.)  */
420 #undef SIGN_EXTEND_CHAR
421 #if __STDC__
422 # define SIGN_EXTEND_CHAR(c) ((signed char) (c))
423 #else  /* not __STDC__ */
424 /* As in Harbison and Steele.  */
425 # define SIGN_EXTEND_CHAR(c) ((((unsigned char) (c)) ^ 128) - 128)
426 #endif
427 \f
428 /* Should we use malloc or alloca?  If REGEX_MALLOC is not defined, we
429    use `alloca' instead of `malloc'.  This is because using malloc in
430    re_search* or re_match* could cause memory leaks when C-g is used in
431    Emacs; also, malloc is slower and causes storage fragmentation.  On
432    the other hand, malloc is more portable, and easier to debug.
433
434    Because we sometimes use alloca, some routines have to be macros,
435    not functions -- `alloca'-allocated space disappears at the end of the
436    function it is called in.  */
437
438 #ifdef REGEX_MALLOC
439
440 # define REGEX_ALLOCATE malloc
441 # define REGEX_REALLOCATE(source, osize, nsize) realloc (source, nsize)
442 # define REGEX_FREE free
443
444 #else /* not REGEX_MALLOC  */
445
446 /* Emacs already defines alloca, sometimes.  */
447 # ifndef alloca
448
449 /* Make alloca work the best possible way.  */
450 #  ifdef __GNUC__
451 #   define alloca __builtin_alloca
452 #  else /* not __GNUC__ */
453 #   if HAVE_ALLOCA_H
454 #    include <alloca.h>
455 #   endif /* HAVE_ALLOCA_H */
456 #  endif /* not __GNUC__ */
457
458 # endif /* not alloca */
459
460 # define REGEX_ALLOCATE alloca
461
462 /* Assumes a `char *destination' variable.  */
463 # define REGEX_REALLOCATE(source, osize, nsize)                         \
464   (destination = (char *) alloca (nsize),                               \
465    memcpy (destination, source, osize))
466
467 /* No need to do anything to free, after alloca.  */
468 # define REGEX_FREE(arg) ((void)0) /* Do nothing!  But inhibit gcc warning.  */
469
470 #endif /* not REGEX_MALLOC */
471
472 /* Define how to allocate the failure stack.  */
473
474 #if defined REL_ALLOC && defined REGEX_MALLOC
475
476 # define REGEX_ALLOCATE_STACK(size)                             \
477   r_alloc (&failure_stack_ptr, (size))
478 # define REGEX_REALLOCATE_STACK(source, osize, nsize)           \
479   r_re_alloc (&failure_stack_ptr, (nsize))
480 # define REGEX_FREE_STACK(ptr)                                  \
481   r_alloc_free (&failure_stack_ptr)
482
483 #else /* not using relocating allocator */
484
485 # ifdef REGEX_MALLOC
486
487 #  define REGEX_ALLOCATE_STACK malloc
488 #  define REGEX_REALLOCATE_STACK(source, osize, nsize) realloc (source, nsize)
489 #  define REGEX_FREE_STACK free
490
491 # else /* not REGEX_MALLOC */
492
493 #  define REGEX_ALLOCATE_STACK alloca
494
495 #  define REGEX_REALLOCATE_STACK(source, osize, nsize)                  \
496    REGEX_REALLOCATE (source, osize, nsize)
497 /* No need to explicitly free anything.  */
498 #  define REGEX_FREE_STACK(arg) ((void)0)
499
500 # endif /* not REGEX_MALLOC */
501 #endif /* not using relocating allocator */
502
503
504 /* True if `size1' is non-NULL and PTR is pointing anywhere inside
505    `string1' or just past its end.  This works if PTR is NULL, which is
506    a good thing.  */
507 #define FIRST_STRING_P(ptr)                                     \
508   (size1 && string1 <= (ptr) && (ptr) <= string1 + size1)
509
510 /* (Re)Allocate N items of type T using malloc, or fail.  */
511 #define TALLOC(n, t) ((t *) malloc ((n) * sizeof (t)))
512 #define RETALLOC(addr, n, t) ((addr) = (t *) realloc (addr, (n) * sizeof (t)))
513 #define RETALLOC_IF(addr, n, t) \
514   if (addr) RETALLOC((addr), (n), t); else (addr) = TALLOC ((n), t)
515 #define REGEX_TALLOC(n, t) ((t *) REGEX_ALLOCATE ((n) * sizeof (t)))
516
517 #define BYTEWIDTH 8 /* In bits.  */
518
519 #define STREQ(s1, s2) ((strcmp (s1, s2) == 0))
520
521 #undef MAX
522 #undef MIN
523 #define MAX(a, b) ((a) > (b) ? (a) : (b))
524 #define MIN(a, b) ((a) < (b) ? (a) : (b))
525
526 /* Type of source-pattern and string chars.  */
527 typedef const unsigned char re_char;
528
529 typedef char boolean;
530 #define false 0
531 #define true 1
532
533 static int re_match_2_internal _RE_ARGS ((struct re_pattern_buffer *bufp,
534                                         re_char *string1, int size1,
535                                         re_char *string2, int size2,
536                                         int pos,
537                                         struct re_registers *regs,
538                                         int stop));
539 \f
540 /* These are the command codes that appear in compiled regular
541    expressions.  Some opcodes are followed by argument bytes.  A
542    command code can specify any interpretation whatsoever for its
543    arguments.  Zero bytes may appear in the compiled regular expression.  */
544
545 typedef enum
546 {
547   no_op = 0,
548
549   /* Succeed right away--no more backtracking.  */
550   succeed,
551
552         /* Followed by one byte giving n, then by n literal bytes.  */
553   exactn,
554
555         /* Matches any (more or less) character.  */
556   anychar,
557
558         /* Matches any one char belonging to specified set.  First
559            following byte is number of bitmap bytes.  Then come bytes
560            for a bitmap saying which chars are in.  Bits in each byte
561            are ordered low-bit-first.  A character is in the set if its
562            bit is 1.  A character too large to have a bit in the map is
563            automatically not in the set.
564
565            If the length byte has the 0x80 bit set, then that stuff
566            is followed by a range table:
567                2 bytes of flags for character sets (low 8 bits, high 8 bits)
568                    See RANGE_TABLE_WORK_BITS below.
569                2 bytes, the number of pairs that follow (upto 32767)
570                pairs, each 2 multibyte characters,
571                    each multibyte character represented as 3 bytes.  */
572   charset,
573
574         /* Same parameters as charset, but match any character that is
575            not one of those specified.  */
576   charset_not,
577
578         /* Start remembering the text that is matched, for storing in a
579            register.  Followed by one byte with the register number, in
580            the range 0 to one less than the pattern buffer's re_nsub
581            field.  */
582   start_memory,
583
584         /* Stop remembering the text that is matched and store it in a
585            memory register.  Followed by one byte with the register
586            number, in the range 0 to one less than `re_nsub' in the
587            pattern buffer.  */
588   stop_memory,
589
590         /* Match a duplicate of something remembered. Followed by one
591            byte containing the register number.  */
592   duplicate,
593
594         /* Fail unless at beginning of line.  */
595   begline,
596
597         /* Fail unless at end of line.  */
598   endline,
599
600         /* Succeeds if at beginning of buffer (if emacs) or at beginning
601            of string to be matched (if not).  */
602   begbuf,
603
604         /* Analogously, for end of buffer/string.  */
605   endbuf,
606
607         /* Followed by two byte relative address to which to jump.  */
608   jump,
609
610         /* Followed by two-byte relative address of place to resume at
611            in case of failure.  */
612   on_failure_jump,
613
614         /* Like on_failure_jump, but pushes a placeholder instead of the
615            current string position when executed.  */
616   on_failure_keep_string_jump,
617
618         /* Just like `on_failure_jump', except that it checks that we
619            don't get stuck in an infinite loop (matching an empty string
620            indefinitely).  */
621   on_failure_jump_loop,
622
623         /* Just like `on_failure_jump_loop', except that it checks for
624            a different kind of loop (the kind that shows up with non-greedy
625            operators).  This operation has to be immediately preceded
626            by a `no_op'.  */
627   on_failure_jump_nastyloop,
628
629         /* A smart `on_failure_jump' used for greedy * and + operators.
630            It analyses the loop before which it is put and if the
631            loop does not require backtracking, it changes itself to
632            `on_failure_keep_string_jump' and short-circuits the loop,
633            else it just defaults to changing itself into `on_failure_jump'.
634            It assumes that it is pointing to just past a `jump'.  */
635   on_failure_jump_smart,
636
637         /* Followed by two-byte relative address and two-byte number n.
638            After matching N times, jump to the address upon failure.
639            Does not work if N starts at 0: use on_failure_jump_loop
640            instead.  */
641   succeed_n,
642
643         /* Followed by two-byte relative address, and two-byte number n.
644            Jump to the address N times, then fail.  */
645   jump_n,
646
647         /* Set the following two-byte relative address to the
648            subsequent two-byte number.  The address *includes* the two
649            bytes of number.  */
650   set_number_at,
651
652   wordbeg,      /* Succeeds if at word beginning.  */
653   wordend,      /* Succeeds if at word end.  */
654
655   wordbound,    /* Succeeds if at a word boundary.  */
656   notwordbound, /* Succeeds if not at a word boundary.  */
657
658         /* Matches any character whose syntax is specified.  Followed by
659            a byte which contains a syntax code, e.g., Sword.  */
660   syntaxspec,
661
662         /* Matches any character whose syntax is not that specified.  */
663   notsyntaxspec
664
665 #ifdef emacs
666   ,before_dot,  /* Succeeds if before point.  */
667   at_dot,       /* Succeeds if at point.  */
668   after_dot,    /* Succeeds if after point.  */
669
670   /* Matches any character whose category-set contains the specified
671      category.  The operator is followed by a byte which contains a
672      category code (mnemonic ASCII character).  */
673   categoryspec,
674
675   /* Matches any character whose category-set does not contain the
676      specified category.  The operator is followed by a byte which
677      contains the category code (mnemonic ASCII character).  */
678   notcategoryspec
679 #endif /* emacs */
680 } re_opcode_t;
681 \f
682 /* Common operations on the compiled pattern.  */
683
684 /* Store NUMBER in two contiguous bytes starting at DESTINATION.  */
685
686 #define STORE_NUMBER(destination, number)                               \
687   do {                                                                  \
688     (destination)[0] = (number) & 0377;                                 \
689     (destination)[1] = (number) >> 8;                                   \
690   } while (0)
691
692 /* Same as STORE_NUMBER, except increment DESTINATION to
693    the byte after where the number is stored.  Therefore, DESTINATION
694    must be an lvalue.  */
695
696 #define STORE_NUMBER_AND_INCR(destination, number)                      \
697   do {                                                                  \
698     STORE_NUMBER (destination, number);                                 \
699     (destination) += 2;                                                 \
700   } while (0)
701
702 /* Put into DESTINATION a number stored in two contiguous bytes starting
703    at SOURCE.  */
704
705 #define EXTRACT_NUMBER(destination, source)                             \
706   do {                                                                  \
707     (destination) = *(source) & 0377;                                   \
708     (destination) += SIGN_EXTEND_CHAR (*((source) + 1)) << 8;           \
709   } while (0)
710
711 #ifdef DEBUG
712 static void extract_number _RE_ARGS ((int *dest, re_char *source));
713 static void
714 extract_number (dest, source)
715     int *dest;
716     re_char *source;
717 {
718   int temp = SIGN_EXTEND_CHAR (*(source + 1));
719   *dest = *source & 0377;
720   *dest += temp << 8;
721 }
722
723 # ifndef EXTRACT_MACROS /* To debug the macros.  */
724 #  undef EXTRACT_NUMBER
725 #  define EXTRACT_NUMBER(dest, src) extract_number (&dest, src)
726 # endif /* not EXTRACT_MACROS */
727
728 #endif /* DEBUG */
729
730 /* Same as EXTRACT_NUMBER, except increment SOURCE to after the number.
731    SOURCE must be an lvalue.  */
732
733 #define EXTRACT_NUMBER_AND_INCR(destination, source)                    \
734   do {                                                                  \
735     EXTRACT_NUMBER (destination, source);                               \
736     (source) += 2;                                                      \
737   } while (0)
738
739 #ifdef DEBUG
740 static void extract_number_and_incr _RE_ARGS ((int *destination,
741                                                re_char **source));
742 static void
743 extract_number_and_incr (destination, source)
744     int *destination;
745     re_char **source;
746 {
747   extract_number (destination, *source);
748   *source += 2;
749 }
750
751 # ifndef EXTRACT_MACROS
752 #  undef EXTRACT_NUMBER_AND_INCR
753 #  define EXTRACT_NUMBER_AND_INCR(dest, src) \
754   extract_number_and_incr (&dest, &src)
755 # endif /* not EXTRACT_MACROS */
756
757 #endif /* DEBUG */
758 \f
759 /* Store a multibyte character in three contiguous bytes starting
760    DESTINATION, and increment DESTINATION to the byte after where the
761    character is stored.  Therefore, DESTINATION must be an lvalue.  */
762
763 #define STORE_CHARACTER_AND_INCR(destination, character)        \
764   do {                                                          \
765     (destination)[0] = (character) & 0377;                      \
766     (destination)[1] = ((character) >> 8) & 0377;               \
767     (destination)[2] = (character) >> 16;                       \
768     (destination) += 3;                                         \
769   } while (0)
770
771 /* Put into DESTINATION a character stored in three contiguous bytes
772    starting at SOURCE.  */
773
774 #define EXTRACT_CHARACTER(destination, source)  \
775   do {                                          \
776     (destination) = ((source)[0]                \
777                      | ((source)[1] << 8)       \
778                      | ((source)[2] << 16));    \
779   } while (0)
780
781
782 /* Macros for charset. */
783
784 /* Size of bitmap of charset P in bytes.  P is a start of charset,
785    i.e. *P is (re_opcode_t) charset or (re_opcode_t) charset_not.  */
786 #define CHARSET_BITMAP_SIZE(p) ((p)[1] & 0x7F)
787
788 /* Nonzero if charset P has range table.  */
789 #define CHARSET_RANGE_TABLE_EXISTS_P(p)  ((p)[1] & 0x80)
790
791 /* Return the address of range table of charset P.  But not the start
792    of table itself, but the before where the number of ranges is
793    stored.  `2 +' means to skip re_opcode_t and size of bitmap,
794    and the 2 bytes of flags at the start of the range table.  */
795 #define CHARSET_RANGE_TABLE(p) (&(p)[4 + CHARSET_BITMAP_SIZE (p)])
796
797 /* Extract the bit flags that start a range table.  */
798 #define CHARSET_RANGE_TABLE_BITS(p)             \
799   ((p)[2 + CHARSET_BITMAP_SIZE (p)]             \
800    + (p)[3 + CHARSET_BITMAP_SIZE (p)] * 0x100)
801
802 /* Test if C is listed in the bitmap of charset P.  */
803 #define CHARSET_LOOKUP_BITMAP(p, c)                             \
804   ((c) < CHARSET_BITMAP_SIZE (p) * BYTEWIDTH                    \
805    && (p)[2 + (c) / BYTEWIDTH] & (1 << ((c) % BYTEWIDTH)))
806
807 /* Return the address of end of RANGE_TABLE.  COUNT is number of
808    ranges (which is a pair of (start, end)) in the RANGE_TABLE.  `* 2'
809    is start of range and end of range.  `* 3' is size of each start
810    and end.  */
811 #define CHARSET_RANGE_TABLE_END(range_table, count)     \
812   ((range_table) + (count) * 2 * 3)
813
814 /* Test if C is in RANGE_TABLE.  A flag NOT is negated if C is in.
815    COUNT is number of ranges in RANGE_TABLE.  */
816 #define CHARSET_LOOKUP_RANGE_TABLE_RAW(not, c, range_table, count)      \
817   do                                                                    \
818     {                                                                   \
819       re_wchar_t range_start, range_end;                                \
820       re_char *p;                                                       \
821       re_char *range_table_end                                          \
822         = CHARSET_RANGE_TABLE_END ((range_table), (count));             \
823                                                                         \
824       for (p = (range_table); p < range_table_end; p += 2 * 3)          \
825         {                                                               \
826           EXTRACT_CHARACTER (range_start, p);                           \
827           EXTRACT_CHARACTER (range_end, p + 3);                         \
828                                                                         \
829           if (range_start <= (c) && (c) <= range_end)                   \
830             {                                                           \
831               (not) = !(not);                                           \
832               break;                                                    \
833             }                                                           \
834         }                                                               \
835     }                                                                   \
836   while (0)
837
838 /* Test if C is in range table of CHARSET.  The flag NOT is negated if
839    C is listed in it.  */
840 #define CHARSET_LOOKUP_RANGE_TABLE(not, c, charset)                     \
841   do                                                                    \
842     {                                                                   \
843       /* Number of ranges in range table. */                            \
844       int count;                                                        \
845       re_char *range_table = CHARSET_RANGE_TABLE (charset);             \
846                                                                         \
847       EXTRACT_NUMBER_AND_INCR (count, range_table);                     \
848       CHARSET_LOOKUP_RANGE_TABLE_RAW ((not), (c), range_table, count);  \
849     }                                                                   \
850   while (0)
851 \f
852 /* If DEBUG is defined, Regex prints many voluminous messages about what
853    it is doing (if the variable `debug' is nonzero).  If linked with the
854    main program in `iregex.c', you can enter patterns and strings
855    interactively.  And if linked with the main program in `main.c' and
856    the other test files, you can run the already-written tests.  */
857
858 #ifdef DEBUG
859
860 /* We use standard I/O for debugging.  */
861 # include <stdio.h>
862
863 /* It is useful to test things that ``must'' be true when debugging.  */
864 # include <assert.h>
865
866 static int debug = -100000;
867
868 # define DEBUG_STATEMENT(e) e
869 # define DEBUG_PRINT1(x) if (debug > 0) printf (x)
870 # define DEBUG_PRINT2(x1, x2) if (debug > 0) printf (x1, x2)
871 # define DEBUG_PRINT3(x1, x2, x3) if (debug > 0) printf (x1, x2, x3)
872 # define DEBUG_PRINT4(x1, x2, x3, x4) if (debug > 0) printf (x1, x2, x3, x4)
873 # define DEBUG_PRINT_COMPILED_PATTERN(p, s, e)                          \
874   if (debug > 0) print_partial_compiled_pattern (s, e)
875 # define DEBUG_PRINT_DOUBLE_STRING(w, s1, sz1, s2, sz2)                 \
876   if (debug > 0) print_double_string (w, s1, sz1, s2, sz2)
877
878
879 /* Print the fastmap in human-readable form.  */
880
881 void
882 print_fastmap (fastmap)
883     char *fastmap;
884 {
885   unsigned was_a_range = 0;
886   unsigned i = 0;
887
888   while (i < (1 << BYTEWIDTH))
889     {
890       if (fastmap[i++])
891         {
892           was_a_range = 0;
893           putchar (i - 1);
894           while (i < (1 << BYTEWIDTH)  &&  fastmap[i])
895             {
896               was_a_range = 1;
897               i++;
898             }
899           if (was_a_range)
900             {
901               printf ("-");
902               putchar (i - 1);
903             }
904         }
905     }
906   putchar ('\n');
907 }
908
909
910 /* Print a compiled pattern string in human-readable form, starting at
911    the START pointer into it and ending just before the pointer END.  */
912
913 void
914 print_partial_compiled_pattern (start, end)
915     re_char *start;
916     re_char *end;
917 {
918   int mcnt, mcnt2;
919   re_char *p = start;
920   re_char *pend = end;
921
922   if (start == NULL)
923     {
924       printf ("(null)\n");
925       return;
926     }
927
928   /* Loop over pattern commands.  */
929   while (p < pend)
930     {
931       printf ("%d:\t", p - start);
932
933       switch ((re_opcode_t) *p++)
934         {
935         case no_op:
936           printf ("/no_op");
937           break;
938
939         case succeed:
940           printf ("/succeed");
941           break;
942
943         case exactn:
944           mcnt = *p++;
945           printf ("/exactn/%d", mcnt);
946           do
947             {
948               putchar ('/');
949               putchar (*p++);
950             }
951           while (--mcnt);
952           break;
953
954         case start_memory:
955           printf ("/start_memory/%d", *p++);
956           break;
957
958         case stop_memory:
959           printf ("/stop_memory/%d", *p++);
960           break;
961
962         case duplicate:
963           printf ("/duplicate/%d", *p++);
964           break;
965
966         case anychar:
967           printf ("/anychar");
968           break;
969
970         case charset:
971         case charset_not:
972           {
973             register int c, last = -100;
974             register int in_range = 0;
975             int length = CHARSET_BITMAP_SIZE (p - 1);
976             int has_range_table = CHARSET_RANGE_TABLE_EXISTS_P (p - 1);
977
978             printf ("/charset [%s",
979                     (re_opcode_t) *(p - 1) == charset_not ? "^" : "");
980
981             assert (p + *p < pend);
982
983             for (c = 0; c < 256; c++)
984               if (c / 8 < length
985                   && (p[1 + (c/8)] & (1 << (c % 8))))
986                 {
987                   /* Are we starting a range?  */
988                   if (last + 1 == c && ! in_range)
989                     {
990                       putchar ('-');
991                       in_range = 1;
992                     }
993                   /* Have we broken a range?  */
994                   else if (last + 1 != c && in_range)
995                     {
996                       putchar (last);
997                       in_range = 0;
998                     }
999
1000                   if (! in_range)
1001                     putchar (c);
1002
1003                   last = c;
1004               }
1005
1006             if (in_range)
1007               putchar (last);
1008
1009             putchar (']');
1010
1011             p += 1 + length;
1012
1013             if (has_range_table)
1014               {
1015                 int count;
1016                 printf ("has-range-table");
1017
1018                 /* ??? Should print the range table; for now, just skip it.  */
1019                 p += 2;         /* skip range table bits */
1020                 EXTRACT_NUMBER_AND_INCR (count, p);
1021                 p = CHARSET_RANGE_TABLE_END (p, count);
1022               }
1023           }
1024           break;
1025
1026         case begline:
1027           printf ("/begline");
1028           break;
1029
1030         case endline:
1031           printf ("/endline");
1032           break;
1033
1034         case on_failure_jump:
1035           extract_number_and_incr (&mcnt, &p);
1036           printf ("/on_failure_jump to %d", p + mcnt - start);
1037           break;
1038
1039         case on_failure_keep_string_jump:
1040           extract_number_and_incr (&mcnt, &p);
1041           printf ("/on_failure_keep_string_jump to %d", p + mcnt - start);
1042           break;
1043
1044         case on_failure_jump_nastyloop:
1045           extract_number_and_incr (&mcnt, &p);
1046           printf ("/on_failure_jump_nastyloop to %d", p + mcnt - start);
1047           break;
1048
1049         case on_failure_jump_loop:
1050           extract_number_and_incr (&mcnt, &p);
1051           printf ("/on_failure_jump_loop to %d", p + mcnt - start);
1052           break;
1053
1054         case on_failure_jump_smart:
1055           extract_number_and_incr (&mcnt, &p);
1056           printf ("/on_failure_jump_smart to %d", p + mcnt - start);
1057           break;
1058
1059         case jump:
1060           extract_number_and_incr (&mcnt, &p);
1061           printf ("/jump to %d", p + mcnt - start);
1062           break;
1063
1064         case succeed_n:
1065           extract_number_and_incr (&mcnt, &p);
1066           extract_number_and_incr (&mcnt2, &p);
1067           printf ("/succeed_n to %d, %d times", p - 2 + mcnt - start, mcnt2);
1068           break;
1069
1070         case jump_n:
1071           extract_number_and_incr (&mcnt, &p);
1072           extract_number_and_incr (&mcnt2, &p);
1073           printf ("/jump_n to %d, %d times", p - 2 + mcnt - start, mcnt2);
1074           break;
1075
1076         case set_number_at:
1077           extract_number_and_incr (&mcnt, &p);
1078           extract_number_and_incr (&mcnt2, &p);
1079           printf ("/set_number_at location %d to %d", p - 2 + mcnt - start, mcnt2);
1080           break;
1081
1082         case wordbound:
1083           printf ("/wordbound");
1084           break;
1085
1086         case notwordbound:
1087           printf ("/notwordbound");
1088           break;
1089
1090         case wordbeg:
1091           printf ("/wordbeg");
1092           break;
1093
1094         case wordend:
1095           printf ("/wordend");
1096
1097         case syntaxspec:
1098           printf ("/syntaxspec");
1099           mcnt = *p++;
1100           printf ("/%d", mcnt);
1101           break;
1102
1103         case notsyntaxspec:
1104           printf ("/notsyntaxspec");
1105           mcnt = *p++;
1106           printf ("/%d", mcnt);
1107           break;
1108
1109 # ifdef emacs
1110         case before_dot:
1111           printf ("/before_dot");
1112           break;
1113
1114         case at_dot:
1115           printf ("/at_dot");
1116           break;
1117
1118         case after_dot:
1119           printf ("/after_dot");
1120           break;
1121
1122         case categoryspec:
1123           printf ("/categoryspec");
1124           mcnt = *p++;
1125           printf ("/%d", mcnt);
1126           break;
1127
1128         case notcategoryspec:
1129           printf ("/notcategoryspec");
1130           mcnt = *p++;
1131           printf ("/%d", mcnt);
1132           break;
1133 # endif /* emacs */
1134
1135         case begbuf:
1136           printf ("/begbuf");
1137           break;
1138
1139         case endbuf:
1140           printf ("/endbuf");
1141           break;
1142
1143         default:
1144           printf ("?%d", *(p-1));
1145         }
1146
1147       putchar ('\n');
1148     }
1149
1150   printf ("%d:\tend of pattern.\n", p - start);
1151 }
1152
1153
1154 void
1155 print_compiled_pattern (bufp)
1156     struct re_pattern_buffer *bufp;
1157 {
1158   re_char *buffer = bufp->buffer;
1159
1160   print_partial_compiled_pattern (buffer, buffer + bufp->used);
1161   printf ("%ld bytes used/%ld bytes allocated.\n",
1162           bufp->used, bufp->allocated);
1163
1164   if (bufp->fastmap_accurate && bufp->fastmap)
1165     {
1166       printf ("fastmap: ");
1167       print_fastmap (bufp->fastmap);
1168     }
1169
1170   printf ("re_nsub: %d\t", bufp->re_nsub);
1171   printf ("regs_alloc: %d\t", bufp->regs_allocated);
1172   printf ("can_be_null: %d\t", bufp->can_be_null);
1173   printf ("no_sub: %d\t", bufp->no_sub);
1174   printf ("not_bol: %d\t", bufp->not_bol);
1175   printf ("not_eol: %d\t", bufp->not_eol);
1176   printf ("syntax: %lx\n", bufp->syntax);
1177   fflush (stdout);
1178   /* Perhaps we should print the translate table?  */
1179 }
1180
1181
1182 void
1183 print_double_string (where, string1, size1, string2, size2)
1184     re_char *where;
1185     re_char *string1;
1186     re_char *string2;
1187     int size1;
1188     int size2;
1189 {
1190   int this_char;
1191
1192   if (where == NULL)
1193     printf ("(null)");
1194   else
1195     {
1196       if (FIRST_STRING_P (where))
1197         {
1198           for (this_char = where - string1; this_char < size1; this_char++)
1199             putchar (string1[this_char]);
1200
1201           where = string2;
1202         }
1203
1204       for (this_char = where - string2; this_char < size2; this_char++)
1205         putchar (string2[this_char]);
1206     }
1207 }
1208
1209 #else /* not DEBUG */
1210
1211 # undef assert
1212 # define assert(e)
1213
1214 # define DEBUG_STATEMENT(e)
1215 # define DEBUG_PRINT1(x)
1216 # define DEBUG_PRINT2(x1, x2)
1217 # define DEBUG_PRINT3(x1, x2, x3)
1218 # define DEBUG_PRINT4(x1, x2, x3, x4)
1219 # define DEBUG_PRINT_COMPILED_PATTERN(p, s, e)
1220 # define DEBUG_PRINT_DOUBLE_STRING(w, s1, sz1, s2, sz2)
1221
1222 #endif /* not DEBUG */
1223 \f
1224 /* Set by `re_set_syntax' to the current regexp syntax to recognize.  Can
1225    also be assigned to arbitrarily: each pattern buffer stores its own
1226    syntax, so it can be changed between regex compilations.  */
1227 /* This has no initializer because initialized variables in Emacs
1228    become read-only after dumping.  */
1229 reg_syntax_t re_syntax_options;
1230
1231
1232 /* Specify the precise syntax of regexps for compilation.  This provides
1233    for compatibility for various utilities which historically have
1234    different, incompatible syntaxes.
1235
1236    The argument SYNTAX is a bit mask comprised of the various bits
1237    defined in regex.h.  We return the old syntax.  */
1238
1239 reg_syntax_t
1240 re_set_syntax (syntax)
1241     reg_syntax_t syntax;
1242 {
1243   reg_syntax_t ret = re_syntax_options;
1244
1245   re_syntax_options = syntax;
1246   return ret;
1247 }
1248 WEAK_ALIAS (__re_set_syntax, re_set_syntax)
1249 \f
1250 /* This table gives an error message for each of the error codes listed
1251    in regex.h.  Obviously the order here has to be same as there.
1252    POSIX doesn't require that we do anything for REG_NOERROR,
1253    but why not be nice?  */
1254
1255 static const char *re_error_msgid[] =
1256   {
1257     gettext_noop ("Success"),   /* REG_NOERROR */
1258     gettext_noop ("No match"),  /* REG_NOMATCH */
1259     gettext_noop ("Invalid regular expression"), /* REG_BADPAT */
1260     gettext_noop ("Invalid collation character"), /* REG_ECOLLATE */
1261     gettext_noop ("Invalid character class name"), /* REG_ECTYPE */
1262     gettext_noop ("Trailing backslash"), /* REG_EESCAPE */
1263     gettext_noop ("Invalid back reference"), /* REG_ESUBREG */
1264     gettext_noop ("Unmatched [ or [^"), /* REG_EBRACK */
1265     gettext_noop ("Unmatched ( or \\("), /* REG_EPAREN */
1266     gettext_noop ("Unmatched \\{"), /* REG_EBRACE */
1267     gettext_noop ("Invalid content of \\{\\}"), /* REG_BADBR */
1268     gettext_noop ("Invalid range end"), /* REG_ERANGE */
1269     gettext_noop ("Memory exhausted"), /* REG_ESPACE */
1270     gettext_noop ("Invalid preceding regular expression"), /* REG_BADRPT */
1271     gettext_noop ("Premature end of regular expression"), /* REG_EEND */
1272     gettext_noop ("Regular expression too big"), /* REG_ESIZE */
1273     gettext_noop ("Unmatched ) or \\)"), /* REG_ERPAREN */
1274   };
1275 \f
1276 /* Avoiding alloca during matching, to placate r_alloc.  */
1277
1278 /* Define MATCH_MAY_ALLOCATE unless we need to make sure that the
1279    searching and matching functions should not call alloca.  On some
1280    systems, alloca is implemented in terms of malloc, and if we're
1281    using the relocating allocator routines, then malloc could cause a
1282    relocation, which might (if the strings being searched are in the
1283    ralloc heap) shift the data out from underneath the regexp
1284    routines.
1285
1286    Here's another reason to avoid allocation: Emacs
1287    processes input from X in a signal handler; processing X input may
1288    call malloc; if input arrives while a matching routine is calling
1289    malloc, then we're scrod.  But Emacs can't just block input while
1290    calling matching routines; then we don't notice interrupts when
1291    they come in.  So, Emacs blocks input around all regexp calls
1292    except the matching calls, which it leaves unprotected, in the
1293    faith that they will not malloc.  */
1294
1295 /* Normally, this is fine.  */
1296 #define MATCH_MAY_ALLOCATE
1297
1298 /* When using GNU C, we are not REALLY using the C alloca, no matter
1299    what config.h may say.  So don't take precautions for it.  */
1300 #ifdef __GNUC__
1301 # undef C_ALLOCA
1302 #endif
1303
1304 /* The match routines may not allocate if (1) they would do it with malloc
1305    and (2) it's not safe for them to use malloc.
1306    Note that if REL_ALLOC is defined, matching would not use malloc for the
1307    failure stack, but we would still use it for the register vectors;
1308    so REL_ALLOC should not affect this.  */
1309 #if (defined C_ALLOCA || defined REGEX_MALLOC) && defined emacs
1310 # undef MATCH_MAY_ALLOCATE
1311 #endif
1312
1313 \f
1314 /* Failure stack declarations and macros; both re_compile_fastmap and
1315    re_match_2 use a failure stack.  These have to be macros because of
1316    REGEX_ALLOCATE_STACK.  */
1317
1318
1319 /* Approximate number of failure points for which to initially allocate space
1320    when matching.  If this number is exceeded, we allocate more
1321    space, so it is not a hard limit.  */
1322 #ifndef INIT_FAILURE_ALLOC
1323 # define INIT_FAILURE_ALLOC 20
1324 #endif
1325
1326 /* Roughly the maximum number of failure points on the stack.  Would be
1327    exactly that if always used TYPICAL_FAILURE_SIZE items each time we failed.
1328    This is a variable only so users of regex can assign to it; we never
1329    change it ourselves.  We always multiply it by TYPICAL_FAILURE_SIZE
1330    before using it, so it should probably be a byte-count instead.  */
1331 # if defined MATCH_MAY_ALLOCATE
1332 /* Note that 4400 was enough to cause a crash on Alpha OSF/1,
1333    whose default stack limit is 2mb.  In order for a larger
1334    value to work reliably, you have to try to make it accord
1335    with the process stack limit.  */
1336 size_t re_max_failures = 40000;
1337 # else
1338 size_t re_max_failures = 4000;
1339 # endif
1340
1341 union fail_stack_elt
1342 {
1343   re_char *pointer;
1344   /* This should be the biggest `int' that's no bigger than a pointer.  */
1345   long integer;
1346 };
1347
1348 typedef union fail_stack_elt fail_stack_elt_t;
1349
1350 typedef struct
1351 {
1352   fail_stack_elt_t *stack;
1353   size_t size;
1354   size_t avail; /* Offset of next open position.  */
1355   size_t frame; /* Offset of the cur constructed frame.  */
1356 } fail_stack_type;
1357
1358 #define FAIL_STACK_EMPTY()     (fail_stack.frame == 0)
1359 #define FAIL_STACK_FULL()      (fail_stack.avail == fail_stack.size)
1360
1361
1362 /* Define macros to initialize and free the failure stack.
1363    Do `return -2' if the alloc fails.  */
1364
1365 #ifdef MATCH_MAY_ALLOCATE
1366 # define INIT_FAIL_STACK()                                              \
1367   do {                                                                  \
1368     fail_stack.stack = (fail_stack_elt_t *)                             \
1369       REGEX_ALLOCATE_STACK (INIT_FAILURE_ALLOC * TYPICAL_FAILURE_SIZE   \
1370                             * sizeof (fail_stack_elt_t));               \
1371                                                                         \
1372     if (fail_stack.stack == NULL)                                       \
1373       return -2;                                                        \
1374                                                                         \
1375     fail_stack.size = INIT_FAILURE_ALLOC;                               \
1376     fail_stack.avail = 0;                                               \
1377     fail_stack.frame = 0;                                               \
1378   } while (0)
1379
1380 # define RESET_FAIL_STACK()  REGEX_FREE_STACK (fail_stack.stack)
1381 #else
1382 # define INIT_FAIL_STACK()                                              \
1383   do {                                                                  \
1384     fail_stack.avail = 0;                                               \
1385     fail_stack.frame = 0;                                               \
1386   } while (0)
1387
1388 # define RESET_FAIL_STACK() ((void)0)
1389 #endif
1390
1391
1392 /* Double the size of FAIL_STACK, up to a limit
1393    which allows approximately `re_max_failures' items.
1394
1395    Return 1 if succeeds, and 0 if either ran out of memory
1396    allocating space for it or it was already too large.
1397
1398    REGEX_REALLOCATE_STACK requires `destination' be declared.   */
1399
1400 /* Factor to increase the failure stack size by
1401    when we increase it.
1402    This used to be 2, but 2 was too wasteful
1403    because the old discarded stacks added up to as much space
1404    were as ultimate, maximum-size stack.  */
1405 #define FAIL_STACK_GROWTH_FACTOR 4
1406
1407 #define GROW_FAIL_STACK(fail_stack)                                     \
1408   (((fail_stack).size * sizeof (fail_stack_elt_t)                       \
1409     >= re_max_failures * TYPICAL_FAILURE_SIZE)                          \
1410    ? 0                                                                  \
1411    : ((fail_stack).stack                                                \
1412       = (fail_stack_elt_t *)                                            \
1413         REGEX_REALLOCATE_STACK ((fail_stack).stack,                     \
1414           (fail_stack).size * sizeof (fail_stack_elt_t),                \
1415           MIN (re_max_failures * TYPICAL_FAILURE_SIZE,                  \
1416                ((fail_stack).size * sizeof (fail_stack_elt_t)           \
1417                 * FAIL_STACK_GROWTH_FACTOR))),                          \
1418                                                                         \
1419       (fail_stack).stack == NULL                                        \
1420       ? 0                                                               \
1421       : ((fail_stack).size                                              \
1422          = (MIN (re_max_failures * TYPICAL_FAILURE_SIZE,                \
1423                  ((fail_stack).size * sizeof (fail_stack_elt_t)         \
1424                   * FAIL_STACK_GROWTH_FACTOR))                          \
1425             / sizeof (fail_stack_elt_t)),                               \
1426          1)))
1427
1428
1429 /* Push a pointer value onto the failure stack.
1430    Assumes the variable `fail_stack'.  Probably should only
1431    be called from within `PUSH_FAILURE_POINT'.  */
1432 #define PUSH_FAILURE_POINTER(item)                                      \
1433   fail_stack.stack[fail_stack.avail++].pointer = (item)
1434
1435 /* This pushes an integer-valued item onto the failure stack.
1436    Assumes the variable `fail_stack'.  Probably should only
1437    be called from within `PUSH_FAILURE_POINT'.  */
1438 #define PUSH_FAILURE_INT(item)                                  \
1439   fail_stack.stack[fail_stack.avail++].integer = (item)
1440
1441 /* Push a fail_stack_elt_t value onto the failure stack.
1442    Assumes the variable `fail_stack'.  Probably should only
1443    be called from within `PUSH_FAILURE_POINT'.  */
1444 #define PUSH_FAILURE_ELT(item)                                  \
1445   fail_stack.stack[fail_stack.avail++] =  (item)
1446
1447 /* These three POP... operations complement the three PUSH... operations.
1448    All assume that `fail_stack' is nonempty.  */
1449 #define POP_FAILURE_POINTER() fail_stack.stack[--fail_stack.avail].pointer
1450 #define POP_FAILURE_INT() fail_stack.stack[--fail_stack.avail].integer
1451 #define POP_FAILURE_ELT() fail_stack.stack[--fail_stack.avail]
1452
1453 /* Individual items aside from the registers.  */
1454 #define NUM_NONREG_ITEMS 3
1455
1456 /* Used to examine the stack (to detect infinite loops).  */
1457 #define FAILURE_PAT(h) fail_stack.stack[(h) - 1].pointer
1458 #define FAILURE_STR(h) (fail_stack.stack[(h) - 2].pointer)
1459 #define NEXT_FAILURE_HANDLE(h) fail_stack.stack[(h) - 3].integer
1460 #define TOP_FAILURE_HANDLE() fail_stack.frame
1461
1462
1463 #define ENSURE_FAIL_STACK(space)                                        \
1464 while (REMAINING_AVAIL_SLOTS <= space) {                                \
1465   if (!GROW_FAIL_STACK (fail_stack))                                    \
1466     return -2;                                                          \
1467   DEBUG_PRINT2 ("\n  Doubled stack; size now: %d\n", (fail_stack).size);\
1468   DEBUG_PRINT2 ("        slots available: %d\n", REMAINING_AVAIL_SLOTS);\
1469 }
1470
1471 /* Push register NUM onto the stack.  */
1472 #define PUSH_FAILURE_REG(num)                                           \
1473 do {                                                                    \
1474   char *destination;                                                    \
1475   ENSURE_FAIL_STACK(3);                                                 \
1476   DEBUG_PRINT4 ("    Push reg %d (spanning %p -> %p)\n",                \
1477                 num, regstart[num], regend[num]);                       \
1478   PUSH_FAILURE_POINTER (regstart[num]);                                 \
1479   PUSH_FAILURE_POINTER (regend[num]);                                   \
1480   PUSH_FAILURE_INT (num);                                               \
1481 } while (0)
1482
1483 /* Change the counter's value to VAL, but make sure that it will
1484    be reset when backtracking.  */
1485 #define PUSH_NUMBER(ptr,val)                                            \
1486 do {                                                                    \
1487   char *destination;                                                    \
1488   int c;                                                                \
1489   ENSURE_FAIL_STACK(3);                                                 \
1490   EXTRACT_NUMBER (c, ptr);                                              \
1491   DEBUG_PRINT4 ("    Push number %p = %d -> %d\n", ptr, c, val);        \
1492   PUSH_FAILURE_INT (c);                                                 \
1493   PUSH_FAILURE_POINTER (ptr);                                           \
1494   PUSH_FAILURE_INT (-1);                                                \
1495   STORE_NUMBER (ptr, val);                                              \
1496 } while (0)
1497
1498 /* Pop a saved register off the stack.  */
1499 #define POP_FAILURE_REG_OR_COUNT()                                      \
1500 do {                                                                    \
1501   int reg = POP_FAILURE_INT ();                                         \
1502   if (reg == -1)                                                        \
1503     {                                                                   \
1504       /* It's a counter.  */                                            \
1505       /* Here, we discard `const', making re_match non-reentrant.  */   \
1506       unsigned char *ptr = (unsigned char*) POP_FAILURE_POINTER ();     \
1507       reg = POP_FAILURE_INT ();                                         \
1508       STORE_NUMBER (ptr, reg);                                          \
1509       DEBUG_PRINT3 ("     Pop counter %p = %d\n", ptr, reg);            \
1510     }                                                                   \
1511   else                                                                  \
1512     {                                                                   \
1513       regend[reg] = POP_FAILURE_POINTER ();                             \
1514       regstart[reg] = POP_FAILURE_POINTER ();                           \
1515       DEBUG_PRINT4 ("     Pop reg %d (spanning %p -> %p)\n",            \
1516                     reg, regstart[reg], regend[reg]);                   \
1517     }                                                                   \
1518 } while (0)
1519
1520 /* Check that we are not stuck in an infinite loop.  */
1521 #define CHECK_INFINITE_LOOP(pat_cur, string_place)                      \
1522 do {                                                                    \
1523   int failure = TOP_FAILURE_HANDLE ();                                  \
1524   /* Check for infinite matching loops */                               \
1525   while (failure > 0                                                    \
1526          && (FAILURE_STR (failure) == string_place                      \
1527              || FAILURE_STR (failure) == NULL))                         \
1528     {                                                                   \
1529       assert (FAILURE_PAT (failure) >= bufp->buffer                     \
1530               && FAILURE_PAT (failure) <= bufp->buffer + bufp->used);   \
1531       if (FAILURE_PAT (failure) == pat_cur)                             \
1532         {                                                               \
1533           cycle = 1;                                                    \
1534           break;                                                        \
1535         }                                                               \
1536       DEBUG_PRINT2 ("  Other pattern: %p\n", FAILURE_PAT (failure));    \
1537       failure = NEXT_FAILURE_HANDLE(failure);                           \
1538     }                                                                   \
1539   DEBUG_PRINT2 ("  Other string: %p\n", FAILURE_STR (failure));         \
1540 } while (0)
1541
1542 /* Push the information about the state we will need
1543    if we ever fail back to it.
1544
1545    Requires variables fail_stack, regstart, regend and
1546    num_regs be declared.  GROW_FAIL_STACK requires `destination' be
1547    declared.
1548
1549    Does `return FAILURE_CODE' if runs out of memory.  */
1550
1551 #define PUSH_FAILURE_POINT(pattern, string_place)                       \
1552 do {                                                                    \
1553   char *destination;                                                    \
1554   /* Must be int, so when we don't save any registers, the arithmetic   \
1555      of 0 + -1 isn't done as unsigned.  */                              \
1556                                                                         \
1557   DEBUG_STATEMENT (nfailure_points_pushed++);                           \
1558   DEBUG_PRINT1 ("\nPUSH_FAILURE_POINT:\n");                             \
1559   DEBUG_PRINT2 ("  Before push, next avail: %d\n", (fail_stack).avail); \
1560   DEBUG_PRINT2 ("                       size: %d\n", (fail_stack).size);\
1561                                                                         \
1562   ENSURE_FAIL_STACK (NUM_NONREG_ITEMS);                                 \
1563                                                                         \
1564   DEBUG_PRINT1 ("\n");                                                  \
1565                                                                         \
1566   DEBUG_PRINT2 ("  Push frame index: %d\n", fail_stack.frame);          \
1567   PUSH_FAILURE_INT (fail_stack.frame);                                  \
1568                                                                         \
1569   DEBUG_PRINT2 ("  Push string %p: `", string_place);                   \
1570   DEBUG_PRINT_DOUBLE_STRING (string_place, string1, size1, string2, size2);\
1571   DEBUG_PRINT1 ("'\n");                                                 \
1572   PUSH_FAILURE_POINTER (string_place);                                  \
1573                                                                         \
1574   DEBUG_PRINT2 ("  Push pattern %p: ", pattern);                        \
1575   DEBUG_PRINT_COMPILED_PATTERN (bufp, pattern, pend);                   \
1576   PUSH_FAILURE_POINTER (pattern);                                       \
1577                                                                         \
1578   /* Close the frame by moving the frame pointer past it.  */           \
1579   fail_stack.frame = fail_stack.avail;                                  \
1580 } while (0)
1581
1582 /* Estimate the size of data pushed by a typical failure stack entry.
1583    An estimate is all we need, because all we use this for
1584    is to choose a limit for how big to make the failure stack.  */
1585 /* BEWARE, the value `20' is hard-coded in emacs.c:main().  */
1586 #define TYPICAL_FAILURE_SIZE 20
1587
1588 /* How many items can still be added to the stack without overflowing it.  */
1589 #define REMAINING_AVAIL_SLOTS ((fail_stack).size - (fail_stack).avail)
1590
1591
1592 /* Pops what PUSH_FAIL_STACK pushes.
1593
1594    We restore into the parameters, all of which should be lvalues:
1595      STR -- the saved data position.
1596      PAT -- the saved pattern position.
1597      REGSTART, REGEND -- arrays of string positions.
1598
1599    Also assumes the variables `fail_stack' and (if debugging), `bufp',
1600    `pend', `string1', `size1', `string2', and `size2'.  */
1601
1602 #define POP_FAILURE_POINT(str, pat)                                     \
1603 do {                                                                    \
1604   assert (!FAIL_STACK_EMPTY ());                                        \
1605                                                                         \
1606   /* Remove failure points and point to how many regs pushed.  */       \
1607   DEBUG_PRINT1 ("POP_FAILURE_POINT:\n");                                \
1608   DEBUG_PRINT2 ("  Before pop, next avail: %d\n", fail_stack.avail);    \
1609   DEBUG_PRINT2 ("                    size: %d\n", fail_stack.size);     \
1610                                                                         \
1611   /* Pop the saved registers.  */                                       \
1612   while (fail_stack.frame < fail_stack.avail)                           \
1613     POP_FAILURE_REG_OR_COUNT ();                                        \
1614                                                                         \
1615   pat = POP_FAILURE_POINTER ();                         \
1616   DEBUG_PRINT2 ("  Popping pattern %p: ", pat);                         \
1617   DEBUG_PRINT_COMPILED_PATTERN (bufp, pat, pend);                       \
1618                                                                         \
1619   /* If the saved string location is NULL, it came from an              \
1620      on_failure_keep_string_jump opcode, and we want to throw away the  \
1621      saved NULL, thus retaining our current position in the string.  */ \
1622   str = POP_FAILURE_POINTER ();                                         \
1623   DEBUG_PRINT2 ("  Popping string %p: `", str);                         \
1624   DEBUG_PRINT_DOUBLE_STRING (str, string1, size1, string2, size2);      \
1625   DEBUG_PRINT1 ("'\n");                                                 \
1626                                                                         \
1627   fail_stack.frame = POP_FAILURE_INT ();                                \
1628   DEBUG_PRINT2 ("  Popping  frame index: %d\n", fail_stack.frame);      \
1629                                                                         \
1630   assert (fail_stack.avail >= 0);                                       \
1631   assert (fail_stack.frame <= fail_stack.avail);                        \
1632                                                                         \
1633   DEBUG_STATEMENT (nfailure_points_popped++);                           \
1634 } while (0) /* POP_FAILURE_POINT */
1635
1636
1637 \f
1638 /* Registers are set to a sentinel when they haven't yet matched.  */
1639 #define REG_UNSET(e) ((e) == NULL)
1640 \f
1641 /* Subroutine declarations and macros for regex_compile.  */
1642
1643 static reg_errcode_t regex_compile _RE_ARGS ((re_char *pattern, size_t size,
1644                                               reg_syntax_t syntax,
1645                                               struct re_pattern_buffer *bufp));
1646 static void store_op1 _RE_ARGS ((re_opcode_t op, unsigned char *loc, int arg));
1647 static void store_op2 _RE_ARGS ((re_opcode_t op, unsigned char *loc,
1648                                  int arg1, int arg2));
1649 static void insert_op1 _RE_ARGS ((re_opcode_t op, unsigned char *loc,
1650                                   int arg, unsigned char *end));
1651 static void insert_op2 _RE_ARGS ((re_opcode_t op, unsigned char *loc,
1652                                   int arg1, int arg2, unsigned char *end));
1653 static boolean at_begline_loc_p _RE_ARGS ((re_char *pattern,
1654                                            re_char *p,
1655                                            reg_syntax_t syntax));
1656 static boolean at_endline_loc_p _RE_ARGS ((re_char *p,
1657                                            re_char *pend,
1658                                            reg_syntax_t syntax));
1659 static re_char *skip_one_char _RE_ARGS ((re_char *p));
1660 static int analyse_first _RE_ARGS ((re_char *p, re_char *pend,
1661                                     char *fastmap, const int multibyte));
1662
1663 /* Fetch the next character in the uncompiled pattern, with no
1664    translation.  */
1665 #define PATFETCH(c)                                                     \
1666   do {                                                                  \
1667     int len;                                                            \
1668     if (p == pend) return REG_EEND;                                     \
1669     c = RE_STRING_CHAR_AND_LENGTH (p, pend - p, len);                   \
1670     p += len;                                                           \
1671   } while (0)
1672
1673
1674 /* If `translate' is non-null, return translate[D], else just D.  We
1675    cast the subscript to translate because some data is declared as
1676    `char *', to avoid warnings when a string constant is passed.  But
1677    when we use a character as a subscript we must make it unsigned.  */
1678 #ifndef TRANSLATE
1679 # define TRANSLATE(d) \
1680   (RE_TRANSLATE_P (translate) ? RE_TRANSLATE (translate, (d)) : (d))
1681 #endif
1682
1683
1684 /* Macros for outputting the compiled pattern into `buffer'.  */
1685
1686 /* If the buffer isn't allocated when it comes in, use this.  */
1687 #define INIT_BUF_SIZE  32
1688
1689 /* Make sure we have at least N more bytes of space in buffer.  */
1690 #define GET_BUFFER_SPACE(n)                                             \
1691     while ((size_t) (b - bufp->buffer + (n)) > bufp->allocated)         \
1692       EXTEND_BUFFER ()
1693
1694 /* Make sure we have one more byte of buffer space and then add C to it.  */
1695 #define BUF_PUSH(c)                                                     \
1696   do {                                                                  \
1697     GET_BUFFER_SPACE (1);                                               \
1698     *b++ = (unsigned char) (c);                                         \
1699   } while (0)
1700
1701
1702 /* Ensure we have two more bytes of buffer space and then append C1 and C2.  */
1703 #define BUF_PUSH_2(c1, c2)                                              \
1704   do {                                                                  \
1705     GET_BUFFER_SPACE (2);                                               \
1706     *b++ = (unsigned char) (c1);                                        \
1707     *b++ = (unsigned char) (c2);                                        \
1708   } while (0)
1709
1710
1711 /* As with BUF_PUSH_2, except for three bytes.  */
1712 #define BUF_PUSH_3(c1, c2, c3)                                          \
1713   do {                                                                  \
1714     GET_BUFFER_SPACE (3);                                               \
1715     *b++ = (unsigned char) (c1);                                        \
1716     *b++ = (unsigned char) (c2);                                        \
1717     *b++ = (unsigned char) (c3);                                        \
1718   } while (0)
1719
1720
1721 /* Store a jump with opcode OP at LOC to location TO.  We store a
1722    relative address offset by the three bytes the jump itself occupies.  */
1723 #define STORE_JUMP(op, loc, to) \
1724   store_op1 (op, loc, (to) - (loc) - 3)
1725
1726 /* Likewise, for a two-argument jump.  */
1727 #define STORE_JUMP2(op, loc, to, arg) \
1728   store_op2 (op, loc, (to) - (loc) - 3, arg)
1729
1730 /* Like `STORE_JUMP', but for inserting.  Assume `b' is the buffer end.  */
1731 #define INSERT_JUMP(op, loc, to) \
1732   insert_op1 (op, loc, (to) - (loc) - 3, b)
1733
1734 /* Like `STORE_JUMP2', but for inserting.  Assume `b' is the buffer end.  */
1735 #define INSERT_JUMP2(op, loc, to, arg) \
1736   insert_op2 (op, loc, (to) - (loc) - 3, arg, b)
1737
1738
1739 /* This is not an arbitrary limit: the arguments which represent offsets
1740    into the pattern are two bytes long.  So if 2^16 bytes turns out to
1741    be too small, many things would have to change.  */
1742 /* Any other compiler which, like MSC, has allocation limit below 2^16
1743    bytes will have to use approach similar to what was done below for
1744    MSC and drop MAX_BUF_SIZE a bit.  Otherwise you may end up
1745    reallocating to 0 bytes.  Such thing is not going to work too well.
1746    You have been warned!!  */
1747 #if defined _MSC_VER  && !defined WIN32
1748 /* Microsoft C 16-bit versions limit malloc to approx 65512 bytes.  */
1749 # define MAX_BUF_SIZE  65500L
1750 #else
1751 # define MAX_BUF_SIZE (1L << 16)
1752 #endif
1753
1754 /* Extend the buffer by twice its current size via realloc and
1755    reset the pointers that pointed into the old block to point to the
1756    correct places in the new one.  If extending the buffer results in it
1757    being larger than MAX_BUF_SIZE, then flag memory exhausted.  */
1758 #if __BOUNDED_POINTERS__
1759 # define SET_HIGH_BOUND(P) (__ptrhigh (P) = __ptrlow (P) + bufp->allocated)
1760 # define MOVE_BUFFER_POINTER(P) \
1761   (__ptrlow (P) += incr, SET_HIGH_BOUND (P), __ptrvalue (P) += incr)
1762 # define ELSE_EXTEND_BUFFER_HIGH_BOUND          \
1763   else                                          \
1764     {                                           \
1765       SET_HIGH_BOUND (b);                       \
1766       SET_HIGH_BOUND (begalt);                  \
1767       if (fixup_alt_jump)                       \
1768         SET_HIGH_BOUND (fixup_alt_jump);        \
1769       if (laststart)                            \
1770         SET_HIGH_BOUND (laststart);             \
1771       if (pending_exact)                        \
1772         SET_HIGH_BOUND (pending_exact);         \
1773     }
1774 #else
1775 # define MOVE_BUFFER_POINTER(P) (P) += incr
1776 # define ELSE_EXTEND_BUFFER_HIGH_BOUND
1777 #endif
1778 #define EXTEND_BUFFER()                                                 \
1779   do {                                                                  \
1780     re_char *old_buffer = bufp->buffer;                                 \
1781     if (bufp->allocated == MAX_BUF_SIZE)                                \
1782       return REG_ESIZE;                                                 \
1783     bufp->allocated <<= 1;                                              \
1784     if (bufp->allocated > MAX_BUF_SIZE)                                 \
1785       bufp->allocated = MAX_BUF_SIZE;                                   \
1786     RETALLOC (bufp->buffer, bufp->allocated, unsigned char);            \
1787     if (bufp->buffer == NULL)                                           \
1788       return REG_ESPACE;                                                \
1789     /* If the buffer moved, move all the pointers into it.  */          \
1790     if (old_buffer != bufp->buffer)                                     \
1791       {                                                                 \
1792         int incr = bufp->buffer - old_buffer;                           \
1793         MOVE_BUFFER_POINTER (b);                                        \
1794         MOVE_BUFFER_POINTER (begalt);                                   \
1795         if (fixup_alt_jump)                                             \
1796           MOVE_BUFFER_POINTER (fixup_alt_jump);                         \
1797         if (laststart)                                                  \
1798           MOVE_BUFFER_POINTER (laststart);                              \
1799         if (pending_exact)                                              \
1800           MOVE_BUFFER_POINTER (pending_exact);                          \
1801       }                                                                 \
1802     ELSE_EXTEND_BUFFER_HIGH_BOUND                                       \
1803   } while (0)
1804
1805
1806 /* Since we have one byte reserved for the register number argument to
1807    {start,stop}_memory, the maximum number of groups we can report
1808    things about is what fits in that byte.  */
1809 #define MAX_REGNUM 255
1810
1811 /* But patterns can have more than `MAX_REGNUM' registers.  We just
1812    ignore the excess.  */
1813 typedef int regnum_t;
1814
1815
1816 /* Macros for the compile stack.  */
1817
1818 /* Since offsets can go either forwards or backwards, this type needs to
1819    be able to hold values from -(MAX_BUF_SIZE - 1) to MAX_BUF_SIZE - 1.  */
1820 /* int may be not enough when sizeof(int) == 2.  */
1821 typedef long pattern_offset_t;
1822
1823 typedef struct
1824 {
1825   pattern_offset_t begalt_offset;
1826   pattern_offset_t fixup_alt_jump;
1827   pattern_offset_t laststart_offset;
1828   regnum_t regnum;
1829 } compile_stack_elt_t;
1830
1831
1832 typedef struct
1833 {
1834   compile_stack_elt_t *stack;
1835   unsigned size;
1836   unsigned avail;                       /* Offset of next open position.  */
1837 } compile_stack_type;
1838
1839
1840 #define INIT_COMPILE_STACK_SIZE 32
1841
1842 #define COMPILE_STACK_EMPTY  (compile_stack.avail == 0)
1843 #define COMPILE_STACK_FULL  (compile_stack.avail == compile_stack.size)
1844
1845 /* The next available element.  */
1846 #define COMPILE_STACK_TOP (compile_stack.stack[compile_stack.avail])
1847
1848 /* Explicit quit checking is only used on NTemacs.  */
1849 #if defined WINDOWSNT && defined emacs && defined QUIT
1850 extern int immediate_quit;
1851 # define IMMEDIATE_QUIT_CHECK                   \
1852     do {                                        \
1853       if (immediate_quit) QUIT;                 \
1854     } while (0)
1855 #else
1856 # define IMMEDIATE_QUIT_CHECK    ((void)0)
1857 #endif
1858 \f
1859 /* Structure to manage work area for range table.  */
1860 struct range_table_work_area
1861 {
1862   int *table;                   /* actual work area.  */
1863   int allocated;                /* allocated size for work area in bytes.  */
1864   int used;                     /* actually used size in words.  */
1865   int bits;                     /* flag to record character classes */
1866 };
1867
1868 /* Make sure that WORK_AREA can hold more N multibyte characters.
1869    This is used only in set_image_of_range and set_image_of_range_1.
1870    It expects WORK_AREA to be a pointer.
1871    If it can't get the space, it returns from the surrounding function.  */
1872
1873 #define EXTEND_RANGE_TABLE(work_area, n)                                \
1874   do {                                                                  \
1875     if (((work_area)->used + (n)) * sizeof (int) > (work_area)->allocated) \
1876       {                                                                 \
1877         extend_range_table_work_area (work_area);                       \
1878         if ((work_area)->table == 0)                                    \
1879           return (REG_ESPACE);                                          \
1880       }                                                                 \
1881   } while (0)
1882
1883 #define SET_RANGE_TABLE_WORK_AREA_BIT(work_area, bit)           \
1884   (work_area).bits |= (bit)
1885
1886 /* Bits used to implement the multibyte-part of the various character classes
1887    such as [:alnum:] in a charset's range table.  */
1888 #define BIT_WORD        0x1
1889 #define BIT_LOWER       0x2
1890 #define BIT_PUNCT       0x4
1891 #define BIT_SPACE       0x8
1892 #define BIT_UPPER       0x10
1893 #define BIT_MULTIBYTE   0x20
1894
1895 /* Set a range START..END to WORK_AREA.
1896    The range is passed through TRANSLATE, so START and END
1897    should be untranslated.  */
1898 #define SET_RANGE_TABLE_WORK_AREA(work_area, start, end)                \
1899   do {                                                                  \
1900     int tem;                                                            \
1901     tem = set_image_of_range (&work_area, start, end, translate);       \
1902     if (tem > 0)                                                        \
1903       FREE_STACK_RETURN (tem);                                          \
1904   } while (0)
1905
1906 /* Free allocated memory for WORK_AREA.  */
1907 #define FREE_RANGE_TABLE_WORK_AREA(work_area)   \
1908   do {                                          \
1909     if ((work_area).table)                      \
1910       free ((work_area).table);                 \
1911   } while (0)
1912
1913 #define CLEAR_RANGE_TABLE_WORK_USED(work_area) ((work_area).used = 0, (work_area).bits = 0)
1914 #define RANGE_TABLE_WORK_USED(work_area) ((work_area).used)
1915 #define RANGE_TABLE_WORK_BITS(work_area) ((work_area).bits)
1916 #define RANGE_TABLE_WORK_ELT(work_area, i) ((work_area).table[i])
1917 \f
1918
1919 /* Set the bit for character C in a list.  */
1920 #define SET_LIST_BIT(c) (b[((c)) / BYTEWIDTH] |= 1 << ((c) % BYTEWIDTH))
1921
1922
1923 /* Get the next unsigned number in the uncompiled pattern.  */
1924 #define GET_UNSIGNED_NUMBER(num)                                        \
1925  do { if (p != pend)                                                    \
1926      {                                                                  \
1927        PATFETCH (c);                                                    \
1928        if (c == ' ')                                                    \
1929          FREE_STACK_RETURN (REG_BADBR);                                 \
1930        while ('0' <= c && c <= '9')                                     \
1931          {                                                              \
1932            int prev;                                                    \
1933            if (num < 0)                                                 \
1934              num = 0;                                                   \
1935            prev = num;                                                  \
1936            num = num * 10 + c - '0';                                    \
1937            if (num / 10 != prev)                                        \
1938              FREE_STACK_RETURN (REG_BADBR);                             \
1939            if (p == pend)                                               \
1940              break;                                                     \
1941            PATFETCH (c);                                                \
1942          }                                                              \
1943        if (c == ' ')                                                    \
1944          FREE_STACK_RETURN (REG_BADBR);                                 \
1945        }                                                                \
1946     } while (0)
1947 \f
1948 #if WIDE_CHAR_SUPPORT
1949 /* The GNU C library provides support for user-defined character classes
1950    and the functions from ISO C amendement 1.  */
1951 # ifdef CHARCLASS_NAME_MAX
1952 #  define CHAR_CLASS_MAX_LENGTH CHARCLASS_NAME_MAX
1953 # else
1954 /* This shouldn't happen but some implementation might still have this
1955    problem.  Use a reasonable default value.  */
1956 #  define CHAR_CLASS_MAX_LENGTH 256
1957 # endif
1958 typedef wctype_t re_wctype_t;
1959 typedef wchar_t re_wchar_t;
1960 # define re_wctype wctype
1961 # define re_iswctype iswctype
1962 # define re_wctype_to_bit(cc) 0
1963 #else
1964 # define CHAR_CLASS_MAX_LENGTH  9 /* Namely, `multibyte'.  */
1965 # define btowc(c) c
1966
1967 /* Character classes.  */
1968 typedef enum { RECC_ERROR = 0,
1969                RECC_ALNUM, RECC_ALPHA, RECC_WORD,
1970                RECC_GRAPH, RECC_PRINT,
1971                RECC_LOWER, RECC_UPPER,
1972                RECC_PUNCT, RECC_CNTRL,
1973                RECC_DIGIT, RECC_XDIGIT,
1974                RECC_BLANK, RECC_SPACE,
1975                RECC_MULTIBYTE, RECC_NONASCII,
1976                RECC_ASCII, RECC_UNIBYTE
1977 } re_wctype_t;
1978
1979 typedef int re_wchar_t;
1980
1981 /* Map a string to the char class it names (if any).  */
1982 static re_wctype_t
1983 re_wctype (str)
1984      re_char *str;
1985 {
1986   const char *string = str;
1987   if      (STREQ (string, "alnum"))     return RECC_ALNUM;
1988   else if (STREQ (string, "alpha"))     return RECC_ALPHA;
1989   else if (STREQ (string, "word"))      return RECC_WORD;
1990   else if (STREQ (string, "ascii"))     return RECC_ASCII;
1991   else if (STREQ (string, "nonascii"))  return RECC_NONASCII;
1992   else if (STREQ (string, "graph"))     return RECC_GRAPH;
1993   else if (STREQ (string, "lower"))     return RECC_LOWER;
1994   else if (STREQ (string, "print"))     return RECC_PRINT;
1995   else if (STREQ (string, "punct"))     return RECC_PUNCT;
1996   else if (STREQ (string, "space"))     return RECC_SPACE;
1997   else if (STREQ (string, "upper"))     return RECC_UPPER;
1998   else if (STREQ (string, "unibyte"))   return RECC_UNIBYTE;
1999   else if (STREQ (string, "multibyte")) return RECC_MULTIBYTE;
2000   else if (STREQ (string, "digit"))     return RECC_DIGIT;
2001   else if (STREQ (string, "xdigit"))    return RECC_XDIGIT;
2002   else if (STREQ (string, "cntrl"))     return RECC_CNTRL;
2003   else if (STREQ (string, "blank"))     return RECC_BLANK;
2004   else return 0;
2005 }
2006
2007 /* True iff CH is in the char class CC.  */
2008 static boolean
2009 re_iswctype (ch, cc)
2010      int ch;
2011      re_wctype_t cc;
2012 {
2013   switch (cc)
2014     {
2015     case RECC_ALNUM: return ISALNUM (ch);
2016     case RECC_ALPHA: return ISALPHA (ch);
2017     case RECC_BLANK: return ISBLANK (ch);
2018     case RECC_CNTRL: return ISCNTRL (ch);
2019     case RECC_DIGIT: return ISDIGIT (ch);
2020     case RECC_GRAPH: return ISGRAPH (ch);
2021     case RECC_LOWER: return ISLOWER (ch);
2022     case RECC_PRINT: return ISPRINT (ch);
2023     case RECC_PUNCT: return ISPUNCT (ch);
2024     case RECC_SPACE: return ISSPACE (ch);
2025     case RECC_UPPER: return ISUPPER (ch);
2026     case RECC_XDIGIT: return ISXDIGIT (ch);
2027     case RECC_ASCII: return IS_REAL_ASCII (ch);
2028     case RECC_NONASCII: return !IS_REAL_ASCII (ch);
2029     case RECC_UNIBYTE: return ISUNIBYTE (ch);
2030     case RECC_MULTIBYTE: return !ISUNIBYTE (ch);
2031     case RECC_WORD: return ISWORD (ch);
2032     case RECC_ERROR: return false;
2033     default:
2034       abort();
2035     }
2036 }
2037
2038 /* Return a bit-pattern to use in the range-table bits to match multibyte
2039    chars of class CC.  */
2040 static int
2041 re_wctype_to_bit (cc)
2042      re_wctype_t cc;
2043 {
2044   switch (cc)
2045     {
2046     case RECC_NONASCII: case RECC_PRINT: case RECC_GRAPH:
2047     case RECC_MULTIBYTE: return BIT_MULTIBYTE;
2048     case RECC_ALPHA: case RECC_ALNUM: case RECC_WORD: return BIT_WORD;
2049     case RECC_LOWER: return BIT_LOWER;
2050     case RECC_UPPER: return BIT_UPPER;
2051     case RECC_PUNCT: return BIT_PUNCT;
2052     case RECC_SPACE: return BIT_SPACE;
2053     case RECC_ASCII: case RECC_DIGIT: case RECC_XDIGIT: case RECC_CNTRL:
2054     case RECC_BLANK: case RECC_UNIBYTE: case RECC_ERROR: return 0;
2055     default:
2056       abort();
2057     }
2058 }
2059 #endif
2060 \f
2061 /* Filling in the work area of a range.  */
2062
2063 /* Actually extend the space in WORK_AREA.  */
2064
2065 static void
2066 extend_range_table_work_area (work_area)
2067      struct range_table_work_area *work_area;
2068 {
2069   work_area->allocated += 16 * sizeof (int);
2070   if (work_area->table)
2071     work_area->table
2072       = (int *) realloc (work_area->table, work_area->allocated);
2073   else
2074     work_area->table
2075       = (int *) malloc (work_area->allocated);
2076 }
2077
2078 #ifdef emacs
2079
2080 /* Carefully find the ranges of codes that are equivalent
2081    under case conversion to the range start..end when passed through
2082    TRANSLATE.  Handle the case where non-letters can come in between
2083    two upper-case letters (which happens in Latin-1).
2084    Also handle the case of groups of more than 2 case-equivalent chars.
2085
2086    The basic method is to look at consecutive characters and see
2087    if they can form a run that can be handled as one.
2088
2089    Returns -1 if successful, REG_ESPACE if ran out of space.  */
2090
2091 static int
2092 set_image_of_range_1 (work_area, start, end, translate)
2093      RE_TRANSLATE_TYPE translate;
2094      struct range_table_work_area *work_area;
2095      re_wchar_t start, end;
2096 {
2097   /* `one_case' indicates a character, or a run of characters,
2098      each of which is an isolate (no case-equivalents).
2099      This includes all ASCII non-letters.
2100
2101      `two_case' indicates a character, or a run of characters,
2102      each of which has two case-equivalent forms.
2103      This includes all ASCII letters.
2104
2105      `strange' indicates a character that has more than one
2106      case-equivalent.  */
2107
2108   enum case_type {one_case, two_case, strange};
2109
2110   /* Describe the run that is in progress,
2111      which the next character can try to extend.
2112      If run_type is strange, that means there really is no run.
2113      If run_type is one_case, then run_start...run_end is the run.
2114      If run_type is two_case, then the run is run_start...run_end,
2115      and the case-equivalents end at run_eqv_end.  */
2116
2117   enum case_type run_type = strange;
2118   int run_start, run_end, run_eqv_end;
2119
2120   Lisp_Object eqv_table;
2121
2122   if (!RE_TRANSLATE_P (translate))
2123     {
2124       EXTEND_RANGE_TABLE (work_area, 2);
2125       work_area->table[work_area->used++] = (start);
2126       work_area->table[work_area->used++] = (end);
2127       return -1;
2128     }
2129
2130   eqv_table = XCHAR_TABLE (translate)->extras[2];
2131
2132   for (; start <= end; start++)
2133     {
2134       enum case_type this_type;
2135       int eqv = RE_TRANSLATE (eqv_table, start);
2136       int minchar, maxchar;
2137
2138       /* Classify this character */
2139       if (eqv == start)
2140         this_type = one_case;
2141       else if (RE_TRANSLATE (eqv_table, eqv) == start)
2142         this_type = two_case;
2143       else
2144         this_type = strange;
2145
2146       if (start < eqv)
2147         minchar = start, maxchar = eqv;
2148       else
2149         minchar = eqv, maxchar = start;
2150
2151       /* Can this character extend the run in progress?  */
2152       if (this_type == strange || this_type != run_type
2153           || !(minchar == run_end + 1
2154                && (run_type == two_case
2155                    ? maxchar == run_eqv_end + 1 : 1)))
2156         {
2157           /* No, end the run.
2158              Record each of its equivalent ranges.  */
2159           if (run_type == one_case)
2160             {
2161               EXTEND_RANGE_TABLE (work_area, 2);
2162               work_area->table[work_area->used++] = run_start;
2163               work_area->table[work_area->used++] = run_end;
2164             }
2165           else if (run_type == two_case)
2166             {
2167               EXTEND_RANGE_TABLE (work_area, 4);
2168               work_area->table[work_area->used++] = run_start;
2169               work_area->table[work_area->used++] = run_end;
2170               work_area->table[work_area->used++]
2171                 = RE_TRANSLATE (eqv_table, run_start);
2172               work_area->table[work_area->used++]
2173                 = RE_TRANSLATE (eqv_table, run_end);
2174             }
2175           run_type = strange;
2176         }
2177
2178       if (this_type == strange)
2179         {
2180           /* For a strange character, add each of its equivalents, one
2181              by one.  Don't start a range.  */
2182           do
2183             {
2184               EXTEND_RANGE_TABLE (work_area, 2);
2185               work_area->table[work_area->used++] = eqv;
2186               work_area->table[work_area->used++] = eqv;
2187               eqv = RE_TRANSLATE (eqv_table, eqv);
2188             }
2189           while (eqv != start);
2190         }
2191
2192       /* Add this char to the run, or start a new run.  */
2193       else if (run_type == strange)
2194         {
2195           /* Initialize a new range.  */
2196           run_type = this_type;
2197           run_start = start;
2198           run_end = start;
2199           run_eqv_end = RE_TRANSLATE (eqv_table, run_end);
2200         }
2201       else
2202         {
2203           /* Extend a running range.  */
2204           run_end = minchar;
2205           run_eqv_end = RE_TRANSLATE (eqv_table, run_end);
2206         }
2207     }
2208
2209   /* If a run is still in progress at the end, finish it now
2210      by recording its equivalent ranges.  */
2211   if (run_type == one_case)
2212     {
2213       EXTEND_RANGE_TABLE (work_area, 2);
2214       work_area->table[work_area->used++] = run_start;
2215       work_area->table[work_area->used++] = run_end;
2216     }
2217   else if (run_type == two_case)
2218     {
2219       EXTEND_RANGE_TABLE (work_area, 4);
2220       work_area->table[work_area->used++] = run_start;
2221       work_area->table[work_area->used++] = run_end;
2222       work_area->table[work_area->used++]
2223         = RE_TRANSLATE (eqv_table, run_start);
2224       work_area->table[work_area->used++]
2225         = RE_TRANSLATE (eqv_table, run_end);
2226     }
2227
2228   return -1;
2229 }
2230
2231 #endif /* emacs */
2232
2233 /* Record the the image of the range start..end when passed through
2234    TRANSLATE.  This is not necessarily TRANSLATE(start)..TRANSLATE(end)
2235    and is not even necessarily contiguous.
2236    Normally we approximate it with the smallest contiguous range that contains
2237    all the chars we need.  However, for Latin-1 we go to extra effort
2238    to do a better job.
2239
2240    This function is not called for ASCII ranges.
2241
2242    Returns -1 if successful, REG_ESPACE if ran out of space.  */
2243
2244 static int
2245 set_image_of_range (work_area, start, end, translate)
2246      RE_TRANSLATE_TYPE translate;
2247      struct range_table_work_area *work_area;
2248      re_wchar_t start, end;
2249 {
2250   re_wchar_t cmin, cmax;
2251
2252 #ifdef emacs
2253   /* For Latin-1 ranges, use set_image_of_range_1
2254      to get proper handling of ranges that include letters and nonletters.
2255      For a range that includes the whole of Latin-1, this is not necessary.
2256      For other character sets, we don't bother to get this right.  */
2257   if (RE_TRANSLATE_P (translate) && start < 04400
2258       && !(start < 04200 && end >= 04377))
2259     {
2260       int newend;
2261       int tem;
2262       newend = end;
2263       if (newend > 04377)
2264         newend = 04377;
2265       tem = set_image_of_range_1 (work_area, start, newend, translate);
2266       if (tem > 0)
2267         return tem;
2268
2269       start = 04400;
2270       if (end < 04400)
2271         return -1;
2272     }
2273 #endif
2274
2275   EXTEND_RANGE_TABLE (work_area, 2);
2276   work_area->table[work_area->used++] = (start);
2277   work_area->table[work_area->used++] = (end);
2278
2279   cmin = -1, cmax = -1;
2280
2281   if (RE_TRANSLATE_P (translate))
2282     {
2283       int ch;
2284
2285       for (ch = start; ch <= end; ch++)
2286         {
2287           re_wchar_t c = TRANSLATE (ch);
2288           if (! (start <= c && c <= end))
2289             {
2290               if (cmin == -1)
2291                 cmin = c, cmax = c;
2292               else
2293                 {
2294                   cmin = MIN (cmin, c);
2295                   cmax = MAX (cmax, c);
2296                 }
2297             }
2298         }
2299
2300       if (cmin != -1)
2301         {
2302           EXTEND_RANGE_TABLE (work_area, 2);
2303           work_area->table[work_area->used++] = (cmin);
2304           work_area->table[work_area->used++] = (cmax);
2305         }
2306     }
2307
2308   return -1;
2309 }
2310 \f
2311 #ifndef MATCH_MAY_ALLOCATE
2312
2313 /* If we cannot allocate large objects within re_match_2_internal,
2314    we make the fail stack and register vectors global.
2315    The fail stack, we grow to the maximum size when a regexp
2316    is compiled.
2317    The register vectors, we adjust in size each time we
2318    compile a regexp, according to the number of registers it needs.  */
2319
2320 static fail_stack_type fail_stack;
2321
2322 /* Size with which the following vectors are currently allocated.
2323    That is so we can make them bigger as needed,
2324    but never make them smaller.  */
2325 static int regs_allocated_size;
2326
2327 static re_char **     regstart, **     regend;
2328 static re_char **best_regstart, **best_regend;
2329
2330 /* Make the register vectors big enough for NUM_REGS registers,
2331    but don't make them smaller.  */
2332
2333 static
2334 regex_grow_registers (num_regs)
2335      int num_regs;
2336 {
2337   if (num_regs > regs_allocated_size)
2338     {
2339       RETALLOC_IF (regstart,     num_regs, re_char *);
2340       RETALLOC_IF (regend,       num_regs, re_char *);
2341       RETALLOC_IF (best_regstart, num_regs, re_char *);
2342       RETALLOC_IF (best_regend,  num_regs, re_char *);
2343
2344       regs_allocated_size = num_regs;
2345     }
2346 }
2347
2348 #endif /* not MATCH_MAY_ALLOCATE */
2349 \f
2350 static boolean group_in_compile_stack _RE_ARGS ((compile_stack_type
2351                                                  compile_stack,
2352                                                  regnum_t regnum));
2353
2354 /* `regex_compile' compiles PATTERN (of length SIZE) according to SYNTAX.
2355    Returns one of error codes defined in `regex.h', or zero for success.
2356
2357    Assumes the `allocated' (and perhaps `buffer') and `translate'
2358    fields are set in BUFP on entry.
2359
2360    If it succeeds, results are put in BUFP (if it returns an error, the
2361    contents of BUFP are undefined):
2362      `buffer' is the compiled pattern;
2363      `syntax' is set to SYNTAX;
2364      `used' is set to the length of the compiled pattern;
2365      `fastmap_accurate' is zero;
2366      `re_nsub' is the number of subexpressions in PATTERN;
2367      `not_bol' and `not_eol' are zero;
2368
2369    The `fastmap' field is neither examined nor set.  */
2370
2371 /* Insert the `jump' from the end of last alternative to "here".
2372    The space for the jump has already been allocated. */
2373 #define FIXUP_ALT_JUMP()                                                \
2374 do {                                                                    \
2375   if (fixup_alt_jump)                                                   \
2376     STORE_JUMP (jump, fixup_alt_jump, b);                               \
2377 } while (0)
2378
2379
2380 /* Return, freeing storage we allocated.  */
2381 #define FREE_STACK_RETURN(value)                \
2382   do {                                                  \
2383     FREE_RANGE_TABLE_WORK_AREA (range_table_work);      \
2384     free (compile_stack.stack);                         \
2385     return value;                                       \
2386   } while (0)
2387
2388 static reg_errcode_t
2389 regex_compile (pattern, size, syntax, bufp)
2390      re_char *pattern;
2391      size_t size;
2392      reg_syntax_t syntax;
2393      struct re_pattern_buffer *bufp;
2394 {
2395   /* We fetch characters from PATTERN here.  */
2396   register re_wchar_t c, c1;
2397
2398   /* A random temporary spot in PATTERN.  */
2399   re_char *p1;
2400
2401   /* Points to the end of the buffer, where we should append.  */
2402   register unsigned char *b;
2403
2404   /* Keeps track of unclosed groups.  */
2405   compile_stack_type compile_stack;
2406
2407   /* Points to the current (ending) position in the pattern.  */
2408 #ifdef AIX
2409   /* `const' makes AIX compiler fail.  */
2410   unsigned char *p = pattern;
2411 #else
2412   re_char *p = pattern;
2413 #endif
2414   re_char *pend = pattern + size;
2415
2416   /* How to translate the characters in the pattern.  */
2417   RE_TRANSLATE_TYPE translate = bufp->translate;
2418
2419   /* Address of the count-byte of the most recently inserted `exactn'
2420      command.  This makes it possible to tell if a new exact-match
2421      character can be added to that command or if the character requires
2422      a new `exactn' command.  */
2423   unsigned char *pending_exact = 0;
2424
2425   /* Address of start of the most recently finished expression.
2426      This tells, e.g., postfix * where to find the start of its
2427      operand.  Reset at the beginning of groups and alternatives.  */
2428   unsigned char *laststart = 0;
2429
2430   /* Address of beginning of regexp, or inside of last group.  */
2431   unsigned char *begalt;
2432
2433   /* Place in the uncompiled pattern (i.e., the {) to
2434      which to go back if the interval is invalid.  */
2435   re_char *beg_interval;
2436
2437   /* Address of the place where a forward jump should go to the end of
2438      the containing expression.  Each alternative of an `or' -- except the
2439      last -- ends with a forward jump of this sort.  */
2440   unsigned char *fixup_alt_jump = 0;
2441
2442   /* Counts open-groups as they are encountered.  Remembered for the
2443      matching close-group on the compile stack, so the same register
2444      number is put in the stop_memory as the start_memory.  */
2445   regnum_t regnum = 0;
2446
2447   /* Work area for range table of charset.  */
2448   struct range_table_work_area range_table_work;
2449
2450   /* If the object matched can contain multibyte characters.  */
2451   const boolean multibyte = RE_MULTIBYTE_P (bufp);
2452
2453 #ifdef DEBUG
2454   debug++;
2455   DEBUG_PRINT1 ("\nCompiling pattern: ");
2456   if (debug > 0)
2457     {
2458       unsigned debug_count;
2459
2460       for (debug_count = 0; debug_count < size; debug_count++)
2461         putchar (pattern[debug_count]);
2462       putchar ('\n');
2463     }
2464 #endif /* DEBUG */
2465
2466   /* Initialize the compile stack.  */
2467   compile_stack.stack = TALLOC (INIT_COMPILE_STACK_SIZE, compile_stack_elt_t);
2468   if (compile_stack.stack == NULL)
2469     return REG_ESPACE;
2470
2471   compile_stack.size = INIT_COMPILE_STACK_SIZE;
2472   compile_stack.avail = 0;
2473
2474   range_table_work.table = 0;
2475   range_table_work.allocated = 0;
2476
2477   /* Initialize the pattern buffer.  */
2478   bufp->syntax = syntax;
2479   bufp->fastmap_accurate = 0;
2480   bufp->not_bol = bufp->not_eol = 0;
2481
2482   /* Set `used' to zero, so that if we return an error, the pattern
2483      printer (for debugging) will think there's no pattern.  We reset it
2484      at the end.  */
2485   bufp->used = 0;
2486
2487   /* Always count groups, whether or not bufp->no_sub is set.  */
2488   bufp->re_nsub = 0;
2489
2490 #if !defined emacs && !defined SYNTAX_TABLE
2491   /* Initialize the syntax table.  */
2492    init_syntax_once ();
2493 #endif
2494
2495   if (bufp->allocated == 0)
2496     {
2497       if (bufp->buffer)
2498         { /* If zero allocated, but buffer is non-null, try to realloc
2499              enough space.  This loses if buffer's address is bogus, but
2500              that is the user's responsibility.  */
2501           RETALLOC (bufp->buffer, INIT_BUF_SIZE, unsigned char);
2502         }
2503       else
2504         { /* Caller did not allocate a buffer.  Do it for them.  */
2505           bufp->buffer = TALLOC (INIT_BUF_SIZE, unsigned char);
2506         }
2507       if (!bufp->buffer) FREE_STACK_RETURN (REG_ESPACE);
2508
2509       bufp->allocated = INIT_BUF_SIZE;
2510     }
2511
2512   begalt = b = bufp->buffer;
2513
2514   /* Loop through the uncompiled pattern until we're at the end.  */
2515   while (p != pend)
2516     {
2517       PATFETCH (c);
2518
2519       switch (c)
2520         {
2521         case '^':
2522           {
2523             if (   /* If at start of pattern, it's an operator.  */
2524                    p == pattern + 1
2525                    /* If context independent, it's an operator.  */
2526                 || syntax & RE_CONTEXT_INDEP_ANCHORS
2527                    /* Otherwise, depends on what's come before.  */
2528                 || at_begline_loc_p (pattern, p, syntax))
2529               BUF_PUSH ((syntax & RE_NO_NEWLINE_ANCHOR) ? begbuf : begline);
2530             else
2531               goto normal_char;
2532           }
2533           break;
2534
2535
2536         case '$':
2537           {
2538             if (   /* If at end of pattern, it's an operator.  */
2539                    p == pend
2540                    /* If context independent, it's an operator.  */
2541                 || syntax & RE_CONTEXT_INDEP_ANCHORS
2542                    /* Otherwise, depends on what's next.  */
2543                 || at_endline_loc_p (p, pend, syntax))
2544                BUF_PUSH ((syntax & RE_NO_NEWLINE_ANCHOR) ? endbuf : endline);
2545              else
2546                goto normal_char;
2547            }
2548            break;
2549
2550
2551         case '+':
2552         case '?':
2553           if ((syntax & RE_BK_PLUS_QM)
2554               || (syntax & RE_LIMITED_OPS))
2555             goto normal_char;
2556         handle_plus:
2557         case '*':
2558           /* If there is no previous pattern... */
2559           if (!laststart)
2560             {
2561               if (syntax & RE_CONTEXT_INVALID_OPS)
2562                 FREE_STACK_RETURN (REG_BADRPT);
2563               else if (!(syntax & RE_CONTEXT_INDEP_OPS))
2564                 goto normal_char;
2565             }
2566
2567           {
2568             /* 1 means zero (many) matches is allowed.  */
2569             boolean zero_times_ok = 0, many_times_ok = 0;
2570             boolean greedy = 1;
2571
2572             /* If there is a sequence of repetition chars, collapse it
2573                down to just one (the right one).  We can't combine
2574                interval operators with these because of, e.g., `a{2}*',
2575                which should only match an even number of `a's.  */
2576
2577             for (;;)
2578               {
2579                 if ((syntax & RE_FRUGAL)
2580                     && c == '?' && (zero_times_ok || many_times_ok))
2581                   greedy = 0;
2582                 else
2583                   {
2584                     zero_times_ok |= c != '+';
2585                     many_times_ok |= c != '?';
2586                   }
2587
2588                 if (p == pend)
2589                   break;
2590                 else if (*p == '*'
2591                          || (!(syntax & RE_BK_PLUS_QM)
2592                              && (*p == '+' || *p == '?')))
2593                   ;
2594                 else if (syntax & RE_BK_PLUS_QM  && *p == '\\')
2595                   {
2596                     if (p+1 == pend)
2597                       FREE_STACK_RETURN (REG_EESCAPE);
2598                     if (p[1] == '+' || p[1] == '?')
2599                       PATFETCH (c); /* Gobble up the backslash.  */
2600                     else
2601                       break;
2602                   }
2603                 else
2604                   break;
2605                 /* If we get here, we found another repeat character.  */
2606                 PATFETCH (c);
2607                }
2608
2609             /* Star, etc. applied to an empty pattern is equivalent
2610                to an empty pattern.  */
2611             if (!laststart || laststart == b)
2612               break;
2613
2614             /* Now we know whether or not zero matches is allowed
2615                and also whether or not two or more matches is allowed.  */
2616             if (greedy)
2617               {
2618                 if (many_times_ok)
2619                   {
2620                     boolean simple = skip_one_char (laststart) == b;
2621                     unsigned int startoffset = 0;
2622                     re_opcode_t ofj =
2623                       /* Check if the loop can match the empty string.  */
2624                       (simple || !analyse_first (laststart, b, NULL, 0))
2625                       ? on_failure_jump : on_failure_jump_loop;
2626                     assert (skip_one_char (laststart) <= b);
2627
2628                     if (!zero_times_ok && simple)
2629                       { /* Since simple * loops can be made faster by using
2630                            on_failure_keep_string_jump, we turn simple P+
2631                            into PP* if P is simple.  */
2632                         unsigned char *p1, *p2;
2633                         startoffset = b - laststart;
2634                         GET_BUFFER_SPACE (startoffset);
2635                         p1 = b; p2 = laststart;
2636                         while (p2 < p1)
2637                           *b++ = *p2++;
2638                         zero_times_ok = 1;
2639                       }
2640
2641                     GET_BUFFER_SPACE (6);
2642                     if (!zero_times_ok)
2643                       /* A + loop.  */
2644                       STORE_JUMP (ofj, b, b + 6);
2645                     else
2646                       /* Simple * loops can use on_failure_keep_string_jump
2647                          depending on what follows.  But since we don't know
2648                          that yet, we leave the decision up to
2649                          on_failure_jump_smart.  */
2650                       INSERT_JUMP (simple ? on_failure_jump_smart : ofj,
2651                                    laststart + startoffset, b + 6);
2652                     b += 3;
2653                     STORE_JUMP (jump, b, laststart + startoffset);
2654                     b += 3;
2655                   }
2656                 else
2657                   {
2658                     /* A simple ? pattern.  */
2659                     assert (zero_times_ok);
2660                     GET_BUFFER_SPACE (3);
2661                     INSERT_JUMP (on_failure_jump, laststart, b + 3);
2662                     b += 3;
2663                   }
2664               }
2665             else                /* not greedy */
2666               { /* I wish the greedy and non-greedy cases could be merged. */
2667
2668                 GET_BUFFER_SPACE (7); /* We might use less.  */
2669                 if (many_times_ok)
2670                   {
2671                     boolean emptyp = analyse_first (laststart, b, NULL, 0);
2672
2673                     /* The non-greedy multiple match looks like
2674                        a repeat..until: we only need a conditional jump
2675                        at the end of the loop.  */
2676                     if (emptyp) BUF_PUSH (no_op);
2677                     STORE_JUMP (emptyp ? on_failure_jump_nastyloop
2678                                 : on_failure_jump, b, laststart);
2679                     b += 3;
2680                     if (zero_times_ok)
2681                       {
2682                         /* The repeat...until naturally matches one or more.
2683                            To also match zero times, we need to first jump to
2684                            the end of the loop (its conditional jump).  */
2685                         INSERT_JUMP (jump, laststart, b);
2686                         b += 3;
2687                       }
2688                   }
2689                 else
2690                   {
2691                     /* non-greedy a?? */
2692                     INSERT_JUMP (jump, laststart, b + 3);
2693                     b += 3;
2694                     INSERT_JUMP (on_failure_jump, laststart, laststart + 6);
2695                     b += 3;
2696                   }
2697               }
2698           }
2699           pending_exact = 0;
2700           break;
2701
2702
2703         case '.':
2704           laststart = b;
2705           BUF_PUSH (anychar);
2706           break;
2707
2708
2709         case '[':
2710           {
2711             CLEAR_RANGE_TABLE_WORK_USED (range_table_work);
2712
2713             if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
2714
2715             /* Ensure that we have enough space to push a charset: the
2716                opcode, the length count, and the bitset; 34 bytes in all.  */
2717             GET_BUFFER_SPACE (34);
2718
2719             laststart = b;
2720
2721             /* We test `*p == '^' twice, instead of using an if
2722                statement, so we only need one BUF_PUSH.  */
2723             BUF_PUSH (*p == '^' ? charset_not : charset);
2724             if (*p == '^')
2725               p++;
2726
2727             /* Remember the first position in the bracket expression.  */
2728             p1 = p;
2729
2730             /* Push the number of bytes in the bitmap.  */
2731             BUF_PUSH ((1 << BYTEWIDTH) / BYTEWIDTH);
2732
2733             /* Clear the whole map.  */
2734             bzero (b, (1 << BYTEWIDTH) / BYTEWIDTH);
2735
2736             /* charset_not matches newline according to a syntax bit.  */
2737             if ((re_opcode_t) b[-2] == charset_not
2738                 && (syntax & RE_HAT_LISTS_NOT_NEWLINE))
2739               SET_LIST_BIT ('\n');
2740
2741             /* Read in characters and ranges, setting map bits.  */
2742             for (;;)
2743               {
2744                 boolean escaped_char = false;
2745                 const unsigned char *p2 = p;
2746
2747                 if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
2748
2749                 /* Don't translate yet.  The range TRANSLATE(X..Y) cannot
2750                    always be determined from TRANSLATE(X) and TRANSLATE(Y)
2751                    So the translation is done later in a loop.  Example:
2752                    (let ((case-fold-search t)) (string-match "[A-_]" "A"))  */
2753                 PATFETCH (c);
2754
2755                 /* \ might escape characters inside [...] and [^...].  */
2756                 if ((syntax & RE_BACKSLASH_ESCAPE_IN_LISTS) && c == '\\')
2757                   {
2758                     if (p == pend) FREE_STACK_RETURN (REG_EESCAPE);
2759
2760                     PATFETCH (c);
2761                     escaped_char = true;
2762                   }
2763                 else
2764                   {
2765                     /* Could be the end of the bracket expression.      If it's
2766                        not (i.e., when the bracket expression is `[]' so
2767                        far), the ']' character bit gets set way below.  */
2768                     if (c == ']' && p2 != p1)
2769                       break;
2770                   }
2771
2772                 /* What should we do for the character which is
2773                    greater than 0x7F, but not BASE_LEADING_CODE_P?
2774                    XXX */
2775
2776                 /* See if we're at the beginning of a possible character
2777                    class.  */
2778
2779                 if (!escaped_char &&
2780                     syntax & RE_CHAR_CLASSES && c == '[' && *p == ':')
2781                   {
2782                     /* Leave room for the null.  */
2783                     unsigned char str[CHAR_CLASS_MAX_LENGTH + 1];
2784                     const unsigned char *class_beg;
2785
2786                     PATFETCH (c);
2787                     c1 = 0;
2788                     class_beg = p;
2789
2790                     /* If pattern is `[[:'.  */
2791                     if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
2792
2793                     for (;;)
2794                       {
2795                         PATFETCH (c);
2796                         if ((c == ':' && *p == ']') || p == pend)
2797                           break;
2798                         if (c1 < CHAR_CLASS_MAX_LENGTH)
2799                           str[c1++] = c;
2800                         else
2801                           /* This is in any case an invalid class name.  */
2802                           str[0] = '\0';
2803                       }
2804                     str[c1] = '\0';
2805
2806                     /* If isn't a word bracketed by `[:' and `:]':
2807                        undo the ending character, the letters, and
2808                        leave the leading `:' and `[' (but set bits for
2809                        them).  */
2810                     if (c == ':' && *p == ']')
2811                       {
2812                         re_wchar_t ch;
2813                         re_wctype_t cc;
2814
2815                         cc = re_wctype (str);
2816
2817                         if (cc == 0)
2818                           FREE_STACK_RETURN (REG_ECTYPE);
2819
2820                         /* Throw away the ] at the end of the character
2821                            class.  */
2822                         PATFETCH (c);
2823
2824                         if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
2825
2826                         /* Most character classes in a multibyte match
2827                            just set a flag.  Exceptions are is_blank,
2828                            is_digit, is_cntrl, and is_xdigit, since
2829                            they can only match ASCII characters.  We
2830                            don't need to handle them for multibyte.
2831                            They are distinguished by a negative wctype.  */
2832
2833                         if (multibyte)
2834                           SET_RANGE_TABLE_WORK_AREA_BIT (range_table_work,
2835                                                          re_wctype_to_bit (cc));
2836
2837                         for (ch = 0; ch < 1 << BYTEWIDTH; ++ch)
2838                           {
2839                             int translated = TRANSLATE (ch);
2840                             if (re_iswctype (btowc (ch), cc))
2841                               SET_LIST_BIT (translated);
2842                           }
2843
2844                         /* Repeat the loop. */
2845                         continue;
2846                       }
2847                     else
2848                       {
2849                         /* Go back to right after the "[:".  */
2850                         p = class_beg;
2851                         SET_LIST_BIT ('[');
2852
2853                         /* Because the `:' may starts the range, we
2854                            can't simply set bit and repeat the loop.
2855                            Instead, just set it to C and handle below.  */
2856                         c = ':';
2857                       }
2858                   }
2859
2860                 if (p < pend && p[0] == '-' && p[1] != ']')
2861                   {
2862
2863                     /* Discard the `-'. */
2864                     PATFETCH (c1);
2865
2866                     /* Fetch the character which ends the range. */
2867                     PATFETCH (c1);
2868
2869                     if (SINGLE_BYTE_CHAR_P (c))
2870                       {
2871                         if (! SINGLE_BYTE_CHAR_P (c1))
2872                           {
2873                             /* Handle a range starting with a
2874                                character of less than 256, and ending
2875                                with a character of not less than 256.
2876                                Split that into two ranges, the low one
2877                                ending at 0377, and the high one
2878                                starting at the smallest character in
2879                                the charset of C1 and ending at C1.  */
2880                             int charset = CHAR_CHARSET (c1);
2881                             re_wchar_t c2 = MAKE_CHAR (charset, 0, 0);
2882
2883                             SET_RANGE_TABLE_WORK_AREA (range_table_work,
2884                                                        c2, c1);
2885                             c1 = 0377;
2886                           }
2887                       }
2888                     else if (!SAME_CHARSET_P (c, c1))
2889                       FREE_STACK_RETURN (REG_ERANGE);
2890                   }
2891                 else
2892                   /* Range from C to C. */
2893                   c1 = c;
2894
2895                 /* Set the range ... */
2896                 if (SINGLE_BYTE_CHAR_P (c))
2897                   /* ... into bitmap.  */
2898                   {
2899                     re_wchar_t this_char;
2900                     re_wchar_t range_start = c, range_end = c1;
2901
2902                     /* If the start is after the end, the range is empty.  */
2903                     if (range_start > range_end)
2904                       {
2905                         if (syntax & RE_NO_EMPTY_RANGES)
2906                           FREE_STACK_RETURN (REG_ERANGE);
2907                         /* Else, repeat the loop.  */
2908                       }
2909                     else
2910                       {
2911                         for (this_char = range_start; this_char <= range_end;
2912                              this_char++)
2913                           SET_LIST_BIT (TRANSLATE (this_char));
2914                       }
2915                   }
2916                 else
2917                   /* ... into range table.  */
2918                   SET_RANGE_TABLE_WORK_AREA (range_table_work, c, c1);
2919               }
2920
2921             /* Discard any (non)matching list bytes that are all 0 at the
2922                end of the map.  Decrease the map-length byte too.  */
2923             while ((int) b[-1] > 0 && b[b[-1] - 1] == 0)
2924               b[-1]--;
2925             b += b[-1];
2926
2927             /* Build real range table from work area.  */
2928             if (RANGE_TABLE_WORK_USED (range_table_work)
2929                 || RANGE_TABLE_WORK_BITS (range_table_work))
2930               {
2931                 int i;
2932                 int used = RANGE_TABLE_WORK_USED (range_table_work);
2933
2934                 /* Allocate space for COUNT + RANGE_TABLE.  Needs two
2935                    bytes for flags, two for COUNT, and three bytes for
2936                    each character. */
2937                 GET_BUFFER_SPACE (4 + used * 3);
2938
2939                 /* Indicate the existence of range table.  */
2940                 laststart[1] |= 0x80;
2941
2942                 /* Store the character class flag bits into the range table.
2943                    If not in emacs, these flag bits are always 0.  */
2944                 *b++ = RANGE_TABLE_WORK_BITS (range_table_work) & 0xff;
2945                 *b++ = RANGE_TABLE_WORK_BITS (range_table_work) >> 8;
2946
2947                 STORE_NUMBER_AND_INCR (b, used / 2);
2948                 for (i = 0; i < used; i++)
2949                   STORE_CHARACTER_AND_INCR
2950                     (b, RANGE_TABLE_WORK_ELT (range_table_work, i));
2951               }
2952           }
2953           break;
2954
2955
2956         case '(':
2957           if (syntax & RE_NO_BK_PARENS)
2958             goto handle_open;
2959           else
2960             goto normal_char;
2961
2962
2963         case ')':
2964           if (syntax & RE_NO_BK_PARENS)
2965             goto handle_close;
2966           else
2967             goto normal_char;
2968
2969
2970         case '\n':
2971           if (syntax & RE_NEWLINE_ALT)
2972             goto handle_alt;
2973           else
2974             goto normal_char;
2975
2976
2977         case '|':
2978           if (syntax & RE_NO_BK_VBAR)
2979             goto handle_alt;
2980           else
2981             goto normal_char;
2982
2983
2984         case '{':
2985            if (syntax & RE_INTERVALS && syntax & RE_NO_BK_BRACES)
2986              goto handle_interval;
2987            else
2988              goto normal_char;
2989
2990
2991         case '\\':
2992           if (p == pend) FREE_STACK_RETURN (REG_EESCAPE);
2993
2994           /* Do not translate the character after the \, so that we can
2995              distinguish, e.g., \B from \b, even if we normally would
2996              translate, e.g., B to b.  */
2997           PATFETCH (c);
2998
2999           switch (c)
3000             {
3001             case '(':
3002               if (syntax & RE_NO_BK_PARENS)
3003                 goto normal_backslash;
3004
3005             handle_open:
3006               {
3007                 int shy = 0;
3008                 if (p+1 < pend)
3009                   {
3010                     /* Look for a special (?...) construct */
3011                     if ((syntax & RE_SHY_GROUPS) && *p == '?')
3012                       {
3013                         PATFETCH (c); /* Gobble up the '?'.  */
3014                         PATFETCH (c);
3015                         switch (c)
3016                           {
3017                           case ':': shy = 1; break;
3018                           default:
3019                             /* Only (?:...) is supported right now. */
3020                             FREE_STACK_RETURN (REG_BADPAT);
3021                           }
3022                       }
3023                   }
3024
3025                 if (!shy)
3026                   {
3027                     bufp->re_nsub++;
3028                     regnum++;
3029                   }
3030
3031                 if (COMPILE_STACK_FULL)
3032                   {
3033                     RETALLOC (compile_stack.stack, compile_stack.size << 1,
3034                               compile_stack_elt_t);
3035                     if (compile_stack.stack == NULL) return REG_ESPACE;
3036
3037                     compile_stack.size <<= 1;
3038                   }
3039
3040                 /* These are the values to restore when we hit end of this
3041                    group.        They are all relative offsets, so that if the
3042                    whole pattern moves because of realloc, they will still
3043                    be valid.  */
3044                 COMPILE_STACK_TOP.begalt_offset = begalt - bufp->buffer;
3045                 COMPILE_STACK_TOP.fixup_alt_jump
3046                   = fixup_alt_jump ? fixup_alt_jump - bufp->buffer + 1 : 0;
3047                 COMPILE_STACK_TOP.laststart_offset = b - bufp->buffer;
3048                 COMPILE_STACK_TOP.regnum = shy ? -regnum : regnum;
3049
3050                 /* Do not push a
3051                    start_memory for groups beyond the last one we can
3052                    represent in the compiled pattern.  */
3053                 if (regnum <= MAX_REGNUM && !shy)
3054                   BUF_PUSH_2 (start_memory, regnum);
3055
3056                 compile_stack.avail++;
3057
3058                 fixup_alt_jump = 0;
3059                 laststart = 0;
3060                 begalt = b;
3061                 /* If we've reached MAX_REGNUM groups, then this open
3062                    won't actually generate any code, so we'll have to
3063                    clear pending_exact explicitly.  */
3064                 pending_exact = 0;
3065                 break;
3066               }
3067
3068             case ')':
3069               if (syntax & RE_NO_BK_PARENS) goto normal_backslash;
3070
3071               if (COMPILE_STACK_EMPTY)
3072                 {
3073                   if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD)
3074                     goto normal_backslash;
3075                   else
3076                     FREE_STACK_RETURN (REG_ERPAREN);
3077                 }
3078
3079             handle_close:
3080               FIXUP_ALT_JUMP ();
3081
3082               /* See similar code for backslashed left paren above.  */
3083               if (COMPILE_STACK_EMPTY)
3084                 {
3085                   if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD)
3086                     goto normal_char;
3087                   else
3088                     FREE_STACK_RETURN (REG_ERPAREN);
3089                 }
3090
3091               /* Since we just checked for an empty stack above, this
3092                  ``can't happen''.  */
3093               assert (compile_stack.avail != 0);
3094               {
3095                 /* We don't just want to restore into `regnum', because
3096                    later groups should continue to be numbered higher,
3097                    as in `(ab)c(de)' -- the second group is #2.  */
3098                 regnum_t this_group_regnum;
3099
3100                 compile_stack.avail--;
3101                 begalt = bufp->buffer + COMPILE_STACK_TOP.begalt_offset;
3102                 fixup_alt_jump
3103                   = COMPILE_STACK_TOP.fixup_alt_jump
3104                     ? bufp->buffer + COMPILE_STACK_TOP.fixup_alt_jump - 1
3105                     : 0;
3106                 laststart = bufp->buffer + COMPILE_STACK_TOP.laststart_offset;
3107                 this_group_regnum = COMPILE_STACK_TOP.regnum;
3108                 /* If we've reached MAX_REGNUM groups, then this open
3109                    won't actually generate any code, so we'll have to
3110                    clear pending_exact explicitly.  */
3111                 pending_exact = 0;
3112
3113                 /* We're at the end of the group, so now we know how many
3114                    groups were inside this one.  */
3115                 if (this_group_regnum <= MAX_REGNUM && this_group_regnum > 0)
3116                   BUF_PUSH_2 (stop_memory, this_group_regnum);
3117               }
3118               break;
3119
3120
3121             case '|':                                   /* `\|'.  */
3122               if (syntax & RE_LIMITED_OPS || syntax & RE_NO_BK_VBAR)
3123                 goto normal_backslash;
3124             handle_alt:
3125               if (syntax & RE_LIMITED_OPS)
3126                 goto normal_char;
3127
3128               /* Insert before the previous alternative a jump which
3129                  jumps to this alternative if the former fails.  */
3130               GET_BUFFER_SPACE (3);
3131               INSERT_JUMP (on_failure_jump, begalt, b + 6);
3132               pending_exact = 0;
3133               b += 3;
3134
3135               /* The alternative before this one has a jump after it
3136                  which gets executed if it gets matched.  Adjust that
3137                  jump so it will jump to this alternative's analogous
3138                  jump (put in below, which in turn will jump to the next
3139                  (if any) alternative's such jump, etc.).  The last such
3140                  jump jumps to the correct final destination.  A picture:
3141                           _____ _____
3142                           |   | |   |
3143                           |   v |   v
3144                          a | b   | c
3145
3146                  If we are at `b', then fixup_alt_jump right now points to a
3147                  three-byte space after `a'.  We'll put in the jump, set
3148                  fixup_alt_jump to right after `b', and leave behind three
3149                  bytes which we'll fill in when we get to after `c'.  */
3150
3151               FIXUP_ALT_JUMP ();
3152
3153               /* Mark and leave space for a jump after this alternative,
3154                  to be filled in later either by next alternative or
3155                  when know we're at the end of a series of alternatives.  */
3156               fixup_alt_jump = b;
3157               GET_BUFFER_SPACE (3);
3158               b += 3;
3159
3160               laststart = 0;
3161               begalt = b;
3162               break;
3163
3164
3165             case '{':
3166               /* If \{ is a literal.  */
3167               if (!(syntax & RE_INTERVALS)
3168                      /* If we're at `\{' and it's not the open-interval
3169                         operator.  */
3170                   || (syntax & RE_NO_BK_BRACES))
3171                 goto normal_backslash;
3172
3173             handle_interval:
3174               {
3175                 /* If got here, then the syntax allows intervals.  */
3176
3177                 /* At least (most) this many matches must be made.  */
3178                 int lower_bound = 0, upper_bound = -1;
3179
3180                 beg_interval = p;
3181
3182                 if (p == pend)
3183                   FREE_STACK_RETURN (REG_EBRACE);
3184
3185                 GET_UNSIGNED_NUMBER (lower_bound);
3186
3187                 if (c == ',')
3188                   GET_UNSIGNED_NUMBER (upper_bound);
3189                 else
3190                   /* Interval such as `{1}' => match exactly once. */
3191                   upper_bound = lower_bound;
3192
3193                 if (lower_bound < 0 || upper_bound > RE_DUP_MAX
3194                     || (upper_bound >= 0 && lower_bound > upper_bound))
3195                   FREE_STACK_RETURN (REG_BADBR);
3196
3197                 if (!(syntax & RE_NO_BK_BRACES))
3198                   {
3199                     if (c != '\\')
3200                       FREE_STACK_RETURN (REG_BADBR);
3201
3202                     PATFETCH (c);
3203                   }
3204
3205                 if (c != '}')
3206                   FREE_STACK_RETURN (REG_BADBR);
3207
3208                 /* We just parsed a valid interval.  */
3209
3210                 /* If it's invalid to have no preceding re.  */
3211                 if (!laststart)
3212                   {
3213                     if (syntax & RE_CONTEXT_INVALID_OPS)
3214                       FREE_STACK_RETURN (REG_BADRPT);
3215                     else if (syntax & RE_CONTEXT_INDEP_OPS)
3216                       laststart = b;
3217                     else
3218                       goto unfetch_interval;
3219                   }
3220
3221                 if (upper_bound == 0)
3222                   /* If the upper bound is zero, just drop the sub pattern
3223                      altogether.  */
3224                   b = laststart;
3225                 else if (lower_bound == 1 && upper_bound == 1)
3226                   /* Just match it once: nothing to do here.  */
3227                   ;
3228
3229                 /* Otherwise, we have a nontrivial interval.  When
3230                    we're all done, the pattern will look like:
3231                    set_number_at <jump count> <upper bound>
3232                    set_number_at <succeed_n count> <lower bound>
3233                    succeed_n <after jump addr> <succeed_n count>
3234                    <body of loop>
3235                    jump_n <succeed_n addr> <jump count>
3236                    (The upper bound and `jump_n' are omitted if
3237                    `upper_bound' is 1, though.)  */
3238                 else
3239                   { /* If the upper bound is > 1, we need to insert
3240                        more at the end of the loop.  */
3241                     unsigned int nbytes = (upper_bound < 0 ? 3
3242                                            : upper_bound > 1 ? 5 : 0);
3243                     unsigned int startoffset = 0;
3244
3245                     GET_BUFFER_SPACE (20); /* We might use less.  */
3246
3247                     if (lower_bound == 0)
3248                       {
3249                         /* A succeed_n that starts with 0 is really a
3250                            a simple on_failure_jump_loop.  */
3251                         INSERT_JUMP (on_failure_jump_loop, laststart,
3252                                      b + 3 + nbytes);
3253                         b += 3;
3254                       }
3255                     else
3256                       {
3257                         /* Initialize lower bound of the `succeed_n', even
3258                            though it will be set during matching by its
3259                            attendant `set_number_at' (inserted next),
3260                            because `re_compile_fastmap' needs to know.
3261                            Jump to the `jump_n' we might insert below.  */
3262                         INSERT_JUMP2 (succeed_n, laststart,
3263                                       b + 5 + nbytes,
3264                                       lower_bound);
3265                         b += 5;
3266
3267                         /* Code to initialize the lower bound.  Insert
3268                            before the `succeed_n'.       The `5' is the last two
3269                            bytes of this `set_number_at', plus 3 bytes of
3270                            the following `succeed_n'.  */
3271                         insert_op2 (set_number_at, laststart, 5, lower_bound, b);
3272                         b += 5;
3273                         startoffset += 5;
3274                       }
3275
3276                     if (upper_bound < 0)
3277                       {
3278                         /* A negative upper bound stands for infinity,
3279                            in which case it degenerates to a plain jump.  */
3280                         STORE_JUMP (jump, b, laststart + startoffset);
3281                         b += 3;
3282                       }
3283                     else if (upper_bound > 1)
3284                       { /* More than one repetition is allowed, so
3285                            append a backward jump to the `succeed_n'
3286                            that starts this interval.
3287
3288                            When we've reached this during matching,
3289                            we'll have matched the interval once, so
3290                            jump back only `upper_bound - 1' times.  */
3291                         STORE_JUMP2 (jump_n, b, laststart + startoffset,
3292                                      upper_bound - 1);
3293                         b += 5;
3294
3295                         /* The location we want to set is the second
3296                            parameter of the `jump_n'; that is `b-2' as
3297                            an absolute address.  `laststart' will be
3298                            the `set_number_at' we're about to insert;
3299                            `laststart+3' the number to set, the source
3300                            for the relative address.  But we are
3301                            inserting into the middle of the pattern --
3302                            so everything is getting moved up by 5.
3303                            Conclusion: (b - 2) - (laststart + 3) + 5,
3304                            i.e., b - laststart.
3305
3306                            We insert this at the beginning of the loop
3307                            so that if we fail during matching, we'll
3308                            reinitialize the bounds.  */
3309                         insert_op2 (set_number_at, laststart, b - laststart,
3310                                     upper_bound - 1, b);
3311                         b += 5;
3312                       }
3313                   }
3314                 pending_exact = 0;
3315                 beg_interval = NULL;
3316               }
3317               break;
3318
3319             unfetch_interval:
3320               /* If an invalid interval, match the characters as literals.  */
3321                assert (beg_interval);
3322                p = beg_interval;
3323                beg_interval = NULL;
3324
3325                /* normal_char and normal_backslash need `c'.  */
3326                c = '{';
3327
3328                if (!(syntax & RE_NO_BK_BRACES))
3329                  {
3330                    assert (p > pattern && p[-1] == '\\');
3331                    goto normal_backslash;
3332                  }
3333                else
3334                  goto normal_char;
3335
3336 #ifdef emacs
3337             /* There is no way to specify the before_dot and after_dot
3338                operators.  rms says this is ok.  --karl  */
3339             case '=':
3340               BUF_PUSH (at_dot);
3341               break;
3342
3343             case 's':
3344               laststart = b;
3345               PATFETCH (c);
3346               BUF_PUSH_2 (syntaxspec, syntax_spec_code[c]);
3347               break;
3348
3349             case 'S':
3350               laststart = b;
3351               PATFETCH (c);
3352               BUF_PUSH_2 (notsyntaxspec, syntax_spec_code[c]);
3353               break;
3354
3355             case 'c':
3356               laststart = b;
3357               PATFETCH (c);
3358               BUF_PUSH_2 (categoryspec, c);
3359               break;
3360
3361             case 'C':
3362               laststart = b;
3363               PATFETCH (c);
3364               BUF_PUSH_2 (notcategoryspec, c);
3365               break;
3366 #endif /* emacs */
3367
3368
3369             case 'w':
3370               if (syntax & RE_NO_GNU_OPS)
3371                 goto normal_char;
3372               laststart = b;
3373               BUF_PUSH_2 (syntaxspec, Sword);
3374               break;
3375
3376
3377             case 'W':
3378               if (syntax & RE_NO_GNU_OPS)
3379                 goto normal_char;
3380               laststart = b;
3381               BUF_PUSH_2 (notsyntaxspec, Sword);
3382               break;
3383
3384
3385             case '<':
3386               if (syntax & RE_NO_GNU_OPS)
3387                 goto normal_char;
3388               BUF_PUSH (wordbeg);
3389               break;
3390
3391             case '>':
3392               if (syntax & RE_NO_GNU_OPS)
3393                 goto normal_char;
3394               BUF_PUSH (wordend);
3395               break;
3396
3397             case 'b':
3398               if (syntax & RE_NO_GNU_OPS)
3399                 goto normal_char;
3400               BUF_PUSH (wordbound);
3401               break;
3402
3403             case 'B':
3404               if (syntax & RE_NO_GNU_OPS)
3405                 goto normal_char;
3406               BUF_PUSH (notwordbound);
3407               break;
3408
3409             case '`':
3410               if (syntax & RE_NO_GNU_OPS)
3411                 goto normal_char;
3412               BUF_PUSH (begbuf);
3413               break;
3414
3415             case '\'':
3416               if (syntax & RE_NO_GNU_OPS)
3417                 goto normal_char;
3418               BUF_PUSH (endbuf);
3419               break;
3420
3421             case '1': case '2': case '3': case '4': case '5':
3422             case '6': case '7': case '8': case '9':
3423               {
3424                 regnum_t reg;
3425
3426                 if (syntax & RE_NO_BK_REFS)
3427                   goto normal_backslash;
3428
3429                 reg = c - '0';
3430
3431                 /* Can't back reference to a subexpression before its end.  */
3432                 if (reg > regnum || group_in_compile_stack (compile_stack, reg))
3433                   FREE_STACK_RETURN (REG_ESUBREG);
3434
3435                 laststart = b;
3436                 BUF_PUSH_2 (duplicate, reg);
3437               }
3438               break;
3439
3440
3441             case '+':
3442             case '?':
3443               if (syntax & RE_BK_PLUS_QM)
3444                 goto handle_plus;
3445               else
3446                 goto normal_backslash;
3447
3448             default:
3449             normal_backslash:
3450               /* You might think it would be useful for \ to mean
3451                  not to translate; but if we don't translate it
3452                  it will never match anything.  */
3453               goto normal_char;
3454             }
3455           break;
3456
3457
3458         default:
3459         /* Expects the character in `c'.  */
3460         normal_char:
3461           /* If no exactn currently being built.  */
3462           if (!pending_exact
3463
3464               /* If last exactn not at current position.  */
3465               || pending_exact + *pending_exact + 1 != b
3466
3467               /* We have only one byte following the exactn for the count.  */
3468               || *pending_exact >= (1 << BYTEWIDTH) - MAX_MULTIBYTE_LENGTH
3469
3470               /* If followed by a repetition operator.  */
3471               || (p != pend && (*p == '*' || *p == '^'))
3472               || ((syntax & RE_BK_PLUS_QM)
3473                   ? p + 1 < pend && *p == '\\' && (p[1] == '+' || p[1] == '?')
3474                   : p != pend && (*p == '+' || *p == '?'))
3475               || ((syntax & RE_INTERVALS)
3476                   && ((syntax & RE_NO_BK_BRACES)
3477                       ? p != pend && *p == '{'
3478                       : p + 1 < pend && p[0] == '\\' && p[1] == '{')))
3479             {
3480               /* Start building a new exactn.  */
3481
3482               laststart = b;
3483
3484               BUF_PUSH_2 (exactn, 0);
3485               pending_exact = b - 1;
3486             }
3487
3488           GET_BUFFER_SPACE (MAX_MULTIBYTE_LENGTH);
3489           {
3490             int len;
3491
3492             c = TRANSLATE (c);
3493             if (multibyte)
3494               len = CHAR_STRING (c, b);
3495             else
3496               *b = c, len = 1;
3497             b += len;
3498             (*pending_exact) += len;
3499           }
3500
3501           break;
3502         } /* switch (c) */
3503     } /* while p != pend */
3504
3505
3506   /* Through the pattern now.  */
3507
3508   FIXUP_ALT_JUMP ();
3509
3510   if (!COMPILE_STACK_EMPTY)
3511     FREE_STACK_RETURN (REG_EPAREN);
3512
3513   /* If we don't want backtracking, force success
3514      the first time we reach the end of the compiled pattern.  */
3515   if (syntax & RE_NO_POSIX_BACKTRACKING)
3516     BUF_PUSH (succeed);
3517
3518   free (compile_stack.stack);
3519
3520   /* We have succeeded; set the length of the buffer.  */
3521   bufp->used = b - bufp->buffer;
3522
3523 #ifdef DEBUG
3524   if (debug > 0)
3525     {
3526       re_compile_fastmap (bufp);
3527       DEBUG_PRINT1 ("\nCompiled pattern: \n");
3528       print_compiled_pattern (bufp);
3529     }
3530   debug--;
3531 #endif /* DEBUG */
3532
3533 #ifndef MATCH_MAY_ALLOCATE
3534   /* Initialize the failure stack to the largest possible stack.  This
3535      isn't necessary unless we're trying to avoid calling alloca in
3536      the search and match routines.  */
3537   {
3538     int num_regs = bufp->re_nsub + 1;
3539
3540     if (fail_stack.size < re_max_failures * TYPICAL_FAILURE_SIZE)
3541       {
3542         fail_stack.size = re_max_failures * TYPICAL_FAILURE_SIZE;
3543
3544         if (! fail_stack.stack)
3545           fail_stack.stack
3546             = (fail_stack_elt_t *) malloc (fail_stack.size
3547                                            * sizeof (fail_stack_elt_t));
3548         else
3549           fail_stack.stack
3550             = (fail_stack_elt_t *) realloc (fail_stack.stack,
3551                                             (fail_stack.size
3552                                              * sizeof (fail_stack_elt_t)));
3553       }
3554
3555     regex_grow_registers (num_regs);
3556   }
3557 #endif /* not MATCH_MAY_ALLOCATE */
3558
3559   return REG_NOERROR;
3560 } /* regex_compile */
3561 \f
3562 /* Subroutines for `regex_compile'.  */
3563
3564 /* Store OP at LOC followed by two-byte integer parameter ARG.  */
3565
3566 static void
3567 store_op1 (op, loc, arg)
3568     re_opcode_t op;
3569     unsigned char *loc;
3570     int arg;
3571 {
3572   *loc = (unsigned char) op;
3573   STORE_NUMBER (loc + 1, arg);
3574 }
3575
3576
3577 /* Like `store_op1', but for two two-byte parameters ARG1 and ARG2.  */
3578
3579 static void
3580 store_op2 (op, loc, arg1, arg2)
3581     re_opcode_t op;
3582     unsigned char *loc;
3583     int arg1, arg2;
3584 {
3585   *loc = (unsigned char) op;
3586   STORE_NUMBER (loc + 1, arg1);
3587   STORE_NUMBER (loc + 3, arg2);
3588 }
3589
3590
3591 /* Copy the bytes from LOC to END to open up three bytes of space at LOC
3592    for OP followed by two-byte integer parameter ARG.  */
3593
3594 static void
3595 insert_op1 (op, loc, arg, end)
3596     re_opcode_t op;
3597     unsigned char *loc;
3598     int arg;
3599     unsigned char *end;
3600 {
3601   register unsigned char *pfrom = end;
3602   register unsigned char *pto = end + 3;
3603
3604   while (pfrom != loc)
3605     *--pto = *--pfrom;
3606
3607   store_op1 (op, loc, arg);
3608 }
3609
3610
3611 /* Like `insert_op1', but for two two-byte parameters ARG1 and ARG2.  */
3612
3613 static void
3614 insert_op2 (op, loc, arg1, arg2, end)
3615     re_opcode_t op;
3616     unsigned char *loc;
3617     int arg1, arg2;
3618     unsigned char *end;
3619 {
3620   register unsigned char *pfrom = end;
3621   register unsigned char *pto = end + 5;
3622
3623   while (pfrom != loc)
3624     *--pto = *--pfrom;
3625
3626   store_op2 (op, loc, arg1, arg2);
3627 }
3628
3629
3630 /* P points to just after a ^ in PATTERN.  Return true if that ^ comes
3631    after an alternative or a begin-subexpression.  We assume there is at
3632    least one character before the ^.  */
3633
3634 static boolean
3635 at_begline_loc_p (pattern, p, syntax)
3636     re_char *pattern, *p;
3637     reg_syntax_t syntax;
3638 {
3639   re_char *prev = p - 2;
3640   boolean prev_prev_backslash = prev > pattern && prev[-1] == '\\';
3641
3642   return
3643        /* After a subexpression?  */
3644        (*prev == '(' && (syntax & RE_NO_BK_PARENS || prev_prev_backslash))
3645        /* After an alternative?  */
3646     || (*prev == '|' && (syntax & RE_NO_BK_VBAR || prev_prev_backslash))
3647        /* After a shy subexpression?  */
3648     || ((syntax & RE_SHY_GROUPS) && prev - 2 >= pattern
3649         && prev[-1] == '?' && prev[-2] == '('
3650         && (syntax & RE_NO_BK_PARENS
3651             || (prev - 3 >= pattern && prev[-3] == '\\')));
3652 }
3653
3654
3655 /* The dual of at_begline_loc_p.  This one is for $.  We assume there is
3656    at least one character after the $, i.e., `P < PEND'.  */
3657
3658 static boolean
3659 at_endline_loc_p (p, pend, syntax)
3660     re_char *p, *pend;
3661     reg_syntax_t syntax;
3662 {
3663   re_char *next = p;
3664   boolean next_backslash = *next == '\\';
3665   re_char *next_next = p + 1 < pend ? p + 1 : 0;
3666
3667   return
3668        /* Before a subexpression?  */
3669        (syntax & RE_NO_BK_PARENS ? *next == ')'
3670         : next_backslash && next_next && *next_next == ')')
3671        /* Before an alternative?  */
3672     || (syntax & RE_NO_BK_VBAR ? *next == '|'
3673         : next_backslash && next_next && *next_next == '|');
3674 }
3675
3676
3677 /* Returns true if REGNUM is in one of COMPILE_STACK's elements and
3678    false if it's not.  */
3679
3680 static boolean
3681 group_in_compile_stack (compile_stack, regnum)
3682     compile_stack_type compile_stack;
3683     regnum_t regnum;
3684 {
3685   int this_element;
3686
3687   for (this_element = compile_stack.avail - 1;
3688        this_element >= 0;
3689        this_element--)
3690     if (compile_stack.stack[this_element].regnum == regnum)
3691       return true;
3692
3693   return false;
3694 }
3695 \f
3696 /* analyse_first.
3697    If fastmap is non-NULL, go through the pattern and fill fastmap
3698    with all the possible leading chars.  If fastmap is NULL, don't
3699    bother filling it up (obviously) and only return whether the
3700    pattern could potentially match the empty string.
3701
3702    Return 1  if p..pend might match the empty string.
3703    Return 0  if p..pend matches at least one char.
3704    Return -1 if fastmap was not updated accurately.  */
3705
3706 static int
3707 analyse_first (p, pend, fastmap, multibyte)
3708      re_char *p, *pend;
3709      char *fastmap;
3710      const int multibyte;
3711 {
3712   int j, k;
3713   boolean not;
3714
3715   /* If all elements for base leading-codes in fastmap is set, this
3716      flag is set true.  */
3717   boolean match_any_multibyte_characters = false;
3718
3719   assert (p);
3720
3721   /* The loop below works as follows:
3722      - It has a working-list kept in the PATTERN_STACK and which basically
3723        starts by only containing a pointer to the first operation.
3724      - If the opcode we're looking at is a match against some set of
3725        chars, then we add those chars to the fastmap and go on to the
3726        next work element from the worklist (done via `break').
3727      - If the opcode is a control operator on the other hand, we either
3728        ignore it (if it's meaningless at this point, such as `start_memory')
3729        or execute it (if it's a jump).  If the jump has several destinations
3730        (i.e. `on_failure_jump'), then we push the other destination onto the
3731        worklist.
3732      We guarantee termination by ignoring backward jumps (more or less),
3733      so that `p' is monotonically increasing.  More to the point, we
3734      never set `p' (or push) anything `<= p1'.  */
3735
3736   while (p < pend)
3737     {
3738       /* `p1' is used as a marker of how far back a `on_failure_jump'
3739          can go without being ignored.  It is normally equal to `p'
3740          (which prevents any backward `on_failure_jump') except right
3741          after a plain `jump', to allow patterns such as:
3742             0: jump 10
3743             3..9: <body>
3744             10: on_failure_jump 3
3745          as used for the *? operator.  */
3746       re_char *p1 = p;
3747
3748       switch (SWITCH_ENUM_CAST ((re_opcode_t) *p++))
3749         {
3750         case succeed:
3751           return 1;
3752           continue;
3753
3754         case duplicate:
3755           /* If the first character has to match a backreference, that means
3756              that the group was empty (since it already matched).  Since this
3757              is the only case that interests us here, we can assume that the
3758              backreference must match the empty string.  */
3759           p++;
3760           continue;
3761
3762
3763       /* Following are the cases which match a character.  These end
3764          with `break'.  */
3765
3766         case exactn:
3767           if (fastmap)
3768             {
3769               int c = RE_STRING_CHAR (p + 1, pend - p);
3770
3771               if (SINGLE_BYTE_CHAR_P (c))
3772                 fastmap[c] = 1;
3773               else
3774                 fastmap[p[1]] = 1;
3775             }
3776           break;
3777
3778
3779         case anychar:
3780           /* We could put all the chars except for \n (and maybe \0)
3781              but we don't bother since it is generally not worth it.  */
3782           if (!fastmap) break;
3783           return -1;
3784
3785
3786         case charset_not:
3787           /* Chars beyond end of bitmap are possible matches.
3788              All the single-byte codes can occur in multibyte buffers.
3789              So any that are not listed in the charset
3790              are possible matches, even in multibyte buffers.  */
3791           if (!fastmap) break;
3792           for (j = CHARSET_BITMAP_SIZE (&p[-1]) * BYTEWIDTH;
3793                j < (1 << BYTEWIDTH); j++)
3794             fastmap[j] = 1;
3795           /* Fallthrough */
3796         case charset:
3797           if (!fastmap) break;
3798           not = (re_opcode_t) *(p - 1) == charset_not;
3799           for (j = CHARSET_BITMAP_SIZE (&p[-1]) * BYTEWIDTH - 1, p++;
3800                j >= 0; j--)
3801             if (!!(p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH))) ^ not)
3802               fastmap[j] = 1;
3803
3804           if ((not && multibyte)
3805               /* Any character set can possibly contain a character
3806                  which doesn't match the specified set of characters.  */
3807               || (CHARSET_RANGE_TABLE_EXISTS_P (&p[-2])
3808                   && CHARSET_RANGE_TABLE_BITS (&p[-2]) != 0))
3809             /* If we can match a character class, we can match
3810                any character set.  */
3811             {
3812             set_fastmap_for_multibyte_characters:
3813               if (match_any_multibyte_characters == false)
3814                 {
3815                   for (j = 0x80; j < 0xA0; j++) /* XXX */
3816                     if (BASE_LEADING_CODE_P (j))
3817                       fastmap[j] = 1;
3818                   match_any_multibyte_characters = true;
3819                 }
3820             }
3821
3822           else if (!not && CHARSET_RANGE_TABLE_EXISTS_P (&p[-2])
3823                    && match_any_multibyte_characters == false)
3824             {
3825               /* Set fastmap[I] 1 where I is a base leading code of each
3826                  multibyte character in the range table. */
3827               int c, count;
3828
3829               /* Make P points the range table.  `+ 2' is to skip flag
3830                  bits for a character class.  */
3831               p += CHARSET_BITMAP_SIZE (&p[-2]) + 2;
3832
3833               /* Extract the number of ranges in range table into COUNT.  */
3834               EXTRACT_NUMBER_AND_INCR (count, p);
3835               for (; count > 0; count--, p += 2 * 3) /* XXX */
3836                 {
3837                   /* Extract the start of each range.  */
3838                   EXTRACT_CHARACTER (c, p);
3839                   j = CHAR_CHARSET (c);
3840                   fastmap[CHARSET_LEADING_CODE_BASE (j)] = 1;
3841                 }
3842             }
3843           break;
3844
3845         case syntaxspec:
3846         case notsyntaxspec:
3847           if (!fastmap) break;
3848 #ifndef emacs
3849           not = (re_opcode_t)p[-1] == notsyntaxspec;
3850           k = *p++;
3851           for (j = 0; j < (1 << BYTEWIDTH); j++)
3852             if ((SYNTAX (j) == (enum syntaxcode) k) ^ not)
3853               fastmap[j] = 1;
3854           break;
3855 #else  /* emacs */
3856           /* This match depends on text properties.  These end with
3857              aborting optimizations.  */
3858           return -1;
3859
3860         case categoryspec:
3861         case notcategoryspec:
3862           if (!fastmap) break;
3863           not = (re_opcode_t)p[-1] == notcategoryspec;
3864           k = *p++;
3865           for (j = 0; j < (1 << BYTEWIDTH); j++)
3866             if ((CHAR_HAS_CATEGORY (j, k)) ^ not)
3867               fastmap[j] = 1;
3868
3869           if (multibyte)
3870             /* Any character set can possibly contain a character
3871                whose category is K (or not).  */
3872             goto set_fastmap_for_multibyte_characters;
3873           break;
3874
3875       /* All cases after this match the empty string.  These end with
3876          `continue'.  */
3877
3878         case before_dot:
3879         case at_dot:
3880         case after_dot:
3881 #endif /* !emacs */
3882         case no_op:
3883         case begline:
3884         case endline:
3885         case begbuf:
3886         case endbuf:
3887         case wordbound:
3888         case notwordbound:
3889         case wordbeg:
3890         case wordend:
3891           continue;
3892
3893
3894         case jump:
3895           EXTRACT_NUMBER_AND_INCR (j, p);
3896           if (j < 0)
3897             /* Backward jumps can only go back to code that we've already
3898                visited.  `re_compile' should make sure this is true.  */
3899             break;
3900           p += j;
3901           switch (SWITCH_ENUM_CAST ((re_opcode_t) *p))
3902             {
3903             case on_failure_jump:
3904             case on_failure_keep_string_jump:
3905             case on_failure_jump_loop:
3906             case on_failure_jump_nastyloop:
3907             case on_failure_jump_smart:
3908               p++;
3909               break;
3910             default:
3911               continue;
3912             };
3913           /* Keep `p1' to allow the `on_failure_jump' we are jumping to
3914              to jump back to "just after here".  */
3915           /* Fallthrough */
3916
3917         case on_failure_jump:
3918         case on_failure_keep_string_jump:
3919         case on_failure_jump_nastyloop:
3920         case on_failure_jump_loop:
3921         case on_failure_jump_smart:
3922           EXTRACT_NUMBER_AND_INCR (j, p);
3923           if (p + j <= p1)
3924             ; /* Backward jump to be ignored.  */
3925           else
3926             { /* We have to look down both arms.
3927                  We first go down the "straight" path so as to minimize
3928                  stack usage when going through alternatives.  */
3929               int r = analyse_first (p, pend, fastmap, multibyte);
3930               if (r) return r;
3931               p += j;
3932             }
3933           continue;
3934
3935
3936         case jump_n:
3937           /* This code simply does not properly handle forward jump_n.  */
3938           DEBUG_STATEMENT (EXTRACT_NUMBER (j, p); assert (j < 0));
3939           p += 4;
3940           /* jump_n can either jump or fall through.  The (backward) jump
3941              case has already been handled, so we only need to look at the
3942              fallthrough case.  */
3943           continue;
3944
3945         case succeed_n:
3946           /* If N == 0, it should be an on_failure_jump_loop instead.  */
3947           DEBUG_STATEMENT (EXTRACT_NUMBER (j, p + 2); assert (j > 0));
3948           p += 4;
3949           /* We only care about one iteration of the loop, so we don't
3950              need to consider the case where this behaves like an
3951              on_failure_jump.  */
3952           continue;
3953
3954
3955         case set_number_at:
3956           p += 4;
3957           continue;
3958
3959
3960         case start_memory:
3961         case stop_memory:
3962           p += 1;
3963           continue;
3964
3965
3966         default:
3967           abort (); /* We have listed all the cases.  */
3968         } /* switch *p++ */
3969
3970       /* Getting here means we have found the possible starting
3971          characters for one path of the pattern -- and that the empty
3972          string does not match.  We need not follow this path further.  */
3973       return 0;
3974     } /* while p */
3975
3976   /* We reached the end without matching anything.  */
3977   return 1;
3978
3979 } /* analyse_first */
3980 \f
3981 /* re_compile_fastmap computes a ``fastmap'' for the compiled pattern in
3982    BUFP.  A fastmap records which of the (1 << BYTEWIDTH) possible
3983    characters can start a string that matches the pattern.  This fastmap
3984    is used by re_search to skip quickly over impossible starting points.
3985
3986    Character codes above (1 << BYTEWIDTH) are not represented in the
3987    fastmap, but the leading codes are represented.  Thus, the fastmap
3988    indicates which character sets could start a match.
3989
3990    The caller must supply the address of a (1 << BYTEWIDTH)-byte data
3991    area as BUFP->fastmap.
3992
3993    We set the `fastmap', `fastmap_accurate', and `can_be_null' fields in
3994    the pattern buffer.
3995
3996    Returns 0 if we succeed, -2 if an internal error.   */
3997
3998 int
3999 re_compile_fastmap (bufp)
4000      struct re_pattern_buffer *bufp;
4001 {
4002   char *fastmap = bufp->fastmap;
4003   int analysis;
4004
4005   assert (fastmap && bufp->buffer);
4006
4007   bzero (fastmap, 1 << BYTEWIDTH);  /* Assume nothing's valid.  */
4008   bufp->fastmap_accurate = 1;       /* It will be when we're done.  */
4009
4010   analysis = analyse_first (bufp->buffer, bufp->buffer + bufp->used,
4011                             fastmap, RE_MULTIBYTE_P (bufp));
4012   bufp->can_be_null = (analysis != 0);
4013   return 0;
4014 } /* re_compile_fastmap */
4015 \f
4016 /* Set REGS to hold NUM_REGS registers, storing them in STARTS and
4017    ENDS.  Subsequent matches using PATTERN_BUFFER and REGS will use
4018    this memory for recording register information.  STARTS and ENDS
4019    must be allocated using the malloc library routine, and must each
4020    be at least NUM_REGS * sizeof (regoff_t) bytes long.
4021
4022    If NUM_REGS == 0, then subsequent matches should allocate their own
4023    register data.
4024
4025    Unless this function is called, the first search or match using
4026    PATTERN_BUFFER will allocate its own register data, without
4027    freeing the old data.  */
4028
4029 void
4030 re_set_registers (bufp, regs, num_regs, starts, ends)
4031     struct re_pattern_buffer *bufp;
4032     struct re_registers *regs;
4033     unsigned num_regs;
4034     regoff_t *starts, *ends;
4035 {
4036   if (num_regs)
4037     {
4038       bufp->regs_allocated = REGS_REALLOCATE;
4039       regs->num_regs = num_regs;
4040       regs->start = starts;
4041       regs->end = ends;
4042     }
4043   else
4044     {
4045       bufp->regs_allocated = REGS_UNALLOCATED;
4046       regs->num_regs = 0;
4047       regs->start = regs->end = (regoff_t *) 0;
4048     }
4049 }
4050 WEAK_ALIAS (__re_set_registers, re_set_registers)
4051 \f
4052 /* Searching routines.  */
4053
4054 /* Like re_search_2, below, but only one string is specified, and
4055    doesn't let you say where to stop matching. */
4056
4057 int
4058 re_search (bufp, string, size, startpos, range, regs)
4059      struct re_pattern_buffer *bufp;
4060      const char *string;
4061      int size, startpos, range;
4062      struct re_registers *regs;
4063 {
4064   return re_search_2 (bufp, NULL, 0, string, size, startpos, range,
4065                       regs, size);
4066 }
4067 WEAK_ALIAS (__re_search, re_search)
4068
4069 /* Head address of virtual concatenation of string.  */
4070 #define HEAD_ADDR_VSTRING(P)            \
4071   (((P) >= size1 ? string2 : string1))
4072
4073 /* End address of virtual concatenation of string.  */
4074 #define STOP_ADDR_VSTRING(P)                            \
4075   (((P) >= size1 ? string2 + size2 : string1 + size1))
4076
4077 /* Address of POS in the concatenation of virtual string. */
4078 #define POS_ADDR_VSTRING(POS)                                   \
4079   (((POS) >= size1 ? string2 - size1 : string1) + (POS))
4080
4081 /* Using the compiled pattern in BUFP->buffer, first tries to match the
4082    virtual concatenation of STRING1 and STRING2, starting first at index
4083    STARTPOS, then at STARTPOS + 1, and so on.
4084
4085    STRING1 and STRING2 have length SIZE1 and SIZE2, respectively.
4086
4087    RANGE is how far to scan while trying to match.  RANGE = 0 means try
4088    only at STARTPOS; in general, the last start tried is STARTPOS +
4089    RANGE.
4090
4091    In REGS, return the indices of the virtual concatenation of STRING1
4092    and STRING2 that matched the entire BUFP->buffer and its contained
4093    subexpressions.
4094
4095    Do not consider matching one past the index STOP in the virtual
4096    concatenation of STRING1 and STRING2.
4097
4098    We return either the position in the strings at which the match was
4099    found, -1 if no match, or -2 if error (such as failure
4100    stack overflow).  */
4101
4102 int
4103 re_search_2 (bufp, str1, size1, str2, size2, startpos, range, regs, stop)
4104      struct re_pattern_buffer *bufp;
4105      const char *str1, *str2;
4106      int size1, size2;
4107      int startpos;
4108      int range;
4109      struct re_registers *regs;
4110      int stop;
4111 {
4112   int val;
4113   re_char *string1 = (re_char*) str1;
4114   re_char *string2 = (re_char*) str2;
4115   register char *fastmap = bufp->fastmap;
4116   register RE_TRANSLATE_TYPE translate = bufp->translate;
4117   int total_size = size1 + size2;
4118   int endpos = startpos + range;
4119   boolean anchored_start;
4120
4121   /* Nonzero if we have to concern multibyte character.  */
4122   const boolean multibyte = RE_MULTIBYTE_P (bufp);
4123
4124   /* Check for out-of-range STARTPOS.  */
4125   if (startpos < 0 || startpos > total_size)
4126     return -1;
4127
4128   /* Fix up RANGE if it might eventually take us outside
4129      the virtual concatenation of STRING1 and STRING2.
4130      Make sure we won't move STARTPOS below 0 or above TOTAL_SIZE.  */
4131   if (endpos < 0)
4132     range = 0 - startpos;
4133   else if (endpos > total_size)
4134     range = total_size - startpos;
4135
4136   /* If the search isn't to be a backwards one, don't waste time in a
4137      search for a pattern anchored at beginning of buffer.  */
4138   if (bufp->used > 0 && (re_opcode_t) bufp->buffer[0] == begbuf && range > 0)
4139     {
4140       if (startpos > 0)
4141         return -1;
4142       else
4143         range = 0;
4144     }
4145
4146 #ifdef emacs
4147   /* In a forward search for something that starts with \=.
4148      don't keep searching past point.  */
4149   if (bufp->used > 0 && (re_opcode_t) bufp->buffer[0] == at_dot && range > 0)
4150     {
4151       range = PT_BYTE - BEGV_BYTE - startpos;
4152       if (range < 0)
4153         return -1;
4154     }
4155 #endif /* emacs */
4156
4157   /* Update the fastmap now if not correct already.  */
4158   if (fastmap && !bufp->fastmap_accurate)
4159     re_compile_fastmap (bufp);
4160
4161   /* See whether the pattern is anchored.  */
4162   anchored_start = (bufp->buffer[0] == begline);
4163
4164 #ifdef emacs
4165   gl_state.object = re_match_object;
4166   {
4167     int charpos = SYNTAX_TABLE_BYTE_TO_CHAR (POS_AS_IN_BUFFER (startpos));
4168
4169     SETUP_SYNTAX_TABLE_FOR_OBJECT (re_match_object, charpos, 1);
4170   }
4171 #endif
4172
4173   /* Loop through the string, looking for a place to start matching.  */
4174   for (;;)
4175     {
4176       /* If the pattern is anchored,
4177          skip quickly past places we cannot match.
4178          We don't bother to treat startpos == 0 specially
4179          because that case doesn't repeat.  */
4180       if (anchored_start && startpos > 0)
4181         {
4182           if (! ((startpos <= size1 ? string1[startpos - 1]
4183                   : string2[startpos - size1 - 1])
4184                  == '\n'))
4185             goto advance;
4186         }
4187
4188       /* If a fastmap is supplied, skip quickly over characters that
4189          cannot be the start of a match.  If the pattern can match the
4190          null string, however, we don't need to skip characters; we want
4191          the first null string.  */
4192       if (fastmap && startpos < total_size && !bufp->can_be_null)
4193         {
4194           register re_char *d;
4195           register re_wchar_t buf_ch;
4196
4197           d = POS_ADDR_VSTRING (startpos);
4198
4199           if (range > 0)        /* Searching forwards.  */
4200             {
4201               register int lim = 0;
4202               int irange = range;
4203
4204               if (startpos < size1 && startpos + range >= size1)
4205                 lim = range - (size1 - startpos);
4206
4207               /* Written out as an if-else to avoid testing `translate'
4208                  inside the loop.  */
4209               if (RE_TRANSLATE_P (translate))
4210                 {
4211                   if (multibyte)
4212                     while (range > lim)
4213                       {
4214                         int buf_charlen;
4215
4216                         buf_ch = STRING_CHAR_AND_LENGTH (d, range - lim,
4217                                                          buf_charlen);
4218
4219                         buf_ch = RE_TRANSLATE (translate, buf_ch);
4220                         if (buf_ch >= 0400
4221                             || fastmap[buf_ch])
4222                           break;
4223
4224                         range -= buf_charlen;
4225                         d += buf_charlen;
4226                       }
4227                   else
4228                     while (range > lim
4229                            && !fastmap[RE_TRANSLATE (translate, *d)])
4230                       {
4231                         d++;
4232                         range--;
4233                       }
4234                 }
4235               else
4236                 while (range > lim && !fastmap[*d])
4237                   {
4238                     d++;
4239                     range--;
4240                   }
4241
4242               startpos += irange - range;
4243             }
4244           else                          /* Searching backwards.  */
4245             {
4246               int room = (startpos >= size1
4247                           ? size2 + size1 - startpos
4248                           : size1 - startpos);
4249               buf_ch = RE_STRING_CHAR (d, room);
4250               buf_ch = TRANSLATE (buf_ch);
4251
4252               if (! (buf_ch >= 0400
4253                      || fastmap[buf_ch]))
4254                 goto advance;
4255             }
4256         }
4257
4258       /* If can't match the null string, and that's all we have left, fail.  */
4259       if (range >= 0 && startpos == total_size && fastmap
4260           && !bufp->can_be_null)
4261         return -1;
4262
4263       val = re_match_2_internal (bufp, string1, size1, string2, size2,
4264                                  startpos, regs, stop);
4265 #ifndef REGEX_MALLOC
4266 # ifdef C_ALLOCA
4267       alloca (0);
4268 # endif
4269 #endif
4270
4271       if (val >= 0)
4272         return startpos;
4273
4274       if (val == -2)
4275         return -2;
4276
4277     advance:
4278       if (!range)
4279         break;
4280       else if (range > 0)
4281         {
4282           /* Update STARTPOS to the next character boundary.  */
4283           if (multibyte)
4284             {
4285               re_char *p = POS_ADDR_VSTRING (startpos);
4286               re_char *pend = STOP_ADDR_VSTRING (startpos);
4287               int len = MULTIBYTE_FORM_LENGTH (p, pend - p);
4288
4289               range -= len;
4290               if (range < 0)
4291                 break;
4292               startpos += len;
4293             }
4294           else
4295             {
4296               range--;
4297               startpos++;
4298             }
4299         }
4300       else
4301         {
4302           range++;
4303           startpos--;
4304
4305           /* Update STARTPOS to the previous character boundary.  */
4306           if (multibyte)
4307             {
4308               re_char *p = POS_ADDR_VSTRING (startpos) + 1;
4309               re_char *p0 = p;
4310               re_char *phead = HEAD_ADDR_VSTRING (startpos);
4311
4312               /* Find the head of multibyte form.  */
4313               PREV_CHAR_BOUNDARY (p, phead);
4314               range += p0 - 1 - p;
4315               if (range > 0)
4316                 break;
4317
4318               startpos -= p0 - 1 - p;
4319             }
4320         }
4321     }
4322   return -1;
4323 } /* re_search_2 */
4324 WEAK_ALIAS (__re_search_2, re_search_2)
4325 \f
4326 /* Declarations and macros for re_match_2.  */
4327
4328 static int bcmp_translate _RE_ARGS((re_char *s1, re_char *s2,
4329                                     register int len,
4330                                     RE_TRANSLATE_TYPE translate,
4331                                     const int multibyte));
4332
4333 /* This converts PTR, a pointer into one of the search strings `string1'
4334    and `string2' into an offset from the beginning of that string.  */
4335 #define POINTER_TO_OFFSET(ptr)                  \
4336   (FIRST_STRING_P (ptr)                         \
4337    ? ((regoff_t) ((ptr) - string1))             \
4338    : ((regoff_t) ((ptr) - string2 + size1)))
4339
4340 /* Call before fetching a character with *d.  This switches over to
4341    string2 if necessary.
4342    Check re_match_2_internal for a discussion of why end_match_2 might
4343    not be within string2 (but be equal to end_match_1 instead).  */
4344 #define PREFETCH()                                                      \
4345   while (d == dend)                                                     \
4346     {                                                                   \
4347       /* End of string2 => fail.  */                                    \
4348       if (dend == end_match_2)                                          \
4349         goto fail;                                                      \
4350       /* End of string1 => advance to string2.  */                      \
4351       d = string2;                                                      \
4352       dend = end_match_2;                                               \
4353     }
4354
4355 /* Call before fetching a char with *d if you already checked other limits.
4356    This is meant for use in lookahead operations like wordend, etc..
4357    where we might need to look at parts of the string that might be
4358    outside of the LIMITs (i.e past `stop').  */
4359 #define PREFETCH_NOLIMIT()                                              \
4360   if (d == end1)                                                        \
4361      {                                                                  \
4362        d = string2;                                                     \
4363        dend = end_match_2;                                              \
4364      }                                                                  \
4365
4366 /* Test if at very beginning or at very end of the virtual concatenation
4367    of `string1' and `string2'.  If only one string, it's `string2'.  */
4368 #define AT_STRINGS_BEG(d) ((d) == (size1 ? string1 : string2) || !size2)
4369 #define AT_STRINGS_END(d) ((d) == end2)
4370
4371
4372 /* Test if D points to a character which is word-constituent.  We have
4373    two special cases to check for: if past the end of string1, look at
4374    the first character in string2; and if before the beginning of
4375    string2, look at the last character in string1.  */
4376 #define WORDCHAR_P(d)                                                   \
4377   (SYNTAX ((d) == end1 ? *string2                                       \
4378            : (d) == string2 - 1 ? *(end1 - 1) : *(d))                   \
4379    == Sword)
4380
4381 /* Disabled due to a compiler bug -- see comment at case wordbound */
4382
4383 /* The comment at case wordbound is following one, but we don't use
4384    AT_WORD_BOUNDARY anymore to support multibyte form.
4385
4386    The DEC Alpha C compiler 3.x generates incorrect code for the
4387    test  WORDCHAR_P (d - 1) != WORDCHAR_P (d)  in the expansion of
4388    AT_WORD_BOUNDARY, so this code is disabled.  Expanding the
4389    macro and introducing temporary variables works around the bug.  */
4390
4391 #if 0
4392 /* Test if the character before D and the one at D differ with respect
4393    to being word-constituent.  */
4394 #define AT_WORD_BOUNDARY(d)                                             \
4395   (AT_STRINGS_BEG (d) || AT_STRINGS_END (d)                             \
4396    || WORDCHAR_P (d - 1) != WORDCHAR_P (d))
4397 #endif
4398
4399 /* Free everything we malloc.  */
4400 #ifdef MATCH_MAY_ALLOCATE
4401 # define FREE_VAR(var) if (var) { REGEX_FREE (var); var = NULL; } else
4402 # define FREE_VARIABLES()                                               \
4403   do {                                                                  \
4404     REGEX_FREE_STACK (fail_stack.stack);                                \
4405     FREE_VAR (regstart);                                                \
4406     FREE_VAR (regend);                                                  \
4407     FREE_VAR (best_regstart);                                           \
4408     FREE_VAR (best_regend);                                             \
4409   } while (0)
4410 #else
4411 # define FREE_VARIABLES() ((void)0) /* Do nothing!  But inhibit gcc warning.  */
4412 #endif /* not MATCH_MAY_ALLOCATE */
4413
4414 \f
4415 /* Optimization routines.  */
4416
4417 /* If the operation is a match against one or more chars,
4418    return a pointer to the next operation, else return NULL.  */
4419 static re_char *
4420 skip_one_char (p)
4421      re_char *p;
4422 {
4423   switch (SWITCH_ENUM_CAST (*p++))
4424     {
4425     case anychar:
4426       break;
4427
4428     case exactn:
4429       p += *p + 1;
4430       break;
4431
4432     case charset_not:
4433     case charset:
4434       if (CHARSET_RANGE_TABLE_EXISTS_P (p - 1))
4435         {
4436           int mcnt;
4437           p = CHARSET_RANGE_TABLE (p - 1);
4438           EXTRACT_NUMBER_AND_INCR (mcnt, p);
4439           p = CHARSET_RANGE_TABLE_END (p, mcnt);
4440         }
4441       else
4442         p += 1 + CHARSET_BITMAP_SIZE (p - 1);
4443       break;
4444
4445     case syntaxspec:
4446     case notsyntaxspec:
4447 #ifdef emacs
4448     case categoryspec:
4449     case notcategoryspec:
4450 #endif /* emacs */
4451       p++;
4452       break;
4453
4454     default:
4455       p = NULL;
4456     }
4457   return p;
4458 }
4459
4460
4461 /* Jump over non-matching operations.  */
4462 static unsigned char *
4463 skip_noops (p, pend)
4464      unsigned char *p, *pend;
4465 {
4466   int mcnt;
4467   while (p < pend)
4468     {
4469       switch (SWITCH_ENUM_CAST ((re_opcode_t) *p))
4470         {
4471         case start_memory:
4472         case stop_memory:
4473           p += 2; break;
4474         case no_op:
4475           p += 1; break;
4476         case jump:
4477           p += 1;
4478           EXTRACT_NUMBER_AND_INCR (mcnt, p);
4479           p += mcnt;
4480           break;
4481         default:
4482           return p;
4483         }
4484     }
4485   assert (p == pend);
4486   return p;
4487 }
4488
4489 /* Non-zero if "p1 matches something" implies "p2 fails".  */
4490 static int
4491 mutually_exclusive_p (bufp, p1, p2)
4492      struct re_pattern_buffer *bufp;
4493      unsigned char *p1, *p2;
4494 {
4495   re_opcode_t op2;
4496   const boolean multibyte = RE_MULTIBYTE_P (bufp);
4497   unsigned char *pend = bufp->buffer + bufp->used;
4498
4499   assert (p1 >= bufp->buffer && p1 < pend
4500           && p2 >= bufp->buffer && p2 <= pend);
4501
4502   /* Skip over open/close-group commands.
4503      If what follows this loop is a ...+ construct,
4504      look at what begins its body, since we will have to
4505      match at least one of that.  */
4506   p2 = skip_noops (p2, pend);
4507   /* The same skip can be done for p1, except that this function
4508      is only used in the case where p1 is a simple match operator.  */
4509   /* p1 = skip_noops (p1, pend); */
4510
4511   assert (p1 >= bufp->buffer && p1 < pend
4512           && p2 >= bufp->buffer && p2 <= pend);
4513
4514   op2 = p2 == pend ? succeed : *p2;
4515
4516   switch (SWITCH_ENUM_CAST (op2))
4517     {
4518     case succeed:
4519     case endbuf:
4520       /* If we're at the end of the pattern, we can change.  */
4521       if (skip_one_char (p1))
4522         {
4523           DEBUG_PRINT1 ("  End of pattern: fast loop.\n");
4524           return 1;
4525         }
4526       break;
4527
4528     case endline:
4529     case exactn:
4530       {
4531         register re_wchar_t c
4532           = (re_opcode_t) *p2 == endline ? '\n'
4533           : RE_STRING_CHAR (p2 + 2, pend - p2 - 2);
4534
4535         if ((re_opcode_t) *p1 == exactn)
4536           {
4537             if (c != RE_STRING_CHAR (p1 + 2, pend - p1 - 2))
4538               {
4539                 DEBUG_PRINT3 ("  '%c' != '%c' => fast loop.\n", c, p1[2]);
4540                 return 1;
4541               }
4542           }
4543
4544         else if ((re_opcode_t) *p1 == charset
4545                  || (re_opcode_t) *p1 == charset_not)
4546           {
4547             int not = (re_opcode_t) *p1 == charset_not;
4548
4549             /* Test if C is listed in charset (or charset_not)
4550                at `p1'.  */
4551             if (SINGLE_BYTE_CHAR_P (c))
4552               {
4553                 if (c < CHARSET_BITMAP_SIZE (p1) * BYTEWIDTH
4554                     && p1[2 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH)))
4555                   not = !not;
4556               }
4557             else if (CHARSET_RANGE_TABLE_EXISTS_P (p1))
4558               CHARSET_LOOKUP_RANGE_TABLE (not, c, p1);
4559
4560             /* `not' is equal to 1 if c would match, which means
4561                that we can't change to pop_failure_jump.  */
4562             if (!not)
4563               {
4564                 DEBUG_PRINT1 ("  No match => fast loop.\n");
4565                 return 1;
4566               }
4567           }
4568         else if ((re_opcode_t) *p1 == anychar
4569                  && c == '\n')
4570           {
4571             DEBUG_PRINT1 ("   . != \\n => fast loop.\n");
4572             return 1;
4573           }
4574       }
4575       break;
4576
4577     case charset:
4578       {
4579         if ((re_opcode_t) *p1 == exactn)
4580           /* Reuse the code above.  */
4581           return mutually_exclusive_p (bufp, p2, p1);
4582
4583       /* It is hard to list up all the character in charset
4584          P2 if it includes multibyte character.  Give up in
4585          such case.  */
4586       else if (!multibyte || !CHARSET_RANGE_TABLE_EXISTS_P (p2))
4587         {
4588           /* Now, we are sure that P2 has no range table.
4589              So, for the size of bitmap in P2, `p2[1]' is
4590              enough.    But P1 may have range table, so the
4591              size of bitmap table of P1 is extracted by
4592              using macro `CHARSET_BITMAP_SIZE'.
4593
4594              Since we know that all the character listed in
4595              P2 is ASCII, it is enough to test only bitmap
4596              table of P1.  */
4597
4598           if ((re_opcode_t) *p1 == charset)
4599             {
4600               int idx;
4601               /* We win if the charset inside the loop
4602                  has no overlap with the one after the loop.  */
4603               for (idx = 0;
4604                    (idx < (int) p2[1]
4605                     && idx < CHARSET_BITMAP_SIZE (p1));
4606                    idx++)
4607                 if ((p2[2 + idx] & p1[2 + idx]) != 0)
4608                   break;
4609
4610               if (idx == p2[1]
4611                   || idx == CHARSET_BITMAP_SIZE (p1))
4612                 {
4613                   DEBUG_PRINT1 ("        No match => fast loop.\n");
4614                   return 1;
4615                 }
4616             }
4617           else if ((re_opcode_t) *p1 == charset_not)
4618             {
4619               int idx;
4620               /* We win if the charset_not inside the loop lists
4621                  every character listed in the charset after.    */
4622               for (idx = 0; idx < (int) p2[1]; idx++)
4623                 if (! (p2[2 + idx] == 0
4624                        || (idx < CHARSET_BITMAP_SIZE (p1)
4625                            && ((p2[2 + idx] & ~ p1[2 + idx]) == 0))))
4626                   break;
4627
4628                 if (idx == p2[1])
4629                   {
4630                     DEBUG_PRINT1 ("      No match => fast loop.\n");
4631                     return 1;
4632                   }
4633               }
4634           }
4635       }
4636       break;
4637
4638     case charset_not:
4639       switch (SWITCH_ENUM_CAST (*p1))
4640         {
4641         case exactn:
4642         case charset:
4643           /* Reuse the code above.  */
4644           return mutually_exclusive_p (bufp, p2, p1);
4645         case charset_not:
4646           /* When we have two charset_not, it's very unlikely that
4647              they don't overlap.  The union of the two sets of excluded
4648              chars should cover all possible chars, which, as a matter of
4649              fact, is virtually impossible in multibyte buffers.  */
4650           break;
4651         }
4652       break;
4653
4654     case wordend:
4655     case notsyntaxspec:
4656       return ((re_opcode_t) *p1 == syntaxspec
4657               && p1[1] == (op2 == wordend ? Sword : p2[1]));
4658
4659     case wordbeg:
4660     case syntaxspec:
4661       return ((re_opcode_t) *p1 == notsyntaxspec
4662               && p1[1] == (op2 == wordend ? Sword : p2[1]));
4663
4664     case wordbound:
4665       return (((re_opcode_t) *p1 == notsyntaxspec
4666                || (re_opcode_t) *p1 == syntaxspec)
4667               && p1[1] == Sword);
4668
4669 #ifdef emacs
4670     case categoryspec:
4671       return ((re_opcode_t) *p1 == notcategoryspec && p1[1] == p2[1]);
4672     case notcategoryspec:
4673       return ((re_opcode_t) *p1 == categoryspec && p1[1] == p2[1]);
4674 #endif /* emacs */
4675
4676     default:
4677       ;
4678     }
4679
4680   /* Safe default.  */
4681   return 0;
4682 }
4683
4684 \f
4685 /* Matching routines.  */
4686
4687 #ifndef emacs   /* Emacs never uses this.  */
4688 /* re_match is like re_match_2 except it takes only a single string.  */
4689
4690 int
4691 re_match (bufp, string, size, pos, regs)
4692      struct re_pattern_buffer *bufp;
4693      const char *string;
4694      int size, pos;
4695      struct re_registers *regs;
4696 {
4697   int result = re_match_2_internal (bufp, NULL, 0, (re_char*) string, size,
4698                                     pos, regs, size);
4699 # if defined C_ALLOCA && !defined REGEX_MALLOC
4700   alloca (0);
4701 # endif
4702   return result;
4703 }
4704 WEAK_ALIAS (__re_match, re_match)
4705 #endif /* not emacs */
4706
4707 #ifdef emacs
4708 /* In Emacs, this is the string or buffer in which we
4709    are matching.  It is used for looking up syntax properties.  */
4710 Lisp_Object re_match_object;
4711 #endif
4712
4713 /* re_match_2 matches the compiled pattern in BUFP against the
4714    the (virtual) concatenation of STRING1 and STRING2 (of length SIZE1
4715    and SIZE2, respectively).  We start matching at POS, and stop
4716    matching at STOP.
4717
4718    If REGS is non-null and the `no_sub' field of BUFP is nonzero, we
4719    store offsets for the substring each group matched in REGS.  See the
4720    documentation for exactly how many groups we fill.
4721
4722    We return -1 if no match, -2 if an internal error (such as the
4723    failure stack overflowing).  Otherwise, we return the length of the
4724    matched substring.  */
4725
4726 int
4727 re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop)
4728      struct re_pattern_buffer *bufp;
4729      const char *string1, *string2;
4730      int size1, size2;
4731      int pos;
4732      struct re_registers *regs;
4733      int stop;
4734 {
4735   int result;
4736
4737 #ifdef emacs
4738   int charpos;
4739   gl_state.object = re_match_object;
4740   charpos = SYNTAX_TABLE_BYTE_TO_CHAR (POS_AS_IN_BUFFER (pos));
4741   SETUP_SYNTAX_TABLE_FOR_OBJECT (re_match_object, charpos, 1);
4742 #endif
4743
4744   result = re_match_2_internal (bufp, (re_char*) string1, size1,
4745                                 (re_char*) string2, size2,
4746                                 pos, regs, stop);
4747 #if defined C_ALLOCA && !defined REGEX_MALLOC
4748   alloca (0);
4749 #endif
4750   return result;
4751 }
4752 WEAK_ALIAS (__re_match_2, re_match_2)
4753
4754 /* This is a separate function so that we can force an alloca cleanup
4755    afterwards.  */
4756 static int
4757 re_match_2_internal (bufp, string1, size1, string2, size2, pos, regs, stop)
4758      struct re_pattern_buffer *bufp;
4759      re_char *string1, *string2;
4760      int size1, size2;
4761      int pos;
4762      struct re_registers *regs;
4763      int stop;
4764 {
4765   /* General temporaries.  */
4766   int mcnt;
4767   size_t reg;
4768   boolean not;
4769
4770   /* Just past the end of the corresponding string.  */
4771   re_char *end1, *end2;
4772
4773   /* Pointers into string1 and string2, just past the last characters in
4774      each to consider matching.  */
4775   re_char *end_match_1, *end_match_2;
4776
4777   /* Where we are in the data, and the end of the current string.  */
4778   re_char *d, *dend;
4779
4780   /* Used sometimes to remember where we were before starting matching
4781      an operator so that we can go back in case of failure.  This "atomic"
4782      behavior of matching opcodes is indispensable to the correctness
4783      of the on_failure_keep_string_jump optimization.  */
4784   re_char *dfail;
4785
4786   /* Where we are in the pattern, and the end of the pattern.  */
4787   re_char *p = bufp->buffer;
4788   re_char *pend = p + bufp->used;
4789
4790   /* We use this to map every character in the string.  */
4791   RE_TRANSLATE_TYPE translate = bufp->translate;
4792
4793   /* Nonzero if we have to concern multibyte character.  */
4794   const boolean multibyte = RE_MULTIBYTE_P (bufp);
4795
4796   /* Failure point stack.  Each place that can handle a failure further
4797      down the line pushes a failure point on this stack.  It consists of
4798      regstart, and regend for all registers corresponding to
4799      the subexpressions we're currently inside, plus the number of such
4800      registers, and, finally, two char *'s.  The first char * is where
4801      to resume scanning the pattern; the second one is where to resume
4802      scanning the strings.      */
4803 #ifdef MATCH_MAY_ALLOCATE /* otherwise, this is global.  */
4804   fail_stack_type fail_stack;
4805 #endif
4806 #ifdef DEBUG
4807   unsigned nfailure_points_pushed = 0, nfailure_points_popped = 0;
4808 #endif
4809
4810 #if defined REL_ALLOC && defined REGEX_MALLOC
4811   /* This holds the pointer to the failure stack, when
4812      it is allocated relocatably.  */
4813   fail_stack_elt_t *failure_stack_ptr;
4814 #endif
4815
4816   /* We fill all the registers internally, independent of what we
4817      return, for use in backreferences.  The number here includes
4818      an element for register zero.  */
4819   size_t num_regs = bufp->re_nsub + 1;
4820
4821   /* Information on the contents of registers. These are pointers into
4822      the input strings; they record just what was matched (on this
4823      attempt) by a subexpression part of the pattern, that is, the
4824      regnum-th regstart pointer points to where in the pattern we began
4825      matching and the regnum-th regend points to right after where we
4826      stopped matching the regnum-th subexpression.  (The zeroth register
4827      keeps track of what the whole pattern matches.)  */
4828 #ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global.  */
4829   re_char **regstart, **regend;
4830 #endif
4831
4832   /* The following record the register info as found in the above
4833      variables when we find a match better than any we've seen before.
4834      This happens as we backtrack through the failure points, which in
4835      turn happens only if we have not yet matched the entire string. */
4836   unsigned best_regs_set = false;
4837 #ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global.  */
4838   re_char **best_regstart, **best_regend;
4839 #endif
4840
4841   /* Logically, this is `best_regend[0]'.  But we don't want to have to
4842      allocate space for that if we're not allocating space for anything
4843      else (see below).  Also, we never need info about register 0 for
4844      any of the other register vectors, and it seems rather a kludge to
4845      treat `best_regend' differently than the rest.  So we keep track of
4846      the end of the best match so far in a separate variable.  We
4847      initialize this to NULL so that when we backtrack the first time
4848      and need to test it, it's not garbage.  */
4849   re_char *match_end = NULL;
4850
4851 #ifdef DEBUG
4852   /* Counts the total number of registers pushed.  */
4853   unsigned num_regs_pushed = 0;
4854 #endif
4855
4856   DEBUG_PRINT1 ("\n\nEntering re_match_2.\n");
4857
4858   INIT_FAIL_STACK ();
4859
4860 #ifdef MATCH_MAY_ALLOCATE
4861   /* Do not bother to initialize all the register variables if there are
4862      no groups in the pattern, as it takes a fair amount of time.  If
4863      there are groups, we include space for register 0 (the whole
4864      pattern), even though we never use it, since it simplifies the
4865      array indexing.  We should fix this.  */
4866   if (bufp->re_nsub)
4867     {
4868       regstart = REGEX_TALLOC (num_regs, re_char *);
4869       regend = REGEX_TALLOC (num_regs, re_char *);
4870       best_regstart = REGEX_TALLOC (num_regs, re_char *);
4871       best_regend = REGEX_TALLOC (num_regs, re_char *);
4872
4873       if (!(regstart && regend && best_regstart && best_regend))
4874         {
4875           FREE_VARIABLES ();
4876           return -2;
4877         }
4878     }
4879   else
4880     {
4881       /* We must initialize all our variables to NULL, so that
4882          `FREE_VARIABLES' doesn't try to free them.  */
4883       regstart = regend = best_regstart = best_regend = NULL;
4884     }
4885 #endif /* MATCH_MAY_ALLOCATE */
4886
4887   /* The starting position is bogus.  */
4888   if (pos < 0 || pos > size1 + size2)
4889     {
4890       FREE_VARIABLES ();
4891       return -1;
4892     }
4893
4894   /* Initialize subexpression text positions to -1 to mark ones that no
4895      start_memory/stop_memory has been seen for. Also initialize the
4896      register information struct.  */
4897   for (reg = 1; reg < num_regs; reg++)
4898     regstart[reg] = regend[reg] = NULL;
4899
4900   /* We move `string1' into `string2' if the latter's empty -- but not if
4901      `string1' is null.  */
4902   if (size2 == 0 && string1 != NULL)
4903     {
4904       string2 = string1;
4905       size2 = size1;
4906       string1 = 0;
4907       size1 = 0;
4908     }
4909   end1 = string1 + size1;
4910   end2 = string2 + size2;
4911
4912   /* `p' scans through the pattern as `d' scans through the data.
4913      `dend' is the end of the input string that `d' points within.  `d'
4914      is advanced into the following input string whenever necessary, but
4915      this happens before fetching; therefore, at the beginning of the
4916      loop, `d' can be pointing at the end of a string, but it cannot
4917      equal `string2'.  */
4918   if (pos >= size1)
4919     {
4920       /* Only match within string2.  */
4921       d = string2 + pos - size1;
4922       dend = end_match_2 = string2 + stop - size1;
4923       end_match_1 = end1;       /* Just to give it a value.  */
4924     }
4925   else
4926     {
4927       if (stop < size1)
4928         {
4929           /* Only match within string1.  */
4930           end_match_1 = string1 + stop;
4931           /* BEWARE!
4932              When we reach end_match_1, PREFETCH normally switches to string2.
4933              But in the present case, this means that just doing a PREFETCH
4934              makes us jump from `stop' to `gap' within the string.
4935              What we really want here is for the search to stop as
4936              soon as we hit end_match_1.  That's why we set end_match_2
4937              to end_match_1 (since PREFETCH fails as soon as we hit
4938              end_match_2).  */
4939           end_match_2 = end_match_1;
4940         }
4941       else
4942         { /* It's important to use this code when stop == size so that
4943              moving `d' from end1 to string2 will not prevent the d == dend
4944              check from catching the end of string.  */
4945           end_match_1 = end1;
4946           end_match_2 = string2 + stop - size1;
4947         }
4948       d = string1 + pos;
4949       dend = end_match_1;
4950     }
4951
4952   DEBUG_PRINT1 ("The compiled pattern is: ");
4953   DEBUG_PRINT_COMPILED_PATTERN (bufp, p, pend);
4954   DEBUG_PRINT1 ("The string to match is: `");
4955   DEBUG_PRINT_DOUBLE_STRING (d, string1, size1, string2, size2);
4956   DEBUG_PRINT1 ("'\n");
4957
4958   /* This loops over pattern commands.  It exits by returning from the
4959      function if the match is complete, or it drops through if the match
4960      fails at this starting point in the input data.  */
4961   for (;;)
4962     {
4963       DEBUG_PRINT2 ("\n%p: ", p);
4964
4965       if (p == pend)
4966         { /* End of pattern means we might have succeeded.  */
4967           DEBUG_PRINT1 ("end of pattern ... ");
4968
4969           /* If we haven't matched the entire string, and we want the
4970              longest match, try backtracking.  */
4971           if (d != end_match_2)
4972             {
4973               /* 1 if this match ends in the same string (string1 or string2)
4974                  as the best previous match.  */
4975               boolean same_str_p = (FIRST_STRING_P (match_end)
4976                                     == FIRST_STRING_P (d));
4977               /* 1 if this match is the best seen so far.  */
4978               boolean best_match_p;
4979
4980               /* AIX compiler got confused when this was combined
4981                  with the previous declaration.  */
4982               if (same_str_p)
4983                 best_match_p = d > match_end;
4984               else
4985                 best_match_p = !FIRST_STRING_P (d);
4986
4987               DEBUG_PRINT1 ("backtracking.\n");
4988
4989               if (!FAIL_STACK_EMPTY ())
4990                 { /* More failure points to try.  */
4991
4992                   /* If exceeds best match so far, save it.  */
4993                   if (!best_regs_set || best_match_p)
4994                     {
4995                       best_regs_set = true;
4996                       match_end = d;
4997
4998                       DEBUG_PRINT1 ("\nSAVING match as best so far.\n");
4999
5000                       for (reg = 1; reg < num_regs; reg++)
5001                         {
5002                           best_regstart[reg] = regstart[reg];
5003                           best_regend[reg] = regend[reg];
5004                         }
5005                     }
5006                   goto fail;
5007                 }
5008
5009               /* If no failure points, don't restore garbage.  And if
5010                  last match is real best match, don't restore second
5011                  best one. */
5012               else if (best_regs_set && !best_match_p)
5013                 {
5014                 restore_best_regs:
5015                   /* Restore best match.  It may happen that `dend ==
5016                      end_match_1' while the restored d is in string2.
5017                      For example, the pattern `x.*y.*z' against the
5018                      strings `x-' and `y-z-', if the two strings are
5019                      not consecutive in memory.  */
5020                   DEBUG_PRINT1 ("Restoring best registers.\n");
5021
5022                   d = match_end;
5023                   dend = ((d >= string1 && d <= end1)
5024                            ? end_match_1 : end_match_2);
5025
5026                   for (reg = 1; reg < num_regs; reg++)
5027                     {
5028                       regstart[reg] = best_regstart[reg];
5029                       regend[reg] = best_regend[reg];
5030                     }
5031                 }
5032             } /* d != end_match_2 */
5033
5034         succeed_label:
5035           DEBUG_PRINT1 ("Accepting match.\n");
5036
5037           /* If caller wants register contents data back, do it.  */
5038           if (regs && !bufp->no_sub)
5039             {
5040               /* Have the register data arrays been allocated?  */
5041               if (bufp->regs_allocated == REGS_UNALLOCATED)
5042                 { /* No.  So allocate them with malloc.  We need one
5043                      extra element beyond `num_regs' for the `-1' marker
5044                      GNU code uses.  */
5045                   regs->num_regs = MAX (RE_NREGS, num_regs + 1);
5046                   regs->start = TALLOC (regs->num_regs, regoff_t);
5047                   regs->end = TALLOC (regs->num_regs, regoff_t);
5048                   if (regs->start == NULL || regs->end == NULL)
5049                     {
5050                       FREE_VARIABLES ();
5051                       return -2;
5052                     }
5053                   bufp->regs_allocated = REGS_REALLOCATE;
5054                 }
5055               else if (bufp->regs_allocated == REGS_REALLOCATE)
5056                 { /* Yes.  If we need more elements than were already
5057                      allocated, reallocate them.  If we need fewer, just
5058                      leave it alone.  */
5059                   if (regs->num_regs < num_regs + 1)
5060                     {
5061                       regs->num_regs = num_regs + 1;
5062                       RETALLOC (regs->start, regs->num_regs, regoff_t);
5063                       RETALLOC (regs->end, regs->num_regs, regoff_t);
5064                       if (regs->start == NULL || regs->end == NULL)
5065                         {
5066                           FREE_VARIABLES ();
5067                           return -2;
5068                         }
5069                     }
5070                 }
5071               else
5072                 {
5073                   /* These braces fend off a "empty body in an else-statement"
5074                      warning under GCC when assert expands to nothing.  */
5075                   assert (bufp->regs_allocated == REGS_FIXED);
5076                 }
5077
5078               /* Convert the pointer data in `regstart' and `regend' to
5079                  indices.  Register zero has to be set differently,
5080                  since we haven't kept track of any info for it.  */
5081               if (regs->num_regs > 0)
5082                 {
5083                   regs->start[0] = pos;
5084                   regs->end[0] = POINTER_TO_OFFSET (d);
5085                 }
5086
5087               /* Go through the first `min (num_regs, regs->num_regs)'
5088                  registers, since that is all we initialized.  */
5089               for (reg = 1; reg < MIN (num_regs, regs->num_regs); reg++)
5090                 {
5091                   if (REG_UNSET (regstart[reg]) || REG_UNSET (regend[reg]))
5092                     regs->start[reg] = regs->end[reg] = -1;
5093                   else
5094                     {
5095                       regs->start[reg]
5096                         = (regoff_t) POINTER_TO_OFFSET (regstart[reg]);
5097                       regs->end[reg]
5098                         = (regoff_t) POINTER_TO_OFFSET (regend[reg]);
5099                     }
5100                 }
5101
5102               /* If the regs structure we return has more elements than
5103                  were in the pattern, set the extra elements to -1.  If
5104                  we (re)allocated the registers, this is the case,
5105                  because we always allocate enough to have at least one
5106                  -1 at the end.  */
5107               for (reg = num_regs; reg < regs->num_regs; reg++)
5108                 regs->start[reg] = regs->end[reg] = -1;
5109             } /* regs && !bufp->no_sub */
5110
5111           DEBUG_PRINT4 ("%u failure points pushed, %u popped (%u remain).\n",
5112                         nfailure_points_pushed, nfailure_points_popped,
5113                         nfailure_points_pushed - nfailure_points_popped);
5114           DEBUG_PRINT2 ("%u registers pushed.\n", num_regs_pushed);
5115
5116           mcnt = POINTER_TO_OFFSET (d) - pos;
5117
5118           DEBUG_PRINT2 ("Returning %d from re_match_2.\n", mcnt);
5119
5120           FREE_VARIABLES ();
5121           return mcnt;
5122         }
5123
5124       /* Otherwise match next pattern command.  */
5125       switch (SWITCH_ENUM_CAST ((re_opcode_t) *p++))
5126         {
5127         /* Ignore these.  Used to ignore the n of succeed_n's which
5128            currently have n == 0.  */
5129         case no_op:
5130           DEBUG_PRINT1 ("EXECUTING no_op.\n");
5131           break;
5132
5133         case succeed:
5134           DEBUG_PRINT1 ("EXECUTING succeed.\n");
5135           goto succeed_label;
5136
5137         /* Match the next n pattern characters exactly.  The following
5138            byte in the pattern defines n, and the n bytes after that
5139            are the characters to match.  */
5140         case exactn:
5141           mcnt = *p++;
5142           DEBUG_PRINT2 ("EXECUTING exactn %d.\n", mcnt);
5143
5144           /* Remember the start point to rollback upon failure.  */
5145           dfail = d;
5146
5147           /* This is written out as an if-else so we don't waste time
5148              testing `translate' inside the loop.  */
5149           if (RE_TRANSLATE_P (translate))
5150             {
5151               if (multibyte)
5152                 do
5153                   {
5154                     int pat_charlen, buf_charlen;
5155                     unsigned int pat_ch, buf_ch;
5156
5157                     PREFETCH ();
5158                     pat_ch = STRING_CHAR_AND_LENGTH (p, pend - p, pat_charlen);
5159                     buf_ch = STRING_CHAR_AND_LENGTH (d, dend - d, buf_charlen);
5160
5161                     if (RE_TRANSLATE (translate, buf_ch)
5162                         != pat_ch)
5163                       {
5164                         d = dfail;
5165                         goto fail;
5166                       }
5167
5168                     p += pat_charlen;
5169                     d += buf_charlen;
5170                     mcnt -= pat_charlen;
5171                   }
5172                 while (mcnt > 0);
5173               else
5174                 do
5175                   {
5176                     PREFETCH ();
5177                     if (RE_TRANSLATE (translate, *d) != *p++)
5178                       {
5179                         d = dfail;
5180                         goto fail;
5181                       }
5182                     d++;
5183                   }
5184                 while (--mcnt);
5185             }
5186           else
5187             {
5188               do
5189                 {
5190                   PREFETCH ();
5191                   if (*d++ != *p++)
5192                     {
5193                       d = dfail;
5194                       goto fail;
5195                     }
5196                 }
5197               while (--mcnt);
5198             }
5199           break;
5200
5201
5202         /* Match any character except possibly a newline or a null.  */
5203         case anychar:
5204           {
5205             int buf_charlen;
5206             re_wchar_t buf_ch;
5207
5208             DEBUG_PRINT1 ("EXECUTING anychar.\n");
5209
5210             PREFETCH ();
5211             buf_ch = RE_STRING_CHAR_AND_LENGTH (d, dend - d, buf_charlen);
5212             buf_ch = TRANSLATE (buf_ch);
5213
5214             if ((!(bufp->syntax & RE_DOT_NEWLINE)
5215                  && buf_ch == '\n')
5216                 || ((bufp->syntax & RE_DOT_NOT_NULL)
5217                     && buf_ch == '\000'))
5218               goto fail;
5219
5220             DEBUG_PRINT2 ("  Matched `%d'.\n", *d);
5221             d += buf_charlen;
5222           }
5223           break;
5224
5225
5226         case charset:
5227         case charset_not:
5228           {
5229             register unsigned int c;
5230             boolean not = (re_opcode_t) *(p - 1) == charset_not;
5231             int len;
5232
5233             /* Start of actual range_table, or end of bitmap if there is no
5234                range table.  */
5235             re_char *range_table;
5236
5237             /* Nonzero if there is a range table.  */
5238             int range_table_exists;
5239
5240             /* Number of ranges of range table.  This is not included
5241                in the initial byte-length of the command.  */
5242             int count = 0;
5243
5244             DEBUG_PRINT2 ("EXECUTING charset%s.\n", not ? "_not" : "");
5245
5246             range_table_exists = CHARSET_RANGE_TABLE_EXISTS_P (&p[-1]);
5247
5248             if (range_table_exists)
5249               {
5250                 range_table = CHARSET_RANGE_TABLE (&p[-1]); /* Past the bitmap.  */
5251                 EXTRACT_NUMBER_AND_INCR (count, range_table);
5252               }
5253
5254             PREFETCH ();
5255             c = RE_STRING_CHAR_AND_LENGTH (d, dend - d, len);
5256             c = TRANSLATE (c); /* The character to match.  */
5257
5258             if (SINGLE_BYTE_CHAR_P (c))
5259               {                 /* Lookup bitmap.  */
5260                 /* Cast to `unsigned' instead of `unsigned char' in
5261                    case the bit list is a full 32 bytes long.  */
5262                 if (c < (unsigned) (CHARSET_BITMAP_SIZE (&p[-1]) * BYTEWIDTH)
5263                     && p[1 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH)))
5264                   not = !not;
5265               }
5266 #ifdef emacs
5267             else if (range_table_exists)
5268               {
5269                 int class_bits = CHARSET_RANGE_TABLE_BITS (&p[-1]);
5270
5271                 if (  (class_bits & BIT_LOWER && ISLOWER (c))
5272                     | (class_bits & BIT_MULTIBYTE)
5273                     | (class_bits & BIT_PUNCT && ISPUNCT (c))
5274                     | (class_bits & BIT_SPACE && ISSPACE (c))
5275                     | (class_bits & BIT_UPPER && ISUPPER (c))
5276                     | (class_bits & BIT_WORD  && ISWORD (c)))
5277                   not = !not;
5278                 else
5279                   CHARSET_LOOKUP_RANGE_TABLE_RAW (not, c, range_table, count);
5280               }
5281 #endif /* emacs */
5282
5283             if (range_table_exists)
5284               p = CHARSET_RANGE_TABLE_END (range_table, count);
5285             else
5286               p += CHARSET_BITMAP_SIZE (&p[-1]) + 1;
5287
5288             if (!not) goto fail;
5289
5290             d += len;
5291             break;
5292           }
5293
5294
5295         /* The beginning of a group is represented by start_memory.
5296            The argument is the register number.  The text
5297            matched within the group is recorded (in the internal
5298            registers data structure) under the register number.  */
5299         case start_memory:
5300           DEBUG_PRINT2 ("EXECUTING start_memory %d:\n", *p);
5301
5302           /* In case we need to undo this operation (via backtracking).  */
5303           PUSH_FAILURE_REG ((unsigned int)*p);
5304
5305           regstart[*p] = d;
5306           regend[*p] = NULL;    /* probably unnecessary.  -sm  */
5307           DEBUG_PRINT2 ("  regstart: %d\n", POINTER_TO_OFFSET (regstart[*p]));
5308
5309           /* Move past the register number and inner group count.  */
5310           p += 1;
5311           break;
5312
5313
5314         /* The stop_memory opcode represents the end of a group.  Its
5315            argument is the same as start_memory's: the register number.  */
5316         case stop_memory:
5317           DEBUG_PRINT2 ("EXECUTING stop_memory %d:\n", *p);
5318
5319           assert (!REG_UNSET (regstart[*p]));
5320           /* Strictly speaking, there should be code such as:
5321
5322                 assert (REG_UNSET (regend[*p]));
5323                 PUSH_FAILURE_REGSTOP ((unsigned int)*p);
5324
5325              But the only info to be pushed is regend[*p] and it is known to
5326              be UNSET, so there really isn't anything to push.
5327              Not pushing anything, on the other hand deprives us from the
5328              guarantee that regend[*p] is UNSET since undoing this operation
5329              will not reset its value properly.  This is not important since
5330              the value will only be read on the next start_memory or at
5331              the very end and both events can only happen if this stop_memory
5332              is *not* undone.  */
5333
5334           regend[*p] = d;
5335           DEBUG_PRINT2 ("      regend: %d\n", POINTER_TO_OFFSET (regend[*p]));
5336
5337           /* Move past the register number and the inner group count.  */
5338           p += 1;
5339           break;
5340
5341
5342         /* \<digit> has been turned into a `duplicate' command which is
5343            followed by the numeric value of <digit> as the register number.  */
5344         case duplicate:
5345           {
5346             register re_char *d2, *dend2;
5347             int regno = *p++;   /* Get which register to match against.  */
5348             DEBUG_PRINT2 ("EXECUTING duplicate %d.\n", regno);
5349
5350             /* Can't back reference a group which we've never matched.  */
5351             if (REG_UNSET (regstart[regno]) || REG_UNSET (regend[regno]))
5352               goto fail;
5353
5354             /* Where in input to try to start matching.  */
5355             d2 = regstart[regno];
5356
5357             /* Remember the start point to rollback upon failure.  */
5358             dfail = d;
5359
5360             /* Where to stop matching; if both the place to start and
5361                the place to stop matching are in the same string, then
5362                set to the place to stop, otherwise, for now have to use
5363                the end of the first string.  */
5364
5365             dend2 = ((FIRST_STRING_P (regstart[regno])
5366                       == FIRST_STRING_P (regend[regno]))
5367                      ? regend[regno] : end_match_1);
5368             for (;;)
5369               {
5370                 /* If necessary, advance to next segment in register
5371                    contents.  */
5372                 while (d2 == dend2)
5373                   {
5374                     if (dend2 == end_match_2) break;
5375                     if (dend2 == regend[regno]) break;
5376
5377                     /* End of string1 => advance to string2. */
5378                     d2 = string2;
5379                     dend2 = regend[regno];
5380                   }
5381                 /* At end of register contents => success */
5382                 if (d2 == dend2) break;
5383
5384                 /* If necessary, advance to next segment in data.  */
5385                 PREFETCH ();
5386
5387                 /* How many characters left in this segment to match.  */
5388                 mcnt = dend - d;
5389
5390                 /* Want how many consecutive characters we can match in
5391                    one shot, so, if necessary, adjust the count.  */
5392                 if (mcnt > dend2 - d2)
5393                   mcnt = dend2 - d2;
5394
5395                 /* Compare that many; failure if mismatch, else move
5396                    past them.  */
5397                 if (RE_TRANSLATE_P (translate)
5398                     ? bcmp_translate (d, d2, mcnt, translate, multibyte)
5399                     : memcmp (d, d2, mcnt))
5400                   {
5401                     d = dfail;
5402                     goto fail;
5403                   }
5404                 d += mcnt, d2 += mcnt;
5405               }
5406           }
5407           break;
5408
5409
5410         /* begline matches the empty string at the beginning of the string
5411            (unless `not_bol' is set in `bufp'), and after newlines.  */
5412         case begline:
5413           DEBUG_PRINT1 ("EXECUTING begline.\n");
5414
5415           if (AT_STRINGS_BEG (d))
5416             {
5417               if (!bufp->not_bol) break;
5418             }
5419           else
5420             {
5421               unsigned char c;
5422               GET_CHAR_BEFORE_2 (c, d, string1, end1, string2, end2);
5423               if (c == '\n')
5424                 break;
5425             }
5426           /* In all other cases, we fail.  */
5427           goto fail;
5428
5429
5430         /* endline is the dual of begline.  */
5431         case endline:
5432           DEBUG_PRINT1 ("EXECUTING endline.\n");
5433
5434           if (AT_STRINGS_END (d))
5435             {
5436               if (!bufp->not_eol) break;
5437             }
5438           else
5439             {
5440               PREFETCH_NOLIMIT ();
5441               if (*d == '\n')
5442                 break;
5443             }
5444           goto fail;
5445
5446
5447         /* Match at the very beginning of the data.  */
5448         case begbuf:
5449           DEBUG_PRINT1 ("EXECUTING begbuf.\n");
5450           if (AT_STRINGS_BEG (d))
5451             break;
5452           goto fail;
5453
5454
5455         /* Match at the very end of the data.  */
5456         case endbuf:
5457           DEBUG_PRINT1 ("EXECUTING endbuf.\n");
5458           if (AT_STRINGS_END (d))
5459             break;
5460           goto fail;
5461
5462
5463         /* on_failure_keep_string_jump is used to optimize `.*\n'.  It
5464            pushes NULL as the value for the string on the stack.  Then
5465            `POP_FAILURE_POINT' will keep the current value for the
5466            string, instead of restoring it.  To see why, consider
5467            matching `foo\nbar' against `.*\n'.  The .* matches the foo;
5468            then the . fails against the \n.  But the next thing we want
5469            to do is match the \n against the \n; if we restored the
5470            string value, we would be back at the foo.
5471
5472            Because this is used only in specific cases, we don't need to
5473            check all the things that `on_failure_jump' does, to make
5474            sure the right things get saved on the stack.  Hence we don't
5475            share its code.  The only reason to push anything on the
5476            stack at all is that otherwise we would have to change
5477            `anychar's code to do something besides goto fail in this
5478            case; that seems worse than this.  */
5479         case on_failure_keep_string_jump:
5480           EXTRACT_NUMBER_AND_INCR (mcnt, p);
5481           DEBUG_PRINT3 ("EXECUTING on_failure_keep_string_jump %d (to %p):\n",
5482                         mcnt, p + mcnt);
5483
5484           PUSH_FAILURE_POINT (p - 3, NULL);
5485           break;
5486
5487           /* A nasty loop is introduced by the non-greedy *? and +?.
5488              With such loops, the stack only ever contains one failure point
5489              at a time, so that a plain on_failure_jump_loop kind of
5490              cycle detection cannot work.  Worse yet, such a detection
5491              can not only fail to detect a cycle, but it can also wrongly
5492              detect a cycle (between different instantiations of the same
5493              loop).
5494              So the method used for those nasty loops is a little different:
5495              We use a special cycle-detection-stack-frame which is pushed
5496              when the on_failure_jump_nastyloop failure-point is *popped*.
5497              This special frame thus marks the beginning of one iteration
5498              through the loop and we can hence easily check right here
5499              whether something matched between the beginning and the end of
5500              the loop.  */
5501         case on_failure_jump_nastyloop:
5502           EXTRACT_NUMBER_AND_INCR (mcnt, p);
5503           DEBUG_PRINT3 ("EXECUTING on_failure_jump_nastyloop %d (to %p):\n",
5504                         mcnt, p + mcnt);
5505
5506           assert ((re_opcode_t)p[-4] == no_op);
5507           {
5508             int cycle = 0;
5509             CHECK_INFINITE_LOOP (p - 4, d);
5510             if (!cycle)
5511               /* If there's a cycle, just continue without pushing
5512                  this failure point.  The failure point is the "try again"
5513                  option, which shouldn't be tried.
5514                  We want (x?)*?y\1z to match both xxyz and xxyxz.  */
5515               PUSH_FAILURE_POINT (p - 3, d);
5516           }
5517           break;
5518
5519           /* Simple loop detecting on_failure_jump:  just check on the
5520              failure stack if the same spot was already hit earlier.  */
5521         case on_failure_jump_loop:
5522         on_failure:
5523           EXTRACT_NUMBER_AND_INCR (mcnt, p);
5524           DEBUG_PRINT3 ("EXECUTING on_failure_jump_loop %d (to %p):\n",
5525                         mcnt, p + mcnt);
5526           {
5527             int cycle = 0;
5528             CHECK_INFINITE_LOOP (p - 3, d);
5529             if (cycle)
5530               /* If there's a cycle, get out of the loop, as if the matching
5531                  had failed.  We used to just `goto fail' here, but that was
5532                  aborting the search a bit too early: we want to keep the
5533                  empty-loop-match and keep matching after the loop.
5534                  We want (x?)*y\1z to match both xxyz and xxyxz.  */
5535               p += mcnt;
5536             else
5537               PUSH_FAILURE_POINT (p - 3, d);
5538           }
5539           break;
5540
5541
5542         /* Uses of on_failure_jump:
5543
5544            Each alternative starts with an on_failure_jump that points
5545            to the beginning of the next alternative.  Each alternative
5546            except the last ends with a jump that in effect jumps past
5547            the rest of the alternatives.  (They really jump to the
5548            ending jump of the following alternative, because tensioning
5549            these jumps is a hassle.)
5550
5551            Repeats start with an on_failure_jump that points past both
5552            the repetition text and either the following jump or
5553            pop_failure_jump back to this on_failure_jump.  */
5554         case on_failure_jump:
5555           IMMEDIATE_QUIT_CHECK;
5556           EXTRACT_NUMBER_AND_INCR (mcnt, p);
5557           DEBUG_PRINT3 ("EXECUTING on_failure_jump %d (to %p):\n",
5558                         mcnt, p + mcnt);
5559
5560           PUSH_FAILURE_POINT (p -3, d);
5561           break;
5562
5563         /* This operation is used for greedy *.
5564            Compare the beginning of the repeat with what in the
5565            pattern follows its end. If we can establish that there
5566            is nothing that they would both match, i.e., that we
5567            would have to backtrack because of (as in, e.g., `a*a')
5568            then we can use a non-backtracking loop based on
5569            on_failure_keep_string_jump instead of on_failure_jump.  */
5570         case on_failure_jump_smart:
5571           IMMEDIATE_QUIT_CHECK;
5572           EXTRACT_NUMBER_AND_INCR (mcnt, p);
5573           DEBUG_PRINT3 ("EXECUTING on_failure_jump_smart %d (to %p).\n",
5574                         mcnt, p + mcnt);
5575           {
5576             re_char *p1 = p; /* Next operation.  */
5577             /* Here, we discard `const', making re_match non-reentrant.  */
5578             unsigned char *p2 = (unsigned char*) p + mcnt; /* Jump dest.  */
5579             unsigned char *p3 = (unsigned char*) p - 3; /* opcode location.  */
5580
5581             p -= 3;             /* Reset so that we will re-execute the
5582                                    instruction once it's been changed. */
5583
5584             EXTRACT_NUMBER (mcnt, p2 - 2);
5585
5586             /* Ensure this is a indeed the trivial kind of loop
5587                we are expecting.  */
5588             assert (skip_one_char (p1) == p2 - 3);
5589             assert ((re_opcode_t) p2[-3] == jump && p2 + mcnt == p);
5590             DEBUG_STATEMENT (debug += 2);
5591             if (mutually_exclusive_p (bufp, p1, p2))
5592               {
5593                 /* Use a fast `on_failure_keep_string_jump' loop.  */
5594                 DEBUG_PRINT1 ("  smart exclusive => fast loop.\n");
5595                 *p3 = (unsigned char) on_failure_keep_string_jump;
5596                 STORE_NUMBER (p2 - 2, mcnt + 3);
5597               }
5598             else
5599               {
5600                 /* Default to a safe `on_failure_jump' loop.  */
5601                 DEBUG_PRINT1 ("  smart default => slow loop.\n");
5602                 *p3 = (unsigned char) on_failure_jump;
5603               }
5604             DEBUG_STATEMENT (debug -= 2);
5605           }
5606           break;
5607
5608         /* Unconditionally jump (without popping any failure points).  */
5609         case jump:
5610         unconditional_jump:
5611           IMMEDIATE_QUIT_CHECK;
5612           EXTRACT_NUMBER_AND_INCR (mcnt, p);    /* Get the amount to jump.  */
5613           DEBUG_PRINT2 ("EXECUTING jump %d ", mcnt);
5614           p += mcnt;                            /* Do the jump.  */
5615           DEBUG_PRINT2 ("(to %p).\n", p);
5616           break;
5617
5618
5619         /* Have to succeed matching what follows at least n times.
5620            After that, handle like `on_failure_jump'.  */
5621         case succeed_n:
5622           /* Signedness doesn't matter since we only compare MCNT to 0.  */
5623           EXTRACT_NUMBER (mcnt, p + 2);
5624           DEBUG_PRINT2 ("EXECUTING succeed_n %d.\n", mcnt);
5625
5626           /* Originally, mcnt is how many times we HAVE to succeed.  */
5627           if (mcnt != 0)
5628             {
5629               /* Here, we discard `const', making re_match non-reentrant.  */
5630               unsigned char *p2 = (unsigned char*) p + 2; /* counter loc.  */
5631               mcnt--;
5632               p += 4;
5633               PUSH_NUMBER (p2, mcnt);
5634             }
5635           else
5636             /* The two bytes encoding mcnt == 0 are two no_op opcodes.  */
5637             goto on_failure;
5638           break;
5639
5640         case jump_n:
5641           /* Signedness doesn't matter since we only compare MCNT to 0.  */
5642           EXTRACT_NUMBER (mcnt, p + 2);
5643           DEBUG_PRINT2 ("EXECUTING jump_n %d.\n", mcnt);
5644
5645           /* Originally, this is how many times we CAN jump.  */
5646           if (mcnt != 0)
5647             {
5648                /* Here, we discard `const', making re_match non-reentrant.  */
5649               unsigned char *p2 = (unsigned char*) p + 2; /* counter loc.  */
5650               mcnt--;
5651               PUSH_NUMBER (p2, mcnt);
5652               goto unconditional_jump;
5653             }
5654           /* If don't have to jump any more, skip over the rest of command.  */
5655           else
5656             p += 4;
5657           break;
5658
5659         case set_number_at:
5660           {
5661             unsigned char *p2;  /* Location of the counter.  */
5662             DEBUG_PRINT1 ("EXECUTING set_number_at.\n");
5663
5664             EXTRACT_NUMBER_AND_INCR (mcnt, p);
5665             /* Here, we discard `const', making re_match non-reentrant.  */
5666             p2 = (unsigned char*) p + mcnt;
5667             /* Signedness doesn't matter since we only copy MCNT's bits .  */
5668             EXTRACT_NUMBER_AND_INCR (mcnt, p);
5669             DEBUG_PRINT3 ("  Setting %p to %d.\n", p2, mcnt);
5670             PUSH_NUMBER (p2, mcnt);
5671             break;
5672           }
5673
5674         case wordbound:
5675         case notwordbound:
5676           not = (re_opcode_t) *(p - 1) == notwordbound;
5677           DEBUG_PRINT2 ("EXECUTING %swordbound.\n", not?"not":"");
5678
5679           /* We SUCCEED (or FAIL) in one of the following cases: */
5680
5681           /* Case 1: D is at the beginning or the end of string.  */
5682           if (AT_STRINGS_BEG (d) || AT_STRINGS_END (d))
5683             not = !not;
5684           else
5685             {
5686               /* C1 is the character before D, S1 is the syntax of C1, C2
5687                  is the character at D, and S2 is the syntax of C2.  */
5688               re_wchar_t c1, c2;
5689               int s1, s2;
5690 #ifdef emacs
5691               int offset = PTR_TO_OFFSET (d - 1);
5692               int charpos = SYNTAX_TABLE_BYTE_TO_CHAR (offset);
5693               UPDATE_SYNTAX_TABLE (charpos);
5694 #endif
5695               GET_CHAR_BEFORE_2 (c1, d, string1, end1, string2, end2);
5696               s1 = SYNTAX (c1);
5697 #ifdef emacs
5698               UPDATE_SYNTAX_TABLE_FORWARD (charpos + 1);
5699 #endif
5700               PREFETCH_NOLIMIT ();
5701               c2 = RE_STRING_CHAR (d, dend - d);
5702               s2 = SYNTAX (c2);
5703
5704               if (/* Case 2: Only one of S1 and S2 is Sword.  */
5705                   ((s1 == Sword) != (s2 == Sword))
5706                   /* Case 3: Both of S1 and S2 are Sword, and macro
5707                      WORD_BOUNDARY_P (C1, C2) returns nonzero.  */
5708                   || ((s1 == Sword) && WORD_BOUNDARY_P (c1, c2)))
5709                 not = !not;
5710             }
5711           if (not)
5712             break;
5713           else
5714             goto fail;
5715
5716         case wordbeg:
5717           DEBUG_PRINT1 ("EXECUTING wordbeg.\n");
5718
5719           /* We FAIL in one of the following cases: */
5720
5721           /* Case 1: D is at the end of string.  */
5722           if (AT_STRINGS_END (d))
5723             goto fail;
5724           else
5725             {
5726               /* C1 is the character before D, S1 is the syntax of C1, C2
5727                  is the character at D, and S2 is the syntax of C2.  */
5728               re_wchar_t c1, c2;
5729               int s1, s2;
5730 #ifdef emacs
5731               int offset = PTR_TO_OFFSET (d);
5732               int charpos = SYNTAX_TABLE_BYTE_TO_CHAR (offset);
5733               UPDATE_SYNTAX_TABLE (charpos);
5734 #endif
5735               PREFETCH ();
5736               c2 = RE_STRING_CHAR (d, dend - d);
5737               s2 = SYNTAX (c2);
5738
5739               /* Case 2: S2 is not Sword. */
5740               if (s2 != Sword)
5741                 goto fail;
5742
5743               /* Case 3: D is not at the beginning of string ... */
5744               if (!AT_STRINGS_BEG (d))
5745                 {
5746                   GET_CHAR_BEFORE_2 (c1, d, string1, end1, string2, end2);
5747 #ifdef emacs
5748                   UPDATE_SYNTAX_TABLE_BACKWARD (charpos - 1);
5749 #endif
5750                   s1 = SYNTAX (c1);
5751
5752                   /* ... and S1 is Sword, and WORD_BOUNDARY_P (C1, C2)
5753                      returns 0.  */
5754                   if ((s1 == Sword) && !WORD_BOUNDARY_P (c1, c2))
5755                     goto fail;
5756                 }
5757             }
5758           break;
5759
5760         case wordend:
5761           DEBUG_PRINT1 ("EXECUTING wordend.\n");
5762
5763           /* We FAIL in one of the following cases: */
5764
5765           /* Case 1: D is at the beginning of string.  */
5766           if (AT_STRINGS_BEG (d))
5767             goto fail;
5768           else
5769             {
5770               /* C1 is the character before D, S1 is the syntax of C1, C2
5771                  is the character at D, and S2 is the syntax of C2.  */
5772               re_wchar_t c1, c2;
5773               int s1, s2;
5774 #ifdef emacs
5775               int offset = PTR_TO_OFFSET (d) - 1;
5776               int charpos = SYNTAX_TABLE_BYTE_TO_CHAR (offset);
5777               UPDATE_SYNTAX_TABLE (charpos);
5778 #endif
5779               GET_CHAR_BEFORE_2 (c1, d, string1, end1, string2, end2);
5780               s1 = SYNTAX (c1);
5781
5782               /* Case 2: S1 is not Sword.  */
5783               if (s1 != Sword)
5784                 goto fail;
5785
5786               /* Case 3: D is not at the end of string ... */
5787               if (!AT_STRINGS_END (d))
5788                 {
5789                   PREFETCH_NOLIMIT ();
5790                   c2 = RE_STRING_CHAR (d, dend - d);
5791 #ifdef emacs
5792                   UPDATE_SYNTAX_TABLE_FORWARD (charpos);
5793 #endif
5794                   s2 = SYNTAX (c2);
5795
5796                   /* ... and S2 is Sword, and WORD_BOUNDARY_P (C1, C2)
5797                      returns 0.  */
5798                   if ((s2 == Sword) && !WORD_BOUNDARY_P (c1, c2))
5799           goto fail;
5800                 }
5801             }
5802           break;
5803
5804         case syntaxspec:
5805         case notsyntaxspec:
5806           not = (re_opcode_t) *(p - 1) == notsyntaxspec;
5807           mcnt = *p++;
5808           DEBUG_PRINT3 ("EXECUTING %ssyntaxspec %d.\n", not?"not":"", mcnt);
5809           PREFETCH ();
5810 #ifdef emacs
5811           {
5812             int offset = PTR_TO_OFFSET (d);
5813             int pos1 = SYNTAX_TABLE_BYTE_TO_CHAR (offset);
5814             UPDATE_SYNTAX_TABLE (pos1);
5815           }
5816 #endif
5817           {
5818             int len;
5819             re_wchar_t c;
5820
5821             c = RE_STRING_CHAR_AND_LENGTH (d, dend - d, len);
5822
5823             if ((SYNTAX (c) != (enum syntaxcode) mcnt) ^ not)
5824               goto fail;
5825             d += len;
5826           }
5827           break;
5828
5829 #ifdef emacs
5830         case before_dot:
5831           DEBUG_PRINT1 ("EXECUTING before_dot.\n");
5832           if (PTR_BYTE_POS (d) >= PT_BYTE)
5833             goto fail;
5834           break;
5835
5836         case at_dot:
5837           DEBUG_PRINT1 ("EXECUTING at_dot.\n");
5838           if (PTR_BYTE_POS (d) != PT_BYTE)
5839             goto fail;
5840           break;
5841
5842         case after_dot:
5843           DEBUG_PRINT1 ("EXECUTING after_dot.\n");
5844           if (PTR_BYTE_POS (d) <= PT_BYTE)
5845             goto fail;
5846           break;
5847
5848         case categoryspec:
5849         case notcategoryspec:
5850           not = (re_opcode_t) *(p - 1) == notcategoryspec;
5851           mcnt = *p++;
5852           DEBUG_PRINT3 ("EXECUTING %scategoryspec %d.\n", not?"not":"", mcnt);
5853           PREFETCH ();
5854           {
5855             int len;
5856             re_wchar_t c;
5857
5858             c = RE_STRING_CHAR_AND_LENGTH (d, dend - d, len);
5859
5860             if ((!CHAR_HAS_CATEGORY (c, mcnt)) ^ not)
5861               goto fail;
5862             d += len;
5863           }
5864           break;
5865
5866 #endif /* emacs */
5867
5868         default:
5869           abort ();
5870         }
5871       continue;  /* Successfully executed one pattern command; keep going.  */
5872
5873
5874     /* We goto here if a matching operation fails. */
5875     fail:
5876       IMMEDIATE_QUIT_CHECK;
5877       if (!FAIL_STACK_EMPTY ())
5878         {
5879           re_char *str, *pat;
5880           /* A restart point is known.  Restore to that state.  */
5881           DEBUG_PRINT1 ("\nFAIL:\n");
5882           POP_FAILURE_POINT (str, pat);
5883           switch (SWITCH_ENUM_CAST ((re_opcode_t) *pat++))
5884             {
5885             case on_failure_keep_string_jump:
5886               assert (str == NULL);
5887               goto continue_failure_jump;
5888
5889             case on_failure_jump_nastyloop:
5890               assert ((re_opcode_t)pat[-2] == no_op);
5891               PUSH_FAILURE_POINT (pat - 2, str);
5892               /* Fallthrough */
5893
5894             case on_failure_jump_loop:
5895             case on_failure_jump:
5896             case succeed_n:
5897               d = str;
5898             continue_failure_jump:
5899               EXTRACT_NUMBER_AND_INCR (mcnt, pat);
5900               p = pat + mcnt;
5901               break;
5902
5903             case no_op:
5904               /* A special frame used for nastyloops. */
5905               goto fail;
5906
5907             default:
5908               abort();
5909             }
5910
5911           assert (p >= bufp->buffer && p <= pend);
5912
5913           if (d >= string1 && d <= end1)
5914             dend = end_match_1;
5915         }
5916       else
5917         break;   /* Matching at this starting point really fails.  */
5918     } /* for (;;) */
5919
5920   if (best_regs_set)
5921     goto restore_best_regs;
5922
5923   FREE_VARIABLES ();
5924
5925   return -1;                            /* Failure to match.  */
5926 } /* re_match_2 */
5927 \f
5928 /* Subroutine definitions for re_match_2.  */
5929
5930 /* Return zero if TRANSLATE[S1] and TRANSLATE[S2] are identical for LEN
5931    bytes; nonzero otherwise.  */
5932
5933 static int
5934 bcmp_translate (s1, s2, len, translate, multibyte)
5935      re_char *s1, *s2;
5936      register int len;
5937      RE_TRANSLATE_TYPE translate;
5938      const int multibyte;
5939 {
5940   register re_char *p1 = s1, *p2 = s2;
5941   re_char *p1_end = s1 + len;
5942   re_char *p2_end = s2 + len;
5943
5944   /* FIXME: Checking both p1 and p2 presumes that the two strings might have
5945      different lengths, but relying on a single `len' would break this. -sm  */
5946   while (p1 < p1_end && p2 < p2_end)
5947     {
5948       int p1_charlen, p2_charlen;
5949       re_wchar_t p1_ch, p2_ch;
5950
5951       p1_ch = RE_STRING_CHAR_AND_LENGTH (p1, p1_end - p1, p1_charlen);
5952       p2_ch = RE_STRING_CHAR_AND_LENGTH (p2, p2_end - p2, p2_charlen);
5953
5954       if (RE_TRANSLATE (translate, p1_ch)
5955           != RE_TRANSLATE (translate, p2_ch))
5956         return 1;
5957
5958       p1 += p1_charlen, p2 += p2_charlen;
5959     }
5960
5961   if (p1 != p1_end || p2 != p2_end)
5962     return 1;
5963
5964   return 0;
5965 }
5966 \f
5967 /* Entry points for GNU code.  */
5968
5969 /* re_compile_pattern is the GNU regular expression compiler: it
5970    compiles PATTERN (of length SIZE) and puts the result in BUFP.
5971    Returns 0 if the pattern was valid, otherwise an error string.
5972
5973    Assumes the `allocated' (and perhaps `buffer') and `translate' fields
5974    are set in BUFP on entry.
5975
5976    We call regex_compile to do the actual compilation.  */
5977
5978 const char *
5979 re_compile_pattern (pattern, length, bufp)
5980      const char *pattern;
5981      size_t length;
5982      struct re_pattern_buffer *bufp;
5983 {
5984   reg_errcode_t ret;
5985
5986   /* GNU code is written to assume at least RE_NREGS registers will be set
5987      (and at least one extra will be -1).  */
5988   bufp->regs_allocated = REGS_UNALLOCATED;
5989
5990   /* And GNU code determines whether or not to get register information
5991      by passing null for the REGS argument to re_match, etc., not by
5992      setting no_sub.  */
5993   bufp->no_sub = 0;
5994
5995   ret = regex_compile ((re_char*) pattern, length, re_syntax_options, bufp);
5996
5997   if (!ret)
5998     return NULL;
5999   return gettext (re_error_msgid[(int) ret]);
6000 }
6001 WEAK_ALIAS (__re_compile_pattern, re_compile_pattern)
6002 \f
6003 /* Entry points compatible with 4.2 BSD regex library.  We don't define
6004    them unless specifically requested.  */
6005
6006 #if defined _REGEX_RE_COMP || defined _LIBC
6007
6008 /* BSD has one and only one pattern buffer.  */
6009 static struct re_pattern_buffer re_comp_buf;
6010
6011 char *
6012 # ifdef _LIBC
6013 /* Make these definitions weak in libc, so POSIX programs can redefine
6014    these names if they don't use our functions, and still use
6015    regcomp/regexec below without link errors.  */
6016 weak_function
6017 # endif
6018 re_comp (s)
6019     const char *s;
6020 {
6021   reg_errcode_t ret;
6022
6023   if (!s)
6024     {
6025       if (!re_comp_buf.buffer)
6026         /* Yes, we're discarding `const' here if !HAVE_LIBINTL.  */
6027         return (char *) gettext ("No previous regular expression");
6028       return 0;
6029     }
6030
6031   if (!re_comp_buf.buffer)
6032     {
6033       re_comp_buf.buffer = (unsigned char *) malloc (200);
6034       if (re_comp_buf.buffer == NULL)
6035         /* Yes, we're discarding `const' here if !HAVE_LIBINTL.  */
6036         return (char *) gettext (re_error_msgid[(int) REG_ESPACE]);
6037       re_comp_buf.allocated = 200;
6038
6039       re_comp_buf.fastmap = (char *) malloc (1 << BYTEWIDTH);
6040       if (re_comp_buf.fastmap == NULL)
6041         /* Yes, we're discarding `const' here if !HAVE_LIBINTL.  */
6042         return (char *) gettext (re_error_msgid[(int) REG_ESPACE]);
6043     }
6044
6045   /* Since `re_exec' always passes NULL for the `regs' argument, we
6046      don't need to initialize the pattern buffer fields which affect it.  */
6047
6048   ret = regex_compile (s, strlen (s), re_syntax_options, &re_comp_buf);
6049
6050   if (!ret)
6051     return NULL;
6052
6053   /* Yes, we're discarding `const' here if !HAVE_LIBINTL.  */
6054   return (char *) gettext (re_error_msgid[(int) ret]);
6055 }
6056
6057
6058 int
6059 # ifdef _LIBC
6060 weak_function
6061 # endif
6062 re_exec (s)
6063     const char *s;
6064 {
6065   const int len = strlen (s);
6066   return
6067     0 <= re_search (&re_comp_buf, s, len, 0, len, (struct re_registers *) 0);
6068 }
6069 #endif /* _REGEX_RE_COMP */
6070 \f
6071 /* POSIX.2 functions.  Don't define these for Emacs.  */
6072
6073 #ifndef emacs
6074
6075 /* regcomp takes a regular expression as a string and compiles it.
6076
6077    PREG is a regex_t *.  We do not expect any fields to be initialized,
6078    since POSIX says we shouldn't.  Thus, we set
6079
6080      `buffer' to the compiled pattern;
6081      `used' to the length of the compiled pattern;
6082      `syntax' to RE_SYNTAX_POSIX_EXTENDED if the
6083        REG_EXTENDED bit in CFLAGS is set; otherwise, to
6084        RE_SYNTAX_POSIX_BASIC;
6085      `fastmap' to an allocated space for the fastmap;
6086      `fastmap_accurate' to zero;
6087      `re_nsub' to the number of subexpressions in PATTERN.
6088
6089    PATTERN is the address of the pattern string.
6090
6091    CFLAGS is a series of bits which affect compilation.
6092
6093      If REG_EXTENDED is set, we use POSIX extended syntax; otherwise, we
6094      use POSIX basic syntax.
6095
6096      If REG_NEWLINE is set, then . and [^...] don't match newline.
6097      Also, regexec will try a match beginning after every newline.
6098
6099      If REG_ICASE is set, then we considers upper- and lowercase
6100      versions of letters to be equivalent when matching.
6101
6102      If REG_NOSUB is set, then when PREG is passed to regexec, that
6103      routine will report only success or failure, and nothing about the
6104      registers.
6105
6106    It returns 0 if it succeeds, nonzero if it doesn't.  (See regex.h for
6107    the return codes and their meanings.)  */
6108
6109 int
6110 regcomp (preg, pattern, cflags)
6111     regex_t *__restrict preg;
6112     const char *__restrict pattern;
6113     int cflags;
6114 {
6115   reg_errcode_t ret;
6116   reg_syntax_t syntax
6117     = (cflags & REG_EXTENDED) ?
6118       RE_SYNTAX_POSIX_EXTENDED : RE_SYNTAX_POSIX_BASIC;
6119
6120   /* regex_compile will allocate the space for the compiled pattern.  */
6121   preg->buffer = 0;
6122   preg->allocated = 0;
6123   preg->used = 0;
6124
6125   /* Try to allocate space for the fastmap.  */
6126   preg->fastmap = (char *) malloc (1 << BYTEWIDTH);
6127
6128   if (cflags & REG_ICASE)
6129     {
6130       unsigned i;
6131
6132       preg->translate
6133         = (RE_TRANSLATE_TYPE) malloc (CHAR_SET_SIZE
6134                                       * sizeof (*(RE_TRANSLATE_TYPE)0));
6135       if (preg->translate == NULL)
6136         return (int) REG_ESPACE;
6137
6138       /* Map uppercase characters to corresponding lowercase ones.  */
6139       for (i = 0; i < CHAR_SET_SIZE; i++)
6140         preg->translate[i] = ISUPPER (i) ? TOLOWER (i) : i;
6141     }
6142   else
6143     preg->translate = NULL;
6144
6145   /* If REG_NEWLINE is set, newlines are treated differently.  */
6146   if (cflags & REG_NEWLINE)
6147     { /* REG_NEWLINE implies neither . nor [^...] match newline.  */
6148       syntax &= ~RE_DOT_NEWLINE;
6149       syntax |= RE_HAT_LISTS_NOT_NEWLINE;
6150     }
6151   else
6152     syntax |= RE_NO_NEWLINE_ANCHOR;
6153
6154   preg->no_sub = !!(cflags & REG_NOSUB);
6155
6156   /* POSIX says a null character in the pattern terminates it, so we
6157      can use strlen here in compiling the pattern.  */
6158   ret = regex_compile ((re_char*) pattern, strlen (pattern), syntax, preg);
6159
6160   /* POSIX doesn't distinguish between an unmatched open-group and an
6161      unmatched close-group: both are REG_EPAREN.  */
6162   if (ret == REG_ERPAREN)
6163     ret = REG_EPAREN;
6164
6165   if (ret == REG_NOERROR && preg->fastmap)
6166     { /* Compute the fastmap now, since regexec cannot modify the pattern
6167          buffer.  */
6168       re_compile_fastmap (preg);
6169       if (preg->can_be_null)
6170         { /* The fastmap can't be used anyway.  */
6171           free (preg->fastmap);
6172           preg->fastmap = NULL;
6173         }
6174     }
6175   return (int) ret;
6176 }
6177 WEAK_ALIAS (__regcomp, regcomp)
6178
6179
6180 /* regexec searches for a given pattern, specified by PREG, in the
6181    string STRING.
6182
6183    If NMATCH is zero or REG_NOSUB was set in the cflags argument to
6184    `regcomp', we ignore PMATCH.  Otherwise, we assume PMATCH has at
6185    least NMATCH elements, and we set them to the offsets of the
6186    corresponding matched substrings.
6187
6188    EFLAGS specifies `execution flags' which affect matching: if
6189    REG_NOTBOL is set, then ^ does not match at the beginning of the
6190    string; if REG_NOTEOL is set, then $ does not match at the end.
6191
6192    We return 0 if we find a match and REG_NOMATCH if not.  */
6193
6194 int
6195 regexec (preg, string, nmatch, pmatch, eflags)
6196     const regex_t *__restrict preg;
6197     const char *__restrict string;
6198     size_t nmatch;
6199     regmatch_t pmatch[__restrict_arr];
6200     int eflags;
6201 {
6202   int ret;
6203   struct re_registers regs;
6204   regex_t private_preg;
6205   int len = strlen (string);
6206   boolean want_reg_info = !preg->no_sub && nmatch > 0 && pmatch;
6207
6208   private_preg = *preg;
6209
6210   private_preg.not_bol = !!(eflags & REG_NOTBOL);
6211   private_preg.not_eol = !!(eflags & REG_NOTEOL);
6212
6213   /* The user has told us exactly how many registers to return
6214      information about, via `nmatch'.  We have to pass that on to the
6215      matching routines.  */
6216   private_preg.regs_allocated = REGS_FIXED;
6217
6218   if (want_reg_info)
6219     {
6220       regs.num_regs = nmatch;
6221       regs.start = TALLOC (nmatch * 2, regoff_t);
6222       if (regs.start == NULL)
6223         return (int) REG_NOMATCH;
6224       regs.end = regs.start + nmatch;
6225     }
6226
6227   /* Instead of using not_eol to implement REG_NOTEOL, we could simply
6228      pass (&private_preg, string, len + 1, 0, len, ...) pretending the string
6229      was a little bit longer but still only matching the real part.
6230      This works because the `endline' will check for a '\n' and will find a
6231      '\0', correctly deciding that this is not the end of a line.
6232      But it doesn't work out so nicely for REG_NOTBOL, since we don't have
6233      a convenient '\0' there.  For all we know, the string could be preceded
6234      by '\n' which would throw things off.  */
6235
6236   /* Perform the searching operation.  */
6237   ret = re_search (&private_preg, string, len,
6238                    /* start: */ 0, /* range: */ len,
6239                    want_reg_info ? &regs : (struct re_registers *) 0);
6240
6241   /* Copy the register information to the POSIX structure.  */
6242   if (want_reg_info)
6243     {
6244       if (ret >= 0)
6245         {
6246           unsigned r;
6247
6248           for (r = 0; r < nmatch; r++)
6249             {
6250               pmatch[r].rm_so = regs.start[r];
6251               pmatch[r].rm_eo = regs.end[r];
6252             }
6253         }
6254
6255       /* If we needed the temporary register info, free the space now.  */
6256       free (regs.start);
6257     }
6258
6259   /* We want zero return to mean success, unlike `re_search'.  */
6260   return ret >= 0 ? (int) REG_NOERROR : (int) REG_NOMATCH;
6261 }
6262 WEAK_ALIAS (__regexec, regexec)
6263
6264
6265 /* Returns a message corresponding to an error code, ERRCODE, returned
6266    from either regcomp or regexec.   We don't use PREG here.  */
6267
6268 size_t
6269 regerror (errcode, preg, errbuf, errbuf_size)
6270     int errcode;
6271     const regex_t *preg;
6272     char *errbuf;
6273     size_t errbuf_size;
6274 {
6275   const char *msg;
6276   size_t msg_size;
6277
6278   if (errcode < 0
6279       || errcode >= (sizeof (re_error_msgid) / sizeof (re_error_msgid[0])))
6280     /* Only error codes returned by the rest of the code should be passed
6281        to this routine.  If we are given anything else, or if other regex
6282        code generates an invalid error code, then the program has a bug.
6283        Dump core so we can fix it.  */
6284     abort ();
6285
6286   msg = gettext (re_error_msgid[errcode]);
6287
6288   msg_size = strlen (msg) + 1; /* Includes the null.  */
6289
6290   if (errbuf_size != 0)
6291     {
6292       if (msg_size > errbuf_size)
6293         {
6294           strncpy (errbuf, msg, errbuf_size - 1);
6295           errbuf[errbuf_size - 1] = 0;
6296         }
6297       else
6298         strcpy (errbuf, msg);
6299     }
6300
6301   return msg_size;
6302 }
6303 WEAK_ALIAS (__regerror, regerror)
6304
6305
6306 /* Free dynamically allocated space used by PREG.  */
6307
6308 void
6309 regfree (preg)
6310     regex_t *preg;
6311 {
6312   if (preg->buffer != NULL)
6313     free (preg->buffer);
6314   preg->buffer = NULL;
6315
6316   preg->allocated = 0;
6317   preg->used = 0;
6318
6319   if (preg->fastmap != NULL)
6320     free (preg->fastmap);
6321   preg->fastmap = NULL;
6322   preg->fastmap_accurate = 0;
6323
6324   if (preg->translate != NULL)
6325     free (preg->translate);
6326   preg->translate = NULL;
6327 }
6328 WEAK_ALIAS (__regfree, regfree)
6329
6330 #endif /* not emacs  */