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