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