(elf_machine_lazy_rel): Optimise a bit.
[glibc/history.git] / posix / regex.c
blob98ff8dfcbd6b81a155468ba0b08a4037147a20b4
1 /* Extended regular expression matching and search library,
2 version 0.12.
3 (Implements POSIX draft P1003.2/D11.2, except for some of the
4 internationalization features.)
5 Copyright (C) 1993, 94, 95, 96, 97, 98 Free Software Foundation, Inc.
7 The GNU C Library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Library General Public License as
9 published by the Free Software Foundation; either version 2 of the
10 License, or (at your option) any later version.
12 The GNU C Library 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 GNU
15 Library General Public License for more details.
17 You should have received a copy of the GNU Library General Public
18 License along with the GNU C Library; see the file COPYING.LIB. If not,
19 write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
22 /* AIX requires this to be the first thing in the file. */
23 #if defined _AIX && !defined REGEX_MALLOC
24 #pragma alloca
25 #endif
27 #undef _GNU_SOURCE
28 #define _GNU_SOURCE
30 #ifdef HAVE_CONFIG_H
31 # include <config.h>
32 #endif
34 #ifndef PARAMS
35 # if defined __GNUC__ || (defined __STDC__ && __STDC__)
36 # define PARAMS(args) args
37 # else
38 # define PARAMS(args) ()
39 # endif /* GCC. */
40 #endif /* Not PARAMS. */
42 #if defined STDC_HEADERS && !defined emacs
43 # include <stddef.h>
44 #else
45 /* We need this for `regex.h', and perhaps for the Emacs include files. */
46 # include <sys/types.h>
47 #endif
49 #define WIDE_CHAR_SUPPORT (HAVE_WCTYPE_H && HAVE_WCHAR_H && HAVE_BTOWC)
51 /* For platform which support the ISO C amendement 1 functionality we
52 support user defined character classes. */
53 #if defined _LIBC || WIDE_CHAR_SUPPORT
54 /* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>. */
55 # include <wchar.h>
56 # include <wctype.h>
57 #endif
59 #ifdef _LIBC
60 /* We have to keep the namespace clean. */
61 # define regfree(preg) __regfree (preg)
62 # define regexec(pr, st, nm, pm, ef) __regexec (pr, st, nm, pm, ef)
63 # define regcomp(preg, pattern, cflags) __regcomp (preg, pattern, cflags)
64 # define regerror(errcode, preg, errbuf, errbuf_size) \
65 __regerror(errcode, preg, errbuf, errbuf_size)
66 # define re_set_registers(bu, re, nu, st, en) \
67 __re_set_registers (bu, re, nu, st, en)
68 # define re_match_2(bufp, string1, size1, string2, size2, pos, regs, stop) \
69 __re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop)
70 # define re_match(bufp, string, size, pos, regs) \
71 __re_match (bufp, string, size, pos, regs)
72 # define re_search(bufp, string, size, startpos, range, regs) \
73 __re_search (bufp, string, size, startpos, range, regs)
74 # define re_compile_pattern(pattern, length, bufp) \
75 __re_compile_pattern (pattern, length, bufp)
76 # define re_set_syntax(syntax) __re_set_syntax (syntax)
77 # define re_search_2(bufp, st1, s1, st2, s2, startpos, range, regs, stop) \
78 __re_search_2 (bufp, st1, s1, st2, s2, startpos, range, regs, stop)
79 # define re_compile_fastmap(bufp) __re_compile_fastmap (bufp)
81 #define btowc __btowc
82 #endif
84 /* This is for other GNU distributions with internationalized messages. */
85 #if HAVE_LIBINTL_H || defined _LIBC
86 # include <libintl.h>
87 #else
88 # define gettext(msgid) (msgid)
89 #endif
91 #ifndef gettext_noop
92 /* This define is so xgettext can find the internationalizable
93 strings. */
94 # define gettext_noop(String) String
95 #endif
97 /* The `emacs' switch turns on certain matching commands
98 that make sense only in Emacs. */
99 #ifdef emacs
101 # include "lisp.h"
102 # include "buffer.h"
103 # include "syntax.h"
105 #else /* not emacs */
107 /* If we are not linking with Emacs proper,
108 we can't use the relocating allocator
109 even if config.h says that we can. */
110 # undef REL_ALLOC
112 # if defined STDC_HEADERS || defined _LIBC
113 # include <stdlib.h>
114 # else
115 char *malloc ();
116 char *realloc ();
117 # endif
119 /* When used in Emacs's lib-src, we need to get bzero and bcopy somehow.
120 If nothing else has been done, use the method below. */
121 # ifdef INHIBIT_STRING_HEADER
122 # if !(defined HAVE_BZERO && defined HAVE_BCOPY)
123 # if !defined bzero && !defined bcopy
124 # undef INHIBIT_STRING_HEADER
125 # endif
126 # endif
127 # endif
129 /* This is the normal way of making sure we have a bcopy and a bzero.
130 This is used in most programs--a few other programs avoid this
131 by defining INHIBIT_STRING_HEADER. */
132 # ifndef INHIBIT_STRING_HEADER
133 # if defined HAVE_STRING_H || defined STDC_HEADERS || defined _LIBC
134 # include <string.h>
135 # ifndef bzero
136 # ifndef _LIBC
137 # define bzero(s, n) (memset (s, '\0', n), (s))
138 # else
139 # define bzero(s, n) __bzero (s, n)
140 # endif
141 # endif
142 # else
143 # include <strings.h>
144 # ifndef memcmp
145 # define memcmp(s1, s2, n) bcmp (s1, s2, n)
146 # endif
147 # ifndef memcpy
148 # define memcpy(d, s, n) (bcopy (s, d, n), (d))
149 # endif
150 # endif
151 # endif
153 /* Define the syntax stuff for \<, \>, etc. */
155 /* This must be nonzero for the wordchar and notwordchar pattern
156 commands in re_match_2. */
157 # ifndef Sword
158 # define Sword 1
159 # endif
161 # ifdef SWITCH_ENUM_BUG
162 # define SWITCH_ENUM_CAST(x) ((int)(x))
163 # else
164 # define SWITCH_ENUM_CAST(x) (x)
165 # endif
167 /* How many characters in the character set. */
168 # define CHAR_SET_SIZE 256
170 # ifdef SYNTAX_TABLE
172 extern char *re_syntax_table;
174 # else /* not SYNTAX_TABLE */
176 static char re_syntax_table[CHAR_SET_SIZE];
178 static void
179 init_syntax_once ()
181 register int c;
182 static int done = 0;
184 if (done)
185 return;
187 bzero (re_syntax_table, sizeof re_syntax_table);
189 for (c = 'a'; c <= 'z'; c++)
190 re_syntax_table[c] = Sword;
192 for (c = 'A'; c <= 'Z'; c++)
193 re_syntax_table[c] = Sword;
195 for (c = '0'; c <= '9'; c++)
196 re_syntax_table[c] = Sword;
198 re_syntax_table['_'] = Sword;
200 done = 1;
203 # endif /* not SYNTAX_TABLE */
205 # define SYNTAX(c) re_syntax_table[c]
207 #endif /* not emacs */
209 /* Get the interface, including the syntax bits. */
210 #include "regex.h"
212 /* isalpha etc. are used for the character classes. */
213 #include <ctype.h>
215 /* Jim Meyering writes:
217 "... Some ctype macros are valid only for character codes that
218 isascii says are ASCII (SGI's IRIX-4.0.5 is one such system --when
219 using /bin/cc or gcc but without giving an ansi option). So, all
220 ctype uses should be through macros like ISPRINT... If
221 STDC_HEADERS is defined, then autoconf has verified that the ctype
222 macros don't need to be guarded with references to isascii. ...
223 Defining isascii to 1 should let any compiler worth its salt
224 eliminate the && through constant folding."
225 Solaris defines some of these symbols so we must undefine them first. */
227 #undef ISASCII
228 #if defined STDC_HEADERS || (!defined isascii && !defined HAVE_ISASCII)
229 # define ISASCII(c) 1
230 #else
231 # define ISASCII(c) isascii(c)
232 #endif
234 #ifdef isblank
235 # define ISBLANK(c) (ISASCII (c) && isblank (c))
236 #else
237 # define ISBLANK(c) ((c) == ' ' || (c) == '\t')
238 #endif
239 #ifdef isgraph
240 # define ISGRAPH(c) (ISASCII (c) && isgraph (c))
241 #else
242 # define ISGRAPH(c) (ISASCII (c) && isprint (c) && !isspace (c))
243 #endif
245 #undef ISPRINT
246 #define ISPRINT(c) (ISASCII (c) && isprint (c))
247 #define ISDIGIT(c) (ISASCII (c) && isdigit (c))
248 #define ISALNUM(c) (ISASCII (c) && isalnum (c))
249 #define ISALPHA(c) (ISASCII (c) && isalpha (c))
250 #define ISCNTRL(c) (ISASCII (c) && iscntrl (c))
251 #define ISLOWER(c) (ISASCII (c) && islower (c))
252 #define ISPUNCT(c) (ISASCII (c) && ispunct (c))
253 #define ISSPACE(c) (ISASCII (c) && isspace (c))
254 #define ISUPPER(c) (ISASCII (c) && isupper (c))
255 #define ISXDIGIT(c) (ISASCII (c) && isxdigit (c))
257 #ifndef NULL
258 # define NULL (void *)0
259 #endif
261 /* We remove any previous definition of `SIGN_EXTEND_CHAR',
262 since ours (we hope) works properly with all combinations of
263 machines, compilers, `char' and `unsigned char' argument types.
264 (Per Bothner suggested the basic approach.) */
265 #undef SIGN_EXTEND_CHAR
266 #if __STDC__
267 # define SIGN_EXTEND_CHAR(c) ((signed char) (c))
268 #else /* not __STDC__ */
269 /* As in Harbison and Steele. */
270 # define SIGN_EXTEND_CHAR(c) ((((unsigned char) (c)) ^ 128) - 128)
271 #endif
273 /* Should we use malloc or alloca? If REGEX_MALLOC is not defined, we
274 use `alloca' instead of `malloc'. This is because using malloc in
275 re_search* or re_match* could cause memory leaks when C-g is used in
276 Emacs; also, malloc is slower and causes storage fragmentation. On
277 the other hand, malloc is more portable, and easier to debug.
279 Because we sometimes use alloca, some routines have to be macros,
280 not functions -- `alloca'-allocated space disappears at the end of the
281 function it is called in. */
283 #ifdef REGEX_MALLOC
285 # define REGEX_ALLOCATE malloc
286 # define REGEX_REALLOCATE(source, osize, nsize) realloc (source, nsize)
287 # define REGEX_FREE free
289 #else /* not REGEX_MALLOC */
291 /* Emacs already defines alloca, sometimes. */
292 # ifndef alloca
294 /* Make alloca work the best possible way. */
295 # ifdef __GNUC__
296 # define alloca __builtin_alloca
297 # else /* not __GNUC__ */
298 # if HAVE_ALLOCA_H
299 # include <alloca.h>
300 # endif /* HAVE_ALLOCA_H */
301 # endif /* not __GNUC__ */
303 # endif /* not alloca */
305 # define REGEX_ALLOCATE alloca
307 /* Assumes a `char *destination' variable. */
308 # define REGEX_REALLOCATE(source, osize, nsize) \
309 (destination = (char *) alloca (nsize), \
310 memcpy (destination, source, osize))
312 /* No need to do anything to free, after alloca. */
313 # define REGEX_FREE(arg) ((void)0) /* Do nothing! But inhibit gcc warning. */
315 #endif /* not REGEX_MALLOC */
317 /* Define how to allocate the failure stack. */
319 #if defined REL_ALLOC && defined REGEX_MALLOC
321 # define REGEX_ALLOCATE_STACK(size) \
322 r_alloc (&failure_stack_ptr, (size))
323 # define REGEX_REALLOCATE_STACK(source, osize, nsize) \
324 r_re_alloc (&failure_stack_ptr, (nsize))
325 # define REGEX_FREE_STACK(ptr) \
326 r_alloc_free (&failure_stack_ptr)
328 #else /* not using relocating allocator */
330 # ifdef REGEX_MALLOC
332 # define REGEX_ALLOCATE_STACK malloc
333 # define REGEX_REALLOCATE_STACK(source, osize, nsize) realloc (source, nsize)
334 # define REGEX_FREE_STACK free
336 # else /* not REGEX_MALLOC */
338 # define REGEX_ALLOCATE_STACK alloca
340 # define REGEX_REALLOCATE_STACK(source, osize, nsize) \
341 REGEX_REALLOCATE (source, osize, nsize)
342 /* No need to explicitly free anything. */
343 # define REGEX_FREE_STACK(arg)
345 # endif /* not REGEX_MALLOC */
346 #endif /* not using relocating allocator */
349 /* True if `size1' is non-NULL and PTR is pointing anywhere inside
350 `string1' or just past its end. This works if PTR is NULL, which is
351 a good thing. */
352 #define FIRST_STRING_P(ptr) \
353 (size1 && string1 <= (ptr) && (ptr) <= string1 + size1)
355 /* (Re)Allocate N items of type T using malloc, or fail. */
356 #define TALLOC(n, t) ((t *) malloc ((n) * sizeof (t)))
357 #define RETALLOC(addr, n, t) ((addr) = (t *) realloc (addr, (n) * sizeof (t)))
358 #define RETALLOC_IF(addr, n, t) \
359 if (addr) RETALLOC((addr), (n), t); else (addr) = TALLOC ((n), t)
360 #define REGEX_TALLOC(n, t) ((t *) REGEX_ALLOCATE ((n) * sizeof (t)))
362 #define BYTEWIDTH 8 /* In bits. */
364 #define STREQ(s1, s2) ((strcmp (s1, s2) == 0))
366 #undef MAX
367 #undef MIN
368 #define MAX(a, b) ((a) > (b) ? (a) : (b))
369 #define MIN(a, b) ((a) < (b) ? (a) : (b))
371 typedef char boolean;
372 #define false 0
373 #define true 1
375 static int re_match_2_internal PARAMS ((struct re_pattern_buffer *bufp,
376 const char *string1, int size1,
377 const char *string2, int size2,
378 int pos,
379 struct re_registers *regs,
380 int stop));
382 /* These are the command codes that appear in compiled regular
383 expressions. Some opcodes are followed by argument bytes. A
384 command code can specify any interpretation whatsoever for its
385 arguments. Zero bytes may appear in the compiled regular expression. */
387 typedef enum
389 no_op = 0,
391 /* Succeed right away--no more backtracking. */
392 succeed,
394 /* Followed by one byte giving n, then by n literal bytes. */
395 exactn,
397 /* Matches any (more or less) character. */
398 anychar,
400 /* Matches any one char belonging to specified set. First
401 following byte is number of bitmap bytes. Then come bytes
402 for a bitmap saying which chars are in. Bits in each byte
403 are ordered low-bit-first. A character is in the set if its
404 bit is 1. A character too large to have a bit in the map is
405 automatically not in the set. */
406 charset,
408 /* Same parameters as charset, but match any character that is
409 not one of those specified. */
410 charset_not,
412 /* Start remembering the text that is matched, for storing in a
413 register. Followed by one byte with the register number, in
414 the range 0 to one less than the pattern buffer's re_nsub
415 field. Then followed by one byte with the number of groups
416 inner to this one. (This last has to be part of the
417 start_memory only because we need it in the on_failure_jump
418 of re_match_2.) */
419 start_memory,
421 /* Stop remembering the text that is matched and store it in a
422 memory register. Followed by one byte with the register
423 number, in the range 0 to one less than `re_nsub' in the
424 pattern buffer, and one byte with the number of inner groups,
425 just like `start_memory'. (We need the number of inner
426 groups here because we don't have any easy way of finding the
427 corresponding start_memory when we're at a stop_memory.) */
428 stop_memory,
430 /* Match a duplicate of something remembered. Followed by one
431 byte containing the register number. */
432 duplicate,
434 /* Fail unless at beginning of line. */
435 begline,
437 /* Fail unless at end of line. */
438 endline,
440 /* Succeeds if at beginning of buffer (if emacs) or at beginning
441 of string to be matched (if not). */
442 begbuf,
444 /* Analogously, for end of buffer/string. */
445 endbuf,
447 /* Followed by two byte relative address to which to jump. */
448 jump,
450 /* Same as jump, but marks the end of an alternative. */
451 jump_past_alt,
453 /* Followed by two-byte relative address of place to resume at
454 in case of failure. */
455 on_failure_jump,
457 /* Like on_failure_jump, but pushes a placeholder instead of the
458 current string position when executed. */
459 on_failure_keep_string_jump,
461 /* Throw away latest failure point and then jump to following
462 two-byte relative address. */
463 pop_failure_jump,
465 /* Change to pop_failure_jump if know won't have to backtrack to
466 match; otherwise change to jump. This is used to jump
467 back to the beginning of a repeat. If what follows this jump
468 clearly won't match what the repeat does, such that we can be
469 sure that there is no use backtracking out of repetitions
470 already matched, then we change it to a pop_failure_jump.
471 Followed by two-byte address. */
472 maybe_pop_jump,
474 /* Jump to following two-byte address, and push a dummy failure
475 point. This failure point will be thrown away if an attempt
476 is made to use it for a failure. A `+' construct makes this
477 before the first repeat. Also used as an intermediary kind
478 of jump when compiling an alternative. */
479 dummy_failure_jump,
481 /* Push a dummy failure point and continue. Used at the end of
482 alternatives. */
483 push_dummy_failure,
485 /* Followed by two-byte relative address and two-byte number n.
486 After matching N times, jump to the address upon failure. */
487 succeed_n,
489 /* Followed by two-byte relative address, and two-byte number n.
490 Jump to the address N times, then fail. */
491 jump_n,
493 /* Set the following two-byte relative address to the
494 subsequent two-byte number. The address *includes* the two
495 bytes of number. */
496 set_number_at,
498 wordchar, /* Matches any word-constituent character. */
499 notwordchar, /* Matches any char that is not a word-constituent. */
501 wordbeg, /* Succeeds if at word beginning. */
502 wordend, /* Succeeds if at word end. */
504 wordbound, /* Succeeds if at a word boundary. */
505 notwordbound /* Succeeds if not at a word boundary. */
507 #ifdef emacs
508 ,before_dot, /* Succeeds if before point. */
509 at_dot, /* Succeeds if at point. */
510 after_dot, /* Succeeds if after point. */
512 /* Matches any character whose syntax is specified. Followed by
513 a byte which contains a syntax code, e.g., Sword. */
514 syntaxspec,
516 /* Matches any character whose syntax is not that specified. */
517 notsyntaxspec
518 #endif /* emacs */
519 } re_opcode_t;
521 /* Common operations on the compiled pattern. */
523 /* Store NUMBER in two contiguous bytes starting at DESTINATION. */
525 #define STORE_NUMBER(destination, number) \
526 do { \
527 (destination)[0] = (number) & 0377; \
528 (destination)[1] = (number) >> 8; \
529 } while (0)
531 /* Same as STORE_NUMBER, except increment DESTINATION to
532 the byte after where the number is stored. Therefore, DESTINATION
533 must be an lvalue. */
535 #define STORE_NUMBER_AND_INCR(destination, number) \
536 do { \
537 STORE_NUMBER (destination, number); \
538 (destination) += 2; \
539 } while (0)
541 /* Put into DESTINATION a number stored in two contiguous bytes starting
542 at SOURCE. */
544 #define EXTRACT_NUMBER(destination, source) \
545 do { \
546 (destination) = *(source) & 0377; \
547 (destination) += SIGN_EXTEND_CHAR (*((source) + 1)) << 8; \
548 } while (0)
550 #ifdef DEBUG
551 static void extract_number _RE_ARGS ((int *dest, unsigned char *source));
552 static void
553 extract_number (dest, source)
554 int *dest;
555 unsigned char *source;
557 int temp = SIGN_EXTEND_CHAR (*(source + 1));
558 *dest = *source & 0377;
559 *dest += temp << 8;
562 # ifndef EXTRACT_MACROS /* To debug the macros. */
563 # undef EXTRACT_NUMBER
564 # define EXTRACT_NUMBER(dest, src) extract_number (&dest, src)
565 # endif /* not EXTRACT_MACROS */
567 #endif /* DEBUG */
569 /* Same as EXTRACT_NUMBER, except increment SOURCE to after the number.
570 SOURCE must be an lvalue. */
572 #define EXTRACT_NUMBER_AND_INCR(destination, source) \
573 do { \
574 EXTRACT_NUMBER (destination, source); \
575 (source) += 2; \
576 } while (0)
578 #ifdef DEBUG
579 static void extract_number_and_incr _RE_ARGS ((int *destination,
580 unsigned char **source));
581 static void
582 extract_number_and_incr (destination, source)
583 int *destination;
584 unsigned char **source;
586 extract_number (destination, *source);
587 *source += 2;
590 # ifndef EXTRACT_MACROS
591 # undef EXTRACT_NUMBER_AND_INCR
592 # define EXTRACT_NUMBER_AND_INCR(dest, src) \
593 extract_number_and_incr (&dest, &src)
594 # endif /* not EXTRACT_MACROS */
596 #endif /* DEBUG */
598 /* If DEBUG is defined, Regex prints many voluminous messages about what
599 it is doing (if the variable `debug' is nonzero). If linked with the
600 main program in `iregex.c', you can enter patterns and strings
601 interactively. And if linked with the main program in `main.c' and
602 the other test files, you can run the already-written tests. */
604 #ifdef DEBUG
606 /* We use standard I/O for debugging. */
607 # include <stdio.h>
609 /* It is useful to test things that ``must'' be true when debugging. */
610 # include <assert.h>
612 static int debug = 0;
614 # define DEBUG_STATEMENT(e) e
615 # define DEBUG_PRINT1(x) if (debug) printf (x)
616 # define DEBUG_PRINT2(x1, x2) if (debug) printf (x1, x2)
617 # define DEBUG_PRINT3(x1, x2, x3) if (debug) printf (x1, x2, x3)
618 # define DEBUG_PRINT4(x1, x2, x3, x4) if (debug) printf (x1, x2, x3, x4)
619 # define DEBUG_PRINT_COMPILED_PATTERN(p, s, e) \
620 if (debug) print_partial_compiled_pattern (s, e)
621 # define DEBUG_PRINT_DOUBLE_STRING(w, s1, sz1, s2, sz2) \
622 if (debug) print_double_string (w, s1, sz1, s2, sz2)
625 /* Print the fastmap in human-readable form. */
627 void
628 print_fastmap (fastmap)
629 char *fastmap;
631 unsigned was_a_range = 0;
632 unsigned i = 0;
634 while (i < (1 << BYTEWIDTH))
636 if (fastmap[i++])
638 was_a_range = 0;
639 putchar (i - 1);
640 while (i < (1 << BYTEWIDTH) && fastmap[i])
642 was_a_range = 1;
643 i++;
645 if (was_a_range)
647 printf ("-");
648 putchar (i - 1);
652 putchar ('\n');
656 /* Print a compiled pattern string in human-readable form, starting at
657 the START pointer into it and ending just before the pointer END. */
659 void
660 print_partial_compiled_pattern (start, end)
661 unsigned char *start;
662 unsigned char *end;
664 int mcnt, mcnt2;
665 unsigned char *p1;
666 unsigned char *p = start;
667 unsigned char *pend = end;
669 if (start == NULL)
671 printf ("(null)\n");
672 return;
675 /* Loop over pattern commands. */
676 while (p < pend)
678 printf ("%d:\t", p - start);
680 switch ((re_opcode_t) *p++)
682 case no_op:
683 printf ("/no_op");
684 break;
686 case exactn:
687 mcnt = *p++;
688 printf ("/exactn/%d", mcnt);
691 putchar ('/');
692 putchar (*p++);
694 while (--mcnt);
695 break;
697 case start_memory:
698 mcnt = *p++;
699 printf ("/start_memory/%d/%d", mcnt, *p++);
700 break;
702 case stop_memory:
703 mcnt = *p++;
704 printf ("/stop_memory/%d/%d", mcnt, *p++);
705 break;
707 case duplicate:
708 printf ("/duplicate/%d", *p++);
709 break;
711 case anychar:
712 printf ("/anychar");
713 break;
715 case charset:
716 case charset_not:
718 register int c, last = -100;
719 register int in_range = 0;
721 printf ("/charset [%s",
722 (re_opcode_t) *(p - 1) == charset_not ? "^" : "");
724 assert (p + *p < pend);
726 for (c = 0; c < 256; c++)
727 if (c / 8 < *p
728 && (p[1 + (c/8)] & (1 << (c % 8))))
730 /* Are we starting a range? */
731 if (last + 1 == c && ! in_range)
733 putchar ('-');
734 in_range = 1;
736 /* Have we broken a range? */
737 else if (last + 1 != c && in_range)
739 putchar (last);
740 in_range = 0;
743 if (! in_range)
744 putchar (c);
746 last = c;
749 if (in_range)
750 putchar (last);
752 putchar (']');
754 p += 1 + *p;
756 break;
758 case begline:
759 printf ("/begline");
760 break;
762 case endline:
763 printf ("/endline");
764 break;
766 case on_failure_jump:
767 extract_number_and_incr (&mcnt, &p);
768 printf ("/on_failure_jump to %d", p + mcnt - start);
769 break;
771 case on_failure_keep_string_jump:
772 extract_number_and_incr (&mcnt, &p);
773 printf ("/on_failure_keep_string_jump to %d", p + mcnt - start);
774 break;
776 case dummy_failure_jump:
777 extract_number_and_incr (&mcnt, &p);
778 printf ("/dummy_failure_jump to %d", p + mcnt - start);
779 break;
781 case push_dummy_failure:
782 printf ("/push_dummy_failure");
783 break;
785 case maybe_pop_jump:
786 extract_number_and_incr (&mcnt, &p);
787 printf ("/maybe_pop_jump to %d", p + mcnt - start);
788 break;
790 case pop_failure_jump:
791 extract_number_and_incr (&mcnt, &p);
792 printf ("/pop_failure_jump to %d", p + mcnt - start);
793 break;
795 case jump_past_alt:
796 extract_number_and_incr (&mcnt, &p);
797 printf ("/jump_past_alt to %d", p + mcnt - start);
798 break;
800 case jump:
801 extract_number_and_incr (&mcnt, &p);
802 printf ("/jump to %d", p + mcnt - start);
803 break;
805 case succeed_n:
806 extract_number_and_incr (&mcnt, &p);
807 p1 = p + mcnt;
808 extract_number_and_incr (&mcnt2, &p);
809 printf ("/succeed_n to %d, %d times", p1 - start, mcnt2);
810 break;
812 case jump_n:
813 extract_number_and_incr (&mcnt, &p);
814 p1 = p + mcnt;
815 extract_number_and_incr (&mcnt2, &p);
816 printf ("/jump_n to %d, %d times", p1 - start, mcnt2);
817 break;
819 case set_number_at:
820 extract_number_and_incr (&mcnt, &p);
821 p1 = p + mcnt;
822 extract_number_and_incr (&mcnt2, &p);
823 printf ("/set_number_at location %d to %d", p1 - start, mcnt2);
824 break;
826 case wordbound:
827 printf ("/wordbound");
828 break;
830 case notwordbound:
831 printf ("/notwordbound");
832 break;
834 case wordbeg:
835 printf ("/wordbeg");
836 break;
838 case wordend:
839 printf ("/wordend");
841 # ifdef emacs
842 case before_dot:
843 printf ("/before_dot");
844 break;
846 case at_dot:
847 printf ("/at_dot");
848 break;
850 case after_dot:
851 printf ("/after_dot");
852 break;
854 case syntaxspec:
855 printf ("/syntaxspec");
856 mcnt = *p++;
857 printf ("/%d", mcnt);
858 break;
860 case notsyntaxspec:
861 printf ("/notsyntaxspec");
862 mcnt = *p++;
863 printf ("/%d", mcnt);
864 break;
865 # endif /* emacs */
867 case wordchar:
868 printf ("/wordchar");
869 break;
871 case notwordchar:
872 printf ("/notwordchar");
873 break;
875 case begbuf:
876 printf ("/begbuf");
877 break;
879 case endbuf:
880 printf ("/endbuf");
881 break;
883 default:
884 printf ("?%d", *(p-1));
887 putchar ('\n');
890 printf ("%d:\tend of pattern.\n", p - start);
894 void
895 print_compiled_pattern (bufp)
896 struct re_pattern_buffer *bufp;
898 unsigned char *buffer = bufp->buffer;
900 print_partial_compiled_pattern (buffer, buffer + bufp->used);
901 printf ("%ld bytes used/%ld bytes allocated.\n",
902 bufp->used, bufp->allocated);
904 if (bufp->fastmap_accurate && bufp->fastmap)
906 printf ("fastmap: ");
907 print_fastmap (bufp->fastmap);
910 printf ("re_nsub: %d\t", bufp->re_nsub);
911 printf ("regs_alloc: %d\t", bufp->regs_allocated);
912 printf ("can_be_null: %d\t", bufp->can_be_null);
913 printf ("newline_anchor: %d\n", bufp->newline_anchor);
914 printf ("no_sub: %d\t", bufp->no_sub);
915 printf ("not_bol: %d\t", bufp->not_bol);
916 printf ("not_eol: %d\t", bufp->not_eol);
917 printf ("syntax: %lx\n", bufp->syntax);
918 /* Perhaps we should print the translate table? */
922 void
923 print_double_string (where, string1, size1, string2, size2)
924 const char *where;
925 const char *string1;
926 const char *string2;
927 int size1;
928 int size2;
930 int this_char;
932 if (where == NULL)
933 printf ("(null)");
934 else
936 if (FIRST_STRING_P (where))
938 for (this_char = where - string1; this_char < size1; this_char++)
939 putchar (string1[this_char]);
941 where = string2;
944 for (this_char = where - string2; this_char < size2; this_char++)
945 putchar (string2[this_char]);
949 void
950 printchar (c)
951 int c;
953 putc (c, stderr);
956 #else /* not DEBUG */
958 # undef assert
959 # define assert(e)
961 # define DEBUG_STATEMENT(e)
962 # define DEBUG_PRINT1(x)
963 # define DEBUG_PRINT2(x1, x2)
964 # define DEBUG_PRINT3(x1, x2, x3)
965 # define DEBUG_PRINT4(x1, x2, x3, x4)
966 # define DEBUG_PRINT_COMPILED_PATTERN(p, s, e)
967 # define DEBUG_PRINT_DOUBLE_STRING(w, s1, sz1, s2, sz2)
969 #endif /* not DEBUG */
971 /* Set by `re_set_syntax' to the current regexp syntax to recognize. Can
972 also be assigned to arbitrarily: each pattern buffer stores its own
973 syntax, so it can be changed between regex compilations. */
974 /* This has no initializer because initialized variables in Emacs
975 become read-only after dumping. */
976 reg_syntax_t re_syntax_options;
979 /* Specify the precise syntax of regexps for compilation. This provides
980 for compatibility for various utilities which historically have
981 different, incompatible syntaxes.
983 The argument SYNTAX is a bit mask comprised of the various bits
984 defined in regex.h. We return the old syntax. */
986 reg_syntax_t
987 re_set_syntax (syntax)
988 reg_syntax_t syntax;
990 reg_syntax_t ret = re_syntax_options;
992 re_syntax_options = syntax;
993 #ifdef DEBUG
994 if (syntax & RE_DEBUG)
995 debug = 1;
996 else if (debug) /* was on but now is not */
997 debug = 0;
998 #endif /* DEBUG */
999 return ret;
1001 #ifdef _LIBC
1002 weak_alias (__re_set_syntax, re_set_syntax)
1003 #endif
1005 /* This table gives an error message for each of the error codes listed
1006 in regex.h. Obviously the order here has to be same as there.
1007 POSIX doesn't require that we do anything for REG_NOERROR,
1008 but why not be nice? */
1010 static const char *re_error_msgid[] =
1012 gettext_noop ("Success"), /* REG_NOERROR */
1013 gettext_noop ("No match"), /* REG_NOMATCH */
1014 gettext_noop ("Invalid regular expression"), /* REG_BADPAT */
1015 gettext_noop ("Invalid collation character"), /* REG_ECOLLATE */
1016 gettext_noop ("Invalid character class name"), /* REG_ECTYPE */
1017 gettext_noop ("Trailing backslash"), /* REG_EESCAPE */
1018 gettext_noop ("Invalid back reference"), /* REG_ESUBREG */
1019 gettext_noop ("Unmatched [ or [^"), /* REG_EBRACK */
1020 gettext_noop ("Unmatched ( or \\("), /* REG_EPAREN */
1021 gettext_noop ("Unmatched \\{"), /* REG_EBRACE */
1022 gettext_noop ("Invalid content of \\{\\}"), /* REG_BADBR */
1023 gettext_noop ("Invalid range end"), /* REG_ERANGE */
1024 gettext_noop ("Memory exhausted"), /* REG_ESPACE */
1025 gettext_noop ("Invalid preceding regular expression"), /* REG_BADRPT */
1026 gettext_noop ("Premature end of regular expression"), /* REG_EEND */
1027 gettext_noop ("Regular expression too big"), /* REG_ESIZE */
1028 gettext_noop ("Unmatched ) or \\)"), /* REG_ERPAREN */
1031 /* Avoiding alloca during matching, to placate r_alloc. */
1033 /* Define MATCH_MAY_ALLOCATE unless we need to make sure that the
1034 searching and matching functions should not call alloca. On some
1035 systems, alloca is implemented in terms of malloc, and if we're
1036 using the relocating allocator routines, then malloc could cause a
1037 relocation, which might (if the strings being searched are in the
1038 ralloc heap) shift the data out from underneath the regexp
1039 routines.
1041 Here's another reason to avoid allocation: Emacs
1042 processes input from X in a signal handler; processing X input may
1043 call malloc; if input arrives while a matching routine is calling
1044 malloc, then we're scrod. But Emacs can't just block input while
1045 calling matching routines; then we don't notice interrupts when
1046 they come in. So, Emacs blocks input around all regexp calls
1047 except the matching calls, which it leaves unprotected, in the
1048 faith that they will not malloc. */
1050 /* Normally, this is fine. */
1051 #define MATCH_MAY_ALLOCATE
1053 /* When using GNU C, we are not REALLY using the C alloca, no matter
1054 what config.h may say. So don't take precautions for it. */
1055 #ifdef __GNUC__
1056 # undef C_ALLOCA
1057 #endif
1059 /* The match routines may not allocate if (1) they would do it with malloc
1060 and (2) it's not safe for them to use malloc.
1061 Note that if REL_ALLOC is defined, matching would not use malloc for the
1062 failure stack, but we would still use it for the register vectors;
1063 so REL_ALLOC should not affect this. */
1064 #if (defined C_ALLOCA || defined REGEX_MALLOC) && defined emacs
1065 # undef MATCH_MAY_ALLOCATE
1066 #endif
1069 /* Failure stack declarations and macros; both re_compile_fastmap and
1070 re_match_2 use a failure stack. These have to be macros because of
1071 REGEX_ALLOCATE_STACK. */
1074 /* Number of failure points for which to initially allocate space
1075 when matching. If this number is exceeded, we allocate more
1076 space, so it is not a hard limit. */
1077 #ifndef INIT_FAILURE_ALLOC
1078 # define INIT_FAILURE_ALLOC 5
1079 #endif
1081 /* Roughly the maximum number of failure points on the stack. Would be
1082 exactly that if always used MAX_FAILURE_ITEMS items each time we failed.
1083 This is a variable only so users of regex can assign to it; we never
1084 change it ourselves. */
1086 #ifdef INT_IS_16BIT
1088 # if defined MATCH_MAY_ALLOCATE
1089 /* 4400 was enough to cause a crash on Alpha OSF/1,
1090 whose default stack limit is 2mb. */
1091 long int re_max_failures = 4000;
1092 # else
1093 long int re_max_failures = 2000;
1094 # endif
1096 union fail_stack_elt
1098 unsigned char *pointer;
1099 long int integer;
1102 typedef union fail_stack_elt fail_stack_elt_t;
1104 typedef struct
1106 fail_stack_elt_t *stack;
1107 unsigned long int size;
1108 unsigned long int avail; /* Offset of next open position. */
1109 } fail_stack_type;
1111 #else /* not INT_IS_16BIT */
1113 # if defined MATCH_MAY_ALLOCATE
1114 /* 4400 was enough to cause a crash on Alpha OSF/1,
1115 whose default stack limit is 2mb. */
1116 int re_max_failures = 20000;
1117 # else
1118 int re_max_failures = 2000;
1119 # endif
1121 union fail_stack_elt
1123 unsigned char *pointer;
1124 int integer;
1127 typedef union fail_stack_elt fail_stack_elt_t;
1129 typedef struct
1131 fail_stack_elt_t *stack;
1132 unsigned size;
1133 unsigned avail; /* Offset of next open position. */
1134 } fail_stack_type;
1136 #endif /* INT_IS_16BIT */
1138 #define FAIL_STACK_EMPTY() (fail_stack.avail == 0)
1139 #define FAIL_STACK_PTR_EMPTY() (fail_stack_ptr->avail == 0)
1140 #define FAIL_STACK_FULL() (fail_stack.avail == fail_stack.size)
1143 /* Define macros to initialize and free the failure stack.
1144 Do `return -2' if the alloc fails. */
1146 #ifdef MATCH_MAY_ALLOCATE
1147 # define INIT_FAIL_STACK() \
1148 do { \
1149 fail_stack.stack = (fail_stack_elt_t *) \
1150 REGEX_ALLOCATE_STACK (INIT_FAILURE_ALLOC * sizeof (fail_stack_elt_t)); \
1152 if (fail_stack.stack == NULL) \
1153 return -2; \
1155 fail_stack.size = INIT_FAILURE_ALLOC; \
1156 fail_stack.avail = 0; \
1157 } while (0)
1159 # define RESET_FAIL_STACK() REGEX_FREE_STACK (fail_stack.stack)
1160 #else
1161 # define INIT_FAIL_STACK() \
1162 do { \
1163 fail_stack.avail = 0; \
1164 } while (0)
1166 # define RESET_FAIL_STACK()
1167 #endif
1170 /* Double the size of FAIL_STACK, up to approximately `re_max_failures' items.
1172 Return 1 if succeeds, and 0 if either ran out of memory
1173 allocating space for it or it was already too large.
1175 REGEX_REALLOCATE_STACK requires `destination' be declared. */
1177 #define DOUBLE_FAIL_STACK(fail_stack) \
1178 ((fail_stack).size > (unsigned) (re_max_failures * MAX_FAILURE_ITEMS) \
1179 ? 0 \
1180 : ((fail_stack).stack = (fail_stack_elt_t *) \
1181 REGEX_REALLOCATE_STACK ((fail_stack).stack, \
1182 (fail_stack).size * sizeof (fail_stack_elt_t), \
1183 ((fail_stack).size << 1) * sizeof (fail_stack_elt_t)), \
1185 (fail_stack).stack == NULL \
1186 ? 0 \
1187 : ((fail_stack).size <<= 1, \
1188 1)))
1191 /* Push pointer POINTER on FAIL_STACK.
1192 Return 1 if was able to do so and 0 if ran out of memory allocating
1193 space to do so. */
1194 #define PUSH_PATTERN_OP(POINTER, FAIL_STACK) \
1195 ((FAIL_STACK_FULL () \
1196 && !DOUBLE_FAIL_STACK (FAIL_STACK)) \
1197 ? 0 \
1198 : ((FAIL_STACK).stack[(FAIL_STACK).avail++].pointer = POINTER, \
1201 /* Push a pointer value onto the failure stack.
1202 Assumes the variable `fail_stack'. Probably should only
1203 be called from within `PUSH_FAILURE_POINT'. */
1204 #define PUSH_FAILURE_POINTER(item) \
1205 fail_stack.stack[fail_stack.avail++].pointer = (unsigned char *) (item)
1207 /* This pushes an integer-valued item onto the failure stack.
1208 Assumes the variable `fail_stack'. Probably should only
1209 be called from within `PUSH_FAILURE_POINT'. */
1210 #define PUSH_FAILURE_INT(item) \
1211 fail_stack.stack[fail_stack.avail++].integer = (item)
1213 /* Push a fail_stack_elt_t value onto the failure stack.
1214 Assumes the variable `fail_stack'. Probably should only
1215 be called from within `PUSH_FAILURE_POINT'. */
1216 #define PUSH_FAILURE_ELT(item) \
1217 fail_stack.stack[fail_stack.avail++] = (item)
1219 /* These three POP... operations complement the three PUSH... operations.
1220 All assume that `fail_stack' is nonempty. */
1221 #define POP_FAILURE_POINTER() fail_stack.stack[--fail_stack.avail].pointer
1222 #define POP_FAILURE_INT() fail_stack.stack[--fail_stack.avail].integer
1223 #define POP_FAILURE_ELT() fail_stack.stack[--fail_stack.avail]
1225 /* Used to omit pushing failure point id's when we're not debugging. */
1226 #ifdef DEBUG
1227 # define DEBUG_PUSH PUSH_FAILURE_INT
1228 # define DEBUG_POP(item_addr) *(item_addr) = POP_FAILURE_INT ()
1229 #else
1230 # define DEBUG_PUSH(item)
1231 # define DEBUG_POP(item_addr)
1232 #endif
1235 /* Push the information about the state we will need
1236 if we ever fail back to it.
1238 Requires variables fail_stack, regstart, regend, reg_info, and
1239 num_regs_pushed be declared. DOUBLE_FAIL_STACK requires `destination'
1240 be declared.
1242 Does `return FAILURE_CODE' if runs out of memory. */
1244 #define PUSH_FAILURE_POINT(pattern_place, string_place, failure_code) \
1245 do { \
1246 char *destination; \
1247 /* Must be int, so when we don't save any registers, the arithmetic \
1248 of 0 + -1 isn't done as unsigned. */ \
1249 /* Can't be int, since there is not a shred of a guarantee that int \
1250 is wide enough to hold a value of something to which pointer can \
1251 be assigned */ \
1252 active_reg_t this_reg; \
1254 DEBUG_STATEMENT (failure_id++); \
1255 DEBUG_STATEMENT (nfailure_points_pushed++); \
1256 DEBUG_PRINT2 ("\nPUSH_FAILURE_POINT #%u:\n", failure_id); \
1257 DEBUG_PRINT2 (" Before push, next avail: %d\n", (fail_stack).avail);\
1258 DEBUG_PRINT2 (" size: %d\n", (fail_stack).size);\
1260 DEBUG_PRINT2 (" slots needed: %ld\n", NUM_FAILURE_ITEMS); \
1261 DEBUG_PRINT2 (" available: %d\n", REMAINING_AVAIL_SLOTS); \
1263 /* Ensure we have enough space allocated for what we will push. */ \
1264 while (REMAINING_AVAIL_SLOTS < NUM_FAILURE_ITEMS) \
1266 if (!DOUBLE_FAIL_STACK (fail_stack)) \
1267 return failure_code; \
1269 DEBUG_PRINT2 ("\n Doubled stack; size now: %d\n", \
1270 (fail_stack).size); \
1271 DEBUG_PRINT2 (" slots available: %d\n", REMAINING_AVAIL_SLOTS);\
1274 /* Push the info, starting with the registers. */ \
1275 DEBUG_PRINT1 ("\n"); \
1277 if (1) \
1278 for (this_reg = lowest_active_reg; this_reg <= highest_active_reg; \
1279 this_reg++) \
1281 DEBUG_PRINT2 (" Pushing reg: %lu\n", this_reg); \
1282 DEBUG_STATEMENT (num_regs_pushed++); \
1284 DEBUG_PRINT2 (" start: %p\n", regstart[this_reg]); \
1285 PUSH_FAILURE_POINTER (regstart[this_reg]); \
1287 DEBUG_PRINT2 (" end: %p\n", regend[this_reg]); \
1288 PUSH_FAILURE_POINTER (regend[this_reg]); \
1290 DEBUG_PRINT2 (" info: %p\n ", \
1291 reg_info[this_reg].word.pointer); \
1292 DEBUG_PRINT2 (" match_null=%d", \
1293 REG_MATCH_NULL_STRING_P (reg_info[this_reg])); \
1294 DEBUG_PRINT2 (" active=%d", IS_ACTIVE (reg_info[this_reg])); \
1295 DEBUG_PRINT2 (" matched_something=%d", \
1296 MATCHED_SOMETHING (reg_info[this_reg])); \
1297 DEBUG_PRINT2 (" ever_matched=%d", \
1298 EVER_MATCHED_SOMETHING (reg_info[this_reg])); \
1299 DEBUG_PRINT1 ("\n"); \
1300 PUSH_FAILURE_ELT (reg_info[this_reg].word); \
1303 DEBUG_PRINT2 (" Pushing low active reg: %ld\n", lowest_active_reg);\
1304 PUSH_FAILURE_INT (lowest_active_reg); \
1306 DEBUG_PRINT2 (" Pushing high active reg: %ld\n", highest_active_reg);\
1307 PUSH_FAILURE_INT (highest_active_reg); \
1309 DEBUG_PRINT2 (" Pushing pattern %p:\n", pattern_place); \
1310 DEBUG_PRINT_COMPILED_PATTERN (bufp, pattern_place, pend); \
1311 PUSH_FAILURE_POINTER (pattern_place); \
1313 DEBUG_PRINT2 (" Pushing string %p: `", string_place); \
1314 DEBUG_PRINT_DOUBLE_STRING (string_place, string1, size1, string2, \
1315 size2); \
1316 DEBUG_PRINT1 ("'\n"); \
1317 PUSH_FAILURE_POINTER (string_place); \
1319 DEBUG_PRINT2 (" Pushing failure id: %u\n", failure_id); \
1320 DEBUG_PUSH (failure_id); \
1321 } while (0)
1323 /* This is the number of items that are pushed and popped on the stack
1324 for each register. */
1325 #define NUM_REG_ITEMS 3
1327 /* Individual items aside from the registers. */
1328 #ifdef DEBUG
1329 # define NUM_NONREG_ITEMS 5 /* Includes failure point id. */
1330 #else
1331 # define NUM_NONREG_ITEMS 4
1332 #endif
1334 /* We push at most this many items on the stack. */
1335 /* We used to use (num_regs - 1), which is the number of registers
1336 this regexp will save; but that was changed to 5
1337 to avoid stack overflow for a regexp with lots of parens. */
1338 #define MAX_FAILURE_ITEMS (5 * NUM_REG_ITEMS + NUM_NONREG_ITEMS)
1340 /* We actually push this many items. */
1341 #define NUM_FAILURE_ITEMS \
1342 (((0 \
1343 ? 0 : highest_active_reg - lowest_active_reg + 1) \
1344 * NUM_REG_ITEMS) \
1345 + NUM_NONREG_ITEMS)
1347 /* How many items can still be added to the stack without overflowing it. */
1348 #define REMAINING_AVAIL_SLOTS ((fail_stack).size - (fail_stack).avail)
1351 /* Pops what PUSH_FAIL_STACK pushes.
1353 We restore into the parameters, all of which should be lvalues:
1354 STR -- the saved data position.
1355 PAT -- the saved pattern position.
1356 LOW_REG, HIGH_REG -- the highest and lowest active registers.
1357 REGSTART, REGEND -- arrays of string positions.
1358 REG_INFO -- array of information about each subexpression.
1360 Also assumes the variables `fail_stack' and (if debugging), `bufp',
1361 `pend', `string1', `size1', `string2', and `size2'. */
1363 #define POP_FAILURE_POINT(str, pat, low_reg, high_reg, regstart, regend, reg_info)\
1365 DEBUG_STATEMENT (unsigned failure_id;) \
1366 active_reg_t this_reg; \
1367 const unsigned char *string_temp; \
1369 assert (!FAIL_STACK_EMPTY ()); \
1371 /* Remove failure points and point to how many regs pushed. */ \
1372 DEBUG_PRINT1 ("POP_FAILURE_POINT:\n"); \
1373 DEBUG_PRINT2 (" Before pop, next avail: %d\n", fail_stack.avail); \
1374 DEBUG_PRINT2 (" size: %d\n", fail_stack.size); \
1376 assert (fail_stack.avail >= NUM_NONREG_ITEMS); \
1378 DEBUG_POP (&failure_id); \
1379 DEBUG_PRINT2 (" Popping failure id: %u\n", failure_id); \
1381 /* If the saved string location is NULL, it came from an \
1382 on_failure_keep_string_jump opcode, and we want to throw away the \
1383 saved NULL, thus retaining our current position in the string. */ \
1384 string_temp = POP_FAILURE_POINTER (); \
1385 if (string_temp != NULL) \
1386 str = (const char *) string_temp; \
1388 DEBUG_PRINT2 (" Popping string %p: `", str); \
1389 DEBUG_PRINT_DOUBLE_STRING (str, string1, size1, string2, size2); \
1390 DEBUG_PRINT1 ("'\n"); \
1392 pat = (unsigned char *) POP_FAILURE_POINTER (); \
1393 DEBUG_PRINT2 (" Popping pattern %p:\n", pat); \
1394 DEBUG_PRINT_COMPILED_PATTERN (bufp, pat, pend); \
1396 /* Restore register info. */ \
1397 high_reg = (active_reg_t) POP_FAILURE_INT (); \
1398 DEBUG_PRINT2 (" Popping high active reg: %ld\n", high_reg); \
1400 low_reg = (active_reg_t) POP_FAILURE_INT (); \
1401 DEBUG_PRINT2 (" Popping low active reg: %ld\n", low_reg); \
1403 if (1) \
1404 for (this_reg = high_reg; this_reg >= low_reg; this_reg--) \
1406 DEBUG_PRINT2 (" Popping reg: %ld\n", this_reg); \
1408 reg_info[this_reg].word = POP_FAILURE_ELT (); \
1409 DEBUG_PRINT2 (" info: %p\n", \
1410 reg_info[this_reg].word.pointer); \
1412 regend[this_reg] = (const char *) POP_FAILURE_POINTER (); \
1413 DEBUG_PRINT2 (" end: %p\n", regend[this_reg]); \
1415 regstart[this_reg] = (const char *) POP_FAILURE_POINTER (); \
1416 DEBUG_PRINT2 (" start: %p\n", regstart[this_reg]); \
1418 else \
1420 for (this_reg = highest_active_reg; this_reg > high_reg; this_reg--) \
1422 reg_info[this_reg].word.integer = 0; \
1423 regend[this_reg] = 0; \
1424 regstart[this_reg] = 0; \
1426 highest_active_reg = high_reg; \
1429 set_regs_matched_done = 0; \
1430 DEBUG_STATEMENT (nfailure_points_popped++); \
1431 } /* POP_FAILURE_POINT */
1435 /* Structure for per-register (a.k.a. per-group) information.
1436 Other register information, such as the
1437 starting and ending positions (which are addresses), and the list of
1438 inner groups (which is a bits list) are maintained in separate
1439 variables.
1441 We are making a (strictly speaking) nonportable assumption here: that
1442 the compiler will pack our bit fields into something that fits into
1443 the type of `word', i.e., is something that fits into one item on the
1444 failure stack. */
1447 /* Declarations and macros for re_match_2. */
1449 typedef union
1451 fail_stack_elt_t word;
1452 struct
1454 /* This field is one if this group can match the empty string,
1455 zero if not. If not yet determined, `MATCH_NULL_UNSET_VALUE'. */
1456 #define MATCH_NULL_UNSET_VALUE 3
1457 unsigned match_null_string_p : 2;
1458 unsigned is_active : 1;
1459 unsigned matched_something : 1;
1460 unsigned ever_matched_something : 1;
1461 } bits;
1462 } register_info_type;
1464 #define REG_MATCH_NULL_STRING_P(R) ((R).bits.match_null_string_p)
1465 #define IS_ACTIVE(R) ((R).bits.is_active)
1466 #define MATCHED_SOMETHING(R) ((R).bits.matched_something)
1467 #define EVER_MATCHED_SOMETHING(R) ((R).bits.ever_matched_something)
1470 /* Call this when have matched a real character; it sets `matched' flags
1471 for the subexpressions which we are currently inside. Also records
1472 that those subexprs have matched. */
1473 #define SET_REGS_MATCHED() \
1474 do \
1476 if (!set_regs_matched_done) \
1478 active_reg_t r; \
1479 set_regs_matched_done = 1; \
1480 for (r = lowest_active_reg; r <= highest_active_reg; r++) \
1482 MATCHED_SOMETHING (reg_info[r]) \
1483 = EVER_MATCHED_SOMETHING (reg_info[r]) \
1484 = 1; \
1488 while (0)
1490 /* Registers are set to a sentinel when they haven't yet matched. */
1491 static char reg_unset_dummy;
1492 #define REG_UNSET_VALUE (&reg_unset_dummy)
1493 #define REG_UNSET(e) ((e) == REG_UNSET_VALUE)
1495 /* Subroutine declarations and macros for regex_compile. */
1497 static reg_errcode_t regex_compile _RE_ARGS ((const char *pattern, size_t size,
1498 reg_syntax_t syntax,
1499 struct re_pattern_buffer *bufp));
1500 static void store_op1 _RE_ARGS ((re_opcode_t op, unsigned char *loc, int arg));
1501 static void store_op2 _RE_ARGS ((re_opcode_t op, unsigned char *loc,
1502 int arg1, int arg2));
1503 static void insert_op1 _RE_ARGS ((re_opcode_t op, unsigned char *loc,
1504 int arg, unsigned char *end));
1505 static void insert_op2 _RE_ARGS ((re_opcode_t op, unsigned char *loc,
1506 int arg1, int arg2, unsigned char *end));
1507 static boolean at_begline_loc_p _RE_ARGS ((const char *pattern, const char *p,
1508 reg_syntax_t syntax));
1509 static boolean at_endline_loc_p _RE_ARGS ((const char *p, const char *pend,
1510 reg_syntax_t syntax));
1511 static reg_errcode_t compile_range _RE_ARGS ((const char **p_ptr,
1512 const char *pend,
1513 char *translate,
1514 reg_syntax_t syntax,
1515 unsigned char *b));
1517 /* Fetch the next character in the uncompiled pattern---translating it
1518 if necessary. Also cast from a signed character in the constant
1519 string passed to us by the user to an unsigned char that we can use
1520 as an array index (in, e.g., `translate'). */
1521 #ifndef PATFETCH
1522 # define PATFETCH(c) \
1523 do {if (p == pend) return REG_EEND; \
1524 c = (unsigned char) *p++; \
1525 if (translate) c = (unsigned char) translate[c]; \
1526 } while (0)
1527 #endif
1529 /* Fetch the next character in the uncompiled pattern, with no
1530 translation. */
1531 #define PATFETCH_RAW(c) \
1532 do {if (p == pend) return REG_EEND; \
1533 c = (unsigned char) *p++; \
1534 } while (0)
1536 /* Go backwards one character in the pattern. */
1537 #define PATUNFETCH p--
1540 /* If `translate' is non-null, return translate[D], else just D. We
1541 cast the subscript to translate because some data is declared as
1542 `char *', to avoid warnings when a string constant is passed. But
1543 when we use a character as a subscript we must make it unsigned. */
1544 #ifndef TRANSLATE
1545 # define TRANSLATE(d) \
1546 (translate ? (char) translate[(unsigned char) (d)] : (d))
1547 #endif
1550 /* Macros for outputting the compiled pattern into `buffer'. */
1552 /* If the buffer isn't allocated when it comes in, use this. */
1553 #define INIT_BUF_SIZE 32
1555 /* Make sure we have at least N more bytes of space in buffer. */
1556 #define GET_BUFFER_SPACE(n) \
1557 while ((unsigned long) (b - bufp->buffer + (n)) > bufp->allocated) \
1558 EXTEND_BUFFER ()
1560 /* Make sure we have one more byte of buffer space and then add C to it. */
1561 #define BUF_PUSH(c) \
1562 do { \
1563 GET_BUFFER_SPACE (1); \
1564 *b++ = (unsigned char) (c); \
1565 } while (0)
1568 /* Ensure we have two more bytes of buffer space and then append C1 and C2. */
1569 #define BUF_PUSH_2(c1, c2) \
1570 do { \
1571 GET_BUFFER_SPACE (2); \
1572 *b++ = (unsigned char) (c1); \
1573 *b++ = (unsigned char) (c2); \
1574 } while (0)
1577 /* As with BUF_PUSH_2, except for three bytes. */
1578 #define BUF_PUSH_3(c1, c2, c3) \
1579 do { \
1580 GET_BUFFER_SPACE (3); \
1581 *b++ = (unsigned char) (c1); \
1582 *b++ = (unsigned char) (c2); \
1583 *b++ = (unsigned char) (c3); \
1584 } while (0)
1587 /* Store a jump with opcode OP at LOC to location TO. We store a
1588 relative address offset by the three bytes the jump itself occupies. */
1589 #define STORE_JUMP(op, loc, to) \
1590 store_op1 (op, loc, (int) ((to) - (loc) - 3))
1592 /* Likewise, for a two-argument jump. */
1593 #define STORE_JUMP2(op, loc, to, arg) \
1594 store_op2 (op, loc, (int) ((to) - (loc) - 3), arg)
1596 /* Like `STORE_JUMP', but for inserting. Assume `b' is the buffer end. */
1597 #define INSERT_JUMP(op, loc, to) \
1598 insert_op1 (op, loc, (int) ((to) - (loc) - 3), b)
1600 /* Like `STORE_JUMP2', but for inserting. Assume `b' is the buffer end. */
1601 #define INSERT_JUMP2(op, loc, to, arg) \
1602 insert_op2 (op, loc, (int) ((to) - (loc) - 3), arg, b)
1605 /* This is not an arbitrary limit: the arguments which represent offsets
1606 into the pattern are two bytes long. So if 2^16 bytes turns out to
1607 be too small, many things would have to change. */
1608 /* Any other compiler which, like MSC, has allocation limit below 2^16
1609 bytes will have to use approach similar to what was done below for
1610 MSC and drop MAX_BUF_SIZE a bit. Otherwise you may end up
1611 reallocating to 0 bytes. Such thing is not going to work too well.
1612 You have been warned!! */
1613 #if defined _MSC_VER && !defined WIN32
1614 /* Microsoft C 16-bit versions limit malloc to approx 65512 bytes.
1615 The REALLOC define eliminates a flurry of conversion warnings,
1616 but is not required. */
1617 # define MAX_BUF_SIZE 65500L
1618 # define REALLOC(p,s) realloc ((p), (size_t) (s))
1619 #else
1620 # define MAX_BUF_SIZE (1L << 16)
1621 # define REALLOC(p,s) realloc ((p), (s))
1622 #endif
1624 /* Extend the buffer by twice its current size via realloc and
1625 reset the pointers that pointed into the old block to point to the
1626 correct places in the new one. If extending the buffer results in it
1627 being larger than MAX_BUF_SIZE, then flag memory exhausted. */
1628 #define EXTEND_BUFFER() \
1629 do { \
1630 unsigned char *old_buffer = bufp->buffer; \
1631 if (bufp->allocated == MAX_BUF_SIZE) \
1632 return REG_ESIZE; \
1633 bufp->allocated <<= 1; \
1634 if (bufp->allocated > MAX_BUF_SIZE) \
1635 bufp->allocated = MAX_BUF_SIZE; \
1636 bufp->buffer = (unsigned char *) REALLOC (bufp->buffer, bufp->allocated);\
1637 if (bufp->buffer == NULL) \
1638 return REG_ESPACE; \
1639 /* If the buffer moved, move all the pointers into it. */ \
1640 if (old_buffer != bufp->buffer) \
1642 b = (b - old_buffer) + bufp->buffer; \
1643 begalt = (begalt - old_buffer) + bufp->buffer; \
1644 if (fixup_alt_jump) \
1645 fixup_alt_jump = (fixup_alt_jump - old_buffer) + bufp->buffer;\
1646 if (laststart) \
1647 laststart = (laststart - old_buffer) + bufp->buffer; \
1648 if (pending_exact) \
1649 pending_exact = (pending_exact - old_buffer) + bufp->buffer; \
1651 } while (0)
1654 /* Since we have one byte reserved for the register number argument to
1655 {start,stop}_memory, the maximum number of groups we can report
1656 things about is what fits in that byte. */
1657 #define MAX_REGNUM 255
1659 /* But patterns can have more than `MAX_REGNUM' registers. We just
1660 ignore the excess. */
1661 typedef unsigned regnum_t;
1664 /* Macros for the compile stack. */
1666 /* Since offsets can go either forwards or backwards, this type needs to
1667 be able to hold values from -(MAX_BUF_SIZE - 1) to MAX_BUF_SIZE - 1. */
1668 /* int may be not enough when sizeof(int) == 2. */
1669 typedef long pattern_offset_t;
1671 typedef struct
1673 pattern_offset_t begalt_offset;
1674 pattern_offset_t fixup_alt_jump;
1675 pattern_offset_t inner_group_offset;
1676 pattern_offset_t laststart_offset;
1677 regnum_t regnum;
1678 } compile_stack_elt_t;
1681 typedef struct
1683 compile_stack_elt_t *stack;
1684 unsigned size;
1685 unsigned avail; /* Offset of next open position. */
1686 } compile_stack_type;
1689 #define INIT_COMPILE_STACK_SIZE 32
1691 #define COMPILE_STACK_EMPTY (compile_stack.avail == 0)
1692 #define COMPILE_STACK_FULL (compile_stack.avail == compile_stack.size)
1694 /* The next available element. */
1695 #define COMPILE_STACK_TOP (compile_stack.stack[compile_stack.avail])
1698 /* Set the bit for character C in a list. */
1699 #define SET_LIST_BIT(c) \
1700 (b[((unsigned char) (c)) / BYTEWIDTH] \
1701 |= 1 << (((unsigned char) c) % BYTEWIDTH))
1704 /* Get the next unsigned number in the uncompiled pattern. */
1705 #define GET_UNSIGNED_NUMBER(num) \
1706 { if (p != pend) \
1708 PATFETCH (c); \
1709 while (ISDIGIT (c)) \
1711 if (num < 0) \
1712 num = 0; \
1713 num = num * 10 + c - '0'; \
1714 if (p == pend) \
1715 break; \
1716 PATFETCH (c); \
1721 #if defined _LIBC || WIDE_CHAR_SUPPORT
1722 /* The GNU C library provides support for user-defined character classes
1723 and the functions from ISO C amendement 1. */
1724 # ifdef CHARCLASS_NAME_MAX
1725 # define CHAR_CLASS_MAX_LENGTH CHARCLASS_NAME_MAX
1726 # else
1727 /* This shouldn't happen but some implementation might still have this
1728 problem. Use a reasonable default value. */
1729 # define CHAR_CLASS_MAX_LENGTH 256
1730 # endif
1732 # ifdef _LIBC
1733 # define IS_CHAR_CLASS(string) __wctype (string)
1734 # else
1735 # define IS_CHAR_CLASS(string) wctype (string)
1736 # endif
1737 #else
1738 # define CHAR_CLASS_MAX_LENGTH 6 /* Namely, `xdigit'. */
1740 # define IS_CHAR_CLASS(string) \
1741 (STREQ (string, "alpha") || STREQ (string, "upper") \
1742 || STREQ (string, "lower") || STREQ (string, "digit") \
1743 || STREQ (string, "alnum") || STREQ (string, "xdigit") \
1744 || STREQ (string, "space") || STREQ (string, "print") \
1745 || STREQ (string, "punct") || STREQ (string, "graph") \
1746 || STREQ (string, "cntrl") || STREQ (string, "blank"))
1747 #endif
1749 #ifndef MATCH_MAY_ALLOCATE
1751 /* If we cannot allocate large objects within re_match_2_internal,
1752 we make the fail stack and register vectors global.
1753 The fail stack, we grow to the maximum size when a regexp
1754 is compiled.
1755 The register vectors, we adjust in size each time we
1756 compile a regexp, according to the number of registers it needs. */
1758 static fail_stack_type fail_stack;
1760 /* Size with which the following vectors are currently allocated.
1761 That is so we can make them bigger as needed,
1762 but never make them smaller. */
1763 static int regs_allocated_size;
1765 static const char ** regstart, ** regend;
1766 static const char ** old_regstart, ** old_regend;
1767 static const char **best_regstart, **best_regend;
1768 static register_info_type *reg_info;
1769 static const char **reg_dummy;
1770 static register_info_type *reg_info_dummy;
1772 /* Make the register vectors big enough for NUM_REGS registers,
1773 but don't make them smaller. */
1775 static
1776 regex_grow_registers (num_regs)
1777 int num_regs;
1779 if (num_regs > regs_allocated_size)
1781 RETALLOC_IF (regstart, num_regs, const char *);
1782 RETALLOC_IF (regend, num_regs, const char *);
1783 RETALLOC_IF (old_regstart, num_regs, const char *);
1784 RETALLOC_IF (old_regend, num_regs, const char *);
1785 RETALLOC_IF (best_regstart, num_regs, const char *);
1786 RETALLOC_IF (best_regend, num_regs, const char *);
1787 RETALLOC_IF (reg_info, num_regs, register_info_type);
1788 RETALLOC_IF (reg_dummy, num_regs, const char *);
1789 RETALLOC_IF (reg_info_dummy, num_regs, register_info_type);
1791 regs_allocated_size = num_regs;
1795 #endif /* not MATCH_MAY_ALLOCATE */
1797 static boolean group_in_compile_stack _RE_ARGS ((compile_stack_type
1798 compile_stack,
1799 regnum_t regnum));
1801 /* `regex_compile' compiles PATTERN (of length SIZE) according to SYNTAX.
1802 Returns one of error codes defined in `regex.h', or zero for success.
1804 Assumes the `allocated' (and perhaps `buffer') and `translate'
1805 fields are set in BUFP on entry.
1807 If it succeeds, results are put in BUFP (if it returns an error, the
1808 contents of BUFP are undefined):
1809 `buffer' is the compiled pattern;
1810 `syntax' is set to SYNTAX;
1811 `used' is set to the length of the compiled pattern;
1812 `fastmap_accurate' is zero;
1813 `re_nsub' is the number of subexpressions in PATTERN;
1814 `not_bol' and `not_eol' are zero;
1816 The `fastmap' and `newline_anchor' fields are neither
1817 examined nor set. */
1819 /* Return, freeing storage we allocated. */
1820 #define FREE_STACK_RETURN(value) \
1821 return (free (compile_stack.stack), value)
1823 static reg_errcode_t
1824 regex_compile (pattern, size, syntax, bufp)
1825 const char *pattern;
1826 size_t size;
1827 reg_syntax_t syntax;
1828 struct re_pattern_buffer *bufp;
1830 /* We fetch characters from PATTERN here. Even though PATTERN is
1831 `char *' (i.e., signed), we declare these variables as unsigned, so
1832 they can be reliably used as array indices. */
1833 register unsigned char c, c1;
1835 /* A random temporary spot in PATTERN. */
1836 const char *p1;
1838 /* Points to the end of the buffer, where we should append. */
1839 register unsigned char *b;
1841 /* Keeps track of unclosed groups. */
1842 compile_stack_type compile_stack;
1844 /* Points to the current (ending) position in the pattern. */
1845 const char *p = pattern;
1846 const char *pend = pattern + size;
1848 /* How to translate the characters in the pattern. */
1849 RE_TRANSLATE_TYPE translate = bufp->translate;
1851 /* Address of the count-byte of the most recently inserted `exactn'
1852 command. This makes it possible to tell if a new exact-match
1853 character can be added to that command or if the character requires
1854 a new `exactn' command. */
1855 unsigned char *pending_exact = 0;
1857 /* Address of start of the most recently finished expression.
1858 This tells, e.g., postfix * where to find the start of its
1859 operand. Reset at the beginning of groups and alternatives. */
1860 unsigned char *laststart = 0;
1862 /* Address of beginning of regexp, or inside of last group. */
1863 unsigned char *begalt;
1865 /* Place in the uncompiled pattern (i.e., the {) to
1866 which to go back if the interval is invalid. */
1867 const char *beg_interval;
1869 /* Address of the place where a forward jump should go to the end of
1870 the containing expression. Each alternative of an `or' -- except the
1871 last -- ends with a forward jump of this sort. */
1872 unsigned char *fixup_alt_jump = 0;
1874 /* Counts open-groups as they are encountered. Remembered for the
1875 matching close-group on the compile stack, so the same register
1876 number is put in the stop_memory as the start_memory. */
1877 regnum_t regnum = 0;
1879 #ifdef DEBUG
1880 DEBUG_PRINT1 ("\nCompiling pattern: ");
1881 if (debug)
1883 unsigned debug_count;
1885 for (debug_count = 0; debug_count < size; debug_count++)
1886 putchar (pattern[debug_count]);
1887 putchar ('\n');
1889 #endif /* DEBUG */
1891 /* Initialize the compile stack. */
1892 compile_stack.stack = TALLOC (INIT_COMPILE_STACK_SIZE, compile_stack_elt_t);
1893 if (compile_stack.stack == NULL)
1894 return REG_ESPACE;
1896 compile_stack.size = INIT_COMPILE_STACK_SIZE;
1897 compile_stack.avail = 0;
1899 /* Initialize the pattern buffer. */
1900 bufp->syntax = syntax;
1901 bufp->fastmap_accurate = 0;
1902 bufp->not_bol = bufp->not_eol = 0;
1904 /* Set `used' to zero, so that if we return an error, the pattern
1905 printer (for debugging) will think there's no pattern. We reset it
1906 at the end. */
1907 bufp->used = 0;
1909 /* Always count groups, whether or not bufp->no_sub is set. */
1910 bufp->re_nsub = 0;
1912 #if !defined emacs && !defined SYNTAX_TABLE
1913 /* Initialize the syntax table. */
1914 init_syntax_once ();
1915 #endif
1917 if (bufp->allocated == 0)
1919 if (bufp->buffer)
1920 { /* If zero allocated, but buffer is non-null, try to realloc
1921 enough space. This loses if buffer's address is bogus, but
1922 that is the user's responsibility. */
1923 RETALLOC (bufp->buffer, INIT_BUF_SIZE, unsigned char);
1925 else
1926 { /* Caller did not allocate a buffer. Do it for them. */
1927 bufp->buffer = TALLOC (INIT_BUF_SIZE, unsigned char);
1929 if (!bufp->buffer) FREE_STACK_RETURN (REG_ESPACE);
1931 bufp->allocated = INIT_BUF_SIZE;
1934 begalt = b = bufp->buffer;
1936 /* Loop through the uncompiled pattern until we're at the end. */
1937 while (p != pend)
1939 PATFETCH (c);
1941 switch (c)
1943 case '^':
1945 if ( /* If at start of pattern, it's an operator. */
1946 p == pattern + 1
1947 /* If context independent, it's an operator. */
1948 || syntax & RE_CONTEXT_INDEP_ANCHORS
1949 /* Otherwise, depends on what's come before. */
1950 || at_begline_loc_p (pattern, p, syntax))
1951 BUF_PUSH (begline);
1952 else
1953 goto normal_char;
1955 break;
1958 case '$':
1960 if ( /* If at end of pattern, it's an operator. */
1961 p == pend
1962 /* If context independent, it's an operator. */
1963 || syntax & RE_CONTEXT_INDEP_ANCHORS
1964 /* Otherwise, depends on what's next. */
1965 || at_endline_loc_p (p, pend, syntax))
1966 BUF_PUSH (endline);
1967 else
1968 goto normal_char;
1970 break;
1973 case '+':
1974 case '?':
1975 if ((syntax & RE_BK_PLUS_QM)
1976 || (syntax & RE_LIMITED_OPS))
1977 goto normal_char;
1978 handle_plus:
1979 case '*':
1980 /* If there is no previous pattern... */
1981 if (!laststart)
1983 if (syntax & RE_CONTEXT_INVALID_OPS)
1984 FREE_STACK_RETURN (REG_BADRPT);
1985 else if (!(syntax & RE_CONTEXT_INDEP_OPS))
1986 goto normal_char;
1990 /* Are we optimizing this jump? */
1991 boolean keep_string_p = false;
1993 /* 1 means zero (many) matches is allowed. */
1994 char zero_times_ok = 0, many_times_ok = 0;
1996 /* If there is a sequence of repetition chars, collapse it
1997 down to just one (the right one). We can't combine
1998 interval operators with these because of, e.g., `a{2}*',
1999 which should only match an even number of `a's. */
2001 for (;;)
2003 zero_times_ok |= c != '+';
2004 many_times_ok |= c != '?';
2006 if (p == pend)
2007 break;
2009 PATFETCH (c);
2011 if (c == '*'
2012 || (!(syntax & RE_BK_PLUS_QM) && (c == '+' || c == '?')))
2015 else if (syntax & RE_BK_PLUS_QM && c == '\\')
2017 if (p == pend) FREE_STACK_RETURN (REG_EESCAPE);
2019 PATFETCH (c1);
2020 if (!(c1 == '+' || c1 == '?'))
2022 PATUNFETCH;
2023 PATUNFETCH;
2024 break;
2027 c = c1;
2029 else
2031 PATUNFETCH;
2032 break;
2035 /* If we get here, we found another repeat character. */
2038 /* Star, etc. applied to an empty pattern is equivalent
2039 to an empty pattern. */
2040 if (!laststart)
2041 break;
2043 /* Now we know whether or not zero matches is allowed
2044 and also whether or not two or more matches is allowed. */
2045 if (many_times_ok)
2046 { /* More than one repetition is allowed, so put in at the
2047 end a backward relative jump from `b' to before the next
2048 jump we're going to put in below (which jumps from
2049 laststart to after this jump).
2051 But if we are at the `*' in the exact sequence `.*\n',
2052 insert an unconditional jump backwards to the .,
2053 instead of the beginning of the loop. This way we only
2054 push a failure point once, instead of every time
2055 through the loop. */
2056 assert (p - 1 > pattern);
2058 /* Allocate the space for the jump. */
2059 GET_BUFFER_SPACE (3);
2061 /* We know we are not at the first character of the pattern,
2062 because laststart was nonzero. And we've already
2063 incremented `p', by the way, to be the character after
2064 the `*'. Do we have to do something analogous here
2065 for null bytes, because of RE_DOT_NOT_NULL? */
2066 if (TRANSLATE (*(p - 2)) == TRANSLATE ('.')
2067 && zero_times_ok
2068 && p < pend && TRANSLATE (*p) == TRANSLATE ('\n')
2069 && !(syntax & RE_DOT_NEWLINE))
2070 { /* We have .*\n. */
2071 STORE_JUMP (jump, b, laststart);
2072 keep_string_p = true;
2074 else
2075 /* Anything else. */
2076 STORE_JUMP (maybe_pop_jump, b, laststart - 3);
2078 /* We've added more stuff to the buffer. */
2079 b += 3;
2082 /* On failure, jump from laststart to b + 3, which will be the
2083 end of the buffer after this jump is inserted. */
2084 GET_BUFFER_SPACE (3);
2085 INSERT_JUMP (keep_string_p ? on_failure_keep_string_jump
2086 : on_failure_jump,
2087 laststart, b + 3);
2088 pending_exact = 0;
2089 b += 3;
2091 if (!zero_times_ok)
2093 /* At least one repetition is required, so insert a
2094 `dummy_failure_jump' before the initial
2095 `on_failure_jump' instruction of the loop. This
2096 effects a skip over that instruction the first time
2097 we hit that loop. */
2098 GET_BUFFER_SPACE (3);
2099 INSERT_JUMP (dummy_failure_jump, laststart, laststart + 6);
2100 b += 3;
2103 break;
2106 case '.':
2107 laststart = b;
2108 BUF_PUSH (anychar);
2109 break;
2112 case '[':
2114 boolean had_char_class = false;
2116 if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
2118 /* Ensure that we have enough space to push a charset: the
2119 opcode, the length count, and the bitset; 34 bytes in all. */
2120 GET_BUFFER_SPACE (34);
2122 laststart = b;
2124 /* We test `*p == '^' twice, instead of using an if
2125 statement, so we only need one BUF_PUSH. */
2126 BUF_PUSH (*p == '^' ? charset_not : charset);
2127 if (*p == '^')
2128 p++;
2130 /* Remember the first position in the bracket expression. */
2131 p1 = p;
2133 /* Push the number of bytes in the bitmap. */
2134 BUF_PUSH ((1 << BYTEWIDTH) / BYTEWIDTH);
2136 /* Clear the whole map. */
2137 bzero (b, (1 << BYTEWIDTH) / BYTEWIDTH);
2139 /* charset_not matches newline according to a syntax bit. */
2140 if ((re_opcode_t) b[-2] == charset_not
2141 && (syntax & RE_HAT_LISTS_NOT_NEWLINE))
2142 SET_LIST_BIT ('\n');
2144 /* Read in characters and ranges, setting map bits. */
2145 for (;;)
2147 if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
2149 PATFETCH (c);
2151 /* \ might escape characters inside [...] and [^...]. */
2152 if ((syntax & RE_BACKSLASH_ESCAPE_IN_LISTS) && c == '\\')
2154 if (p == pend) FREE_STACK_RETURN (REG_EESCAPE);
2156 PATFETCH (c1);
2157 SET_LIST_BIT (c1);
2158 continue;
2161 /* Could be the end of the bracket expression. If it's
2162 not (i.e., when the bracket expression is `[]' so
2163 far), the ']' character bit gets set way below. */
2164 if (c == ']' && p != p1 + 1)
2165 break;
2167 /* Look ahead to see if it's a range when the last thing
2168 was a character class. */
2169 if (had_char_class && c == '-' && *p != ']')
2170 FREE_STACK_RETURN (REG_ERANGE);
2172 /* Look ahead to see if it's a range when the last thing
2173 was a character: if this is a hyphen not at the
2174 beginning or the end of a list, then it's the range
2175 operator. */
2176 if (c == '-'
2177 && !(p - 2 >= pattern && p[-2] == '[')
2178 && !(p - 3 >= pattern && p[-3] == '[' && p[-2] == '^')
2179 && *p != ']')
2181 reg_errcode_t ret
2182 = compile_range (&p, pend, translate, syntax, b);
2183 if (ret != REG_NOERROR) FREE_STACK_RETURN (ret);
2186 else if (p[0] == '-' && p[1] != ']')
2187 { /* This handles ranges made up of characters only. */
2188 reg_errcode_t ret;
2190 /* Move past the `-'. */
2191 PATFETCH (c1);
2193 ret = compile_range (&p, pend, translate, syntax, b);
2194 if (ret != REG_NOERROR) FREE_STACK_RETURN (ret);
2197 /* See if we're at the beginning of a possible character
2198 class. */
2200 else if (syntax & RE_CHAR_CLASSES && c == '[' && *p == ':')
2201 { /* Leave room for the null. */
2202 char str[CHAR_CLASS_MAX_LENGTH + 1];
2204 PATFETCH (c);
2205 c1 = 0;
2207 /* If pattern is `[[:'. */
2208 if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
2210 for (;;)
2212 PATFETCH (c);
2213 if ((c == ':' && *p == ']') || p == pend
2214 || c1 == CHAR_CLASS_MAX_LENGTH)
2215 break;
2216 str[c1++] = c;
2218 str[c1] = '\0';
2220 /* If isn't a word bracketed by `[:' and `:]':
2221 undo the ending character, the letters, and leave
2222 the leading `:' and `[' (but set bits for them). */
2223 if (c == ':' && *p == ']')
2225 #if defined _LIBC || WIDE_CHAR_SUPPORT
2226 boolean is_lower = STREQ (str, "lower");
2227 boolean is_upper = STREQ (str, "upper");
2228 wctype_t wt;
2229 int ch;
2231 wt = IS_CHAR_CLASS (str);
2232 if (wt == 0)
2233 FREE_STACK_RETURN (REG_ECTYPE);
2235 /* Throw away the ] at the end of the character
2236 class. */
2237 PATFETCH (c);
2239 if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
2241 for (ch = 0; ch < 1 << BYTEWIDTH; ++ch)
2243 # ifdef _LIBC
2244 if (__iswctype (__btowc (ch), wt))
2245 SET_LIST_BIT (ch);
2246 # else
2247 if (iswctype (btowc (ch), wt))
2248 SET_LIST_BIT (ch);
2249 # endif
2251 if (translate && (is_upper || is_lower)
2252 && (ISUPPER (ch) || ISLOWER (ch)))
2253 SET_LIST_BIT (ch);
2256 had_char_class = true;
2257 #else
2258 int ch;
2259 boolean is_alnum = STREQ (str, "alnum");
2260 boolean is_alpha = STREQ (str, "alpha");
2261 boolean is_blank = STREQ (str, "blank");
2262 boolean is_cntrl = STREQ (str, "cntrl");
2263 boolean is_digit = STREQ (str, "digit");
2264 boolean is_graph = STREQ (str, "graph");
2265 boolean is_lower = STREQ (str, "lower");
2266 boolean is_print = STREQ (str, "print");
2267 boolean is_punct = STREQ (str, "punct");
2268 boolean is_space = STREQ (str, "space");
2269 boolean is_upper = STREQ (str, "upper");
2270 boolean is_xdigit = STREQ (str, "xdigit");
2272 if (!IS_CHAR_CLASS (str))
2273 FREE_STACK_RETURN (REG_ECTYPE);
2275 /* Throw away the ] at the end of the character
2276 class. */
2277 PATFETCH (c);
2279 if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
2281 for (ch = 0; ch < 1 << BYTEWIDTH; ch++)
2283 /* This was split into 3 if's to
2284 avoid an arbitrary limit in some compiler. */
2285 if ( (is_alnum && ISALNUM (ch))
2286 || (is_alpha && ISALPHA (ch))
2287 || (is_blank && ISBLANK (ch))
2288 || (is_cntrl && ISCNTRL (ch)))
2289 SET_LIST_BIT (ch);
2290 if ( (is_digit && ISDIGIT (ch))
2291 || (is_graph && ISGRAPH (ch))
2292 || (is_lower && ISLOWER (ch))
2293 || (is_print && ISPRINT (ch)))
2294 SET_LIST_BIT (ch);
2295 if ( (is_punct && ISPUNCT (ch))
2296 || (is_space && ISSPACE (ch))
2297 || (is_upper && ISUPPER (ch))
2298 || (is_xdigit && ISXDIGIT (ch)))
2299 SET_LIST_BIT (ch);
2300 if ( translate && (is_upper || is_lower)
2301 && (ISUPPER (ch) || ISLOWER (ch)))
2302 SET_LIST_BIT (ch);
2304 had_char_class = true;
2305 #endif /* libc || wctype.h */
2307 else
2309 c1++;
2310 while (c1--)
2311 PATUNFETCH;
2312 SET_LIST_BIT ('[');
2313 SET_LIST_BIT (':');
2314 had_char_class = false;
2317 else
2319 had_char_class = false;
2320 SET_LIST_BIT (c);
2324 /* Discard any (non)matching list bytes that are all 0 at the
2325 end of the map. Decrease the map-length byte too. */
2326 while ((int) b[-1] > 0 && b[b[-1] - 1] == 0)
2327 b[-1]--;
2328 b += b[-1];
2330 break;
2333 case '(':
2334 if (syntax & RE_NO_BK_PARENS)
2335 goto handle_open;
2336 else
2337 goto normal_char;
2340 case ')':
2341 if (syntax & RE_NO_BK_PARENS)
2342 goto handle_close;
2343 else
2344 goto normal_char;
2347 case '\n':
2348 if (syntax & RE_NEWLINE_ALT)
2349 goto handle_alt;
2350 else
2351 goto normal_char;
2354 case '|':
2355 if (syntax & RE_NO_BK_VBAR)
2356 goto handle_alt;
2357 else
2358 goto normal_char;
2361 case '{':
2362 if (syntax & RE_INTERVALS && syntax & RE_NO_BK_BRACES)
2363 goto handle_interval;
2364 else
2365 goto normal_char;
2368 case '\\':
2369 if (p == pend) FREE_STACK_RETURN (REG_EESCAPE);
2371 /* Do not translate the character after the \, so that we can
2372 distinguish, e.g., \B from \b, even if we normally would
2373 translate, e.g., B to b. */
2374 PATFETCH_RAW (c);
2376 switch (c)
2378 case '(':
2379 if (syntax & RE_NO_BK_PARENS)
2380 goto normal_backslash;
2382 handle_open:
2383 bufp->re_nsub++;
2384 regnum++;
2386 if (COMPILE_STACK_FULL)
2388 RETALLOC (compile_stack.stack, compile_stack.size << 1,
2389 compile_stack_elt_t);
2390 if (compile_stack.stack == NULL) return REG_ESPACE;
2392 compile_stack.size <<= 1;
2395 /* These are the values to restore when we hit end of this
2396 group. They are all relative offsets, so that if the
2397 whole pattern moves because of realloc, they will still
2398 be valid. */
2399 COMPILE_STACK_TOP.begalt_offset = begalt - bufp->buffer;
2400 COMPILE_STACK_TOP.fixup_alt_jump
2401 = fixup_alt_jump ? fixup_alt_jump - bufp->buffer + 1 : 0;
2402 COMPILE_STACK_TOP.laststart_offset = b - bufp->buffer;
2403 COMPILE_STACK_TOP.regnum = regnum;
2405 /* We will eventually replace the 0 with the number of
2406 groups inner to this one. But do not push a
2407 start_memory for groups beyond the last one we can
2408 represent in the compiled pattern. */
2409 if (regnum <= MAX_REGNUM)
2411 COMPILE_STACK_TOP.inner_group_offset = b - bufp->buffer + 2;
2412 BUF_PUSH_3 (start_memory, regnum, 0);
2415 compile_stack.avail++;
2417 fixup_alt_jump = 0;
2418 laststart = 0;
2419 begalt = b;
2420 /* If we've reached MAX_REGNUM groups, then this open
2421 won't actually generate any code, so we'll have to
2422 clear pending_exact explicitly. */
2423 pending_exact = 0;
2424 break;
2427 case ')':
2428 if (syntax & RE_NO_BK_PARENS) goto normal_backslash;
2430 if (COMPILE_STACK_EMPTY)
2432 if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD)
2433 goto normal_backslash;
2434 else
2435 FREE_STACK_RETURN (REG_ERPAREN);
2438 handle_close:
2439 if (fixup_alt_jump)
2440 { /* Push a dummy failure point at the end of the
2441 alternative for a possible future
2442 `pop_failure_jump' to pop. See comments at
2443 `push_dummy_failure' in `re_match_2'. */
2444 BUF_PUSH (push_dummy_failure);
2446 /* We allocated space for this jump when we assigned
2447 to `fixup_alt_jump', in the `handle_alt' case below. */
2448 STORE_JUMP (jump_past_alt, fixup_alt_jump, b - 1);
2451 /* See similar code for backslashed left paren above. */
2452 if (COMPILE_STACK_EMPTY)
2454 if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD)
2455 goto normal_char;
2456 else
2457 FREE_STACK_RETURN (REG_ERPAREN);
2460 /* Since we just checked for an empty stack above, this
2461 ``can't happen''. */
2462 assert (compile_stack.avail != 0);
2464 /* We don't just want to restore into `regnum', because
2465 later groups should continue to be numbered higher,
2466 as in `(ab)c(de)' -- the second group is #2. */
2467 regnum_t this_group_regnum;
2469 compile_stack.avail--;
2470 begalt = bufp->buffer + COMPILE_STACK_TOP.begalt_offset;
2471 fixup_alt_jump
2472 = COMPILE_STACK_TOP.fixup_alt_jump
2473 ? bufp->buffer + COMPILE_STACK_TOP.fixup_alt_jump - 1
2474 : 0;
2475 laststart = bufp->buffer + COMPILE_STACK_TOP.laststart_offset;
2476 this_group_regnum = COMPILE_STACK_TOP.regnum;
2477 /* If we've reached MAX_REGNUM groups, then this open
2478 won't actually generate any code, so we'll have to
2479 clear pending_exact explicitly. */
2480 pending_exact = 0;
2482 /* We're at the end of the group, so now we know how many
2483 groups were inside this one. */
2484 if (this_group_regnum <= MAX_REGNUM)
2486 unsigned char *inner_group_loc
2487 = bufp->buffer + COMPILE_STACK_TOP.inner_group_offset;
2489 *inner_group_loc = regnum - this_group_regnum;
2490 BUF_PUSH_3 (stop_memory, this_group_regnum,
2491 regnum - this_group_regnum);
2494 break;
2497 case '|': /* `\|'. */
2498 if (syntax & RE_LIMITED_OPS || syntax & RE_NO_BK_VBAR)
2499 goto normal_backslash;
2500 handle_alt:
2501 if (syntax & RE_LIMITED_OPS)
2502 goto normal_char;
2504 /* Insert before the previous alternative a jump which
2505 jumps to this alternative if the former fails. */
2506 GET_BUFFER_SPACE (3);
2507 INSERT_JUMP (on_failure_jump, begalt, b + 6);
2508 pending_exact = 0;
2509 b += 3;
2511 /* The alternative before this one has a jump after it
2512 which gets executed if it gets matched. Adjust that
2513 jump so it will jump to this alternative's analogous
2514 jump (put in below, which in turn will jump to the next
2515 (if any) alternative's such jump, etc.). The last such
2516 jump jumps to the correct final destination. A picture:
2517 _____ _____
2518 | | | |
2519 | v | v
2520 a | b | c
2522 If we are at `b', then fixup_alt_jump right now points to a
2523 three-byte space after `a'. We'll put in the jump, set
2524 fixup_alt_jump to right after `b', and leave behind three
2525 bytes which we'll fill in when we get to after `c'. */
2527 if (fixup_alt_jump)
2528 STORE_JUMP (jump_past_alt, fixup_alt_jump, b);
2530 /* Mark and leave space for a jump after this alternative,
2531 to be filled in later either by next alternative or
2532 when know we're at the end of a series of alternatives. */
2533 fixup_alt_jump = b;
2534 GET_BUFFER_SPACE (3);
2535 b += 3;
2537 laststart = 0;
2538 begalt = b;
2539 break;
2542 case '{':
2543 /* If \{ is a literal. */
2544 if (!(syntax & RE_INTERVALS)
2545 /* If we're at `\{' and it's not the open-interval
2546 operator. */
2547 || ((syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES))
2548 || (p - 2 == pattern && p == pend))
2549 goto normal_backslash;
2551 handle_interval:
2553 /* If got here, then the syntax allows intervals. */
2555 /* At least (most) this many matches must be made. */
2556 int lower_bound = -1, upper_bound = -1;
2558 beg_interval = p - 1;
2560 if (p == pend)
2562 if (syntax & RE_NO_BK_BRACES)
2563 goto unfetch_interval;
2564 else
2565 FREE_STACK_RETURN (REG_EBRACE);
2568 GET_UNSIGNED_NUMBER (lower_bound);
2570 if (c == ',')
2572 GET_UNSIGNED_NUMBER (upper_bound);
2573 if (upper_bound < 0) upper_bound = RE_DUP_MAX;
2575 else
2576 /* Interval such as `{1}' => match exactly once. */
2577 upper_bound = lower_bound;
2579 if (lower_bound < 0 || upper_bound > RE_DUP_MAX
2580 || lower_bound > upper_bound)
2582 if (syntax & RE_NO_BK_BRACES)
2583 goto unfetch_interval;
2584 else
2585 FREE_STACK_RETURN (REG_BADBR);
2588 if (!(syntax & RE_NO_BK_BRACES))
2590 if (c != '\\') FREE_STACK_RETURN (REG_EBRACE);
2592 PATFETCH (c);
2595 if (c != '}')
2597 if (syntax & RE_NO_BK_BRACES)
2598 goto unfetch_interval;
2599 else
2600 FREE_STACK_RETURN (REG_BADBR);
2603 /* We just parsed a valid interval. */
2605 /* If it's invalid to have no preceding re. */
2606 if (!laststart)
2608 if (syntax & RE_CONTEXT_INVALID_OPS)
2609 FREE_STACK_RETURN (REG_BADRPT);
2610 else if (syntax & RE_CONTEXT_INDEP_OPS)
2611 laststart = b;
2612 else
2613 goto unfetch_interval;
2616 /* If the upper bound is zero, don't want to succeed at
2617 all; jump from `laststart' to `b + 3', which will be
2618 the end of the buffer after we insert the jump. */
2619 if (upper_bound == 0)
2621 GET_BUFFER_SPACE (3);
2622 INSERT_JUMP (jump, laststart, b + 3);
2623 b += 3;
2626 /* Otherwise, we have a nontrivial interval. When
2627 we're all done, the pattern will look like:
2628 set_number_at <jump count> <upper bound>
2629 set_number_at <succeed_n count> <lower bound>
2630 succeed_n <after jump addr> <succeed_n count>
2631 <body of loop>
2632 jump_n <succeed_n addr> <jump count>
2633 (The upper bound and `jump_n' are omitted if
2634 `upper_bound' is 1, though.) */
2635 else
2636 { /* If the upper bound is > 1, we need to insert
2637 more at the end of the loop. */
2638 unsigned nbytes = 10 + (upper_bound > 1) * 10;
2640 GET_BUFFER_SPACE (nbytes);
2642 /* Initialize lower bound of the `succeed_n', even
2643 though it will be set during matching by its
2644 attendant `set_number_at' (inserted next),
2645 because `re_compile_fastmap' needs to know.
2646 Jump to the `jump_n' we might insert below. */
2647 INSERT_JUMP2 (succeed_n, laststart,
2648 b + 5 + (upper_bound > 1) * 5,
2649 lower_bound);
2650 b += 5;
2652 /* Code to initialize the lower bound. Insert
2653 before the `succeed_n'. The `5' is the last two
2654 bytes of this `set_number_at', plus 3 bytes of
2655 the following `succeed_n'. */
2656 insert_op2 (set_number_at, laststart, 5, lower_bound, b);
2657 b += 5;
2659 if (upper_bound > 1)
2660 { /* More than one repetition is allowed, so
2661 append a backward jump to the `succeed_n'
2662 that starts this interval.
2664 When we've reached this during matching,
2665 we'll have matched the interval once, so
2666 jump back only `upper_bound - 1' times. */
2667 STORE_JUMP2 (jump_n, b, laststart + 5,
2668 upper_bound - 1);
2669 b += 5;
2671 /* The location we want to set is the second
2672 parameter of the `jump_n'; that is `b-2' as
2673 an absolute address. `laststart' will be
2674 the `set_number_at' we're about to insert;
2675 `laststart+3' the number to set, the source
2676 for the relative address. But we are
2677 inserting into the middle of the pattern --
2678 so everything is getting moved up by 5.
2679 Conclusion: (b - 2) - (laststart + 3) + 5,
2680 i.e., b - laststart.
2682 We insert this at the beginning of the loop
2683 so that if we fail during matching, we'll
2684 reinitialize the bounds. */
2685 insert_op2 (set_number_at, laststart, b - laststart,
2686 upper_bound - 1, b);
2687 b += 5;
2690 pending_exact = 0;
2691 beg_interval = NULL;
2693 break;
2695 unfetch_interval:
2696 /* If an invalid interval, match the characters as literals. */
2697 assert (beg_interval);
2698 p = beg_interval;
2699 beg_interval = NULL;
2701 /* normal_char and normal_backslash need `c'. */
2702 PATFETCH (c);
2704 if (!(syntax & RE_NO_BK_BRACES))
2706 if (p > pattern && p[-1] == '\\')
2707 goto normal_backslash;
2709 goto normal_char;
2711 #ifdef emacs
2712 /* There is no way to specify the before_dot and after_dot
2713 operators. rms says this is ok. --karl */
2714 case '=':
2715 BUF_PUSH (at_dot);
2716 break;
2718 case 's':
2719 laststart = b;
2720 PATFETCH (c);
2721 BUF_PUSH_2 (syntaxspec, syntax_spec_code[c]);
2722 break;
2724 case 'S':
2725 laststart = b;
2726 PATFETCH (c);
2727 BUF_PUSH_2 (notsyntaxspec, syntax_spec_code[c]);
2728 break;
2729 #endif /* emacs */
2732 case 'w':
2733 if (syntax & RE_NO_GNU_OPS)
2734 goto normal_char;
2735 laststart = b;
2736 BUF_PUSH (wordchar);
2737 break;
2740 case 'W':
2741 if (syntax & RE_NO_GNU_OPS)
2742 goto normal_char;
2743 laststart = b;
2744 BUF_PUSH (notwordchar);
2745 break;
2748 case '<':
2749 if (syntax & RE_NO_GNU_OPS)
2750 goto normal_char;
2751 BUF_PUSH (wordbeg);
2752 break;
2754 case '>':
2755 if (syntax & RE_NO_GNU_OPS)
2756 goto normal_char;
2757 BUF_PUSH (wordend);
2758 break;
2760 case 'b':
2761 if (syntax & RE_NO_GNU_OPS)
2762 goto normal_char;
2763 BUF_PUSH (wordbound);
2764 break;
2766 case 'B':
2767 if (syntax & RE_NO_GNU_OPS)
2768 goto normal_char;
2769 BUF_PUSH (notwordbound);
2770 break;
2772 case '`':
2773 if (syntax & RE_NO_GNU_OPS)
2774 goto normal_char;
2775 BUF_PUSH (begbuf);
2776 break;
2778 case '\'':
2779 if (syntax & RE_NO_GNU_OPS)
2780 goto normal_char;
2781 BUF_PUSH (endbuf);
2782 break;
2784 case '1': case '2': case '3': case '4': case '5':
2785 case '6': case '7': case '8': case '9':
2786 if (syntax & RE_NO_BK_REFS)
2787 goto normal_char;
2789 c1 = c - '0';
2791 if (c1 > regnum)
2792 FREE_STACK_RETURN (REG_ESUBREG);
2794 /* Can't back reference to a subexpression if inside of it. */
2795 if (group_in_compile_stack (compile_stack, (regnum_t) c1))
2796 goto normal_char;
2798 laststart = b;
2799 BUF_PUSH_2 (duplicate, c1);
2800 break;
2803 case '+':
2804 case '?':
2805 if (syntax & RE_BK_PLUS_QM)
2806 goto handle_plus;
2807 else
2808 goto normal_backslash;
2810 default:
2811 normal_backslash:
2812 /* You might think it would be useful for \ to mean
2813 not to translate; but if we don't translate it
2814 it will never match anything. */
2815 c = TRANSLATE (c);
2816 goto normal_char;
2818 break;
2821 default:
2822 /* Expects the character in `c'. */
2823 normal_char:
2824 /* If no exactn currently being built. */
2825 if (!pending_exact
2827 /* If last exactn not at current position. */
2828 || pending_exact + *pending_exact + 1 != b
2830 /* We have only one byte following the exactn for the count. */
2831 || *pending_exact == (1 << BYTEWIDTH) - 1
2833 /* If followed by a repetition operator. */
2834 || *p == '*' || *p == '^'
2835 || ((syntax & RE_BK_PLUS_QM)
2836 ? *p == '\\' && (p[1] == '+' || p[1] == '?')
2837 : (*p == '+' || *p == '?'))
2838 || ((syntax & RE_INTERVALS)
2839 && ((syntax & RE_NO_BK_BRACES)
2840 ? *p == '{'
2841 : (p[0] == '\\' && p[1] == '{'))))
2843 /* Start building a new exactn. */
2845 laststart = b;
2847 BUF_PUSH_2 (exactn, 0);
2848 pending_exact = b - 1;
2851 BUF_PUSH (c);
2852 (*pending_exact)++;
2853 break;
2854 } /* switch (c) */
2855 } /* while p != pend */
2858 /* Through the pattern now. */
2860 if (fixup_alt_jump)
2861 STORE_JUMP (jump_past_alt, fixup_alt_jump, b);
2863 if (!COMPILE_STACK_EMPTY)
2864 FREE_STACK_RETURN (REG_EPAREN);
2866 /* If we don't want backtracking, force success
2867 the first time we reach the end of the compiled pattern. */
2868 if (syntax & RE_NO_POSIX_BACKTRACKING)
2869 BUF_PUSH (succeed);
2871 free (compile_stack.stack);
2873 /* We have succeeded; set the length of the buffer. */
2874 bufp->used = b - bufp->buffer;
2876 #ifdef DEBUG
2877 if (debug)
2879 DEBUG_PRINT1 ("\nCompiled pattern: \n");
2880 print_compiled_pattern (bufp);
2882 #endif /* DEBUG */
2884 #ifndef MATCH_MAY_ALLOCATE
2885 /* Initialize the failure stack to the largest possible stack. This
2886 isn't necessary unless we're trying to avoid calling alloca in
2887 the search and match routines. */
2889 int num_regs = bufp->re_nsub + 1;
2891 /* Since DOUBLE_FAIL_STACK refuses to double only if the current size
2892 is strictly greater than re_max_failures, the largest possible stack
2893 is 2 * re_max_failures failure points. */
2894 if (fail_stack.size < (2 * re_max_failures * MAX_FAILURE_ITEMS))
2896 fail_stack.size = (2 * re_max_failures * MAX_FAILURE_ITEMS);
2898 # ifdef emacs
2899 if (! fail_stack.stack)
2900 fail_stack.stack
2901 = (fail_stack_elt_t *) xmalloc (fail_stack.size
2902 * sizeof (fail_stack_elt_t));
2903 else
2904 fail_stack.stack
2905 = (fail_stack_elt_t *) xrealloc (fail_stack.stack,
2906 (fail_stack.size
2907 * sizeof (fail_stack_elt_t)));
2908 # else /* not emacs */
2909 if (! fail_stack.stack)
2910 fail_stack.stack
2911 = (fail_stack_elt_t *) malloc (fail_stack.size
2912 * sizeof (fail_stack_elt_t));
2913 else
2914 fail_stack.stack
2915 = (fail_stack_elt_t *) realloc (fail_stack.stack,
2916 (fail_stack.size
2917 * sizeof (fail_stack_elt_t)));
2918 # endif /* not emacs */
2921 regex_grow_registers (num_regs);
2923 #endif /* not MATCH_MAY_ALLOCATE */
2925 return REG_NOERROR;
2926 } /* regex_compile */
2928 /* Subroutines for `regex_compile'. */
2930 /* Store OP at LOC followed by two-byte integer parameter ARG. */
2932 static void
2933 store_op1 (op, loc, arg)
2934 re_opcode_t op;
2935 unsigned char *loc;
2936 int arg;
2938 *loc = (unsigned char) op;
2939 STORE_NUMBER (loc + 1, arg);
2943 /* Like `store_op1', but for two two-byte parameters ARG1 and ARG2. */
2945 static void
2946 store_op2 (op, loc, arg1, arg2)
2947 re_opcode_t op;
2948 unsigned char *loc;
2949 int arg1, arg2;
2951 *loc = (unsigned char) op;
2952 STORE_NUMBER (loc + 1, arg1);
2953 STORE_NUMBER (loc + 3, arg2);
2957 /* Copy the bytes from LOC to END to open up three bytes of space at LOC
2958 for OP followed by two-byte integer parameter ARG. */
2960 static void
2961 insert_op1 (op, loc, arg, end)
2962 re_opcode_t op;
2963 unsigned char *loc;
2964 int arg;
2965 unsigned char *end;
2967 register unsigned char *pfrom = end;
2968 register unsigned char *pto = end + 3;
2970 while (pfrom != loc)
2971 *--pto = *--pfrom;
2973 store_op1 (op, loc, arg);
2977 /* Like `insert_op1', but for two two-byte parameters ARG1 and ARG2. */
2979 static void
2980 insert_op2 (op, loc, arg1, arg2, end)
2981 re_opcode_t op;
2982 unsigned char *loc;
2983 int arg1, arg2;
2984 unsigned char *end;
2986 register unsigned char *pfrom = end;
2987 register unsigned char *pto = end + 5;
2989 while (pfrom != loc)
2990 *--pto = *--pfrom;
2992 store_op2 (op, loc, arg1, arg2);
2996 /* P points to just after a ^ in PATTERN. Return true if that ^ comes
2997 after an alternative or a begin-subexpression. We assume there is at
2998 least one character before the ^. */
3000 static boolean
3001 at_begline_loc_p (pattern, p, syntax)
3002 const char *pattern, *p;
3003 reg_syntax_t syntax;
3005 const char *prev = p - 2;
3006 boolean prev_prev_backslash = prev > pattern && prev[-1] == '\\';
3008 return
3009 /* After a subexpression? */
3010 (*prev == '(' && (syntax & RE_NO_BK_PARENS || prev_prev_backslash))
3011 /* After an alternative? */
3012 || (*prev == '|' && (syntax & RE_NO_BK_VBAR || prev_prev_backslash));
3016 /* The dual of at_begline_loc_p. This one is for $. We assume there is
3017 at least one character after the $, i.e., `P < PEND'. */
3019 static boolean
3020 at_endline_loc_p (p, pend, syntax)
3021 const char *p, *pend;
3022 reg_syntax_t syntax;
3024 const char *next = p;
3025 boolean next_backslash = *next == '\\';
3026 const char *next_next = p + 1 < pend ? p + 1 : 0;
3028 return
3029 /* Before a subexpression? */
3030 (syntax & RE_NO_BK_PARENS ? *next == ')'
3031 : next_backslash && next_next && *next_next == ')')
3032 /* Before an alternative? */
3033 || (syntax & RE_NO_BK_VBAR ? *next == '|'
3034 : next_backslash && next_next && *next_next == '|');
3038 /* Returns true if REGNUM is in one of COMPILE_STACK's elements and
3039 false if it's not. */
3041 static boolean
3042 group_in_compile_stack (compile_stack, regnum)
3043 compile_stack_type compile_stack;
3044 regnum_t regnum;
3046 int this_element;
3048 for (this_element = compile_stack.avail - 1;
3049 this_element >= 0;
3050 this_element--)
3051 if (compile_stack.stack[this_element].regnum == regnum)
3052 return true;
3054 return false;
3058 /* Read the ending character of a range (in a bracket expression) from the
3059 uncompiled pattern *P_PTR (which ends at PEND). We assume the
3060 starting character is in `P[-2]'. (`P[-1]' is the character `-'.)
3061 Then we set the translation of all bits between the starting and
3062 ending characters (inclusive) in the compiled pattern B.
3064 Return an error code.
3066 We use these short variable names so we can use the same macros as
3067 `regex_compile' itself. */
3069 static reg_errcode_t
3070 compile_range (p_ptr, pend, translate, syntax, b)
3071 const char **p_ptr, *pend;
3072 RE_TRANSLATE_TYPE translate;
3073 reg_syntax_t syntax;
3074 unsigned char *b;
3076 unsigned this_char;
3078 const char *p = *p_ptr;
3079 unsigned int range_start, range_end;
3081 if (p == pend)
3082 return REG_ERANGE;
3084 /* Even though the pattern is a signed `char *', we need to fetch
3085 with unsigned char *'s; if the high bit of the pattern character
3086 is set, the range endpoints will be negative if we fetch using a
3087 signed char *.
3089 We also want to fetch the endpoints without translating them; the
3090 appropriate translation is done in the bit-setting loop below. */
3091 /* The SVR4 compiler on the 3B2 had trouble with unsigned const char *. */
3092 range_start = ((const unsigned char *) p)[-2];
3093 range_end = ((const unsigned char *) p)[0];
3095 /* Have to increment the pointer into the pattern string, so the
3096 caller isn't still at the ending character. */
3097 (*p_ptr)++;
3099 /* If the start is after the end, the range is empty. */
3100 if (range_start > range_end)
3101 return syntax & RE_NO_EMPTY_RANGES ? REG_ERANGE : REG_NOERROR;
3103 /* Here we see why `this_char' has to be larger than an `unsigned
3104 char' -- the range is inclusive, so if `range_end' == 0xff
3105 (assuming 8-bit characters), we would otherwise go into an infinite
3106 loop, since all characters <= 0xff. */
3107 for (this_char = range_start; this_char <= range_end; this_char++)
3109 SET_LIST_BIT (TRANSLATE (this_char));
3112 return REG_NOERROR;
3115 /* re_compile_fastmap computes a ``fastmap'' for the compiled pattern in
3116 BUFP. A fastmap records which of the (1 << BYTEWIDTH) possible
3117 characters can start a string that matches the pattern. This fastmap
3118 is used by re_search to skip quickly over impossible starting points.
3120 The caller must supply the address of a (1 << BYTEWIDTH)-byte data
3121 area as BUFP->fastmap.
3123 We set the `fastmap', `fastmap_accurate', and `can_be_null' fields in
3124 the pattern buffer.
3126 Returns 0 if we succeed, -2 if an internal error. */
3129 re_compile_fastmap (bufp)
3130 struct re_pattern_buffer *bufp;
3132 int j, k;
3133 #ifdef MATCH_MAY_ALLOCATE
3134 fail_stack_type fail_stack;
3135 #endif
3136 #ifndef REGEX_MALLOC
3137 char *destination;
3138 #endif
3140 register char *fastmap = bufp->fastmap;
3141 unsigned char *pattern = bufp->buffer;
3142 unsigned char *p = pattern;
3143 register unsigned char *pend = pattern + bufp->used;
3145 #ifdef REL_ALLOC
3146 /* This holds the pointer to the failure stack, when
3147 it is allocated relocatably. */
3148 fail_stack_elt_t *failure_stack_ptr;
3149 #endif
3151 /* Assume that each path through the pattern can be null until
3152 proven otherwise. We set this false at the bottom of switch
3153 statement, to which we get only if a particular path doesn't
3154 match the empty string. */
3155 boolean path_can_be_null = true;
3157 /* We aren't doing a `succeed_n' to begin with. */
3158 boolean succeed_n_p = false;
3160 assert (fastmap != NULL && p != NULL);
3162 INIT_FAIL_STACK ();
3163 bzero (fastmap, 1 << BYTEWIDTH); /* Assume nothing's valid. */
3164 bufp->fastmap_accurate = 1; /* It will be when we're done. */
3165 bufp->can_be_null = 0;
3167 while (1)
3169 if (p == pend || *p == succeed)
3171 /* We have reached the (effective) end of pattern. */
3172 if (!FAIL_STACK_EMPTY ())
3174 bufp->can_be_null |= path_can_be_null;
3176 /* Reset for next path. */
3177 path_can_be_null = true;
3179 p = fail_stack.stack[--fail_stack.avail].pointer;
3181 continue;
3183 else
3184 break;
3187 /* We should never be about to go beyond the end of the pattern. */
3188 assert (p < pend);
3190 switch (SWITCH_ENUM_CAST ((re_opcode_t) *p++))
3193 /* I guess the idea here is to simply not bother with a fastmap
3194 if a backreference is used, since it's too hard to figure out
3195 the fastmap for the corresponding group. Setting
3196 `can_be_null' stops `re_search_2' from using the fastmap, so
3197 that is all we do. */
3198 case duplicate:
3199 bufp->can_be_null = 1;
3200 goto done;
3203 /* Following are the cases which match a character. These end
3204 with `break'. */
3206 case exactn:
3207 fastmap[p[1]] = 1;
3208 break;
3211 case charset:
3212 for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--)
3213 if (p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH)))
3214 fastmap[j] = 1;
3215 break;
3218 case charset_not:
3219 /* Chars beyond end of map must be allowed. */
3220 for (j = *p * BYTEWIDTH; j < (1 << BYTEWIDTH); j++)
3221 fastmap[j] = 1;
3223 for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--)
3224 if (!(p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH))))
3225 fastmap[j] = 1;
3226 break;
3229 case wordchar:
3230 for (j = 0; j < (1 << BYTEWIDTH); j++)
3231 if (SYNTAX (j) == Sword)
3232 fastmap[j] = 1;
3233 break;
3236 case notwordchar:
3237 for (j = 0; j < (1 << BYTEWIDTH); j++)
3238 if (SYNTAX (j) != Sword)
3239 fastmap[j] = 1;
3240 break;
3243 case anychar:
3245 int fastmap_newline = fastmap['\n'];
3247 /* `.' matches anything ... */
3248 for (j = 0; j < (1 << BYTEWIDTH); j++)
3249 fastmap[j] = 1;
3251 /* ... except perhaps newline. */
3252 if (!(bufp->syntax & RE_DOT_NEWLINE))
3253 fastmap['\n'] = fastmap_newline;
3255 /* Return if we have already set `can_be_null'; if we have,
3256 then the fastmap is irrelevant. Something's wrong here. */
3257 else if (bufp->can_be_null)
3258 goto done;
3260 /* Otherwise, have to check alternative paths. */
3261 break;
3264 #ifdef emacs
3265 case syntaxspec:
3266 k = *p++;
3267 for (j = 0; j < (1 << BYTEWIDTH); j++)
3268 if (SYNTAX (j) == (enum syntaxcode) k)
3269 fastmap[j] = 1;
3270 break;
3273 case notsyntaxspec:
3274 k = *p++;
3275 for (j = 0; j < (1 << BYTEWIDTH); j++)
3276 if (SYNTAX (j) != (enum syntaxcode) k)
3277 fastmap[j] = 1;
3278 break;
3281 /* All cases after this match the empty string. These end with
3282 `continue'. */
3285 case before_dot:
3286 case at_dot:
3287 case after_dot:
3288 continue;
3289 #endif /* emacs */
3292 case no_op:
3293 case begline:
3294 case endline:
3295 case begbuf:
3296 case endbuf:
3297 case wordbound:
3298 case notwordbound:
3299 case wordbeg:
3300 case wordend:
3301 case push_dummy_failure:
3302 continue;
3305 case jump_n:
3306 case pop_failure_jump:
3307 case maybe_pop_jump:
3308 case jump:
3309 case jump_past_alt:
3310 case dummy_failure_jump:
3311 EXTRACT_NUMBER_AND_INCR (j, p);
3312 p += j;
3313 if (j > 0)
3314 continue;
3316 /* Jump backward implies we just went through the body of a
3317 loop and matched nothing. Opcode jumped to should be
3318 `on_failure_jump' or `succeed_n'. Just treat it like an
3319 ordinary jump. For a * loop, it has pushed its failure
3320 point already; if so, discard that as redundant. */
3321 if ((re_opcode_t) *p != on_failure_jump
3322 && (re_opcode_t) *p != succeed_n)
3323 continue;
3325 p++;
3326 EXTRACT_NUMBER_AND_INCR (j, p);
3327 p += j;
3329 /* If what's on the stack is where we are now, pop it. */
3330 if (!FAIL_STACK_EMPTY ()
3331 && fail_stack.stack[fail_stack.avail - 1].pointer == p)
3332 fail_stack.avail--;
3334 continue;
3337 case on_failure_jump:
3338 case on_failure_keep_string_jump:
3339 handle_on_failure_jump:
3340 EXTRACT_NUMBER_AND_INCR (j, p);
3342 /* For some patterns, e.g., `(a?)?', `p+j' here points to the
3343 end of the pattern. We don't want to push such a point,
3344 since when we restore it above, entering the switch will
3345 increment `p' past the end of the pattern. We don't need
3346 to push such a point since we obviously won't find any more
3347 fastmap entries beyond `pend'. Such a pattern can match
3348 the null string, though. */
3349 if (p + j < pend)
3351 if (!PUSH_PATTERN_OP (p + j, fail_stack))
3353 RESET_FAIL_STACK ();
3354 return -2;
3357 else
3358 bufp->can_be_null = 1;
3360 if (succeed_n_p)
3362 EXTRACT_NUMBER_AND_INCR (k, p); /* Skip the n. */
3363 succeed_n_p = false;
3366 continue;
3369 case succeed_n:
3370 /* Get to the number of times to succeed. */
3371 p += 2;
3373 /* Increment p past the n for when k != 0. */
3374 EXTRACT_NUMBER_AND_INCR (k, p);
3375 if (k == 0)
3377 p -= 4;
3378 succeed_n_p = true; /* Spaghetti code alert. */
3379 goto handle_on_failure_jump;
3381 continue;
3384 case set_number_at:
3385 p += 4;
3386 continue;
3389 case start_memory:
3390 case stop_memory:
3391 p += 2;
3392 continue;
3395 default:
3396 abort (); /* We have listed all the cases. */
3397 } /* switch *p++ */
3399 /* Getting here means we have found the possible starting
3400 characters for one path of the pattern -- and that the empty
3401 string does not match. We need not follow this path further.
3402 Instead, look at the next alternative (remembered on the
3403 stack), or quit if no more. The test at the top of the loop
3404 does these things. */
3405 path_can_be_null = false;
3406 p = pend;
3407 } /* while p */
3409 /* Set `can_be_null' for the last path (also the first path, if the
3410 pattern is empty). */
3411 bufp->can_be_null |= path_can_be_null;
3413 done:
3414 RESET_FAIL_STACK ();
3415 return 0;
3416 } /* re_compile_fastmap */
3417 #ifdef _LIBC
3418 weak_alias (__re_compile_fastmap, re_compile_fastmap)
3419 #endif
3421 /* Set REGS to hold NUM_REGS registers, storing them in STARTS and
3422 ENDS. Subsequent matches using PATTERN_BUFFER and REGS will use
3423 this memory for recording register information. STARTS and ENDS
3424 must be allocated using the malloc library routine, and must each
3425 be at least NUM_REGS * sizeof (regoff_t) bytes long.
3427 If NUM_REGS == 0, then subsequent matches should allocate their own
3428 register data.
3430 Unless this function is called, the first search or match using
3431 PATTERN_BUFFER will allocate its own register data, without
3432 freeing the old data. */
3434 void
3435 re_set_registers (bufp, regs, num_regs, starts, ends)
3436 struct re_pattern_buffer *bufp;
3437 struct re_registers *regs;
3438 unsigned num_regs;
3439 regoff_t *starts, *ends;
3441 if (num_regs)
3443 bufp->regs_allocated = REGS_REALLOCATE;
3444 regs->num_regs = num_regs;
3445 regs->start = starts;
3446 regs->end = ends;
3448 else
3450 bufp->regs_allocated = REGS_UNALLOCATED;
3451 regs->num_regs = 0;
3452 regs->start = regs->end = (regoff_t *) 0;
3455 #ifdef _LIBC
3456 weak_alias (__re_set_registers, re_set_registers)
3457 #endif
3459 /* Searching routines. */
3461 /* Like re_search_2, below, but only one string is specified, and
3462 doesn't let you say where to stop matching. */
3465 re_search (bufp, string, size, startpos, range, regs)
3466 struct re_pattern_buffer *bufp;
3467 const char *string;
3468 int size, startpos, range;
3469 struct re_registers *regs;
3471 return re_search_2 (bufp, NULL, 0, string, size, startpos, range,
3472 regs, size);
3474 #ifdef _LIBC
3475 weak_alias (__re_search, re_search)
3476 #endif
3479 /* Using the compiled pattern in BUFP->buffer, first tries to match the
3480 virtual concatenation of STRING1 and STRING2, starting first at index
3481 STARTPOS, then at STARTPOS + 1, and so on.
3483 STRING1 and STRING2 have length SIZE1 and SIZE2, respectively.
3485 RANGE is how far to scan while trying to match. RANGE = 0 means try
3486 only at STARTPOS; in general, the last start tried is STARTPOS +
3487 RANGE.
3489 In REGS, return the indices of the virtual concatenation of STRING1
3490 and STRING2 that matched the entire BUFP->buffer and its contained
3491 subexpressions.
3493 Do not consider matching one past the index STOP in the virtual
3494 concatenation of STRING1 and STRING2.
3496 We return either the position in the strings at which the match was
3497 found, -1 if no match, or -2 if error (such as failure
3498 stack overflow). */
3501 re_search_2 (bufp, string1, size1, string2, size2, startpos, range, regs, stop)
3502 struct re_pattern_buffer *bufp;
3503 const char *string1, *string2;
3504 int size1, size2;
3505 int startpos;
3506 int range;
3507 struct re_registers *regs;
3508 int stop;
3510 int val;
3511 register char *fastmap = bufp->fastmap;
3512 register RE_TRANSLATE_TYPE translate = bufp->translate;
3513 int total_size = size1 + size2;
3514 int endpos = startpos + range;
3516 /* Check for out-of-range STARTPOS. */
3517 if (startpos < 0 || startpos > total_size)
3518 return -1;
3520 /* Fix up RANGE if it might eventually take us outside
3521 the virtual concatenation of STRING1 and STRING2.
3522 Make sure we won't move STARTPOS below 0 or above TOTAL_SIZE. */
3523 if (endpos < 0)
3524 range = 0 - startpos;
3525 else if (endpos > total_size)
3526 range = total_size - startpos;
3528 /* If the search isn't to be a backwards one, don't waste time in a
3529 search for a pattern that must be anchored. */
3530 if (bufp->used > 0 && range > 0
3531 && ((re_opcode_t) bufp->buffer[0] == begbuf
3532 /* `begline' is like `begbuf' if it cannot match at newlines. */
3533 || ((re_opcode_t) bufp->buffer[0] == begline
3534 && !bufp->newline_anchor)))
3536 if (startpos > 0)
3537 return -1;
3538 else
3539 range = 1;
3542 #ifdef emacs
3543 /* In a forward search for something that starts with \=.
3544 don't keep searching past point. */
3545 if (bufp->used > 0 && (re_opcode_t) bufp->buffer[0] == at_dot && range > 0)
3547 range = PT - startpos;
3548 if (range <= 0)
3549 return -1;
3551 #endif /* emacs */
3553 /* Update the fastmap now if not correct already. */
3554 if (fastmap && !bufp->fastmap_accurate)
3555 if (re_compile_fastmap (bufp) == -2)
3556 return -2;
3558 /* Loop through the string, looking for a place to start matching. */
3559 for (;;)
3561 /* If a fastmap is supplied, skip quickly over characters that
3562 cannot be the start of a match. If the pattern can match the
3563 null string, however, we don't need to skip characters; we want
3564 the first null string. */
3565 if (fastmap && startpos < total_size && !bufp->can_be_null)
3567 if (range > 0) /* Searching forwards. */
3569 register const char *d;
3570 register int lim = 0;
3571 int irange = range;
3573 if (startpos < size1 && startpos + range >= size1)
3574 lim = range - (size1 - startpos);
3576 d = (startpos >= size1 ? string2 - size1 : string1) + startpos;
3578 /* Written out as an if-else to avoid testing `translate'
3579 inside the loop. */
3580 if (translate)
3581 while (range > lim
3582 && !fastmap[(unsigned char)
3583 translate[(unsigned char) *d++]])
3584 range--;
3585 else
3586 while (range > lim && !fastmap[(unsigned char) *d++])
3587 range--;
3589 startpos += irange - range;
3591 else /* Searching backwards. */
3593 register char c = (size1 == 0 || startpos >= size1
3594 ? string2[startpos - size1]
3595 : string1[startpos]);
3597 if (!fastmap[(unsigned char) TRANSLATE (c)])
3598 goto advance;
3602 /* If can't match the null string, and that's all we have left, fail. */
3603 if (range >= 0 && startpos == total_size && fastmap
3604 && !bufp->can_be_null)
3605 return -1;
3607 val = re_match_2_internal (bufp, string1, size1, string2, size2,
3608 startpos, regs, stop);
3609 #ifndef REGEX_MALLOC
3610 # ifdef C_ALLOCA
3611 alloca (0);
3612 # endif
3613 #endif
3615 if (val >= 0)
3616 return startpos;
3618 if (val == -2)
3619 return -2;
3621 advance:
3622 if (!range)
3623 break;
3624 else if (range > 0)
3626 range--;
3627 startpos++;
3629 else
3631 range++;
3632 startpos--;
3635 return -1;
3636 } /* re_search_2 */
3637 #ifdef _LIBC
3638 weak_alias (__re_search_2, re_search_2)
3639 #endif
3641 /* This converts PTR, a pointer into one of the search strings `string1'
3642 and `string2' into an offset from the beginning of that string. */
3643 #define POINTER_TO_OFFSET(ptr) \
3644 (FIRST_STRING_P (ptr) \
3645 ? ((regoff_t) ((ptr) - string1)) \
3646 : ((regoff_t) ((ptr) - string2 + size1)))
3648 /* Macros for dealing with the split strings in re_match_2. */
3650 #define MATCHING_IN_FIRST_STRING (dend == end_match_1)
3652 /* Call before fetching a character with *d. This switches over to
3653 string2 if necessary. */
3654 #define PREFETCH() \
3655 while (d == dend) \
3657 /* End of string2 => fail. */ \
3658 if (dend == end_match_2) \
3659 goto fail; \
3660 /* End of string1 => advance to string2. */ \
3661 d = string2; \
3662 dend = end_match_2; \
3666 /* Test if at very beginning or at very end of the virtual concatenation
3667 of `string1' and `string2'. If only one string, it's `string2'. */
3668 #define AT_STRINGS_BEG(d) ((d) == (size1 ? string1 : string2) || !size2)
3669 #define AT_STRINGS_END(d) ((d) == end2)
3672 /* Test if D points to a character which is word-constituent. We have
3673 two special cases to check for: if past the end of string1, look at
3674 the first character in string2; and if before the beginning of
3675 string2, look at the last character in string1. */
3676 #define WORDCHAR_P(d) \
3677 (SYNTAX ((d) == end1 ? *string2 \
3678 : (d) == string2 - 1 ? *(end1 - 1) : *(d)) \
3679 == Sword)
3681 /* Disabled due to a compiler bug -- see comment at case wordbound */
3682 #if 0
3683 /* Test if the character before D and the one at D differ with respect
3684 to being word-constituent. */
3685 #define AT_WORD_BOUNDARY(d) \
3686 (AT_STRINGS_BEG (d) || AT_STRINGS_END (d) \
3687 || WORDCHAR_P (d - 1) != WORDCHAR_P (d))
3688 #endif
3690 /* Free everything we malloc. */
3691 #ifdef MATCH_MAY_ALLOCATE
3692 # define FREE_VAR(var) if (var) REGEX_FREE (var); var = NULL
3693 # define FREE_VARIABLES() \
3694 do { \
3695 REGEX_FREE_STACK (fail_stack.stack); \
3696 FREE_VAR (regstart); \
3697 FREE_VAR (regend); \
3698 FREE_VAR (old_regstart); \
3699 FREE_VAR (old_regend); \
3700 FREE_VAR (best_regstart); \
3701 FREE_VAR (best_regend); \
3702 FREE_VAR (reg_info); \
3703 FREE_VAR (reg_dummy); \
3704 FREE_VAR (reg_info_dummy); \
3705 } while (0)
3706 #else
3707 # define FREE_VARIABLES() ((void)0) /* Do nothing! But inhibit gcc warning. */
3708 #endif /* not MATCH_MAY_ALLOCATE */
3710 /* These values must meet several constraints. They must not be valid
3711 register values; since we have a limit of 255 registers (because
3712 we use only one byte in the pattern for the register number), we can
3713 use numbers larger than 255. They must differ by 1, because of
3714 NUM_FAILURE_ITEMS above. And the value for the lowest register must
3715 be larger than the value for the highest register, so we do not try
3716 to actually save any registers when none are active. */
3717 #define NO_HIGHEST_ACTIVE_REG (1 << BYTEWIDTH)
3718 #define NO_LOWEST_ACTIVE_REG (NO_HIGHEST_ACTIVE_REG + 1)
3720 /* Matching routines. */
3722 #ifndef emacs /* Emacs never uses this. */
3723 /* re_match is like re_match_2 except it takes only a single string. */
3726 re_match (bufp, string, size, pos, regs)
3727 struct re_pattern_buffer *bufp;
3728 const char *string;
3729 int size, pos;
3730 struct re_registers *regs;
3732 int result = re_match_2_internal (bufp, NULL, 0, string, size,
3733 pos, regs, size);
3734 # ifndef REGEX_MALLOC
3735 # ifdef C_ALLOCA
3736 alloca (0);
3737 # endif
3738 # endif
3739 return result;
3741 # ifdef _LIBC
3742 weak_alias (__re_match, re_match)
3743 # endif
3744 #endif /* not emacs */
3746 static boolean group_match_null_string_p _RE_ARGS ((unsigned char **p,
3747 unsigned char *end,
3748 register_info_type *reg_info));
3749 static boolean alt_match_null_string_p _RE_ARGS ((unsigned char *p,
3750 unsigned char *end,
3751 register_info_type *reg_info));
3752 static boolean common_op_match_null_string_p _RE_ARGS ((unsigned char **p,
3753 unsigned char *end,
3754 register_info_type *reg_info));
3755 static int bcmp_translate _RE_ARGS ((const char *s1, const char *s2,
3756 int len, char *translate));
3758 /* re_match_2 matches the compiled pattern in BUFP against the
3759 the (virtual) concatenation of STRING1 and STRING2 (of length SIZE1
3760 and SIZE2, respectively). We start matching at POS, and stop
3761 matching at STOP.
3763 If REGS is non-null and the `no_sub' field of BUFP is nonzero, we
3764 store offsets for the substring each group matched in REGS. See the
3765 documentation for exactly how many groups we fill.
3767 We return -1 if no match, -2 if an internal error (such as the
3768 failure stack overflowing). Otherwise, we return the length of the
3769 matched substring. */
3772 re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop)
3773 struct re_pattern_buffer *bufp;
3774 const char *string1, *string2;
3775 int size1, size2;
3776 int pos;
3777 struct re_registers *regs;
3778 int stop;
3780 int result = re_match_2_internal (bufp, string1, size1, string2, size2,
3781 pos, regs, stop);
3782 #ifndef REGEX_MALLOC
3783 # ifdef C_ALLOCA
3784 alloca (0);
3785 # endif
3786 #endif
3787 return result;
3789 #ifdef _LIBC
3790 weak_alias (__re_match_2, re_match_2)
3791 #endif
3793 /* This is a separate function so that we can force an alloca cleanup
3794 afterwards. */
3795 static int
3796 re_match_2_internal (bufp, string1, size1, string2, size2, pos, regs, stop)
3797 struct re_pattern_buffer *bufp;
3798 const char *string1, *string2;
3799 int size1, size2;
3800 int pos;
3801 struct re_registers *regs;
3802 int stop;
3804 /* General temporaries. */
3805 int mcnt;
3806 unsigned char *p1;
3808 /* Just past the end of the corresponding string. */
3809 const char *end1, *end2;
3811 /* Pointers into string1 and string2, just past the last characters in
3812 each to consider matching. */
3813 const char *end_match_1, *end_match_2;
3815 /* Where we are in the data, and the end of the current string. */
3816 const char *d, *dend;
3818 /* Where we are in the pattern, and the end of the pattern. */
3819 unsigned char *p = bufp->buffer;
3820 register unsigned char *pend = p + bufp->used;
3822 /* Mark the opcode just after a start_memory, so we can test for an
3823 empty subpattern when we get to the stop_memory. */
3824 unsigned char *just_past_start_mem = 0;
3826 /* We use this to map every character in the string. */
3827 RE_TRANSLATE_TYPE translate = bufp->translate;
3829 /* Failure point stack. Each place that can handle a failure further
3830 down the line pushes a failure point on this stack. It consists of
3831 restart, regend, and reg_info for all registers corresponding to
3832 the subexpressions we're currently inside, plus the number of such
3833 registers, and, finally, two char *'s. The first char * is where
3834 to resume scanning the pattern; the second one is where to resume
3835 scanning the strings. If the latter is zero, the failure point is
3836 a ``dummy''; if a failure happens and the failure point is a dummy,
3837 it gets discarded and the next next one is tried. */
3838 #ifdef MATCH_MAY_ALLOCATE /* otherwise, this is global. */
3839 fail_stack_type fail_stack;
3840 #endif
3841 #ifdef DEBUG
3842 static unsigned failure_id = 0;
3843 unsigned nfailure_points_pushed = 0, nfailure_points_popped = 0;
3844 #endif
3846 #ifdef REL_ALLOC
3847 /* This holds the pointer to the failure stack, when
3848 it is allocated relocatably. */
3849 fail_stack_elt_t *failure_stack_ptr;
3850 #endif
3852 /* We fill all the registers internally, independent of what we
3853 return, for use in backreferences. The number here includes
3854 an element for register zero. */
3855 size_t num_regs = bufp->re_nsub + 1;
3857 /* The currently active registers. */
3858 active_reg_t lowest_active_reg = NO_LOWEST_ACTIVE_REG;
3859 active_reg_t highest_active_reg = NO_HIGHEST_ACTIVE_REG;
3861 /* Information on the contents of registers. These are pointers into
3862 the input strings; they record just what was matched (on this
3863 attempt) by a subexpression part of the pattern, that is, the
3864 regnum-th regstart pointer points to where in the pattern we began
3865 matching and the regnum-th regend points to right after where we
3866 stopped matching the regnum-th subexpression. (The zeroth register
3867 keeps track of what the whole pattern matches.) */
3868 #ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global. */
3869 const char **regstart, **regend;
3870 #endif
3872 /* If a group that's operated upon by a repetition operator fails to
3873 match anything, then the register for its start will need to be
3874 restored because it will have been set to wherever in the string we
3875 are when we last see its open-group operator. Similarly for a
3876 register's end. */
3877 #ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global. */
3878 const char **old_regstart, **old_regend;
3879 #endif
3881 /* The is_active field of reg_info helps us keep track of which (possibly
3882 nested) subexpressions we are currently in. The matched_something
3883 field of reg_info[reg_num] helps us tell whether or not we have
3884 matched any of the pattern so far this time through the reg_num-th
3885 subexpression. These two fields get reset each time through any
3886 loop their register is in. */
3887 #ifdef MATCH_MAY_ALLOCATE /* otherwise, this is global. */
3888 register_info_type *reg_info;
3889 #endif
3891 /* The following record the register info as found in the above
3892 variables when we find a match better than any we've seen before.
3893 This happens as we backtrack through the failure points, which in
3894 turn happens only if we have not yet matched the entire string. */
3895 unsigned best_regs_set = false;
3896 #ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global. */
3897 const char **best_regstart, **best_regend;
3898 #endif
3900 /* Logically, this is `best_regend[0]'. But we don't want to have to
3901 allocate space for that if we're not allocating space for anything
3902 else (see below). Also, we never need info about register 0 for
3903 any of the other register vectors, and it seems rather a kludge to
3904 treat `best_regend' differently than the rest. So we keep track of
3905 the end of the best match so far in a separate variable. We
3906 initialize this to NULL so that when we backtrack the first time
3907 and need to test it, it's not garbage. */
3908 const char *match_end = NULL;
3910 /* This helps SET_REGS_MATCHED avoid doing redundant work. */
3911 int set_regs_matched_done = 0;
3913 /* Used when we pop values we don't care about. */
3914 #ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global. */
3915 const char **reg_dummy;
3916 register_info_type *reg_info_dummy;
3917 #endif
3919 #ifdef DEBUG
3920 /* Counts the total number of registers pushed. */
3921 unsigned num_regs_pushed = 0;
3922 #endif
3924 DEBUG_PRINT1 ("\n\nEntering re_match_2.\n");
3926 INIT_FAIL_STACK ();
3928 #ifdef MATCH_MAY_ALLOCATE
3929 /* Do not bother to initialize all the register variables if there are
3930 no groups in the pattern, as it takes a fair amount of time. If
3931 there are groups, we include space for register 0 (the whole
3932 pattern), even though we never use it, since it simplifies the
3933 array indexing. We should fix this. */
3934 if (bufp->re_nsub)
3936 regstart = REGEX_TALLOC (num_regs, const char *);
3937 regend = REGEX_TALLOC (num_regs, const char *);
3938 old_regstart = REGEX_TALLOC (num_regs, const char *);
3939 old_regend = REGEX_TALLOC (num_regs, const char *);
3940 best_regstart = REGEX_TALLOC (num_regs, const char *);
3941 best_regend = REGEX_TALLOC (num_regs, const char *);
3942 reg_info = REGEX_TALLOC (num_regs, register_info_type);
3943 reg_dummy = REGEX_TALLOC (num_regs, const char *);
3944 reg_info_dummy = REGEX_TALLOC (num_regs, register_info_type);
3946 if (!(regstart && regend && old_regstart && old_regend && reg_info
3947 && best_regstart && best_regend && reg_dummy && reg_info_dummy))
3949 FREE_VARIABLES ();
3950 return -2;
3953 else
3955 /* We must initialize all our variables to NULL, so that
3956 `FREE_VARIABLES' doesn't try to free them. */
3957 regstart = regend = old_regstart = old_regend = best_regstart
3958 = best_regend = reg_dummy = NULL;
3959 reg_info = reg_info_dummy = (register_info_type *) NULL;
3961 #endif /* MATCH_MAY_ALLOCATE */
3963 /* The starting position is bogus. */
3964 if (pos < 0 || pos > size1 + size2)
3966 FREE_VARIABLES ();
3967 return -1;
3970 /* Initialize subexpression text positions to -1 to mark ones that no
3971 start_memory/stop_memory has been seen for. Also initialize the
3972 register information struct. */
3973 for (mcnt = 1; (unsigned) mcnt < num_regs; mcnt++)
3975 regstart[mcnt] = regend[mcnt]
3976 = old_regstart[mcnt] = old_regend[mcnt] = REG_UNSET_VALUE;
3978 REG_MATCH_NULL_STRING_P (reg_info[mcnt]) = MATCH_NULL_UNSET_VALUE;
3979 IS_ACTIVE (reg_info[mcnt]) = 0;
3980 MATCHED_SOMETHING (reg_info[mcnt]) = 0;
3981 EVER_MATCHED_SOMETHING (reg_info[mcnt]) = 0;
3984 /* We move `string1' into `string2' if the latter's empty -- but not if
3985 `string1' is null. */
3986 if (size2 == 0 && string1 != NULL)
3988 string2 = string1;
3989 size2 = size1;
3990 string1 = 0;
3991 size1 = 0;
3993 end1 = string1 + size1;
3994 end2 = string2 + size2;
3996 /* Compute where to stop matching, within the two strings. */
3997 if (stop <= size1)
3999 end_match_1 = string1 + stop;
4000 end_match_2 = string2;
4002 else
4004 end_match_1 = end1;
4005 end_match_2 = string2 + stop - size1;
4008 /* `p' scans through the pattern as `d' scans through the data.
4009 `dend' is the end of the input string that `d' points within. `d'
4010 is advanced into the following input string whenever necessary, but
4011 this happens before fetching; therefore, at the beginning of the
4012 loop, `d' can be pointing at the end of a string, but it cannot
4013 equal `string2'. */
4014 if (size1 > 0 && pos <= size1)
4016 d = string1 + pos;
4017 dend = end_match_1;
4019 else
4021 d = string2 + pos - size1;
4022 dend = end_match_2;
4025 DEBUG_PRINT1 ("The compiled pattern is:\n");
4026 DEBUG_PRINT_COMPILED_PATTERN (bufp, p, pend);
4027 DEBUG_PRINT1 ("The string to match is: `");
4028 DEBUG_PRINT_DOUBLE_STRING (d, string1, size1, string2, size2);
4029 DEBUG_PRINT1 ("'\n");
4031 /* This loops over pattern commands. It exits by returning from the
4032 function if the match is complete, or it drops through if the match
4033 fails at this starting point in the input data. */
4034 for (;;)
4036 #ifdef _LIBC
4037 DEBUG_PRINT2 ("\n%p: ", p);
4038 #else
4039 DEBUG_PRINT2 ("\n0x%x: ", p);
4040 #endif
4042 if (p == pend)
4043 { /* End of pattern means we might have succeeded. */
4044 DEBUG_PRINT1 ("end of pattern ... ");
4046 /* If we haven't matched the entire string, and we want the
4047 longest match, try backtracking. */
4048 if (d != end_match_2)
4050 /* 1 if this match ends in the same string (string1 or string2)
4051 as the best previous match. */
4052 boolean same_str_p = (FIRST_STRING_P (match_end)
4053 == MATCHING_IN_FIRST_STRING);
4054 /* 1 if this match is the best seen so far. */
4055 boolean best_match_p;
4057 /* AIX compiler got confused when this was combined
4058 with the previous declaration. */
4059 if (same_str_p)
4060 best_match_p = d > match_end;
4061 else
4062 best_match_p = !MATCHING_IN_FIRST_STRING;
4064 DEBUG_PRINT1 ("backtracking.\n");
4066 if (!FAIL_STACK_EMPTY ())
4067 { /* More failure points to try. */
4069 /* If exceeds best match so far, save it. */
4070 if (!best_regs_set || best_match_p)
4072 best_regs_set = true;
4073 match_end = d;
4075 DEBUG_PRINT1 ("\nSAVING match as best so far.\n");
4077 for (mcnt = 1; (unsigned) mcnt < num_regs; mcnt++)
4079 best_regstart[mcnt] = regstart[mcnt];
4080 best_regend[mcnt] = regend[mcnt];
4083 goto fail;
4086 /* If no failure points, don't restore garbage. And if
4087 last match is real best match, don't restore second
4088 best one. */
4089 else if (best_regs_set && !best_match_p)
4091 restore_best_regs:
4092 /* Restore best match. It may happen that `dend ==
4093 end_match_1' while the restored d is in string2.
4094 For example, the pattern `x.*y.*z' against the
4095 strings `x-' and `y-z-', if the two strings are
4096 not consecutive in memory. */
4097 DEBUG_PRINT1 ("Restoring best registers.\n");
4099 d = match_end;
4100 dend = ((d >= string1 && d <= end1)
4101 ? end_match_1 : end_match_2);
4103 for (mcnt = 1; (unsigned) mcnt < num_regs; mcnt++)
4105 regstart[mcnt] = best_regstart[mcnt];
4106 regend[mcnt] = best_regend[mcnt];
4109 } /* d != end_match_2 */
4111 succeed_label:
4112 DEBUG_PRINT1 ("Accepting match.\n");
4114 /* If caller wants register contents data back, do it. */
4115 if (regs && !bufp->no_sub)
4117 /* Have the register data arrays been allocated? */
4118 if (bufp->regs_allocated == REGS_UNALLOCATED)
4119 { /* No. So allocate them with malloc. We need one
4120 extra element beyond `num_regs' for the `-1' marker
4121 GNU code uses. */
4122 regs->num_regs = MAX (RE_NREGS, num_regs + 1);
4123 regs->start = TALLOC (regs->num_regs, regoff_t);
4124 regs->end = TALLOC (regs->num_regs, regoff_t);
4125 if (regs->start == NULL || regs->end == NULL)
4127 FREE_VARIABLES ();
4128 return -2;
4130 bufp->regs_allocated = REGS_REALLOCATE;
4132 else if (bufp->regs_allocated == REGS_REALLOCATE)
4133 { /* Yes. If we need more elements than were already
4134 allocated, reallocate them. If we need fewer, just
4135 leave it alone. */
4136 if (regs->num_regs < num_regs + 1)
4138 regs->num_regs = num_regs + 1;
4139 RETALLOC (regs->start, regs->num_regs, regoff_t);
4140 RETALLOC (regs->end, regs->num_regs, regoff_t);
4141 if (regs->start == NULL || regs->end == NULL)
4143 FREE_VARIABLES ();
4144 return -2;
4148 else
4150 /* These braces fend off a "empty body in an else-statement"
4151 warning under GCC when assert expands to nothing. */
4152 assert (bufp->regs_allocated == REGS_FIXED);
4155 /* Convert the pointer data in `regstart' and `regend' to
4156 indices. Register zero has to be set differently,
4157 since we haven't kept track of any info for it. */
4158 if (regs->num_regs > 0)
4160 regs->start[0] = pos;
4161 regs->end[0] = (MATCHING_IN_FIRST_STRING
4162 ? ((regoff_t) (d - string1))
4163 : ((regoff_t) (d - string2 + size1)));
4166 /* Go through the first `min (num_regs, regs->num_regs)'
4167 registers, since that is all we initialized. */
4168 for (mcnt = 1; (unsigned) mcnt < MIN (num_regs, regs->num_regs);
4169 mcnt++)
4171 if (REG_UNSET (regstart[mcnt]) || REG_UNSET (regend[mcnt]))
4172 regs->start[mcnt] = regs->end[mcnt] = -1;
4173 else
4175 regs->start[mcnt]
4176 = (regoff_t) POINTER_TO_OFFSET (regstart[mcnt]);
4177 regs->end[mcnt]
4178 = (regoff_t) POINTER_TO_OFFSET (regend[mcnt]);
4182 /* If the regs structure we return has more elements than
4183 were in the pattern, set the extra elements to -1. If
4184 we (re)allocated the registers, this is the case,
4185 because we always allocate enough to have at least one
4186 -1 at the end. */
4187 for (mcnt = num_regs; (unsigned) mcnt < regs->num_regs; mcnt++)
4188 regs->start[mcnt] = regs->end[mcnt] = -1;
4189 } /* regs && !bufp->no_sub */
4191 DEBUG_PRINT4 ("%u failure points pushed, %u popped (%u remain).\n",
4192 nfailure_points_pushed, nfailure_points_popped,
4193 nfailure_points_pushed - nfailure_points_popped);
4194 DEBUG_PRINT2 ("%u registers pushed.\n", num_regs_pushed);
4196 mcnt = d - pos - (MATCHING_IN_FIRST_STRING
4197 ? string1
4198 : string2 - size1);
4200 DEBUG_PRINT2 ("Returning %d from re_match_2.\n", mcnt);
4202 FREE_VARIABLES ();
4203 return mcnt;
4206 /* Otherwise match next pattern command. */
4207 switch (SWITCH_ENUM_CAST ((re_opcode_t) *p++))
4209 /* Ignore these. Used to ignore the n of succeed_n's which
4210 currently have n == 0. */
4211 case no_op:
4212 DEBUG_PRINT1 ("EXECUTING no_op.\n");
4213 break;
4215 case succeed:
4216 DEBUG_PRINT1 ("EXECUTING succeed.\n");
4217 goto succeed_label;
4219 /* Match the next n pattern characters exactly. The following
4220 byte in the pattern defines n, and the n bytes after that
4221 are the characters to match. */
4222 case exactn:
4223 mcnt = *p++;
4224 DEBUG_PRINT2 ("EXECUTING exactn %d.\n", mcnt);
4226 /* This is written out as an if-else so we don't waste time
4227 testing `translate' inside the loop. */
4228 if (translate)
4232 PREFETCH ();
4233 if ((unsigned char) translate[(unsigned char) *d++]
4234 != (unsigned char) *p++)
4235 goto fail;
4237 while (--mcnt);
4239 else
4243 PREFETCH ();
4244 if (*d++ != (char) *p++) goto fail;
4246 while (--mcnt);
4248 SET_REGS_MATCHED ();
4249 break;
4252 /* Match any character except possibly a newline or a null. */
4253 case anychar:
4254 DEBUG_PRINT1 ("EXECUTING anychar.\n");
4256 PREFETCH ();
4258 if ((!(bufp->syntax & RE_DOT_NEWLINE) && TRANSLATE (*d) == '\n')
4259 || (bufp->syntax & RE_DOT_NOT_NULL && TRANSLATE (*d) == '\000'))
4260 goto fail;
4262 SET_REGS_MATCHED ();
4263 DEBUG_PRINT2 (" Matched `%d'.\n", *d);
4264 d++;
4265 break;
4268 case charset:
4269 case charset_not:
4271 register unsigned char c;
4272 boolean not = (re_opcode_t) *(p - 1) == charset_not;
4274 DEBUG_PRINT2 ("EXECUTING charset%s.\n", not ? "_not" : "");
4276 PREFETCH ();
4277 c = TRANSLATE (*d); /* The character to match. */
4279 /* Cast to `unsigned' instead of `unsigned char' in case the
4280 bit list is a full 32 bytes long. */
4281 if (c < (unsigned) (*p * BYTEWIDTH)
4282 && p[1 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH)))
4283 not = !not;
4285 p += 1 + *p;
4287 if (!not) goto fail;
4289 SET_REGS_MATCHED ();
4290 d++;
4291 break;
4295 /* The beginning of a group is represented by start_memory.
4296 The arguments are the register number in the next byte, and the
4297 number of groups inner to this one in the next. The text
4298 matched within the group is recorded (in the internal
4299 registers data structure) under the register number. */
4300 case start_memory:
4301 DEBUG_PRINT3 ("EXECUTING start_memory %d (%d):\n", *p, p[1]);
4303 /* Find out if this group can match the empty string. */
4304 p1 = p; /* To send to group_match_null_string_p. */
4306 if (REG_MATCH_NULL_STRING_P (reg_info[*p]) == MATCH_NULL_UNSET_VALUE)
4307 REG_MATCH_NULL_STRING_P (reg_info[*p])
4308 = group_match_null_string_p (&p1, pend, reg_info);
4310 /* Save the position in the string where we were the last time
4311 we were at this open-group operator in case the group is
4312 operated upon by a repetition operator, e.g., with `(a*)*b'
4313 against `ab'; then we want to ignore where we are now in
4314 the string in case this attempt to match fails. */
4315 old_regstart[*p] = REG_MATCH_NULL_STRING_P (reg_info[*p])
4316 ? REG_UNSET (regstart[*p]) ? d : regstart[*p]
4317 : regstart[*p];
4318 DEBUG_PRINT2 (" old_regstart: %d\n",
4319 POINTER_TO_OFFSET (old_regstart[*p]));
4321 regstart[*p] = d;
4322 DEBUG_PRINT2 (" regstart: %d\n", POINTER_TO_OFFSET (regstart[*p]));
4324 IS_ACTIVE (reg_info[*p]) = 1;
4325 MATCHED_SOMETHING (reg_info[*p]) = 0;
4327 /* Clear this whenever we change the register activity status. */
4328 set_regs_matched_done = 0;
4330 /* This is the new highest active register. */
4331 highest_active_reg = *p;
4333 /* If nothing was active before, this is the new lowest active
4334 register. */
4335 if (lowest_active_reg == NO_LOWEST_ACTIVE_REG)
4336 lowest_active_reg = *p;
4338 /* Move past the register number and inner group count. */
4339 p += 2;
4340 just_past_start_mem = p;
4342 break;
4345 /* The stop_memory opcode represents the end of a group. Its
4346 arguments are the same as start_memory's: the register
4347 number, and the number of inner groups. */
4348 case stop_memory:
4349 DEBUG_PRINT3 ("EXECUTING stop_memory %d (%d):\n", *p, p[1]);
4351 /* We need to save the string position the last time we were at
4352 this close-group operator in case the group is operated
4353 upon by a repetition operator, e.g., with `((a*)*(b*)*)*'
4354 against `aba'; then we want to ignore where we are now in
4355 the string in case this attempt to match fails. */
4356 old_regend[*p] = REG_MATCH_NULL_STRING_P (reg_info[*p])
4357 ? REG_UNSET (regend[*p]) ? d : regend[*p]
4358 : regend[*p];
4359 DEBUG_PRINT2 (" old_regend: %d\n",
4360 POINTER_TO_OFFSET (old_regend[*p]));
4362 regend[*p] = d;
4363 DEBUG_PRINT2 (" regend: %d\n", POINTER_TO_OFFSET (regend[*p]));
4365 /* This register isn't active anymore. */
4366 IS_ACTIVE (reg_info[*p]) = 0;
4368 /* Clear this whenever we change the register activity status. */
4369 set_regs_matched_done = 0;
4371 /* If this was the only register active, nothing is active
4372 anymore. */
4373 if (lowest_active_reg == highest_active_reg)
4375 lowest_active_reg = NO_LOWEST_ACTIVE_REG;
4376 highest_active_reg = NO_HIGHEST_ACTIVE_REG;
4378 else
4379 { /* We must scan for the new highest active register, since
4380 it isn't necessarily one less than now: consider
4381 (a(b)c(d(e)f)g). When group 3 ends, after the f), the
4382 new highest active register is 1. */
4383 unsigned char r = *p - 1;
4384 while (r > 0 && !IS_ACTIVE (reg_info[r]))
4385 r--;
4387 /* If we end up at register zero, that means that we saved
4388 the registers as the result of an `on_failure_jump', not
4389 a `start_memory', and we jumped to past the innermost
4390 `stop_memory'. For example, in ((.)*) we save
4391 registers 1 and 2 as a result of the *, but when we pop
4392 back to the second ), we are at the stop_memory 1.
4393 Thus, nothing is active. */
4394 if (r == 0)
4396 lowest_active_reg = NO_LOWEST_ACTIVE_REG;
4397 highest_active_reg = NO_HIGHEST_ACTIVE_REG;
4399 else
4400 highest_active_reg = r;
4403 /* If just failed to match something this time around with a
4404 group that's operated on by a repetition operator, try to
4405 force exit from the ``loop'', and restore the register
4406 information for this group that we had before trying this
4407 last match. */
4408 if ((!MATCHED_SOMETHING (reg_info[*p])
4409 || just_past_start_mem == p - 1)
4410 && (p + 2) < pend)
4412 boolean is_a_jump_n = false;
4414 p1 = p + 2;
4415 mcnt = 0;
4416 switch ((re_opcode_t) *p1++)
4418 case jump_n:
4419 is_a_jump_n = true;
4420 case pop_failure_jump:
4421 case maybe_pop_jump:
4422 case jump:
4423 case dummy_failure_jump:
4424 EXTRACT_NUMBER_AND_INCR (mcnt, p1);
4425 if (is_a_jump_n)
4426 p1 += 2;
4427 break;
4429 default:
4430 /* do nothing */ ;
4432 p1 += mcnt;
4434 /* If the next operation is a jump backwards in the pattern
4435 to an on_failure_jump right before the start_memory
4436 corresponding to this stop_memory, exit from the loop
4437 by forcing a failure after pushing on the stack the
4438 on_failure_jump's jump in the pattern, and d. */
4439 if (mcnt < 0 && (re_opcode_t) *p1 == on_failure_jump
4440 && (re_opcode_t) p1[3] == start_memory && p1[4] == *p)
4442 /* If this group ever matched anything, then restore
4443 what its registers were before trying this last
4444 failed match, e.g., with `(a*)*b' against `ab' for
4445 regstart[1], and, e.g., with `((a*)*(b*)*)*'
4446 against `aba' for regend[3].
4448 Also restore the registers for inner groups for,
4449 e.g., `((a*)(b*))*' against `aba' (register 3 would
4450 otherwise get trashed). */
4452 if (EVER_MATCHED_SOMETHING (reg_info[*p]))
4454 unsigned r;
4456 EVER_MATCHED_SOMETHING (reg_info[*p]) = 0;
4458 /* Restore this and inner groups' (if any) registers. */
4459 for (r = *p; r < (unsigned) *p + (unsigned) *(p + 1);
4460 r++)
4462 regstart[r] = old_regstart[r];
4464 /* xx why this test? */
4465 if (old_regend[r] >= regstart[r])
4466 regend[r] = old_regend[r];
4469 p1++;
4470 EXTRACT_NUMBER_AND_INCR (mcnt, p1);
4471 PUSH_FAILURE_POINT (p1 + mcnt, d, -2);
4473 goto fail;
4477 /* Move past the register number and the inner group count. */
4478 p += 2;
4479 break;
4482 /* \<digit> has been turned into a `duplicate' command which is
4483 followed by the numeric value of <digit> as the register number. */
4484 case duplicate:
4486 register const char *d2, *dend2;
4487 int regno = *p++; /* Get which register to match against. */
4488 DEBUG_PRINT2 ("EXECUTING duplicate %d.\n", regno);
4490 /* Can't back reference a group which we've never matched. */
4491 if (REG_UNSET (regstart[regno]) || REG_UNSET (regend[regno]))
4492 goto fail;
4494 /* Where in input to try to start matching. */
4495 d2 = regstart[regno];
4497 /* Where to stop matching; if both the place to start and
4498 the place to stop matching are in the same string, then
4499 set to the place to stop, otherwise, for now have to use
4500 the end of the first string. */
4502 dend2 = ((FIRST_STRING_P (regstart[regno])
4503 == FIRST_STRING_P (regend[regno]))
4504 ? regend[regno] : end_match_1);
4505 for (;;)
4507 /* If necessary, advance to next segment in register
4508 contents. */
4509 while (d2 == dend2)
4511 if (dend2 == end_match_2) break;
4512 if (dend2 == regend[regno]) break;
4514 /* End of string1 => advance to string2. */
4515 d2 = string2;
4516 dend2 = regend[regno];
4518 /* At end of register contents => success */
4519 if (d2 == dend2) break;
4521 /* If necessary, advance to next segment in data. */
4522 PREFETCH ();
4524 /* How many characters left in this segment to match. */
4525 mcnt = dend - d;
4527 /* Want how many consecutive characters we can match in
4528 one shot, so, if necessary, adjust the count. */
4529 if (mcnt > dend2 - d2)
4530 mcnt = dend2 - d2;
4532 /* Compare that many; failure if mismatch, else move
4533 past them. */
4534 if (translate
4535 ? bcmp_translate (d, d2, mcnt, translate)
4536 : memcmp (d, d2, mcnt))
4537 goto fail;
4538 d += mcnt, d2 += mcnt;
4540 /* Do this because we've match some characters. */
4541 SET_REGS_MATCHED ();
4544 break;
4547 /* begline matches the empty string at the beginning of the string
4548 (unless `not_bol' is set in `bufp'), and, if
4549 `newline_anchor' is set, after newlines. */
4550 case begline:
4551 DEBUG_PRINT1 ("EXECUTING begline.\n");
4553 if (AT_STRINGS_BEG (d))
4555 if (!bufp->not_bol) break;
4557 else if (d[-1] == '\n' && bufp->newline_anchor)
4559 break;
4561 /* In all other cases, we fail. */
4562 goto fail;
4565 /* endline is the dual of begline. */
4566 case endline:
4567 DEBUG_PRINT1 ("EXECUTING endline.\n");
4569 if (AT_STRINGS_END (d))
4571 if (!bufp->not_eol) break;
4574 /* We have to ``prefetch'' the next character. */
4575 else if ((d == end1 ? *string2 : *d) == '\n'
4576 && bufp->newline_anchor)
4578 break;
4580 goto fail;
4583 /* Match at the very beginning of the data. */
4584 case begbuf:
4585 DEBUG_PRINT1 ("EXECUTING begbuf.\n");
4586 if (AT_STRINGS_BEG (d))
4587 break;
4588 goto fail;
4591 /* Match at the very end of the data. */
4592 case endbuf:
4593 DEBUG_PRINT1 ("EXECUTING endbuf.\n");
4594 if (AT_STRINGS_END (d))
4595 break;
4596 goto fail;
4599 /* on_failure_keep_string_jump is used to optimize `.*\n'. It
4600 pushes NULL as the value for the string on the stack. Then
4601 `pop_failure_point' will keep the current value for the
4602 string, instead of restoring it. To see why, consider
4603 matching `foo\nbar' against `.*\n'. The .* matches the foo;
4604 then the . fails against the \n. But the next thing we want
4605 to do is match the \n against the \n; if we restored the
4606 string value, we would be back at the foo.
4608 Because this is used only in specific cases, we don't need to
4609 check all the things that `on_failure_jump' does, to make
4610 sure the right things get saved on the stack. Hence we don't
4611 share its code. The only reason to push anything on the
4612 stack at all is that otherwise we would have to change
4613 `anychar's code to do something besides goto fail in this
4614 case; that seems worse than this. */
4615 case on_failure_keep_string_jump:
4616 DEBUG_PRINT1 ("EXECUTING on_failure_keep_string_jump");
4618 EXTRACT_NUMBER_AND_INCR (mcnt, p);
4619 #ifdef _LIBC
4620 DEBUG_PRINT3 (" %d (to %p):\n", mcnt, p + mcnt);
4621 #else
4622 DEBUG_PRINT3 (" %d (to 0x%x):\n", mcnt, p + mcnt);
4623 #endif
4625 PUSH_FAILURE_POINT (p + mcnt, NULL, -2);
4626 break;
4629 /* Uses of on_failure_jump:
4631 Each alternative starts with an on_failure_jump that points
4632 to the beginning of the next alternative. Each alternative
4633 except the last ends with a jump that in effect jumps past
4634 the rest of the alternatives. (They really jump to the
4635 ending jump of the following alternative, because tensioning
4636 these jumps is a hassle.)
4638 Repeats start with an on_failure_jump that points past both
4639 the repetition text and either the following jump or
4640 pop_failure_jump back to this on_failure_jump. */
4641 case on_failure_jump:
4642 on_failure:
4643 DEBUG_PRINT1 ("EXECUTING on_failure_jump");
4645 EXTRACT_NUMBER_AND_INCR (mcnt, p);
4646 #ifdef _LIBC
4647 DEBUG_PRINT3 (" %d (to %p)", mcnt, p + mcnt);
4648 #else
4649 DEBUG_PRINT3 (" %d (to 0x%x)", mcnt, p + mcnt);
4650 #endif
4652 /* If this on_failure_jump comes right before a group (i.e.,
4653 the original * applied to a group), save the information
4654 for that group and all inner ones, so that if we fail back
4655 to this point, the group's information will be correct.
4656 For example, in \(a*\)*\1, we need the preceding group,
4657 and in \(zz\(a*\)b*\)\2, we need the inner group. */
4659 /* We can't use `p' to check ahead because we push
4660 a failure point to `p + mcnt' after we do this. */
4661 p1 = p;
4663 /* We need to skip no_op's before we look for the
4664 start_memory in case this on_failure_jump is happening as
4665 the result of a completed succeed_n, as in \(a\)\{1,3\}b\1
4666 against aba. */
4667 while (p1 < pend && (re_opcode_t) *p1 == no_op)
4668 p1++;
4670 if (p1 < pend && (re_opcode_t) *p1 == start_memory)
4672 /* We have a new highest active register now. This will
4673 get reset at the start_memory we are about to get to,
4674 but we will have saved all the registers relevant to
4675 this repetition op, as described above. */
4676 highest_active_reg = *(p1 + 1) + *(p1 + 2);
4677 if (lowest_active_reg == NO_LOWEST_ACTIVE_REG)
4678 lowest_active_reg = *(p1 + 1);
4681 DEBUG_PRINT1 (":\n");
4682 PUSH_FAILURE_POINT (p + mcnt, d, -2);
4683 break;
4686 /* A smart repeat ends with `maybe_pop_jump'.
4687 We change it to either `pop_failure_jump' or `jump'. */
4688 case maybe_pop_jump:
4689 EXTRACT_NUMBER_AND_INCR (mcnt, p);
4690 DEBUG_PRINT2 ("EXECUTING maybe_pop_jump %d.\n", mcnt);
4692 register unsigned char *p2 = p;
4694 /* Compare the beginning of the repeat with what in the
4695 pattern follows its end. If we can establish that there
4696 is nothing that they would both match, i.e., that we
4697 would have to backtrack because of (as in, e.g., `a*a')
4698 then we can change to pop_failure_jump, because we'll
4699 never have to backtrack.
4701 This is not true in the case of alternatives: in
4702 `(a|ab)*' we do need to backtrack to the `ab' alternative
4703 (e.g., if the string was `ab'). But instead of trying to
4704 detect that here, the alternative has put on a dummy
4705 failure point which is what we will end up popping. */
4707 /* Skip over open/close-group commands.
4708 If what follows this loop is a ...+ construct,
4709 look at what begins its body, since we will have to
4710 match at least one of that. */
4711 while (1)
4713 if (p2 + 2 < pend
4714 && ((re_opcode_t) *p2 == stop_memory
4715 || (re_opcode_t) *p2 == start_memory))
4716 p2 += 3;
4717 else if (p2 + 6 < pend
4718 && (re_opcode_t) *p2 == dummy_failure_jump)
4719 p2 += 6;
4720 else
4721 break;
4724 p1 = p + mcnt;
4725 /* p1[0] ... p1[2] are the `on_failure_jump' corresponding
4726 to the `maybe_finalize_jump' of this case. Examine what
4727 follows. */
4729 /* If we're at the end of the pattern, we can change. */
4730 if (p2 == pend)
4732 /* Consider what happens when matching ":\(.*\)"
4733 against ":/". I don't really understand this code
4734 yet. */
4735 p[-3] = (unsigned char) pop_failure_jump;
4736 DEBUG_PRINT1
4737 (" End of pattern: change to `pop_failure_jump'.\n");
4740 else if ((re_opcode_t) *p2 == exactn
4741 || (bufp->newline_anchor && (re_opcode_t) *p2 == endline))
4743 register unsigned char c
4744 = *p2 == (unsigned char) endline ? '\n' : p2[2];
4746 if ((re_opcode_t) p1[3] == exactn && p1[5] != c)
4748 p[-3] = (unsigned char) pop_failure_jump;
4749 DEBUG_PRINT3 (" %c != %c => pop_failure_jump.\n",
4750 c, p1[5]);
4753 else if ((re_opcode_t) p1[3] == charset
4754 || (re_opcode_t) p1[3] == charset_not)
4756 int not = (re_opcode_t) p1[3] == charset_not;
4758 if (c < (unsigned char) (p1[4] * BYTEWIDTH)
4759 && p1[5 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH)))
4760 not = !not;
4762 /* `not' is equal to 1 if c would match, which means
4763 that we can't change to pop_failure_jump. */
4764 if (!not)
4766 p[-3] = (unsigned char) pop_failure_jump;
4767 DEBUG_PRINT1 (" No match => pop_failure_jump.\n");
4771 else if ((re_opcode_t) *p2 == charset)
4773 #ifdef DEBUG
4774 register unsigned char c
4775 = *p2 == (unsigned char) endline ? '\n' : p2[2];
4776 #endif
4778 #if 0
4779 if ((re_opcode_t) p1[3] == exactn
4780 && ! ((int) p2[1] * BYTEWIDTH > (int) p1[5]
4781 && (p2[2 + p1[5] / BYTEWIDTH]
4782 & (1 << (p1[5] % BYTEWIDTH)))))
4783 #else
4784 if ((re_opcode_t) p1[3] == exactn
4785 && ! ((int) p2[1] * BYTEWIDTH > (int) p1[4]
4786 && (p2[2 + p1[4] / BYTEWIDTH]
4787 & (1 << (p1[4] % BYTEWIDTH)))))
4788 #endif
4790 p[-3] = (unsigned char) pop_failure_jump;
4791 DEBUG_PRINT3 (" %c != %c => pop_failure_jump.\n",
4792 c, p1[5]);
4795 else if ((re_opcode_t) p1[3] == charset_not)
4797 int idx;
4798 /* We win if the charset_not inside the loop
4799 lists every character listed in the charset after. */
4800 for (idx = 0; idx < (int) p2[1]; idx++)
4801 if (! (p2[2 + idx] == 0
4802 || (idx < (int) p1[4]
4803 && ((p2[2 + idx] & ~ p1[5 + idx]) == 0))))
4804 break;
4806 if (idx == p2[1])
4808 p[-3] = (unsigned char) pop_failure_jump;
4809 DEBUG_PRINT1 (" No match => pop_failure_jump.\n");
4812 else if ((re_opcode_t) p1[3] == charset)
4814 int idx;
4815 /* We win if the charset inside the loop
4816 has no overlap with the one after the loop. */
4817 for (idx = 0;
4818 idx < (int) p2[1] && idx < (int) p1[4];
4819 idx++)
4820 if ((p2[2 + idx] & p1[5 + idx]) != 0)
4821 break;
4823 if (idx == p2[1] || idx == p1[4])
4825 p[-3] = (unsigned char) pop_failure_jump;
4826 DEBUG_PRINT1 (" No match => pop_failure_jump.\n");
4831 p -= 2; /* Point at relative address again. */
4832 if ((re_opcode_t) p[-1] != pop_failure_jump)
4834 p[-1] = (unsigned char) jump;
4835 DEBUG_PRINT1 (" Match => jump.\n");
4836 goto unconditional_jump;
4838 /* Note fall through. */
4841 /* The end of a simple repeat has a pop_failure_jump back to
4842 its matching on_failure_jump, where the latter will push a
4843 failure point. The pop_failure_jump takes off failure
4844 points put on by this pop_failure_jump's matching
4845 on_failure_jump; we got through the pattern to here from the
4846 matching on_failure_jump, so didn't fail. */
4847 case pop_failure_jump:
4849 /* We need to pass separate storage for the lowest and
4850 highest registers, even though we don't care about the
4851 actual values. Otherwise, we will restore only one
4852 register from the stack, since lowest will == highest in
4853 `pop_failure_point'. */
4854 active_reg_t dummy_low_reg, dummy_high_reg;
4855 unsigned char *pdummy;
4856 const char *sdummy;
4858 DEBUG_PRINT1 ("EXECUTING pop_failure_jump.\n");
4859 POP_FAILURE_POINT (sdummy, pdummy,
4860 dummy_low_reg, dummy_high_reg,
4861 reg_dummy, reg_dummy, reg_info_dummy);
4863 /* Note fall through. */
4865 unconditional_jump:
4866 #ifdef _LIBC
4867 DEBUG_PRINT2 ("\n%p: ", p);
4868 #else
4869 DEBUG_PRINT2 ("\n0x%x: ", p);
4870 #endif
4871 /* Note fall through. */
4873 /* Unconditionally jump (without popping any failure points). */
4874 case jump:
4875 EXTRACT_NUMBER_AND_INCR (mcnt, p); /* Get the amount to jump. */
4876 DEBUG_PRINT2 ("EXECUTING jump %d ", mcnt);
4877 p += mcnt; /* Do the jump. */
4878 #ifdef _LIBC
4879 DEBUG_PRINT2 ("(to %p).\n", p);
4880 #else
4881 DEBUG_PRINT2 ("(to 0x%x).\n", p);
4882 #endif
4883 break;
4886 /* We need this opcode so we can detect where alternatives end
4887 in `group_match_null_string_p' et al. */
4888 case jump_past_alt:
4889 DEBUG_PRINT1 ("EXECUTING jump_past_alt.\n");
4890 goto unconditional_jump;
4893 /* Normally, the on_failure_jump pushes a failure point, which
4894 then gets popped at pop_failure_jump. We will end up at
4895 pop_failure_jump, also, and with a pattern of, say, `a+', we
4896 are skipping over the on_failure_jump, so we have to push
4897 something meaningless for pop_failure_jump to pop. */
4898 case dummy_failure_jump:
4899 DEBUG_PRINT1 ("EXECUTING dummy_failure_jump.\n");
4900 /* It doesn't matter what we push for the string here. What
4901 the code at `fail' tests is the value for the pattern. */
4902 PUSH_FAILURE_POINT (NULL, NULL, -2);
4903 goto unconditional_jump;
4906 /* At the end of an alternative, we need to push a dummy failure
4907 point in case we are followed by a `pop_failure_jump', because
4908 we don't want the failure point for the alternative to be
4909 popped. For example, matching `(a|ab)*' against `aab'
4910 requires that we match the `ab' alternative. */
4911 case push_dummy_failure:
4912 DEBUG_PRINT1 ("EXECUTING push_dummy_failure.\n");
4913 /* See comments just above at `dummy_failure_jump' about the
4914 two zeroes. */
4915 PUSH_FAILURE_POINT (NULL, NULL, -2);
4916 break;
4918 /* Have to succeed matching what follows at least n times.
4919 After that, handle like `on_failure_jump'. */
4920 case succeed_n:
4921 EXTRACT_NUMBER (mcnt, p + 2);
4922 DEBUG_PRINT2 ("EXECUTING succeed_n %d.\n", mcnt);
4924 assert (mcnt >= 0);
4925 /* Originally, this is how many times we HAVE to succeed. */
4926 if (mcnt > 0)
4928 mcnt--;
4929 p += 2;
4930 STORE_NUMBER_AND_INCR (p, mcnt);
4931 #ifdef _LIBC
4932 DEBUG_PRINT3 (" Setting %p to %d.\n", p - 2, mcnt);
4933 #else
4934 DEBUG_PRINT3 (" Setting 0x%x to %d.\n", p - 2, mcnt);
4935 #endif
4937 else if (mcnt == 0)
4939 #ifdef _LIBC
4940 DEBUG_PRINT2 (" Setting two bytes from %p to no_op.\n", p+2);
4941 #else
4942 DEBUG_PRINT2 (" Setting two bytes from 0x%x to no_op.\n", p+2);
4943 #endif
4944 p[2] = (unsigned char) no_op;
4945 p[3] = (unsigned char) no_op;
4946 goto on_failure;
4948 break;
4950 case jump_n:
4951 EXTRACT_NUMBER (mcnt, p + 2);
4952 DEBUG_PRINT2 ("EXECUTING jump_n %d.\n", mcnt);
4954 /* Originally, this is how many times we CAN jump. */
4955 if (mcnt)
4957 mcnt--;
4958 STORE_NUMBER (p + 2, mcnt);
4959 #ifdef _LIBC
4960 DEBUG_PRINT3 (" Setting %p to %d.\n", p + 2, mcnt);
4961 #else
4962 DEBUG_PRINT3 (" Setting 0x%x to %d.\n", p + 2, mcnt);
4963 #endif
4964 goto unconditional_jump;
4966 /* If don't have to jump any more, skip over the rest of command. */
4967 else
4968 p += 4;
4969 break;
4971 case set_number_at:
4973 DEBUG_PRINT1 ("EXECUTING set_number_at.\n");
4975 EXTRACT_NUMBER_AND_INCR (mcnt, p);
4976 p1 = p + mcnt;
4977 EXTRACT_NUMBER_AND_INCR (mcnt, p);
4978 #ifdef _LIBC
4979 DEBUG_PRINT3 (" Setting %p to %d.\n", p1, mcnt);
4980 #else
4981 DEBUG_PRINT3 (" Setting 0x%x to %d.\n", p1, mcnt);
4982 #endif
4983 STORE_NUMBER (p1, mcnt);
4984 break;
4987 #if 0
4988 /* The DEC Alpha C compiler 3.x generates incorrect code for the
4989 test WORDCHAR_P (d - 1) != WORDCHAR_P (d) in the expansion of
4990 AT_WORD_BOUNDARY, so this code is disabled. Expanding the
4991 macro and introducing temporary variables works around the bug. */
4993 case wordbound:
4994 DEBUG_PRINT1 ("EXECUTING wordbound.\n");
4995 if (AT_WORD_BOUNDARY (d))
4996 break;
4997 goto fail;
4999 case notwordbound:
5000 DEBUG_PRINT1 ("EXECUTING notwordbound.\n");
5001 if (AT_WORD_BOUNDARY (d))
5002 goto fail;
5003 break;
5004 #else
5005 case wordbound:
5007 boolean prevchar, thischar;
5009 DEBUG_PRINT1 ("EXECUTING wordbound.\n");
5010 if (AT_STRINGS_BEG (d) || AT_STRINGS_END (d))
5011 break;
5013 prevchar = WORDCHAR_P (d - 1);
5014 thischar = WORDCHAR_P (d);
5015 if (prevchar != thischar)
5016 break;
5017 goto fail;
5020 case notwordbound:
5022 boolean prevchar, thischar;
5024 DEBUG_PRINT1 ("EXECUTING notwordbound.\n");
5025 if (AT_STRINGS_BEG (d) || AT_STRINGS_END (d))
5026 goto fail;
5028 prevchar = WORDCHAR_P (d - 1);
5029 thischar = WORDCHAR_P (d);
5030 if (prevchar != thischar)
5031 goto fail;
5032 break;
5034 #endif
5036 case wordbeg:
5037 DEBUG_PRINT1 ("EXECUTING wordbeg.\n");
5038 if (WORDCHAR_P (d) && (AT_STRINGS_BEG (d) || !WORDCHAR_P (d - 1)))
5039 break;
5040 goto fail;
5042 case wordend:
5043 DEBUG_PRINT1 ("EXECUTING wordend.\n");
5044 if (!AT_STRINGS_BEG (d) && WORDCHAR_P (d - 1)
5045 && (!WORDCHAR_P (d) || AT_STRINGS_END (d)))
5046 break;
5047 goto fail;
5049 #ifdef emacs
5050 case before_dot:
5051 DEBUG_PRINT1 ("EXECUTING before_dot.\n");
5052 if (PTR_CHAR_POS ((unsigned char *) d) >= point)
5053 goto fail;
5054 break;
5056 case at_dot:
5057 DEBUG_PRINT1 ("EXECUTING at_dot.\n");
5058 if (PTR_CHAR_POS ((unsigned char *) d) != point)
5059 goto fail;
5060 break;
5062 case after_dot:
5063 DEBUG_PRINT1 ("EXECUTING after_dot.\n");
5064 if (PTR_CHAR_POS ((unsigned char *) d) <= point)
5065 goto fail;
5066 break;
5068 case syntaxspec:
5069 DEBUG_PRINT2 ("EXECUTING syntaxspec %d.\n", mcnt);
5070 mcnt = *p++;
5071 goto matchsyntax;
5073 case wordchar:
5074 DEBUG_PRINT1 ("EXECUTING Emacs wordchar.\n");
5075 mcnt = (int) Sword;
5076 matchsyntax:
5077 PREFETCH ();
5078 /* Can't use *d++ here; SYNTAX may be an unsafe macro. */
5079 d++;
5080 if (SYNTAX (d[-1]) != (enum syntaxcode) mcnt)
5081 goto fail;
5082 SET_REGS_MATCHED ();
5083 break;
5085 case notsyntaxspec:
5086 DEBUG_PRINT2 ("EXECUTING notsyntaxspec %d.\n", mcnt);
5087 mcnt = *p++;
5088 goto matchnotsyntax;
5090 case notwordchar:
5091 DEBUG_PRINT1 ("EXECUTING Emacs notwordchar.\n");
5092 mcnt = (int) Sword;
5093 matchnotsyntax:
5094 PREFETCH ();
5095 /* Can't use *d++ here; SYNTAX may be an unsafe macro. */
5096 d++;
5097 if (SYNTAX (d[-1]) == (enum syntaxcode) mcnt)
5098 goto fail;
5099 SET_REGS_MATCHED ();
5100 break;
5102 #else /* not emacs */
5103 case wordchar:
5104 DEBUG_PRINT1 ("EXECUTING non-Emacs wordchar.\n");
5105 PREFETCH ();
5106 if (!WORDCHAR_P (d))
5107 goto fail;
5108 SET_REGS_MATCHED ();
5109 d++;
5110 break;
5112 case notwordchar:
5113 DEBUG_PRINT1 ("EXECUTING non-Emacs notwordchar.\n");
5114 PREFETCH ();
5115 if (WORDCHAR_P (d))
5116 goto fail;
5117 SET_REGS_MATCHED ();
5118 d++;
5119 break;
5120 #endif /* not emacs */
5122 default:
5123 abort ();
5125 continue; /* Successfully executed one pattern command; keep going. */
5128 /* We goto here if a matching operation fails. */
5129 fail:
5130 if (!FAIL_STACK_EMPTY ())
5131 { /* A restart point is known. Restore to that state. */
5132 DEBUG_PRINT1 ("\nFAIL:\n");
5133 POP_FAILURE_POINT (d, p,
5134 lowest_active_reg, highest_active_reg,
5135 regstart, regend, reg_info);
5137 /* If this failure point is a dummy, try the next one. */
5138 if (!p)
5139 goto fail;
5141 /* If we failed to the end of the pattern, don't examine *p. */
5142 assert (p <= pend);
5143 if (p < pend)
5145 boolean is_a_jump_n = false;
5147 /* If failed to a backwards jump that's part of a repetition
5148 loop, need to pop this failure point and use the next one. */
5149 switch ((re_opcode_t) *p)
5151 case jump_n:
5152 is_a_jump_n = true;
5153 case maybe_pop_jump:
5154 case pop_failure_jump:
5155 case jump:
5156 p1 = p + 1;
5157 EXTRACT_NUMBER_AND_INCR (mcnt, p1);
5158 p1 += mcnt;
5160 if ((is_a_jump_n && (re_opcode_t) *p1 == succeed_n)
5161 || (!is_a_jump_n
5162 && (re_opcode_t) *p1 == on_failure_jump))
5163 goto fail;
5164 break;
5165 default:
5166 /* do nothing */ ;
5170 if (d >= string1 && d <= end1)
5171 dend = end_match_1;
5173 else
5174 break; /* Matching at this starting point really fails. */
5175 } /* for (;;) */
5177 if (best_regs_set)
5178 goto restore_best_regs;
5180 FREE_VARIABLES ();
5182 return -1; /* Failure to match. */
5183 } /* re_match_2 */
5185 /* Subroutine definitions for re_match_2. */
5188 /* We are passed P pointing to a register number after a start_memory.
5190 Return true if the pattern up to the corresponding stop_memory can
5191 match the empty string, and false otherwise.
5193 If we find the matching stop_memory, sets P to point to one past its number.
5194 Otherwise, sets P to an undefined byte less than or equal to END.
5196 We don't handle duplicates properly (yet). */
5198 static boolean
5199 group_match_null_string_p (p, end, reg_info)
5200 unsigned char **p, *end;
5201 register_info_type *reg_info;
5203 int mcnt;
5204 /* Point to after the args to the start_memory. */
5205 unsigned char *p1 = *p + 2;
5207 while (p1 < end)
5209 /* Skip over opcodes that can match nothing, and return true or
5210 false, as appropriate, when we get to one that can't, or to the
5211 matching stop_memory. */
5213 switch ((re_opcode_t) *p1)
5215 /* Could be either a loop or a series of alternatives. */
5216 case on_failure_jump:
5217 p1++;
5218 EXTRACT_NUMBER_AND_INCR (mcnt, p1);
5220 /* If the next operation is not a jump backwards in the
5221 pattern. */
5223 if (mcnt >= 0)
5225 /* Go through the on_failure_jumps of the alternatives,
5226 seeing if any of the alternatives cannot match nothing.
5227 The last alternative starts with only a jump,
5228 whereas the rest start with on_failure_jump and end
5229 with a jump, e.g., here is the pattern for `a|b|c':
5231 /on_failure_jump/0/6/exactn/1/a/jump_past_alt/0/6
5232 /on_failure_jump/0/6/exactn/1/b/jump_past_alt/0/3
5233 /exactn/1/c
5235 So, we have to first go through the first (n-1)
5236 alternatives and then deal with the last one separately. */
5239 /* Deal with the first (n-1) alternatives, which start
5240 with an on_failure_jump (see above) that jumps to right
5241 past a jump_past_alt. */
5243 while ((re_opcode_t) p1[mcnt-3] == jump_past_alt)
5245 /* `mcnt' holds how many bytes long the alternative
5246 is, including the ending `jump_past_alt' and
5247 its number. */
5249 if (!alt_match_null_string_p (p1, p1 + mcnt - 3,
5250 reg_info))
5251 return false;
5253 /* Move to right after this alternative, including the
5254 jump_past_alt. */
5255 p1 += mcnt;
5257 /* Break if it's the beginning of an n-th alternative
5258 that doesn't begin with an on_failure_jump. */
5259 if ((re_opcode_t) *p1 != on_failure_jump)
5260 break;
5262 /* Still have to check that it's not an n-th
5263 alternative that starts with an on_failure_jump. */
5264 p1++;
5265 EXTRACT_NUMBER_AND_INCR (mcnt, p1);
5266 if ((re_opcode_t) p1[mcnt-3] != jump_past_alt)
5268 /* Get to the beginning of the n-th alternative. */
5269 p1 -= 3;
5270 break;
5274 /* Deal with the last alternative: go back and get number
5275 of the `jump_past_alt' just before it. `mcnt' contains
5276 the length of the alternative. */
5277 EXTRACT_NUMBER (mcnt, p1 - 2);
5279 if (!alt_match_null_string_p (p1, p1 + mcnt, reg_info))
5280 return false;
5282 p1 += mcnt; /* Get past the n-th alternative. */
5283 } /* if mcnt > 0 */
5284 break;
5287 case stop_memory:
5288 assert (p1[1] == **p);
5289 *p = p1 + 2;
5290 return true;
5293 default:
5294 if (!common_op_match_null_string_p (&p1, end, reg_info))
5295 return false;
5297 } /* while p1 < end */
5299 return false;
5300 } /* group_match_null_string_p */
5303 /* Similar to group_match_null_string_p, but doesn't deal with alternatives:
5304 It expects P to be the first byte of a single alternative and END one
5305 byte past the last. The alternative can contain groups. */
5307 static boolean
5308 alt_match_null_string_p (p, end, reg_info)
5309 unsigned char *p, *end;
5310 register_info_type *reg_info;
5312 int mcnt;
5313 unsigned char *p1 = p;
5315 while (p1 < end)
5317 /* Skip over opcodes that can match nothing, and break when we get
5318 to one that can't. */
5320 switch ((re_opcode_t) *p1)
5322 /* It's a loop. */
5323 case on_failure_jump:
5324 p1++;
5325 EXTRACT_NUMBER_AND_INCR (mcnt, p1);
5326 p1 += mcnt;
5327 break;
5329 default:
5330 if (!common_op_match_null_string_p (&p1, end, reg_info))
5331 return false;
5333 } /* while p1 < end */
5335 return true;
5336 } /* alt_match_null_string_p */
5339 /* Deals with the ops common to group_match_null_string_p and
5340 alt_match_null_string_p.
5342 Sets P to one after the op and its arguments, if any. */
5344 static boolean
5345 common_op_match_null_string_p (p, end, reg_info)
5346 unsigned char **p, *end;
5347 register_info_type *reg_info;
5349 int mcnt;
5350 boolean ret;
5351 int reg_no;
5352 unsigned char *p1 = *p;
5354 switch ((re_opcode_t) *p1++)
5356 case no_op:
5357 case begline:
5358 case endline:
5359 case begbuf:
5360 case endbuf:
5361 case wordbeg:
5362 case wordend:
5363 case wordbound:
5364 case notwordbound:
5365 #ifdef emacs
5366 case before_dot:
5367 case at_dot:
5368 case after_dot:
5369 #endif
5370 break;
5372 case start_memory:
5373 reg_no = *p1;
5374 assert (reg_no > 0 && reg_no <= MAX_REGNUM);
5375 ret = group_match_null_string_p (&p1, end, reg_info);
5377 /* Have to set this here in case we're checking a group which
5378 contains a group and a back reference to it. */
5380 if (REG_MATCH_NULL_STRING_P (reg_info[reg_no]) == MATCH_NULL_UNSET_VALUE)
5381 REG_MATCH_NULL_STRING_P (reg_info[reg_no]) = ret;
5383 if (!ret)
5384 return false;
5385 break;
5387 /* If this is an optimized succeed_n for zero times, make the jump. */
5388 case jump:
5389 EXTRACT_NUMBER_AND_INCR (mcnt, p1);
5390 if (mcnt >= 0)
5391 p1 += mcnt;
5392 else
5393 return false;
5394 break;
5396 case succeed_n:
5397 /* Get to the number of times to succeed. */
5398 p1 += 2;
5399 EXTRACT_NUMBER_AND_INCR (mcnt, p1);
5401 if (mcnt == 0)
5403 p1 -= 4;
5404 EXTRACT_NUMBER_AND_INCR (mcnt, p1);
5405 p1 += mcnt;
5407 else
5408 return false;
5409 break;
5411 case duplicate:
5412 if (!REG_MATCH_NULL_STRING_P (reg_info[*p1]))
5413 return false;
5414 break;
5416 case set_number_at:
5417 p1 += 4;
5419 default:
5420 /* All other opcodes mean we cannot match the empty string. */
5421 return false;
5424 *p = p1;
5425 return true;
5426 } /* common_op_match_null_string_p */
5429 /* Return zero if TRANSLATE[S1] and TRANSLATE[S2] are identical for LEN
5430 bytes; nonzero otherwise. */
5432 static int
5433 bcmp_translate (s1, s2, len, translate)
5434 const char *s1, *s2;
5435 register int len;
5436 RE_TRANSLATE_TYPE translate;
5438 register const unsigned char *p1 = (const unsigned char *) s1;
5439 register const unsigned char *p2 = (const unsigned char *) s2;
5440 while (len)
5442 if (translate[*p1++] != translate[*p2++]) return 1;
5443 len--;
5445 return 0;
5448 /* Entry points for GNU code. */
5450 /* re_compile_pattern is the GNU regular expression compiler: it
5451 compiles PATTERN (of length SIZE) and puts the result in BUFP.
5452 Returns 0 if the pattern was valid, otherwise an error string.
5454 Assumes the `allocated' (and perhaps `buffer') and `translate' fields
5455 are set in BUFP on entry.
5457 We call regex_compile to do the actual compilation. */
5459 const char *
5460 re_compile_pattern (pattern, length, bufp)
5461 const char *pattern;
5462 size_t length;
5463 struct re_pattern_buffer *bufp;
5465 reg_errcode_t ret;
5467 /* GNU code is written to assume at least RE_NREGS registers will be set
5468 (and at least one extra will be -1). */
5469 bufp->regs_allocated = REGS_UNALLOCATED;
5471 /* And GNU code determines whether or not to get register information
5472 by passing null for the REGS argument to re_match, etc., not by
5473 setting no_sub. */
5474 bufp->no_sub = 0;
5476 /* Match anchors at newline. */
5477 bufp->newline_anchor = 1;
5479 ret = regex_compile (pattern, length, re_syntax_options, bufp);
5481 if (!ret)
5482 return NULL;
5483 return gettext (re_error_msgid[(int) ret]);
5485 #ifdef _LIBC
5486 weak_alias (__re_compile_pattern, re_compile_pattern)
5487 #endif
5489 /* Entry points compatible with 4.2 BSD regex library. We don't define
5490 them unless specifically requested. */
5492 #if defined _REGEX_RE_COMP || defined _LIBC
5494 /* BSD has one and only one pattern buffer. */
5495 static struct re_pattern_buffer re_comp_buf;
5497 char *
5498 #ifdef _LIBC
5499 /* Make these definitions weak in libc, so POSIX programs can redefine
5500 these names if they don't use our functions, and still use
5501 regcomp/regexec below without link errors. */
5502 weak_function
5503 #endif
5504 re_comp (s)
5505 const char *s;
5507 reg_errcode_t ret;
5509 if (!s)
5511 if (!re_comp_buf.buffer)
5512 return gettext ("No previous regular expression");
5513 return 0;
5516 if (!re_comp_buf.buffer)
5518 re_comp_buf.buffer = (unsigned char *) malloc (200);
5519 if (re_comp_buf.buffer == NULL)
5520 return (char *) gettext (re_error_msgid[(int) REG_ESPACE]);
5521 re_comp_buf.allocated = 200;
5523 re_comp_buf.fastmap = (char *) malloc (1 << BYTEWIDTH);
5524 if (re_comp_buf.fastmap == NULL)
5525 return (char *) gettext (re_error_msgid[(int) REG_ESPACE]);
5528 /* Since `re_exec' always passes NULL for the `regs' argument, we
5529 don't need to initialize the pattern buffer fields which affect it. */
5531 /* Match anchors at newlines. */
5532 re_comp_buf.newline_anchor = 1;
5534 ret = regex_compile (s, strlen (s), re_syntax_options, &re_comp_buf);
5536 if (!ret)
5537 return NULL;
5539 /* Yes, we're discarding `const' here if !HAVE_LIBINTL. */
5540 return (char *) gettext (re_error_msgid[(int) ret]);
5545 #ifdef _LIBC
5546 weak_function
5547 #endif
5548 re_exec (s)
5549 const char *s;
5551 const int len = strlen (s);
5552 return
5553 0 <= re_search (&re_comp_buf, s, len, 0, len, (struct re_registers *) 0);
5556 #endif /* _REGEX_RE_COMP */
5558 /* POSIX.2 functions. Don't define these for Emacs. */
5560 #ifndef emacs
5562 /* regcomp takes a regular expression as a string and compiles it.
5564 PREG is a regex_t *. We do not expect any fields to be initialized,
5565 since POSIX says we shouldn't. Thus, we set
5567 `buffer' to the compiled pattern;
5568 `used' to the length of the compiled pattern;
5569 `syntax' to RE_SYNTAX_POSIX_EXTENDED if the
5570 REG_EXTENDED bit in CFLAGS is set; otherwise, to
5571 RE_SYNTAX_POSIX_BASIC;
5572 `newline_anchor' to REG_NEWLINE being set in CFLAGS;
5573 `fastmap' and `fastmap_accurate' to zero;
5574 `re_nsub' to the number of subexpressions in PATTERN.
5576 PATTERN is the address of the pattern string.
5578 CFLAGS is a series of bits which affect compilation.
5580 If REG_EXTENDED is set, we use POSIX extended syntax; otherwise, we
5581 use POSIX basic syntax.
5583 If REG_NEWLINE is set, then . and [^...] don't match newline.
5584 Also, regexec will try a match beginning after every newline.
5586 If REG_ICASE is set, then we considers upper- and lowercase
5587 versions of letters to be equivalent when matching.
5589 If REG_NOSUB is set, then when PREG is passed to regexec, that
5590 routine will report only success or failure, and nothing about the
5591 registers.
5593 It returns 0 if it succeeds, nonzero if it doesn't. (See regex.h for
5594 the return codes and their meanings.) */
5597 regcomp (preg, pattern, cflags)
5598 regex_t *preg;
5599 const char *pattern;
5600 int cflags;
5602 reg_errcode_t ret;
5603 reg_syntax_t syntax
5604 = (cflags & REG_EXTENDED) ?
5605 RE_SYNTAX_POSIX_EXTENDED : RE_SYNTAX_POSIX_BASIC;
5607 /* regex_compile will allocate the space for the compiled pattern. */
5608 preg->buffer = 0;
5609 preg->allocated = 0;
5610 preg->used = 0;
5612 /* Don't bother to use a fastmap when searching. This simplifies the
5613 REG_NEWLINE case: if we used a fastmap, we'd have to put all the
5614 characters after newlines into the fastmap. This way, we just try
5615 every character. */
5616 preg->fastmap = 0;
5618 if (cflags & REG_ICASE)
5620 unsigned i;
5622 preg->translate
5623 = (RE_TRANSLATE_TYPE) malloc (CHAR_SET_SIZE
5624 * sizeof (*(RE_TRANSLATE_TYPE)0));
5625 if (preg->translate == NULL)
5626 return (int) REG_ESPACE;
5628 /* Map uppercase characters to corresponding lowercase ones. */
5629 for (i = 0; i < CHAR_SET_SIZE; i++)
5630 preg->translate[i] = ISUPPER (i) ? tolower (i) : i;
5632 else
5633 preg->translate = NULL;
5635 /* If REG_NEWLINE is set, newlines are treated differently. */
5636 if (cflags & REG_NEWLINE)
5637 { /* REG_NEWLINE implies neither . nor [^...] match newline. */
5638 syntax &= ~RE_DOT_NEWLINE;
5639 syntax |= RE_HAT_LISTS_NOT_NEWLINE;
5640 /* It also changes the matching behavior. */
5641 preg->newline_anchor = 1;
5643 else
5644 preg->newline_anchor = 0;
5646 preg->no_sub = !!(cflags & REG_NOSUB);
5648 /* POSIX says a null character in the pattern terminates it, so we
5649 can use strlen here in compiling the pattern. */
5650 ret = regex_compile (pattern, strlen (pattern), syntax, preg);
5652 /* POSIX doesn't distinguish between an unmatched open-group and an
5653 unmatched close-group: both are REG_EPAREN. */
5654 if (ret == REG_ERPAREN) ret = REG_EPAREN;
5656 return (int) ret;
5658 #ifdef _LIBC
5659 weak_alias (__regcomp, regcomp)
5660 #endif
5663 /* regexec searches for a given pattern, specified by PREG, in the
5664 string STRING.
5666 If NMATCH is zero or REG_NOSUB was set in the cflags argument to
5667 `regcomp', we ignore PMATCH. Otherwise, we assume PMATCH has at
5668 least NMATCH elements, and we set them to the offsets of the
5669 corresponding matched substrings.
5671 EFLAGS specifies `execution flags' which affect matching: if
5672 REG_NOTBOL is set, then ^ does not match at the beginning of the
5673 string; if REG_NOTEOL is set, then $ does not match at the end.
5675 We return 0 if we find a match and REG_NOMATCH if not. */
5678 regexec (preg, string, nmatch, pmatch, eflags)
5679 const regex_t *preg;
5680 const char *string;
5681 size_t nmatch;
5682 regmatch_t pmatch[];
5683 int eflags;
5685 int ret;
5686 struct re_registers regs;
5687 regex_t private_preg;
5688 int len = strlen (string);
5689 boolean want_reg_info = !preg->no_sub && nmatch > 0;
5691 private_preg = *preg;
5693 private_preg.not_bol = !!(eflags & REG_NOTBOL);
5694 private_preg.not_eol = !!(eflags & REG_NOTEOL);
5696 /* The user has told us exactly how many registers to return
5697 information about, via `nmatch'. We have to pass that on to the
5698 matching routines. */
5699 private_preg.regs_allocated = REGS_FIXED;
5701 if (want_reg_info)
5703 regs.num_regs = nmatch;
5704 regs.start = TALLOC (nmatch, regoff_t);
5705 regs.end = TALLOC (nmatch, regoff_t);
5706 if (regs.start == NULL || regs.end == NULL)
5707 return (int) REG_NOMATCH;
5710 /* Perform the searching operation. */
5711 ret = re_search (&private_preg, string, len,
5712 /* start: */ 0, /* range: */ len,
5713 want_reg_info ? &regs : (struct re_registers *) 0);
5715 /* Copy the register information to the POSIX structure. */
5716 if (want_reg_info)
5718 if (ret >= 0)
5720 unsigned r;
5722 for (r = 0; r < nmatch; r++)
5724 pmatch[r].rm_so = regs.start[r];
5725 pmatch[r].rm_eo = regs.end[r];
5729 /* If we needed the temporary register info, free the space now. */
5730 free (regs.start);
5731 free (regs.end);
5734 /* We want zero return to mean success, unlike `re_search'. */
5735 return ret >= 0 ? (int) REG_NOERROR : (int) REG_NOMATCH;
5737 #ifdef _LIBC
5738 weak_alias (__regexec, regexec)
5739 #endif
5742 /* Returns a message corresponding to an error code, ERRCODE, returned
5743 from either regcomp or regexec. We don't use PREG here. */
5745 size_t
5746 regerror (errcode, preg, errbuf, errbuf_size)
5747 int errcode;
5748 const regex_t *preg;
5749 char *errbuf;
5750 size_t errbuf_size;
5752 const char *msg;
5753 size_t msg_size;
5755 if (errcode < 0
5756 || errcode >= (int) (sizeof (re_error_msgid)
5757 / sizeof (re_error_msgid[0])))
5758 /* Only error codes returned by the rest of the code should be passed
5759 to this routine. If we are given anything else, or if other regex
5760 code generates an invalid error code, then the program has a bug.
5761 Dump core so we can fix it. */
5762 abort ();
5764 msg = gettext (re_error_msgid[errcode]);
5766 msg_size = strlen (msg) + 1; /* Includes the null. */
5768 if (errbuf_size != 0)
5770 if (msg_size > errbuf_size)
5772 #if defined HAVE_MEMPCPY || defined _LIBC
5773 *((char *) __mempcpy (errbuf, msg, errbuf_size - 1)) = '\0';
5774 #else
5775 memcpy (errbuf, msg, errbuf_size - 1);
5776 errbuf[errbuf_size - 1] = 0;
5777 #endif
5779 else
5780 memcpy (errbuf, msg, msg_size);
5783 return msg_size;
5785 #ifdef _LIBC
5786 weak_alias (__regerror, regerror)
5787 #endif
5790 /* Free dynamically allocated space used by PREG. */
5792 void
5793 regfree (preg)
5794 regex_t *preg;
5796 if (preg->buffer != NULL)
5797 free (preg->buffer);
5798 preg->buffer = NULL;
5800 preg->allocated = 0;
5801 preg->used = 0;
5803 if (preg->fastmap != NULL)
5804 free (preg->fastmap);
5805 preg->fastmap = NULL;
5806 preg->fastmap_accurate = 0;
5808 if (preg->translate != NULL)
5809 free (preg->translate);
5810 preg->translate = NULL;
5812 #ifdef _LIBC
5813 weak_alias (__regfree, regfree)
5814 #endif
5816 #endif /* not emacs */