annotate src/regex.c @ 50715:46229d46cbeb

Major rewrite. The code is reordered, cleaner and faster. Introduced new options to automatically cleanup the recent list, and to handle filename transformation (for example to use true filenames). (recentf-version): New constant. (recentf-save-file-header): Moved. (recentf-data-cache): New variable. (recentf-update-menu-p, recentf-initialized-p): Removed. (recentf-menu-customization-changed): Moved. Doc fix. (recentf-max-saved-items): Doc fix. (recentf-save-file): Doc fix. No more expand filename here. (recentf-exclude, recentf-menu-action) (recentf-menu-filter): Doc fix. (recentf-menu-append-commands-flag): Renamed from... (recentf-menu-append-commands-p): Made obsolete. (recentf-keep-non-readable-files-flag): Renamed from... (recentf-keep-non-readable-files-p): Made obsolete. (recentf-auto-cleanup, recentf-filename-handler): New options. (recentf-string-equal, recentf-string-lessp) (recentf-string-member): New functions. (recentf-trunc-list): Moved. (recentf-dump-variable): Moved. Better code and output format. (recentf-auto-cleanup-timer): New variable. (recentf-auto-cleanup): New function. (recentf-push, recentf-expand-file-name): New functions. (recentf-add-file): In-lined. Use above functions. (recentf-remove-if-non-readable): In-lined. Expand file name. (recentf-find-file): Use `recentf-remove-if-non-readable'. (recentf-directory-compare): Moved. Use `recentf-string-equal' and `recentf-string-lessp' to do comparisons. (recentf-menu-items-for-commands) (recentf-menu-filter-commands): Moved. (recentf-elements, recentf-make-menu-element) (recentf-menu-element-item, recentf-menu-element-value) (recentf-set-menu-element-item, recentf-set-menu-element-value) (recentf-sub-menu-element-p, recentf-make-default-menu-element) (recentf-menu-elements): In-lined. Some doc fix. (recentf-apply-menu-filter): Better code. (recentf-make-menu-items): Doc fix. Use `recentf-menu-append-commands-flag'. (recentf-make-menu-item): In-lined. Better code. (recentf-clear-data): New function. (recentf-sort-ascending, recentf-sort-descending) (recentf-sort-basenames-ascending) (recentf-sort-basenames-descending) (recentf-sort-directories-ascending) (recentf-sort-directories-descending) (recentf-show-basenames-ascending) (recentf-show-basenames-descending: In-lined. Better code. Some doc fix. (recentf-show-basenames) (recentf-relative-filter): Better code. Doc fix. (recentf-arrange-by-rule-subfilter): Doc fix. Improved :set code. (recentf-match-rule-p): Use filename instead of file-path. (recentf-arrange-by-rule, recentf-build-mode-rules) (recentf-arrange-by-mode, recentf-build-dir-rules) (recentf-file-name-nondir) (recentf-filter-changer-alist): Some doc fix and code cleanup. (recentf-filter-changer-goto-next): Doc fix. Call `recentf-clear-data'. (recentf-filter-changer-get-current) (recentf-filter-changer-get-next): In-lined. Doc fix and better code. (recentf-filter-changer): Doc fix and better code. (recentf-cancel-dialog): Doc fix. (recentf-dialog-mode-map): Initialized in defvar. (recentf-dialog-mode): Doc fix. (recentf-track-opened-file): Renamed from... (recentf-add-file-hook): Removed. (recentf-track-closed-file): Renamed from... (recentf-remove-file-hook): Removed. (recentf-update-menu-hook): Removed. Replaced by... (recentf-update-menu): New. Better catch unnecessary updates. Display a message on error. (recentf-used-hooks): New constant. (recentf-enabled-p): New function. (recentf-edit-selected-items) (recentf-open-files-action) (recentf-open-files-item-shift): Doc fix. (recentf-edit-list-action) (recentf-open-files-item): Doc fix. Code cleanup. (recentf-edit-list, recentf-open-files) (recentf-open-more-files): Likewise. Removed autoload cookie. (recentf-save-list, recentf-cleanup): Likewise. Moved. (recentf-load-list): New command. (recentf-mode): Better code. Does nothing if enabling the already enabled mode.
author Juanma Barranquero <lekktu@gmail.com>
date Sat, 26 Apr 2003 23:41:59 +0000
parents 0f71486df5bc
children 695cf19ef79e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16010
4addc35d079b Clean up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 16009
diff changeset
1 /* Extended regular expression matching and search library, version
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
2 0.12. (Implements POSIX draft P1003.2/D11.2, except for some of the
1155
e356f6701b9e Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
3 internationalization features.)
e356f6701b9e Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
4
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
5 Copyright (C) 1993,94,95,96,97,98,99,2000 Free Software Foundation, Inc.
1155
e356f6701b9e Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
6
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
7 This program is free software; you can redistribute it and/or modify
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
8 it under the terms of the GNU General Public License as published by
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
9 the Free Software Foundation; either version 2, or (at your option)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
10 any later version.
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
11
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
12 This program is distributed in the hope that it will be useful,
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
15 GNU General Public License for more details.
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
16
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
17 You should have received a copy of the GNU General Public License
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
18 along with this program; if not, write to the Free Software
14414
6e7bb4bd5010 Update FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 13722
diff changeset
19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
20 USA. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
21
47368
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
22 /* TODO:
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
23 - structure the opcode space into opcode+flag.
31172
0ee53ec2081a (PUSH_FAILURE_COUNT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30752
diff changeset
24 - merge with glibc's regex.[ch].
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
25 - replace (succeed_n + jump_n + set_number_at) with something that doesn't
32954
f77e6c51dd07 (POP_FAILURE_REG_OR_COUNT, re_match_2_internal)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32891
diff changeset
26 need to modify the compiled regexp so that re_match can be reentrant.
f77e6c51dd07 (POP_FAILURE_REG_OR_COUNT, re_match_2_internal)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32891
diff changeset
27 - get rid of on_failure_jump_smart by doing the optimization in re_comp
f77e6c51dd07 (POP_FAILURE_REG_OR_COUNT, re_match_2_internal)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32891
diff changeset
28 rather than at run-time, so that re_match can be reentrant.
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
29 */
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
30
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
31 /* AIX requires this to be the first thing in the file. */
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
32 #if defined _AIX && !defined REGEX_MALLOC
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
33 #pragma alloca
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
34 #endif
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
35
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
36 #ifdef HAVE_CONFIG_H
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
37 # include <config.h>
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
38 #endif
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
39
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
40 #if defined STDC_HEADERS && !defined emacs
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
41 # include <stddef.h>
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
42 #else
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
43 /* We need this for `regex.h', and perhaps for the Emacs include files. */
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
44 # include <sys/types.h>
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
45 #endif
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
46
31360
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
47 /* Whether to use ISO C Amendment 1 wide char functions.
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
48 Those should not be used for Emacs since it uses its own. */
39718
287021d71c8a (WIDE_CHAR_SUPPORT): Do not use defined() in macro.
Gerd Moellmann <gerd@gnu.org>
parents: 37705
diff changeset
49 #if defined _LIBC
287021d71c8a (WIDE_CHAR_SUPPORT): Do not use defined() in macro.
Gerd Moellmann <gerd@gnu.org>
parents: 37705
diff changeset
50 #define WIDE_CHAR_SUPPORT 1
287021d71c8a (WIDE_CHAR_SUPPORT): Do not use defined() in macro.
Gerd Moellmann <gerd@gnu.org>
parents: 37705
diff changeset
51 #else
31360
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
52 #define WIDE_CHAR_SUPPORT \
39718
287021d71c8a (WIDE_CHAR_SUPPORT): Do not use defined() in macro.
Gerd Moellmann <gerd@gnu.org>
parents: 37705
diff changeset
53 (HAVE_WCTYPE_H && HAVE_WCHAR_H && HAVE_BTOWC && !emacs)
287021d71c8a (WIDE_CHAR_SUPPORT): Do not use defined() in macro.
Gerd Moellmann <gerd@gnu.org>
parents: 37705
diff changeset
54 #endif
31360
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
55
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
56 /* For platform which support the ISO C amendement 1 functionality we
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
57 support user defined character classes. */
32499
3a5e6f70d313 (WIDE_CHAR_SUPPORT): Define if _LIBC as well.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31729
diff changeset
58 #if WIDE_CHAR_SUPPORT
31360
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
59 /* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>. */
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
60 # include <wchar.h>
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
61 # include <wctype.h>
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
62 #endif
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
63
31312
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
64 #ifdef _LIBC
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
65 /* We have to keep the namespace clean. */
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
66 # define regfree(preg) __regfree (preg)
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
67 # define regexec(pr, st, nm, pm, ef) __regexec (pr, st, nm, pm, ef)
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
68 # define regcomp(preg, pattern, cflags) __regcomp (preg, pattern, cflags)
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
69 # define regerror(errcode, preg, errbuf, errbuf_size) \
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
70 __regerror(errcode, preg, errbuf, errbuf_size)
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
71 # define re_set_registers(bu, re, nu, st, en) \
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
72 __re_set_registers (bu, re, nu, st, en)
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
73 # define re_match_2(bufp, string1, size1, string2, size2, pos, regs, stop) \
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
74 __re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop)
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
75 # define re_match(bufp, string, size, pos, regs) \
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
76 __re_match (bufp, string, size, pos, regs)
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
77 # define re_search(bufp, string, size, startpos, range, regs) \
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
78 __re_search (bufp, string, size, startpos, range, regs)
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
79 # define re_compile_pattern(pattern, length, bufp) \
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
80 __re_compile_pattern (pattern, length, bufp)
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
81 # define re_set_syntax(syntax) __re_set_syntax (syntax)
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
82 # define re_search_2(bufp, st1, s1, st2, s2, startpos, range, regs, stop) \
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
83 __re_search_2 (bufp, st1, s1, st2, s2, startpos, range, regs, stop)
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
84 # define re_compile_fastmap(bufp) __re_compile_fastmap (bufp)
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
85
31360
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
86 /* Make sure we call libc's function even if the user overrides them. */
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
87 # define btowc __btowc
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
88 # define iswctype __iswctype
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
89 # define wctype __wctype
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
90
31312
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
91 # define WEAK_ALIAS(a,b) weak_alias (a, b)
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
92
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
93 /* We are also using some library internals. */
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
94 # include <locale/localeinfo.h>
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
95 # include <locale/elem-hash.h>
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
96 # include <langinfo.h>
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
97 #else
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
98 # define WEAK_ALIAS(a,b)
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
99 #endif
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
100
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
101 /* This is for other GNU distributions with internationalized messages. */
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
102 #if HAVE_LIBINTL_H || defined _LIBC
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
103 # include <libintl.h>
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
104 #else
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
105 # define gettext(msgid) (msgid)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
106 #endif
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
107
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
108 #ifndef gettext_noop
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
109 /* This define is so xgettext can find the internationalizable
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
110 strings. */
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
111 # define gettext_noop(String) String
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
112 #endif
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
113
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
114 /* The `emacs' switch turns on certain matching commands
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
115 that make sense only in Emacs. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
116 #ifdef emacs
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
117
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
118 # include "lisp.h"
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
119 # include "buffer.h"
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
120
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
121 /* Make syntax table lookup grant data in gl_state. */
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
122 # define SYNTAX_ENTRY_VIA_PROPERTY
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
123
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
124 # include "syntax.h"
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
125 # include "charset.h"
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
126 # include "category.h"
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
127
37705
a8725acacca5 (malloc, realloc, free) [emacs]: Undefine before
Eli Zaretskii <eliz@gnu.org>
parents: 35533
diff changeset
128 # ifdef malloc
a8725acacca5 (malloc, realloc, free) [emacs]: Undefine before
Eli Zaretskii <eliz@gnu.org>
parents: 35533
diff changeset
129 # undef malloc
a8725acacca5 (malloc, realloc, free) [emacs]: Undefine before
Eli Zaretskii <eliz@gnu.org>
parents: 35533
diff changeset
130 # endif
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
131 # define malloc xmalloc
37705
a8725acacca5 (malloc, realloc, free) [emacs]: Undefine before
Eli Zaretskii <eliz@gnu.org>
parents: 35533
diff changeset
132 # ifdef realloc
a8725acacca5 (malloc, realloc, free) [emacs]: Undefine before
Eli Zaretskii <eliz@gnu.org>
parents: 35533
diff changeset
133 # undef realloc
a8725acacca5 (malloc, realloc, free) [emacs]: Undefine before
Eli Zaretskii <eliz@gnu.org>
parents: 35533
diff changeset
134 # endif
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
135 # define realloc xrealloc
37705
a8725acacca5 (malloc, realloc, free) [emacs]: Undefine before
Eli Zaretskii <eliz@gnu.org>
parents: 35533
diff changeset
136 # ifdef free
a8725acacca5 (malloc, realloc, free) [emacs]: Undefine before
Eli Zaretskii <eliz@gnu.org>
parents: 35533
diff changeset
137 # undef free
a8725acacca5 (malloc, realloc, free) [emacs]: Undefine before
Eli Zaretskii <eliz@gnu.org>
parents: 35533
diff changeset
138 # endif
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
139 # define free xfree
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
140
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
141 /* Converts the pointer to the char to BEG-based offset from the start. */
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
142 # define PTR_TO_OFFSET(d) POS_AS_IN_BUFFER (POINTER_TO_OFFSET (d))
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
143 # define POS_AS_IN_BUFFER(p) ((p) + (NILP (re_match_object) || BUFFERP (re_match_object)))
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
144
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
145 # define RE_MULTIBYTE_P(bufp) ((bufp)->multibyte)
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
146 # define RE_STRING_CHAR(p, s) \
28203
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
147 (multibyte ? (STRING_CHAR (p, s)) : (*(p)))
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
148 # define RE_STRING_CHAR_AND_LENGTH(p, s, len) \
28473
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
149 (multibyte ? (STRING_CHAR_AND_LENGTH (p, s, len)) : ((len) = 1, *(p)))
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
150
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
151 /* Set C a (possibly multibyte) character before P. P points into a
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
152 string which is the virtual concatenation of STR1 (which ends at
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
153 END1) or STR2 (which ends at END2). */
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
154 # define GET_CHAR_BEFORE_2(c, p, str1, end1, str2, end2) \
28473
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
155 do { \
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
156 if (multibyte) \
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
157 { \
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
158 re_char *dtemp = (p) == (str2) ? (end1) : (p); \
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
159 re_char *dlimit = ((p) > (str2) && (p) <= (end2)) ? (str2) : (str1); \
49276
f71131f142ff (GET_CHAR_BEFORE_2): Use PREV_CHAR_BOUNDARY.
Kenichi Handa <handa@m17n.org>
parents: 48424
diff changeset
160 re_char *d0 = dtemp; \
f71131f142ff (GET_CHAR_BEFORE_2): Use PREV_CHAR_BOUNDARY.
Kenichi Handa <handa@m17n.org>
parents: 48424
diff changeset
161 PREV_CHAR_BOUNDARY (d0, dlimit); \
f71131f142ff (GET_CHAR_BEFORE_2): Use PREV_CHAR_BOUNDARY.
Kenichi Handa <handa@m17n.org>
parents: 48424
diff changeset
162 c = STRING_CHAR (d0, dtemp - d0); \
28473
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
163 } \
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
164 else \
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
165 (c = ((p) == (str2) ? (end1) : (p))[-1]); \
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
166 } while (0)
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
167
28203
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
168
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
169 #else /* not emacs */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
170
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
171 /* If we are not linking with Emacs proper,
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
172 we can't use the relocating allocator
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
173 even if config.h says that we can. */
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
174 # undef REL_ALLOC
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
175
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
176 # if defined STDC_HEADERS || defined _LIBC
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
177 # include <stdlib.h>
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
178 # else
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
179 char *malloc ();
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
180 char *realloc ();
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
181 # endif
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
182
12065
094636c759bf Undefined INHIBIT_STRING_HEADER when we have no
Karl Heuer <kwzh@gnu.org>
parents: 11974
diff changeset
183 /* When used in Emacs's lib-src, we need to get bzero and bcopy somehow.
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
184 If nothing else has been done, use the method below. */
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
185 # ifdef INHIBIT_STRING_HEADER
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
186 # if !(defined HAVE_BZERO && defined HAVE_BCOPY)
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
187 # if !defined bzero && !defined bcopy
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
188 # undef INHIBIT_STRING_HEADER
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
189 # endif
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
190 # endif
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
191 # endif
12065
094636c759bf Undefined INHIBIT_STRING_HEADER when we have no
Karl Heuer <kwzh@gnu.org>
parents: 11974
diff changeset
192
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
193 /* This is the normal way of making sure we have memcpy, memcmp and bzero.
12065
094636c759bf Undefined INHIBIT_STRING_HEADER when we have no
Karl Heuer <kwzh@gnu.org>
parents: 11974
diff changeset
194 This is used in most programs--a few other programs avoid this
094636c759bf Undefined INHIBIT_STRING_HEADER when we have no
Karl Heuer <kwzh@gnu.org>
parents: 11974
diff changeset
195 by defining INHIBIT_STRING_HEADER. */
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
196 # ifndef INHIBIT_STRING_HEADER
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
197 # if defined HAVE_STRING_H || defined STDC_HEADERS || defined _LIBC
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
198 # include <string.h>
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
199 # ifndef bzero
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
200 # ifndef _LIBC
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
201 # define bzero(s, n) (memset (s, '\0', n), (s))
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
202 # else
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
203 # define bzero(s, n) __bzero (s, n)
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
204 # endif
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
205 # endif
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
206 # else
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
207 # include <strings.h>
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
208 # ifndef memcmp
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
209 # define memcmp(s1, s2, n) bcmp (s1, s2, n)
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
210 # endif
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
211 # ifndef memcpy
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
212 # define memcpy(d, s, n) (bcopy (s, d, n), (d))
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
213 # endif
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
214 # endif
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
215 # endif
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
216
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
217 /* Define the syntax stuff for \<, \>, etc. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
218
28279
24a23e27dac6 (enum syntaxcode): Provide default for non-Emacs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28268
diff changeset
219 /* Sword must be nonzero for the wordchar pattern commands in re_match_2. */
24a23e27dac6 (enum syntaxcode): Provide default for non-Emacs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28268
diff changeset
220 enum syntaxcode { Swhitespace = 0, Sword = 1 };
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
221
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
222 # ifdef SWITCH_ENUM_BUG
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
223 # define SWITCH_ENUM_CAST(x) ((int)(x))
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
224 # else
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
225 # define SWITCH_ENUM_CAST(x) (x)
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
226 # endif
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
227
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
228 /* Dummy macros for non-Emacs environments. */
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
229 # define BASE_LEADING_CODE_P(c) (0)
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
230 # define CHAR_CHARSET(c) 0
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
231 # define CHARSET_LEADING_CODE_BASE(c) 0
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
232 # define MAX_MULTIBYTE_LENGTH 1
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
233 # define RE_MULTIBYTE_P(x) 0
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
234 # define WORD_BOUNDARY_P(c1, c2) (0)
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
235 # define CHAR_HEAD_P(p) (1)
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
236 # define SINGLE_BYTE_CHAR_P(c) (1)
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
237 # define SAME_CHARSET_P(c1, c2) (1)
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
238 # define MULTIBYTE_FORM_LENGTH(p, s) (1)
49276
f71131f142ff (GET_CHAR_BEFORE_2): Use PREV_CHAR_BOUNDARY.
Kenichi Handa <handa@m17n.org>
parents: 48424
diff changeset
239 # define PREV_CHAR_BOUNDARY(p, limit) ((p)--)
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
240 # define STRING_CHAR(p, s) (*(p))
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
241 # define RE_STRING_CHAR STRING_CHAR
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
242 # define CHAR_STRING(c, s) (*(s) = (c), 1)
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
243 # define STRING_CHAR_AND_LENGTH(p, s, actual_len) ((actual_len) = 1, *(p))
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
244 # define RE_STRING_CHAR_AND_LENGTH STRING_CHAR_AND_LENGTH
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
245 # define GET_CHAR_BEFORE_2(c, p, str1, end1, str2, end2) \
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
246 (c = ((p) == (str2) ? *((end1) - 1) : *((p) - 1)))
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
247 # define MAKE_CHAR(charset, c1, c2) (c1)
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
248 #endif /* not emacs */
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
249
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
250 #ifndef RE_TRANSLATE
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
251 # define RE_TRANSLATE(TBL, C) ((unsigned char)(TBL)[C])
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
252 # define RE_TRANSLATE_P(TBL) (TBL)
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
253 #endif
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
254
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
255 /* Get the interface, including the syntax bits. */
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
256 #include "regex.h"
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
257
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
258 /* isalpha etc. are used for the character classes. */
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
259 #include <ctype.h>
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
260
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
261 #ifdef emacs
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
262
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
263 /* 1 if C is an ASCII character. */
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
264 # define IS_REAL_ASCII(c) ((c) < 0200)
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
265
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
266 /* 1 if C is a unibyte character. */
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
267 # define ISUNIBYTE(c) (SINGLE_BYTE_CHAR_P ((c)))
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
268
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
269 /* The Emacs definitions should not be directly affected by locales. */
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
270
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
271 /* In Emacs, these are only used for single-byte characters. */
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
272 # define ISDIGIT(c) ((c) >= '0' && (c) <= '9')
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
273 # define ISCNTRL(c) ((c) < ' ')
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
274 # define ISXDIGIT(c) (((c) >= '0' && (c) <= '9') \
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
275 || ((c) >= 'a' && (c) <= 'f') \
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
276 || ((c) >= 'A' && (c) <= 'F'))
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
277
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
278 /* This is only used for single-byte characters. */
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
279 # define ISBLANK(c) ((c) == ' ' || (c) == '\t')
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
280
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
281 /* The rest must handle multibyte characters. */
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
282
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
283 # define ISGRAPH(c) (SINGLE_BYTE_CHAR_P (c) \
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
284 ? (c) > ' ' && !((c) >= 0177 && (c) <= 0237) \
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
285 : 1)
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
286
31360
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
287 # define ISPRINT(c) (SINGLE_BYTE_CHAR_P (c) \
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
288 ? (c) >= ' ' && !((c) >= 0177 && (c) <= 0237) \
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
289 : 1)
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
290
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
291 # define ISALNUM(c) (IS_REAL_ASCII (c) \
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
292 ? (((c) >= 'a' && (c) <= 'z') \
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
293 || ((c) >= 'A' && (c) <= 'Z') \
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
294 || ((c) >= '0' && (c) <= '9')) \
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
295 : SYNTAX (c) == Sword)
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
296
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
297 # define ISALPHA(c) (IS_REAL_ASCII (c) \
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
298 ? (((c) >= 'a' && (c) <= 'z') \
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
299 || ((c) >= 'A' && (c) <= 'Z')) \
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
300 : SYNTAX (c) == Sword)
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
301
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
302 # define ISLOWER(c) (LOWERCASEP (c))
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
303
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
304 # define ISPUNCT(c) (IS_REAL_ASCII (c) \
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
305 ? ((c) > ' ' && (c) < 0177 \
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
306 && !(((c) >= 'a' && (c) <= 'z') \
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
307 || ((c) >= 'A' && (c) <= 'Z') \
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
308 || ((c) >= '0' && (c) <= '9'))) \
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
309 : SYNTAX (c) != Sword)
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
310
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
311 # define ISSPACE(c) (SYNTAX (c) == Swhitespace)
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
312
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
313 # define ISUPPER(c) (UPPERCASEP (c))
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
314
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
315 # define ISWORD(c) (SYNTAX (c) == Sword)
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
316
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
317 #else /* not emacs */
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
318
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
319 /* Jim Meyering writes:
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
320
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
321 "... Some ctype macros are valid only for character codes that
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
322 isascii says are ASCII (SGI's IRIX-4.0.5 is one such system --when
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
323 using /bin/cc or gcc but without giving an ansi option). So, all
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
324 ctype uses should be through macros like ISPRINT... If
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
325 STDC_HEADERS is defined, then autoconf has verified that the ctype
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
326 macros don't need to be guarded with references to isascii. ...
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
327 Defining isascii to 1 should let any compiler worth its salt
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
328 eliminate the && through constant folding."
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
329 Solaris defines some of these symbols so we must undefine them first. */
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
330
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
331 # undef ISASCII
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
332 # if defined STDC_HEADERS || (!defined isascii && !defined HAVE_ISASCII)
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
333 # define ISASCII(c) 1
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
334 # else
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
335 # define ISASCII(c) isascii(c)
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
336 # endif
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
337
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
338 /* 1 if C is an ASCII character. */
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
339 # define IS_REAL_ASCII(c) ((c) < 0200)
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
340
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
341 /* This distinction is not meaningful, except in Emacs. */
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
342 # define ISUNIBYTE(c) 1
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
343
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
344 # ifdef isblank
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
345 # define ISBLANK(c) (ISASCII (c) && isblank (c))
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
346 # else
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
347 # define ISBLANK(c) ((c) == ' ' || (c) == '\t')
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
348 # endif
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
349 # ifdef isgraph
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
350 # define ISGRAPH(c) (ISASCII (c) && isgraph (c))
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
351 # else
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
352 # define ISGRAPH(c) (ISASCII (c) && isprint (c) && !isspace (c))
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
353 # endif
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
354
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
355 # undef ISPRINT
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
356 # define ISPRINT(c) (ISASCII (c) && isprint (c))
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
357 # define ISDIGIT(c) (ISASCII (c) && isdigit (c))
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
358 # define ISALNUM(c) (ISASCII (c) && isalnum (c))
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
359 # define ISALPHA(c) (ISASCII (c) && isalpha (c))
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
360 # define ISCNTRL(c) (ISASCII (c) && iscntrl (c))
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
361 # define ISLOWER(c) (ISASCII (c) && islower (c))
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
362 # define ISPUNCT(c) (ISASCII (c) && ispunct (c))
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
363 # define ISSPACE(c) (ISASCII (c) && isspace (c))
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
364 # define ISUPPER(c) (ISASCII (c) && isupper (c))
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
365 # define ISXDIGIT(c) (ISASCII (c) && isxdigit (c))
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
366
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
367 # define ISWORD(c) ISALPHA(c)
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
368
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
369 # ifdef _tolower
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
370 # define TOLOWER(c) _tolower(c)
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
371 # else
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
372 # define TOLOWER(c) tolower(c)
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
373 # endif
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
374
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
375 /* How many characters in the character set. */
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
376 # define CHAR_SET_SIZE 256
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
377
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
378 # ifdef SYNTAX_TABLE
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
379
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
380 extern char *re_syntax_table;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
381
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
382 # else /* not SYNTAX_TABLE */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
383
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
384 static char re_syntax_table[CHAR_SET_SIZE];
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
385
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
386 static void
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
387 init_syntax_once ()
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
388 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
389 register int c;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
390 static int done = 0;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
391
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
392 if (done)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
393 return;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
394
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
395 bzero (re_syntax_table, sizeof re_syntax_table);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
396
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
397 for (c = 0; c < CHAR_SET_SIZE; ++c)
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
398 if (ISALNUM (c))
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
399 re_syntax_table[c] = Sword;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
400
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
401 re_syntax_table['_'] = Sword;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
402
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
403 done = 1;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
404 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
405
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
406 # endif /* not SYNTAX_TABLE */
25440
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
407
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
408 # define SYNTAX(c) re_syntax_table[(c)]
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
409
25440
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
410 #endif /* not emacs */
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
411
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
412 #ifndef NULL
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
413 # define NULL (void *)0
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
414 #endif
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
415
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
416 /* We remove any previous definition of `SIGN_EXTEND_CHAR',
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
417 since ours (we hope) works properly with all combinations of
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
418 machines, compilers, `char' and `unsigned char' argument types.
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
419 (Per Bothner suggested the basic approach.) */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
420 #undef SIGN_EXTEND_CHAR
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
421 #if __STDC__
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
422 # define SIGN_EXTEND_CHAR(c) ((signed char) (c))
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
423 #else /* not __STDC__ */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
424 /* As in Harbison and Steele. */
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
425 # define SIGN_EXTEND_CHAR(c) ((((unsigned char) (c)) ^ 128) - 128)
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
426 #endif
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
427
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
428 /* Should we use malloc or alloca? If REGEX_MALLOC is not defined, we
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
429 use `alloca' instead of `malloc'. This is because using malloc in
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
430 re_search* or re_match* could cause memory leaks when C-g is used in
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
431 Emacs; also, malloc is slower and causes storage fragmentation. On
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
432 the other hand, malloc is more portable, and easier to debug.
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
433
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
434 Because we sometimes use alloca, some routines have to be macros,
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
435 not functions -- `alloca'-allocated space disappears at the end of the
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
436 function it is called in. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
437
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
438 #ifdef REGEX_MALLOC
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
439
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
440 # define REGEX_ALLOCATE malloc
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
441 # define REGEX_REALLOCATE(source, osize, nsize) realloc (source, nsize)
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
442 # define REGEX_FREE free
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
443
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
444 #else /* not REGEX_MALLOC */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
445
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
446 /* Emacs already defines alloca, sometimes. */
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
447 # ifndef alloca
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
448
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
449 /* Make alloca work the best possible way. */
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
450 # ifdef __GNUC__
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
451 # define alloca __builtin_alloca
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
452 # else /* not __GNUC__ */
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
453 # if HAVE_ALLOCA_H
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
454 # include <alloca.h>
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
455 # endif /* HAVE_ALLOCA_H */
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
456 # endif /* not __GNUC__ */
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
457
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
458 # endif /* not alloca */
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
459
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
460 # define REGEX_ALLOCATE alloca
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
461
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
462 /* Assumes a `char *destination' variable. */
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
463 # define REGEX_REALLOCATE(source, osize, nsize) \
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
464 (destination = (char *) alloca (nsize), \
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
465 memcpy (destination, source, osize))
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
466
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
467 /* No need to do anything to free, after alloca. */
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
468 # define REGEX_FREE(arg) ((void)0) /* Do nothing! But inhibit gcc warning. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
469
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
470 #endif /* not REGEX_MALLOC */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
471
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
472 /* Define how to allocate the failure stack. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
473
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
474 #if defined REL_ALLOC && defined REGEX_MALLOC
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
475
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
476 # define REGEX_ALLOCATE_STACK(size) \
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
477 r_alloc (&failure_stack_ptr, (size))
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
478 # define REGEX_REALLOCATE_STACK(source, osize, nsize) \
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
479 r_re_alloc (&failure_stack_ptr, (nsize))
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
480 # define REGEX_FREE_STACK(ptr) \
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
481 r_alloc_free (&failure_stack_ptr)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
482
12478
533b6d02cf04 Don't use relocatable allocator.
Richard M. Stallman <rms@gnu.org>
parents: 12331
diff changeset
483 #else /* not using relocating allocator */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
484
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
485 # ifdef REGEX_MALLOC
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
486
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
487 # define REGEX_ALLOCATE_STACK malloc
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
488 # define REGEX_REALLOCATE_STACK(source, osize, nsize) realloc (source, nsize)
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
489 # define REGEX_FREE_STACK free
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
490
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
491 # else /* not REGEX_MALLOC */
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
492
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
493 # define REGEX_ALLOCATE_STACK alloca
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
494
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
495 # define REGEX_REALLOCATE_STACK(source, osize, nsize) \
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
496 REGEX_REALLOCATE (source, osize, nsize)
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
497 /* No need to explicitly free anything. */
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
498 # define REGEX_FREE_STACK(arg) ((void)0)
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
499
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
500 # endif /* not REGEX_MALLOC */
12478
533b6d02cf04 Don't use relocatable allocator.
Richard M. Stallman <rms@gnu.org>
parents: 12331
diff changeset
501 #endif /* not using relocating allocator */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
502
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
503
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
504 /* True if `size1' is non-NULL and PTR is pointing anywhere inside
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
505 `string1' or just past its end. This works if PTR is NULL, which is
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
506 a good thing. */
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
507 #define FIRST_STRING_P(ptr) \
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
508 (size1 && string1 <= (ptr) && (ptr) <= string1 + size1)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
509
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
510 /* (Re)Allocate N items of type T using malloc, or fail. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
511 #define TALLOC(n, t) ((t *) malloc ((n) * sizeof (t)))
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
512 #define RETALLOC(addr, n, t) ((addr) = (t *) realloc (addr, (n) * sizeof (t)))
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
513 #define RETALLOC_IF(addr, n, t) \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
514 if (addr) RETALLOC((addr), (n), t); else (addr) = TALLOC ((n), t)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
515 #define REGEX_TALLOC(n, t) ((t *) REGEX_ALLOCATE ((n) * sizeof (t)))
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
516
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
517 #define BYTEWIDTH 8 /* In bits. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
518
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
519 #define STREQ(s1, s2) ((strcmp (s1, s2) == 0))
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
520
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
521 #undef MAX
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
522 #undef MIN
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
523 #define MAX(a, b) ((a) > (b) ? (a) : (b))
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
524 #define MIN(a, b) ((a) < (b) ? (a) : (b))
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
525
28138
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
526 /* Type of source-pattern and string chars. */
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
527 typedef const unsigned char re_char;
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
528
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
529 typedef char boolean;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
530 #define false 0
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
531 #define true 1
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
532
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
533 static int re_match_2_internal _RE_ARGS ((struct re_pattern_buffer *bufp,
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
534 re_char *string1, int size1,
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
535 re_char *string2, int size2,
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
536 int pos,
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
537 struct re_registers *regs,
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
538 int stop));
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
539
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
540 /* These are the command codes that appear in compiled regular
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
541 expressions. Some opcodes are followed by argument bytes. A
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
542 command code can specify any interpretation whatsoever for its
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
543 arguments. Zero bytes may appear in the compiled regular expression. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
544
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
545 typedef enum
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
546 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
547 no_op = 0,
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
548
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
549 /* Succeed right away--no more backtracking. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
550 succeed,
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
551
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
552 /* Followed by one byte giving n, then by n literal bytes. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
553 exactn,
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
554
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
555 /* Matches any (more or less) character. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
556 anychar,
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
557
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
558 /* Matches any one char belonging to specified set. First
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
559 following byte is number of bitmap bytes. Then come bytes
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
560 for a bitmap saying which chars are in. Bits in each byte
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
561 are ordered low-bit-first. A character is in the set if its
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
562 bit is 1. A character too large to have a bit in the map is
25440
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
563 automatically not in the set.
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
564
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
565 If the length byte has the 0x80 bit set, then that stuff
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
566 is followed by a range table:
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
567 2 bytes of flags for character sets (low 8 bits, high 8 bits)
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
568 See RANGE_TABLE_WORK_BITS below.
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
569 2 bytes, the number of pairs that follow (upto 32767)
25440
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
570 pairs, each 2 multibyte characters,
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
571 each multibyte character represented as 3 bytes. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
572 charset,
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
573
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
574 /* Same parameters as charset, but match any character that is
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
575 not one of those specified. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
576 charset_not,
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
577
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
578 /* Start remembering the text that is matched, for storing in a
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
579 register. Followed by one byte with the register number, in
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
580 the range 0 to one less than the pattern buffer's re_nsub
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
581 field. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
582 start_memory,
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
583
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
584 /* Stop remembering the text that is matched and store it in a
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
585 memory register. Followed by one byte with the register
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
586 number, in the range 0 to one less than `re_nsub' in the
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
587 pattern buffer. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
588 stop_memory,
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
589
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
590 /* Match a duplicate of something remembered. Followed by one
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
591 byte containing the register number. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
592 duplicate,
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
593
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
594 /* Fail unless at beginning of line. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
595 begline,
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
596
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
597 /* Fail unless at end of line. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
598 endline,
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
599
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
600 /* Succeeds if at beginning of buffer (if emacs) or at beginning
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
601 of string to be matched (if not). */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
602 begbuf,
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
603
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
604 /* Analogously, for end of buffer/string. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
605 endbuf,
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
606
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
607 /* Followed by two byte relative address to which to jump. */
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
608 jump,
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
609
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
610 /* Followed by two-byte relative address of place to resume at
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
611 in case of failure. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
612 on_failure_jump,
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
613
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
614 /* Like on_failure_jump, but pushes a placeholder instead of the
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
615 current string position when executed. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
616 on_failure_keep_string_jump,
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
617
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
618 /* Just like `on_failure_jump', except that it checks that we
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
619 don't get stuck in an infinite loop (matching an empty string
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
620 indefinitely). */
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
621 on_failure_jump_loop,
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
622
28342
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
623 /* Just like `on_failure_jump_loop', except that it checks for
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
624 a different kind of loop (the kind that shows up with non-greedy
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
625 operators). This operation has to be immediately preceded
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
626 by a `no_op'. */
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
627 on_failure_jump_nastyloop,
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
628
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
629 /* A smart `on_failure_jump' used for greedy * and + operators.
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
630 It analyses the loop before which it is put and if the
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
631 loop does not require backtracking, it changes itself to
28203
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
632 `on_failure_keep_string_jump' and short-circuits the loop,
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
633 else it just defaults to changing itself into `on_failure_jump'.
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
634 It assumes that it is pointing to just past a `jump'. */
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
635 on_failure_jump_smart,
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
636
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
637 /* Followed by two-byte relative address and two-byte number n.
28372
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
638 After matching N times, jump to the address upon failure.
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
639 Does not work if N starts at 0: use on_failure_jump_loop
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
640 instead. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
641 succeed_n,
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
642
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
643 /* Followed by two-byte relative address, and two-byte number n.
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
644 Jump to the address N times, then fail. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
645 jump_n,
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
646
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
647 /* Set the following two-byte relative address to the
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
648 subsequent two-byte number. The address *includes* the two
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
649 bytes of number. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
650 set_number_at,
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
651
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
652 wordbeg, /* Succeeds if at word beginning. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
653 wordend, /* Succeeds if at word end. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
654
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
655 wordbound, /* Succeeds if at a word boundary. */
28261
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
656 notwordbound, /* Succeeds if not at a word boundary. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
657
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
658 /* Matches any character whose syntax is specified. Followed by
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
659 a byte which contains a syntax code, e.g., Sword. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
660 syntaxspec,
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
661
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
662 /* Matches any character whose syntax is not that specified. */
28261
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
663 notsyntaxspec
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
664
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
665 #ifdef emacs
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
666 ,before_dot, /* Succeeds if before point. */
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
667 at_dot, /* Succeeds if at point. */
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
668 after_dot, /* Succeeds if after point. */
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
669
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
670 /* Matches any character whose category-set contains the specified
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
671 category. The operator is followed by a byte which contains a
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
672 category code (mnemonic ASCII character). */
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
673 categoryspec,
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
674
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
675 /* Matches any character whose category-set does not contain the
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
676 specified category. The operator is followed by a byte which
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
677 contains the category code (mnemonic ASCII character). */
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
678 notcategoryspec
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
679 #endif /* emacs */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
680 } re_opcode_t;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
681
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
682 /* Common operations on the compiled pattern. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
683
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
684 /* Store NUMBER in two contiguous bytes starting at DESTINATION. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
685
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
686 #define STORE_NUMBER(destination, number) \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
687 do { \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
688 (destination)[0] = (number) & 0377; \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
689 (destination)[1] = (number) >> 8; \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
690 } while (0)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
691
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
692 /* Same as STORE_NUMBER, except increment DESTINATION to
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
693 the byte after where the number is stored. Therefore, DESTINATION
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
694 must be an lvalue. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
695
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
696 #define STORE_NUMBER_AND_INCR(destination, number) \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
697 do { \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
698 STORE_NUMBER (destination, number); \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
699 (destination) += 2; \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
700 } while (0)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
701
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
702 /* Put into DESTINATION a number stored in two contiguous bytes starting
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
703 at SOURCE. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
704
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
705 #define EXTRACT_NUMBER(destination, source) \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
706 do { \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
707 (destination) = *(source) & 0377; \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
708 (destination) += SIGN_EXTEND_CHAR (*((source) + 1)) << 8; \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
709 } while (0)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
710
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
711 #ifdef DEBUG
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
712 static void extract_number _RE_ARGS ((int *dest, re_char *source));
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
713 static void
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
714 extract_number (dest, source)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
715 int *dest;
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
716 re_char *source;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
717 {
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
718 int temp = SIGN_EXTEND_CHAR (*(source + 1));
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
719 *dest = *source & 0377;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
720 *dest += temp << 8;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
721 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
722
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
723 # ifndef EXTRACT_MACROS /* To debug the macros. */
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
724 # undef EXTRACT_NUMBER
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
725 # define EXTRACT_NUMBER(dest, src) extract_number (&dest, src)
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
726 # endif /* not EXTRACT_MACROS */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
727
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
728 #endif /* DEBUG */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
729
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
730 /* Same as EXTRACT_NUMBER, except increment SOURCE to after the number.
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
731 SOURCE must be an lvalue. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
732
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
733 #define EXTRACT_NUMBER_AND_INCR(destination, source) \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
734 do { \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
735 EXTRACT_NUMBER (destination, source); \
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
736 (source) += 2; \
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
737 } while (0)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
738
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
739 #ifdef DEBUG
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
740 static void extract_number_and_incr _RE_ARGS ((int *destination,
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
741 re_char **source));
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
742 static void
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
743 extract_number_and_incr (destination, source)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
744 int *destination;
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
745 re_char **source;
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
746 {
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
747 extract_number (destination, *source);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
748 *source += 2;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
749 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
750
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
751 # ifndef EXTRACT_MACROS
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
752 # undef EXTRACT_NUMBER_AND_INCR
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
753 # define EXTRACT_NUMBER_AND_INCR(dest, src) \
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
754 extract_number_and_incr (&dest, &src)
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
755 # endif /* not EXTRACT_MACROS */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
756
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
757 #endif /* DEBUG */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
758
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
759 /* Store a multibyte character in three contiguous bytes starting
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
760 DESTINATION, and increment DESTINATION to the byte after where the
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
761 character is stored. Therefore, DESTINATION must be an lvalue. */
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
762
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
763 #define STORE_CHARACTER_AND_INCR(destination, character) \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
764 do { \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
765 (destination)[0] = (character) & 0377; \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
766 (destination)[1] = ((character) >> 8) & 0377; \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
767 (destination)[2] = (character) >> 16; \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
768 (destination) += 3; \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
769 } while (0)
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
770
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
771 /* Put into DESTINATION a character stored in three contiguous bytes
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
772 starting at SOURCE. */
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
773
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
774 #define EXTRACT_CHARACTER(destination, source) \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
775 do { \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
776 (destination) = ((source)[0] \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
777 | ((source)[1] << 8) \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
778 | ((source)[2] << 16)); \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
779 } while (0)
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
780
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
781
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
782 /* Macros for charset. */
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
783
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
784 /* Size of bitmap of charset P in bytes. P is a start of charset,
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
785 i.e. *P is (re_opcode_t) charset or (re_opcode_t) charset_not. */
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
786 #define CHARSET_BITMAP_SIZE(p) ((p)[1] & 0x7F)
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
787
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
788 /* Nonzero if charset P has range table. */
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
789 #define CHARSET_RANGE_TABLE_EXISTS_P(p) ((p)[1] & 0x80)
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
790
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
791 /* Return the address of range table of charset P. But not the start
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
792 of table itself, but the before where the number of ranges is
25440
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
793 stored. `2 +' means to skip re_opcode_t and size of bitmap,
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
794 and the 2 bytes of flags at the start of the range table. */
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
795 #define CHARSET_RANGE_TABLE(p) (&(p)[4 + CHARSET_BITMAP_SIZE (p)])
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
796
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
797 /* Extract the bit flags that start a range table. */
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
798 #define CHARSET_RANGE_TABLE_BITS(p) \
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
799 ((p)[2 + CHARSET_BITMAP_SIZE (p)] \
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
800 + (p)[3 + CHARSET_BITMAP_SIZE (p)] * 0x100)
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
801
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
802 /* Test if C is listed in the bitmap of charset P. */
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
803 #define CHARSET_LOOKUP_BITMAP(p, c) \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
804 ((c) < CHARSET_BITMAP_SIZE (p) * BYTEWIDTH \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
805 && (p)[2 + (c) / BYTEWIDTH] & (1 << ((c) % BYTEWIDTH)))
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
806
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
807 /* Return the address of end of RANGE_TABLE. COUNT is number of
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
808 ranges (which is a pair of (start, end)) in the RANGE_TABLE. `* 2'
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
809 is start of range and end of range. `* 3' is size of each start
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
810 and end. */
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
811 #define CHARSET_RANGE_TABLE_END(range_table, count) \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
812 ((range_table) + (count) * 2 * 3)
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
813
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
814 /* Test if C is in RANGE_TABLE. A flag NOT is negated if C is in.
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
815 COUNT is number of ranges in RANGE_TABLE. */
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
816 #define CHARSET_LOOKUP_RANGE_TABLE_RAW(not, c, range_table, count) \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
817 do \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
818 { \
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
819 re_wchar_t range_start, range_end; \
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
820 re_char *p; \
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
821 re_char *range_table_end \
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
822 = CHARSET_RANGE_TABLE_END ((range_table), (count)); \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
823 \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
824 for (p = (range_table); p < range_table_end; p += 2 * 3) \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
825 { \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
826 EXTRACT_CHARACTER (range_start, p); \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
827 EXTRACT_CHARACTER (range_end, p + 3); \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
828 \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
829 if (range_start <= (c) && (c) <= range_end) \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
830 { \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
831 (not) = !(not); \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
832 break; \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
833 } \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
834 } \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
835 } \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
836 while (0)
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
837
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
838 /* Test if C is in range table of CHARSET. The flag NOT is negated if
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
839 C is listed in it. */
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
840 #define CHARSET_LOOKUP_RANGE_TABLE(not, c, charset) \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
841 do \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
842 { \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
843 /* Number of ranges in range table. */ \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
844 int count; \
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
845 re_char *range_table = CHARSET_RANGE_TABLE (charset); \
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
846 \
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
847 EXTRACT_NUMBER_AND_INCR (count, range_table); \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
848 CHARSET_LOOKUP_RANGE_TABLE_RAW ((not), (c), range_table, count); \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
849 } \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
850 while (0)
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
851
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
852 /* If DEBUG is defined, Regex prints many voluminous messages about what
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
853 it is doing (if the variable `debug' is nonzero). If linked with the
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
854 main program in `iregex.c', you can enter patterns and strings
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
855 interactively. And if linked with the main program in `main.c' and
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
856 the other test files, you can run the already-written tests. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
857
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
858 #ifdef DEBUG
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
859
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
860 /* We use standard I/O for debugging. */
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
861 # include <stdio.h>
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
862
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
863 /* It is useful to test things that ``must'' be true when debugging. */
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
864 # include <assert.h>
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
865
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
866 static int debug = -100000;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
867
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
868 # define DEBUG_STATEMENT(e) e
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
869 # define DEBUG_PRINT1(x) if (debug > 0) printf (x)
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
870 # define DEBUG_PRINT2(x1, x2) if (debug > 0) printf (x1, x2)
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
871 # define DEBUG_PRINT3(x1, x2, x3) if (debug > 0) printf (x1, x2, x3)
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
872 # define DEBUG_PRINT4(x1, x2, x3, x4) if (debug > 0) printf (x1, x2, x3, x4)
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
873 # define DEBUG_PRINT_COMPILED_PATTERN(p, s, e) \
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
874 if (debug > 0) print_partial_compiled_pattern (s, e)
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
875 # define DEBUG_PRINT_DOUBLE_STRING(w, s1, sz1, s2, sz2) \
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
876 if (debug > 0) print_double_string (w, s1, sz1, s2, sz2)
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
877
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
878
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
879 /* Print the fastmap in human-readable form. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
880
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
881 void
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
882 print_fastmap (fastmap)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
883 char *fastmap;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
884 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
885 unsigned was_a_range = 0;
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
886 unsigned i = 0;
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
887
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
888 while (i < (1 << BYTEWIDTH))
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
889 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
890 if (fastmap[i++])
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
891 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
892 was_a_range = 0;
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
893 putchar (i - 1);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
894 while (i < (1 << BYTEWIDTH) && fastmap[i])
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
895 {
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
896 was_a_range = 1;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
897 i++;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
898 }
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
899 if (was_a_range)
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
900 {
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
901 printf ("-");
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
902 putchar (i - 1);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
903 }
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
904 }
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
905 }
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
906 putchar ('\n');
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
907 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
908
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
909
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
910 /* Print a compiled pattern string in human-readable form, starting at
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
911 the START pointer into it and ending just before the pointer END. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
912
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
913 void
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
914 print_partial_compiled_pattern (start, end)
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
915 re_char *start;
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
916 re_char *end;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
917 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
918 int mcnt, mcnt2;
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
919 re_char *p = start;
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
920 re_char *pend = end;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
921
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
922 if (start == NULL)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
923 {
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
924 fprintf (stderr, "(null)\n");
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
925 return;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
926 }
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
927
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
928 /* Loop over pattern commands. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
929 while (p < pend)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
930 {
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
931 fprintf (stderr, "%d:\t", p - start);
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
932
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
933 switch ((re_opcode_t) *p++)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
934 {
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
935 case no_op:
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
936 fprintf (stderr, "/no_op");
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
937 break;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
938
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
939 case succeed:
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
940 fprintf (stderr, "/succeed");
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
941 break;
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
942
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
943 case exactn:
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
944 mcnt = *p++;
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
945 fprintf (stderr, "/exactn/%d", mcnt);
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
946 do
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
947 {
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
948 fprintf (stderr, "/%c", *p++);
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
949 }
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
950 while (--mcnt);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
951 break;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
952
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
953 case start_memory:
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
954 fprintf (stderr, "/start_memory/%d", *p++);
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
955 break;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
956
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
957 case stop_memory:
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
958 fprintf (stderr, "/stop_memory/%d", *p++);
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
959 break;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
960
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
961 case duplicate:
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
962 fprintf (stderr, "/duplicate/%d", *p++);
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
963 break;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
964
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
965 case anychar:
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
966 fprintf (stderr, "/anychar");
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
967 break;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
968
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
969 case charset:
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
970 case charset_not:
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
971 {
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
972 register int c, last = -100;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
973 register int in_range = 0;
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
974 int length = CHARSET_BITMAP_SIZE (p - 1);
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
975 int has_range_table = CHARSET_RANGE_TABLE_EXISTS_P (p - 1);
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
976
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
977 fprintf (stderr, "/charset [%s",
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
978 (re_opcode_t) *(p - 1) == charset_not ? "^" : "");
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
979
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
980 assert (p + *p < pend);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
981
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
982 for (c = 0; c < 256; c++)
25440
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
983 if (c / 8 < length
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
984 && (p[1 + (c/8)] & (1 << (c % 8))))
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
985 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
986 /* Are we starting a range? */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
987 if (last + 1 == c && ! in_range)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
988 {
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
989 fprintf (stderr, "-");
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
990 in_range = 1;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
991 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
992 /* Have we broken a range? */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
993 else if (last + 1 != c && in_range)
25440
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
994 {
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
995 fprintf (stderr, "%c", last);
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
996 in_range = 0;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
997 }
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
998
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
999 if (! in_range)
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
1000 fprintf (stderr, "%c", c);
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1001
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1002 last = c;
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1003 }
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1004
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1005 if (in_range)
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
1006 fprintf (stderr, "%c", last);
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
1007
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
1008 fprintf (stderr, "]");
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1009
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
1010 p += 1 + length;
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
1011
25440
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
1012 if (has_range_table)
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
1013 {
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
1014 int count;
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
1015 fprintf (stderr, "has-range-table");
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
1016
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
1017 /* ??? Should print the range table; for now, just skip it. */
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
1018 p += 2; /* skip range table bits */
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
1019 EXTRACT_NUMBER_AND_INCR (count, p);
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
1020 p = CHARSET_RANGE_TABLE_END (p, count);
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
1021 }
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1022 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1023 break;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1024
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1025 case begline:
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
1026 fprintf (stderr, "/begline");
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1027 break;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1028
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1029 case endline:
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
1030 fprintf (stderr, "/endline");
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1031 break;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1032
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1033 case on_failure_jump:
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1034 extract_number_and_incr (&mcnt, &p);
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
1035 fprintf (stderr, "/on_failure_jump to %d", p + mcnt - start);
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1036 break;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1037
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1038 case on_failure_keep_string_jump:
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1039 extract_number_and_incr (&mcnt, &p);
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
1040 fprintf (stderr, "/on_failure_keep_string_jump to %d", p + mcnt - start);
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1041 break;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1042
28342
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
1043 case on_failure_jump_nastyloop:
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
1044 extract_number_and_incr (&mcnt, &p);
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
1045 fprintf (stderr, "/on_failure_jump_nastyloop to %d", p + mcnt - start);
28342
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
1046 break;
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
1047
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1048 case on_failure_jump_loop:
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1049 extract_number_and_incr (&mcnt, &p);
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
1050 fprintf (stderr, "/on_failure_jump_loop to %d", p + mcnt - start);
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1051 break;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1052
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1053 case on_failure_jump_smart:
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1054 extract_number_and_incr (&mcnt, &p);
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
1055 fprintf (stderr, "/on_failure_jump_smart to %d", p + mcnt - start);
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
1056 break;
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
1057
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1058 case jump:
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1059 extract_number_and_incr (&mcnt, &p);
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
1060 fprintf (stderr, "/jump to %d", p + mcnt - start);
16010
4addc35d079b Clean up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 16009
diff changeset
1061 break;
4addc35d079b Clean up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 16009
diff changeset
1062
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1063 case succeed_n:
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1064 extract_number_and_incr (&mcnt, &p);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1065 extract_number_and_incr (&mcnt2, &p);
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
1066 fprintf (stderr, "/succeed_n to %d, %d times", p - 2 + mcnt - start, mcnt2);
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1067 break;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1068
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1069 case jump_n:
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1070 extract_number_and_incr (&mcnt, &p);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1071 extract_number_and_incr (&mcnt2, &p);
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
1072 fprintf (stderr, "/jump_n to %d, %d times", p - 2 + mcnt - start, mcnt2);
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1073 break;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1074
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1075 case set_number_at:
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1076 extract_number_and_incr (&mcnt, &p);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1077 extract_number_and_incr (&mcnt2, &p);
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
1078 fprintf (stderr, "/set_number_at location %d to %d", p - 2 + mcnt - start, mcnt2);
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1079 break;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1080
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1081 case wordbound:
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
1082 fprintf (stderr, "/wordbound");
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1083 break;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1084
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1085 case notwordbound:
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
1086 fprintf (stderr, "/notwordbound");
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1087 break;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1088
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1089 case wordbeg:
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
1090 fprintf (stderr, "/wordbeg");
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1091 break;
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
1092
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1093 case wordend:
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
1094 fprintf (stderr, "/wordend");
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
1095
28261
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
1096 case syntaxspec:
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
1097 fprintf (stderr, "/syntaxspec");
28261
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
1098 mcnt = *p++;
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
1099 fprintf (stderr, "/%d", mcnt);
28261
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
1100 break;
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
1101
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
1102 case notsyntaxspec:
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
1103 fprintf (stderr, "/notsyntaxspec");
28261
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
1104 mcnt = *p++;
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
1105 fprintf (stderr, "/%d", mcnt);
28261
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
1106 break;
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
1107
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
1108 # ifdef emacs
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1109 case before_dot:
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
1110 fprintf (stderr, "/before_dot");
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1111 break;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1112
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1113 case at_dot:
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
1114 fprintf (stderr, "/at_dot");
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1115 break;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1116
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1117 case after_dot:
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
1118 fprintf (stderr, "/after_dot");
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1119 break;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1120
28261
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
1121 case categoryspec:
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
1122 fprintf (stderr, "/categoryspec");
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1123 mcnt = *p++;
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
1124 fprintf (stderr, "/%d", mcnt);
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1125 break;
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
1126
28261
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
1127 case notcategoryspec:
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
1128 fprintf (stderr, "/notcategoryspec");
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1129 mcnt = *p++;
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
1130 fprintf (stderr, "/%d", mcnt);
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1131 break;
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
1132 # endif /* emacs */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1133
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1134 case begbuf:
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
1135 fprintf (stderr, "/begbuf");
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1136 break;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1137
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1138 case endbuf:
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
1139 fprintf (stderr, "/endbuf");
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1140 break;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1141
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1142 default:
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
1143 fprintf (stderr, "?%d", *(p-1));
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1144 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1145
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
1146 fprintf (stderr, "\n");
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1147 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1148
49930
0f71486df5bc (print_partial_compiled_pattern): Output to stderr.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
1149 fprintf (stderr, "%d:\tend of pattern.\n", p - start);
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1150 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1151
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1152
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1153 void
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1154 print_compiled_pattern (bufp)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1155 struct re_pattern_buffer *bufp;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1156 {
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
1157 re_char *buffer = bufp->buffer;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1158
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1159 print_partial_compiled_pattern (buffer, buffer + bufp->used);
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1160 printf ("%ld bytes used/%ld bytes allocated.\n",
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1161 bufp->used, bufp->allocated);
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1162
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1163 if (bufp->fastmap_accurate && bufp->fastmap)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1164 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1165 printf ("fastmap: ");
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1166 print_fastmap (bufp->fastmap);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1167 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1168
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1169 printf ("re_nsub: %d\t", bufp->re_nsub);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1170 printf ("regs_alloc: %d\t", bufp->regs_allocated);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1171 printf ("can_be_null: %d\t", bufp->can_be_null);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1172 printf ("no_sub: %d\t", bufp->no_sub);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1173 printf ("not_bol: %d\t", bufp->not_bol);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1174 printf ("not_eol: %d\t", bufp->not_eol);
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1175 printf ("syntax: %lx\n", bufp->syntax);
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1176 fflush (stdout);
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1177 /* Perhaps we should print the translate table? */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1178 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1179
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1180
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1181 void
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1182 print_double_string (where, string1, size1, string2, size2)
28138
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
1183 re_char *where;
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
1184 re_char *string1;
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
1185 re_char *string2;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1186 int size1;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1187 int size2;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1188 {
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1189 int this_char;
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
1190
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1191 if (where == NULL)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1192 printf ("(null)");
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1193 else
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1194 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1195 if (FIRST_STRING_P (where))
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1196 {
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1197 for (this_char = where - string1; this_char < size1; this_char++)
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1198 putchar (string1[this_char]);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1199
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1200 where = string2;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1201 }
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1202
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1203 for (this_char = where - string2; this_char < size2; this_char++)
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1204 putchar (string2[this_char]);
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1205 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1206 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1207
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1208 #else /* not DEBUG */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1209
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
1210 # undef assert
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
1211 # define assert(e)
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
1212
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
1213 # define DEBUG_STATEMENT(e)
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
1214 # define DEBUG_PRINT1(x)
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
1215 # define DEBUG_PRINT2(x1, x2)
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
1216 # define DEBUG_PRINT3(x1, x2, x3)
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
1217 # define DEBUG_PRINT4(x1, x2, x3, x4)
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
1218 # define DEBUG_PRINT_COMPILED_PATTERN(p, s, e)
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
1219 # define DEBUG_PRINT_DOUBLE_STRING(w, s1, sz1, s2, sz2)
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1220
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1221 #endif /* not DEBUG */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1222
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1223 /* Set by `re_set_syntax' to the current regexp syntax to recognize. Can
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1224 also be assigned to arbitrarily: each pattern buffer stores its own
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1225 syntax, so it can be changed between regex compilations. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1226 /* This has no initializer because initialized variables in Emacs
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1227 become read-only after dumping. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1228 reg_syntax_t re_syntax_options;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1229
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1230
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1231 /* Specify the precise syntax of regexps for compilation. This provides
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1232 for compatibility for various utilities which historically have
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1233 different, incompatible syntaxes.
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1234
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1235 The argument SYNTAX is a bit mask comprised of the various bits
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1236 defined in regex.h. We return the old syntax. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1237
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1238 reg_syntax_t
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1239 re_set_syntax (syntax)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1240 reg_syntax_t syntax;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1241 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1242 reg_syntax_t ret = re_syntax_options;
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
1243
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1244 re_syntax_options = syntax;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1245 return ret;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1246 }
31312
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
1247 WEAK_ALIAS (__re_set_syntax, re_set_syntax)
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1248
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1249 /* This table gives an error message for each of the error codes listed
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1250 in regex.h. Obviously the order here has to be same as there.
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1251 POSIX doesn't require that we do anything for REG_NOERROR,
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1252 but why not be nice? */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1253
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1254 static const char *re_error_msgid[] =
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
1255 {
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
1256 gettext_noop ("Success"), /* REG_NOERROR */
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
1257 gettext_noop ("No match"), /* REG_NOMATCH */
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
1258 gettext_noop ("Invalid regular expression"), /* REG_BADPAT */
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
1259 gettext_noop ("Invalid collation character"), /* REG_ECOLLATE */
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
1260 gettext_noop ("Invalid character class name"), /* REG_ECTYPE */
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
1261 gettext_noop ("Trailing backslash"), /* REG_EESCAPE */
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
1262 gettext_noop ("Invalid back reference"), /* REG_ESUBREG */
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
1263 gettext_noop ("Unmatched [ or [^"), /* REG_EBRACK */
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
1264 gettext_noop ("Unmatched ( or \\("), /* REG_EPAREN */
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
1265 gettext_noop ("Unmatched \\{"), /* REG_EBRACE */
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
1266 gettext_noop ("Invalid content of \\{\\}"), /* REG_BADBR */
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
1267 gettext_noop ("Invalid range end"), /* REG_ERANGE */
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
1268 gettext_noop ("Memory exhausted"), /* REG_ESPACE */
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
1269 gettext_noop ("Invalid preceding regular expression"), /* REG_BADRPT */
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
1270 gettext_noop ("Premature end of regular expression"), /* REG_EEND */
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
1271 gettext_noop ("Regular expression too big"), /* REG_ESIZE */
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
1272 gettext_noop ("Unmatched ) or \\)"), /* REG_ERPAREN */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1273 };
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1274
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1275 /* Avoiding alloca during matching, to placate r_alloc. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1276
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1277 /* Define MATCH_MAY_ALLOCATE unless we need to make sure that the
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1278 searching and matching functions should not call alloca. On some
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1279 systems, alloca is implemented in terms of malloc, and if we're
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1280 using the relocating allocator routines, then malloc could cause a
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1281 relocation, which might (if the strings being searched are in the
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1282 ralloc heap) shift the data out from underneath the regexp
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1283 routines.
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1284
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
1285 Here's another reason to avoid allocation: Emacs
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1286 processes input from X in a signal handler; processing X input may
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1287 call malloc; if input arrives while a matching routine is calling
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1288 malloc, then we're scrod. But Emacs can't just block input while
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1289 calling matching routines; then we don't notice interrupts when
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1290 they come in. So, Emacs blocks input around all regexp calls
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1291 except the matching calls, which it leaves unprotected, in the
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1292 faith that they will not malloc. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1293
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1294 /* Normally, this is fine. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1295 #define MATCH_MAY_ALLOCATE
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1296
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1297 /* When using GNU C, we are not REALLY using the C alloca, no matter
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1298 what config.h may say. So don't take precautions for it. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1299 #ifdef __GNUC__
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
1300 # undef C_ALLOCA
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1301 #endif
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1302
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1303 /* The match routines may not allocate if (1) they would do it with malloc
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1304 and (2) it's not safe for them to use malloc.
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1305 Note that if REL_ALLOC is defined, matching would not use malloc for the
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1306 failure stack, but we would still use it for the register vectors;
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1307 so REL_ALLOC should not affect this. */
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
1308 #if (defined C_ALLOCA || defined REGEX_MALLOC) && defined emacs
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
1309 # undef MATCH_MAY_ALLOCATE
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1310 #endif
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1311
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1312
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1313 /* Failure stack declarations and macros; both re_compile_fastmap and
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1314 re_match_2 use a failure stack. These have to be macros because of
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1315 REGEX_ALLOCATE_STACK. */
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
1316
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1317
20449
fc965930c738 (TYPICAL_FAILURE_SIZE): Renamed from MAX_FAILURE_ITEMS.
Karl Heuer <kwzh@gnu.org>
parents: 19184
diff changeset
1318 /* Approximate number of failure points for which to initially allocate space
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1319 when matching. If this number is exceeded, we allocate more
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1320 space, so it is not a hard limit. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1321 #ifndef INIT_FAILURE_ALLOC
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
1322 # define INIT_FAILURE_ALLOC 20
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1323 #endif
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1324
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1325 /* Roughly the maximum number of failure points on the stack. Would be
20449
fc965930c738 (TYPICAL_FAILURE_SIZE): Renamed from MAX_FAILURE_ITEMS.
Karl Heuer <kwzh@gnu.org>
parents: 19184
diff changeset
1326 exactly that if always used TYPICAL_FAILURE_SIZE items each time we failed.
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1327 This is a variable only so users of regex can assign to it; we never
40650
ded4aa3c81b2 (re_wctype): Try to fix some warnings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39718
diff changeset
1328 change it ourselves. We always multiply it by TYPICAL_FAILURE_SIZE
ded4aa3c81b2 (re_wctype): Try to fix some warnings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39718
diff changeset
1329 before using it, so it should probably be a byte-count instead. */
31312
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
1330 # if defined MATCH_MAY_ALLOCATE
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
1331 /* Note that 4400 was enough to cause a crash on Alpha OSF/1,
20449
fc965930c738 (TYPICAL_FAILURE_SIZE): Renamed from MAX_FAILURE_ITEMS.
Karl Heuer <kwzh@gnu.org>
parents: 19184
diff changeset
1332 whose default stack limit is 2mb. In order for a larger
fc965930c738 (TYPICAL_FAILURE_SIZE): Renamed from MAX_FAILURE_ITEMS.
Karl Heuer <kwzh@gnu.org>
parents: 19184
diff changeset
1333 value to work reliably, you have to try to make it accord
fc965930c738 (TYPICAL_FAILURE_SIZE): Renamed from MAX_FAILURE_ITEMS.
Karl Heuer <kwzh@gnu.org>
parents: 19184
diff changeset
1334 with the process stack limit. */
31312
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
1335 size_t re_max_failures = 40000;
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
1336 # else
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
1337 size_t re_max_failures = 4000;
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
1338 # endif
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1339
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1340 union fail_stack_elt
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1341 {
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
1342 re_char *pointer;
31312
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
1343 /* This should be the biggest `int' that's no bigger than a pointer. */
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
1344 long integer;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1345 };
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1346
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1347 typedef union fail_stack_elt fail_stack_elt_t;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1348
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1349 typedef struct
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1350 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1351 fail_stack_elt_t *stack;
31312
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
1352 size_t size;
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
1353 size_t avail; /* Offset of next open position. */
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
1354 size_t frame; /* Offset of the cur constructed frame. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1355 } fail_stack_type;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1356
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1357 #define FAIL_STACK_EMPTY() (fail_stack.frame == 0)
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1358 #define FAIL_STACK_FULL() (fail_stack.avail == fail_stack.size)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1359
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1360
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1361 /* Define macros to initialize and free the failure stack.
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1362 Do `return -2' if the alloc fails. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1363
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1364 #ifdef MATCH_MAY_ALLOCATE
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
1365 # define INIT_FAIL_STACK() \
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1366 do { \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1367 fail_stack.stack = (fail_stack_elt_t *) \
20449
fc965930c738 (TYPICAL_FAILURE_SIZE): Renamed from MAX_FAILURE_ITEMS.
Karl Heuer <kwzh@gnu.org>
parents: 19184
diff changeset
1368 REGEX_ALLOCATE_STACK (INIT_FAILURE_ALLOC * TYPICAL_FAILURE_SIZE \
fc965930c738 (TYPICAL_FAILURE_SIZE): Renamed from MAX_FAILURE_ITEMS.
Karl Heuer <kwzh@gnu.org>
parents: 19184
diff changeset
1369 * sizeof (fail_stack_elt_t)); \
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1370 \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1371 if (fail_stack.stack == NULL) \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1372 return -2; \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1373 \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1374 fail_stack.size = INIT_FAILURE_ALLOC; \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1375 fail_stack.avail = 0; \
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1376 fail_stack.frame = 0; \
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1377 } while (0)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1378
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
1379 # define RESET_FAIL_STACK() REGEX_FREE_STACK (fail_stack.stack)
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1380 #else
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
1381 # define INIT_FAIL_STACK() \
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1382 do { \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1383 fail_stack.avail = 0; \
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1384 fail_stack.frame = 0; \
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1385 } while (0)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1386
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
1387 # define RESET_FAIL_STACK() ((void)0)
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1388 #endif
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1389
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1390
20449
fc965930c738 (TYPICAL_FAILURE_SIZE): Renamed from MAX_FAILURE_ITEMS.
Karl Heuer <kwzh@gnu.org>
parents: 19184
diff changeset
1391 /* Double the size of FAIL_STACK, up to a limit
fc965930c738 (TYPICAL_FAILURE_SIZE): Renamed from MAX_FAILURE_ITEMS.
Karl Heuer <kwzh@gnu.org>
parents: 19184
diff changeset
1392 which allows approximately `re_max_failures' items.
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1393
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1394 Return 1 if succeeds, and 0 if either ran out of memory
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
1395 allocating space for it or it was already too large.
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
1396
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1397 REGEX_REALLOCATE_STACK requires `destination' be declared. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1398
20449
fc965930c738 (TYPICAL_FAILURE_SIZE): Renamed from MAX_FAILURE_ITEMS.
Karl Heuer <kwzh@gnu.org>
parents: 19184
diff changeset
1399 /* Factor to increase the failure stack size by
fc965930c738 (TYPICAL_FAILURE_SIZE): Renamed from MAX_FAILURE_ITEMS.
Karl Heuer <kwzh@gnu.org>
parents: 19184
diff changeset
1400 when we increase it.
fc965930c738 (TYPICAL_FAILURE_SIZE): Renamed from MAX_FAILURE_ITEMS.
Karl Heuer <kwzh@gnu.org>
parents: 19184
diff changeset
1401 This used to be 2, but 2 was too wasteful
fc965930c738 (TYPICAL_FAILURE_SIZE): Renamed from MAX_FAILURE_ITEMS.
Karl Heuer <kwzh@gnu.org>
parents: 19184
diff changeset
1402 because the old discarded stacks added up to as much space
fc965930c738 (TYPICAL_FAILURE_SIZE): Renamed from MAX_FAILURE_ITEMS.
Karl Heuer <kwzh@gnu.org>
parents: 19184
diff changeset
1403 were as ultimate, maximum-size stack. */
fc965930c738 (TYPICAL_FAILURE_SIZE): Renamed from MAX_FAILURE_ITEMS.
Karl Heuer <kwzh@gnu.org>
parents: 19184
diff changeset
1404 #define FAIL_STACK_GROWTH_FACTOR 4
fc965930c738 (TYPICAL_FAILURE_SIZE): Renamed from MAX_FAILURE_ITEMS.
Karl Heuer <kwzh@gnu.org>
parents: 19184
diff changeset
1405
fc965930c738 (TYPICAL_FAILURE_SIZE): Renamed from MAX_FAILURE_ITEMS.
Karl Heuer <kwzh@gnu.org>
parents: 19184
diff changeset
1406 #define GROW_FAIL_STACK(fail_stack) \
20455
aff2a2638ef4 (GROW_FAIL_STACK): Fix test for stack size at max.
Karl Heuer <kwzh@gnu.org>
parents: 20450
diff changeset
1407 (((fail_stack).size * sizeof (fail_stack_elt_t) \
aff2a2638ef4 (GROW_FAIL_STACK): Fix test for stack size at max.
Karl Heuer <kwzh@gnu.org>
parents: 20450
diff changeset
1408 >= re_max_failures * TYPICAL_FAILURE_SIZE) \
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1409 ? 0 \
20449
fc965930c738 (TYPICAL_FAILURE_SIZE): Renamed from MAX_FAILURE_ITEMS.
Karl Heuer <kwzh@gnu.org>
parents: 19184
diff changeset
1410 : ((fail_stack).stack \
fc965930c738 (TYPICAL_FAILURE_SIZE): Renamed from MAX_FAILURE_ITEMS.
Karl Heuer <kwzh@gnu.org>
parents: 19184
diff changeset
1411 = (fail_stack_elt_t *) \
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1412 REGEX_REALLOCATE_STACK ((fail_stack).stack, \
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1413 (fail_stack).size * sizeof (fail_stack_elt_t), \
20449
fc965930c738 (TYPICAL_FAILURE_SIZE): Renamed from MAX_FAILURE_ITEMS.
Karl Heuer <kwzh@gnu.org>
parents: 19184
diff changeset
1414 MIN (re_max_failures * TYPICAL_FAILURE_SIZE, \
fc965930c738 (TYPICAL_FAILURE_SIZE): Renamed from MAX_FAILURE_ITEMS.
Karl Heuer <kwzh@gnu.org>
parents: 19184
diff changeset
1415 ((fail_stack).size * sizeof (fail_stack_elt_t) \
fc965930c738 (TYPICAL_FAILURE_SIZE): Renamed from MAX_FAILURE_ITEMS.
Karl Heuer <kwzh@gnu.org>
parents: 19184
diff changeset
1416 * FAIL_STACK_GROWTH_FACTOR))), \
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1417 \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1418 (fail_stack).stack == NULL \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1419 ? 0 \
20450
8f05356e9dc3 (GROW_FAIL_STACK): Fix previous change:
Karl Heuer <kwzh@gnu.org>
parents: 20449
diff changeset
1420 : ((fail_stack).size \
8f05356e9dc3 (GROW_FAIL_STACK): Fix previous change:
Karl Heuer <kwzh@gnu.org>
parents: 20449
diff changeset
1421 = (MIN (re_max_failures * TYPICAL_FAILURE_SIZE, \
8f05356e9dc3 (GROW_FAIL_STACK): Fix previous change:
Karl Heuer <kwzh@gnu.org>
parents: 20449
diff changeset
1422 ((fail_stack).size * sizeof (fail_stack_elt_t) \
8f05356e9dc3 (GROW_FAIL_STACK): Fix previous change:
Karl Heuer <kwzh@gnu.org>
parents: 20449
diff changeset
1423 * FAIL_STACK_GROWTH_FACTOR)) \
8f05356e9dc3 (GROW_FAIL_STACK): Fix previous change:
Karl Heuer <kwzh@gnu.org>
parents: 20449
diff changeset
1424 / sizeof (fail_stack_elt_t)), \
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1425 1)))
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1426
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1427
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1428 /* Push a pointer value onto the failure stack.
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1429 Assumes the variable `fail_stack'. Probably should only
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1430 be called from within `PUSH_FAILURE_POINT'. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1431 #define PUSH_FAILURE_POINTER(item) \
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
1432 fail_stack.stack[fail_stack.avail++].pointer = (item)
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1433
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1434 /* This pushes an integer-valued item onto the failure stack.
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1435 Assumes the variable `fail_stack'. Probably should only
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1436 be called from within `PUSH_FAILURE_POINT'. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1437 #define PUSH_FAILURE_INT(item) \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1438 fail_stack.stack[fail_stack.avail++].integer = (item)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1439
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1440 /* Push a fail_stack_elt_t value onto the failure stack.
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1441 Assumes the variable `fail_stack'. Probably should only
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1442 be called from within `PUSH_FAILURE_POINT'. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1443 #define PUSH_FAILURE_ELT(item) \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1444 fail_stack.stack[fail_stack.avail++] = (item)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1445
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1446 /* These three POP... operations complement the three PUSH... operations.
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1447 All assume that `fail_stack' is nonempty. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1448 #define POP_FAILURE_POINTER() fail_stack.stack[--fail_stack.avail].pointer
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1449 #define POP_FAILURE_INT() fail_stack.stack[--fail_stack.avail].integer
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1450 #define POP_FAILURE_ELT() fail_stack.stack[--fail_stack.avail]
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1451
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1452 /* Individual items aside from the registers. */
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1453 #define NUM_NONREG_ITEMS 3
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1454
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1455 /* Used to examine the stack (to detect infinite loops). */
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1456 #define FAILURE_PAT(h) fail_stack.stack[(h) - 1].pointer
28138
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
1457 #define FAILURE_STR(h) (fail_stack.stack[(h) - 2].pointer)
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1458 #define NEXT_FAILURE_HANDLE(h) fail_stack.stack[(h) - 3].integer
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1459 #define TOP_FAILURE_HANDLE() fail_stack.frame
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1460
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1461
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1462 #define ENSURE_FAIL_STACK(space) \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1463 while (REMAINING_AVAIL_SLOTS <= space) { \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1464 if (!GROW_FAIL_STACK (fail_stack)) \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1465 return -2; \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1466 DEBUG_PRINT2 ("\n Doubled stack; size now: %d\n", (fail_stack).size);\
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1467 DEBUG_PRINT2 (" slots available: %d\n", REMAINING_AVAIL_SLOTS);\
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1468 }
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1469
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1470 /* Push register NUM onto the stack. */
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1471 #define PUSH_FAILURE_REG(num) \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1472 do { \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1473 char *destination; \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1474 ENSURE_FAIL_STACK(3); \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1475 DEBUG_PRINT4 (" Push reg %d (spanning %p -> %p)\n", \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1476 num, regstart[num], regend[num]); \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1477 PUSH_FAILURE_POINTER (regstart[num]); \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1478 PUSH_FAILURE_POINTER (regend[num]); \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1479 PUSH_FAILURE_INT (num); \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1480 } while (0)
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1481
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
1482 /* Change the counter's value to VAL, but make sure that it will
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
1483 be reset when backtracking. */
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
1484 #define PUSH_NUMBER(ptr,val) \
31172
0ee53ec2081a (PUSH_FAILURE_COUNT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30752
diff changeset
1485 do { \
0ee53ec2081a (PUSH_FAILURE_COUNT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30752
diff changeset
1486 char *destination; \
0ee53ec2081a (PUSH_FAILURE_COUNT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30752
diff changeset
1487 int c; \
0ee53ec2081a (PUSH_FAILURE_COUNT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30752
diff changeset
1488 ENSURE_FAIL_STACK(3); \
0ee53ec2081a (PUSH_FAILURE_COUNT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30752
diff changeset
1489 EXTRACT_NUMBER (c, ptr); \
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
1490 DEBUG_PRINT4 (" Push number %p = %d -> %d\n", ptr, c, val); \
31172
0ee53ec2081a (PUSH_FAILURE_COUNT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30752
diff changeset
1491 PUSH_FAILURE_INT (c); \
0ee53ec2081a (PUSH_FAILURE_COUNT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30752
diff changeset
1492 PUSH_FAILURE_POINTER (ptr); \
0ee53ec2081a (PUSH_FAILURE_COUNT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30752
diff changeset
1493 PUSH_FAILURE_INT (-1); \
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
1494 STORE_NUMBER (ptr, val); \
31172
0ee53ec2081a (PUSH_FAILURE_COUNT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30752
diff changeset
1495 } while (0)
0ee53ec2081a (PUSH_FAILURE_COUNT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30752
diff changeset
1496
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1497 /* Pop a saved register off the stack. */
31172
0ee53ec2081a (PUSH_FAILURE_COUNT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30752
diff changeset
1498 #define POP_FAILURE_REG_OR_COUNT() \
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1499 do { \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1500 int reg = POP_FAILURE_INT (); \
31172
0ee53ec2081a (PUSH_FAILURE_COUNT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30752
diff changeset
1501 if (reg == -1) \
0ee53ec2081a (PUSH_FAILURE_COUNT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30752
diff changeset
1502 { \
0ee53ec2081a (PUSH_FAILURE_COUNT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30752
diff changeset
1503 /* It's a counter. */ \
32954
f77e6c51dd07 (POP_FAILURE_REG_OR_COUNT, re_match_2_internal)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32891
diff changeset
1504 /* Here, we discard `const', making re_match non-reentrant. */ \
f77e6c51dd07 (POP_FAILURE_REG_OR_COUNT, re_match_2_internal)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32891
diff changeset
1505 unsigned char *ptr = (unsigned char*) POP_FAILURE_POINTER (); \
31172
0ee53ec2081a (PUSH_FAILURE_COUNT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30752
diff changeset
1506 reg = POP_FAILURE_INT (); \
0ee53ec2081a (PUSH_FAILURE_COUNT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30752
diff changeset
1507 STORE_NUMBER (ptr, reg); \
0ee53ec2081a (PUSH_FAILURE_COUNT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30752
diff changeset
1508 DEBUG_PRINT3 (" Pop counter %p = %d\n", ptr, reg); \
0ee53ec2081a (PUSH_FAILURE_COUNT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30752
diff changeset
1509 } \
0ee53ec2081a (PUSH_FAILURE_COUNT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30752
diff changeset
1510 else \
0ee53ec2081a (PUSH_FAILURE_COUNT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30752
diff changeset
1511 { \
0ee53ec2081a (PUSH_FAILURE_COUNT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30752
diff changeset
1512 regend[reg] = POP_FAILURE_POINTER (); \
0ee53ec2081a (PUSH_FAILURE_COUNT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30752
diff changeset
1513 regstart[reg] = POP_FAILURE_POINTER (); \
0ee53ec2081a (PUSH_FAILURE_COUNT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30752
diff changeset
1514 DEBUG_PRINT4 (" Pop reg %d (spanning %p -> %p)\n", \
0ee53ec2081a (PUSH_FAILURE_COUNT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30752
diff changeset
1515 reg, regstart[reg], regend[reg]); \
0ee53ec2081a (PUSH_FAILURE_COUNT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30752
diff changeset
1516 } \
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1517 } while (0)
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1518
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1519 /* Check that we are not stuck in an infinite loop. */
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1520 #define CHECK_INFINITE_LOOP(pat_cur, string_place) \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1521 do { \
44063
fd6c1f8ebd4e (DISCARD_FAILURE_REG_OR_COUNT): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 40650
diff changeset
1522 int failure = TOP_FAILURE_HANDLE (); \
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1523 /* Check for infinite matching loops */ \
44063
fd6c1f8ebd4e (DISCARD_FAILURE_REG_OR_COUNT): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 40650
diff changeset
1524 while (failure > 0 \
fd6c1f8ebd4e (DISCARD_FAILURE_REG_OR_COUNT): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 40650
diff changeset
1525 && (FAILURE_STR (failure) == string_place \
fd6c1f8ebd4e (DISCARD_FAILURE_REG_OR_COUNT): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 40650
diff changeset
1526 || FAILURE_STR (failure) == NULL)) \
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1527 { \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1528 assert (FAILURE_PAT (failure) >= bufp->buffer \
28138
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
1529 && FAILURE_PAT (failure) <= bufp->buffer + bufp->used); \
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1530 if (FAILURE_PAT (failure) == pat_cur) \
44063
fd6c1f8ebd4e (DISCARD_FAILURE_REG_OR_COUNT): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 40650
diff changeset
1531 { \
47368
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
1532 cycle = 1; \
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
1533 break; \
44063
fd6c1f8ebd4e (DISCARD_FAILURE_REG_OR_COUNT): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 40650
diff changeset
1534 } \
28138
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
1535 DEBUG_PRINT2 (" Other pattern: %p\n", FAILURE_PAT (failure)); \
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1536 failure = NEXT_FAILURE_HANDLE(failure); \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1537 } \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1538 DEBUG_PRINT2 (" Other string: %p\n", FAILURE_STR (failure)); \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1539 } while (0)
47368
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
1540
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1541 /* Push the information about the state we will need
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
1542 if we ever fail back to it.
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
1543
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1544 Requires variables fail_stack, regstart, regend and
20449
fc965930c738 (TYPICAL_FAILURE_SIZE): Renamed from MAX_FAILURE_ITEMS.
Karl Heuer <kwzh@gnu.org>
parents: 19184
diff changeset
1545 num_regs be declared. GROW_FAIL_STACK requires `destination' be
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1546 declared.
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
1547
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1548 Does `return FAILURE_CODE' if runs out of memory. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1549
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1550 #define PUSH_FAILURE_POINT(pattern, string_place) \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1551 do { \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1552 char *destination; \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1553 /* Must be int, so when we don't save any registers, the arithmetic \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1554 of 0 + -1 isn't done as unsigned. */ \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1555 \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1556 DEBUG_STATEMENT (nfailure_points_pushed++); \
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1557 DEBUG_PRINT1 ("\nPUSH_FAILURE_POINT:\n"); \
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1558 DEBUG_PRINT2 (" Before push, next avail: %d\n", (fail_stack).avail); \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1559 DEBUG_PRINT2 (" size: %d\n", (fail_stack).size);\
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1560 \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1561 ENSURE_FAIL_STACK (NUM_NONREG_ITEMS); \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1562 \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1563 DEBUG_PRINT1 ("\n"); \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1564 \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1565 DEBUG_PRINT2 (" Push frame index: %d\n", fail_stack.frame); \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1566 PUSH_FAILURE_INT (fail_stack.frame); \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1567 \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1568 DEBUG_PRINT2 (" Push string %p: `", string_place); \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1569 DEBUG_PRINT_DOUBLE_STRING (string_place, string1, size1, string2, size2);\
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1570 DEBUG_PRINT1 ("'\n"); \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1571 PUSH_FAILURE_POINTER (string_place); \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1572 \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1573 DEBUG_PRINT2 (" Push pattern %p: ", pattern); \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1574 DEBUG_PRINT_COMPILED_PATTERN (bufp, pattern, pend); \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1575 PUSH_FAILURE_POINTER (pattern); \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1576 \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1577 /* Close the frame by moving the frame pointer past it. */ \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1578 fail_stack.frame = fail_stack.avail; \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1579 } while (0)
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1580
20449
fc965930c738 (TYPICAL_FAILURE_SIZE): Renamed from MAX_FAILURE_ITEMS.
Karl Heuer <kwzh@gnu.org>
parents: 19184
diff changeset
1581 /* Estimate the size of data pushed by a typical failure stack entry.
fc965930c738 (TYPICAL_FAILURE_SIZE): Renamed from MAX_FAILURE_ITEMS.
Karl Heuer <kwzh@gnu.org>
parents: 19184
diff changeset
1582 An estimate is all we need, because all we use this for
fc965930c738 (TYPICAL_FAILURE_SIZE): Renamed from MAX_FAILURE_ITEMS.
Karl Heuer <kwzh@gnu.org>
parents: 19184
diff changeset
1583 is to choose a limit for how big to make the failure stack. */
40650
ded4aa3c81b2 (re_wctype): Try to fix some warnings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39718
diff changeset
1584 /* BEWARE, the value `20' is hard-coded in emacs.c:main(). */
20449
fc965930c738 (TYPICAL_FAILURE_SIZE): Renamed from MAX_FAILURE_ITEMS.
Karl Heuer <kwzh@gnu.org>
parents: 19184
diff changeset
1585 #define TYPICAL_FAILURE_SIZE 20
fc965930c738 (TYPICAL_FAILURE_SIZE): Renamed from MAX_FAILURE_ITEMS.
Karl Heuer <kwzh@gnu.org>
parents: 19184
diff changeset
1586
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1587 /* How many items can still be added to the stack without overflowing it. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1588 #define REMAINING_AVAIL_SLOTS ((fail_stack).size - (fail_stack).avail)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1589
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1590
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1591 /* Pops what PUSH_FAIL_STACK pushes.
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1592
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1593 We restore into the parameters, all of which should be lvalues:
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1594 STR -- the saved data position.
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1595 PAT -- the saved pattern position.
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1596 REGSTART, REGEND -- arrays of string positions.
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
1597
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1598 Also assumes the variables `fail_stack' and (if debugging), `bufp',
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1599 `pend', `string1', `size1', `string2', and `size2'. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1600
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1601 #define POP_FAILURE_POINT(str, pat) \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1602 do { \
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1603 assert (!FAIL_STACK_EMPTY ()); \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1604 \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1605 /* Remove failure points and point to how many regs pushed. */ \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1606 DEBUG_PRINT1 ("POP_FAILURE_POINT:\n"); \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1607 DEBUG_PRINT2 (" Before pop, next avail: %d\n", fail_stack.avail); \
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1608 DEBUG_PRINT2 (" size: %d\n", fail_stack.size); \
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1609 \
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1610 /* Pop the saved registers. */ \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1611 while (fail_stack.frame < fail_stack.avail) \
31172
0ee53ec2081a (PUSH_FAILURE_COUNT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30752
diff changeset
1612 POP_FAILURE_REG_OR_COUNT (); \
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1613 \
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
1614 pat = POP_FAILURE_POINTER (); \
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1615 DEBUG_PRINT2 (" Popping pattern %p: ", pat); \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1616 DEBUG_PRINT_COMPILED_PATTERN (bufp, pat, pend); \
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1617 \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1618 /* If the saved string location is NULL, it came from an \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1619 on_failure_keep_string_jump opcode, and we want to throw away the \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1620 saved NULL, thus retaining our current position in the string. */ \
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
1621 str = POP_FAILURE_POINTER (); \
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1622 DEBUG_PRINT2 (" Popping string %p: `", str); \
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1623 DEBUG_PRINT_DOUBLE_STRING (str, string1, size1, string2, size2); \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1624 DEBUG_PRINT1 ("'\n"); \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1625 \
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1626 fail_stack.frame = POP_FAILURE_INT (); \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1627 DEBUG_PRINT2 (" Popping frame index: %d\n", fail_stack.frame); \
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1628 \
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1629 assert (fail_stack.avail >= 0); \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1630 assert (fail_stack.frame <= fail_stack.avail); \
12931
30dad6bfce63 (PUSH_FAILURE_POINT, POP_FAILURE_POINT): Don't push or pop
Richard M. Stallman <rms@gnu.org>
parents: 12570
diff changeset
1631 \
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1632 DEBUG_STATEMENT (nfailure_points_popped++); \
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
1633 } while (0) /* POP_FAILURE_POINT */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1634
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1635
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1636
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1637 /* Registers are set to a sentinel when they haven't yet matched. */
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1638 #define REG_UNSET(e) ((e) == NULL)
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1639
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1640 /* Subroutine declarations and macros for regex_compile. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1641
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1642 static reg_errcode_t regex_compile _RE_ARGS ((re_char *pattern, size_t size,
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1643 reg_syntax_t syntax,
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1644 struct re_pattern_buffer *bufp));
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1645 static void store_op1 _RE_ARGS ((re_opcode_t op, unsigned char *loc, int arg));
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1646 static void store_op2 _RE_ARGS ((re_opcode_t op, unsigned char *loc,
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1647 int arg1, int arg2));
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1648 static void insert_op1 _RE_ARGS ((re_opcode_t op, unsigned char *loc,
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1649 int arg, unsigned char *end));
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1650 static void insert_op2 _RE_ARGS ((re_opcode_t op, unsigned char *loc,
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1651 int arg1, int arg2, unsigned char *end));
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
1652 static boolean at_begline_loc_p _RE_ARGS ((re_char *pattern,
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
1653 re_char *p,
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1654 reg_syntax_t syntax));
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
1655 static boolean at_endline_loc_p _RE_ARGS ((re_char *p,
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
1656 re_char *pend,
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1657 reg_syntax_t syntax));
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
1658 static re_char *skip_one_char _RE_ARGS ((re_char *p));
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
1659 static int analyse_first _RE_ARGS ((re_char *p, re_char *pend,
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1660 char *fastmap, const int multibyte));
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1661
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1662 /* Fetch the next character in the uncompiled pattern, with no
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1663 translation. */
47008
c299d527a088 (PATFETCH): Remove the translating fetch.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44145
diff changeset
1664 #define PATFETCH(c) \
28473
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
1665 do { \
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
1666 int len; \
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
1667 if (p == pend) return REG_EEND; \
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
1668 c = RE_STRING_CHAR_AND_LENGTH (p, pend - p, len); \
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
1669 p += len; \
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1670 } while (0)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1671
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1672
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1673 /* If `translate' is non-null, return translate[D], else just D. We
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1674 cast the subscript to translate because some data is declared as
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1675 `char *', to avoid warnings when a string constant is passed. But
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1676 when we use a character as a subscript we must make it unsigned. */
13250
52e053f46f76 (TRANSLATE, PATFETCH): Cast elt of `translate'.
Richard M. Stallman <rms@gnu.org>
parents: 13100
diff changeset
1677 #ifndef TRANSLATE
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
1678 # define TRANSLATE(d) \
28138
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
1679 (RE_TRANSLATE_P (translate) ? RE_TRANSLATE (translate, (d)) : (d))
13250
52e053f46f76 (TRANSLATE, PATFETCH): Cast elt of `translate'.
Richard M. Stallman <rms@gnu.org>
parents: 13100
diff changeset
1680 #endif
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1681
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1682
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1683 /* Macros for outputting the compiled pattern into `buffer'. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1684
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1685 /* If the buffer isn't allocated when it comes in, use this. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1686 #define INIT_BUF_SIZE 32
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1687
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1688 /* Make sure we have at least N more bytes of space in buffer. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1689 #define GET_BUFFER_SPACE(n) \
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
1690 while ((size_t) (b - bufp->buffer + (n)) > bufp->allocated) \
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1691 EXTEND_BUFFER ()
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1692
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1693 /* Make sure we have one more byte of buffer space and then add C to it. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1694 #define BUF_PUSH(c) \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1695 do { \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1696 GET_BUFFER_SPACE (1); \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1697 *b++ = (unsigned char) (c); \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1698 } while (0)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1699
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1700
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1701 /* Ensure we have two more bytes of buffer space and then append C1 and C2. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1702 #define BUF_PUSH_2(c1, c2) \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1703 do { \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1704 GET_BUFFER_SPACE (2); \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1705 *b++ = (unsigned char) (c1); \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1706 *b++ = (unsigned char) (c2); \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1707 } while (0)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1708
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1709
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1710 /* As with BUF_PUSH_2, except for three bytes. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1711 #define BUF_PUSH_3(c1, c2, c3) \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1712 do { \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1713 GET_BUFFER_SPACE (3); \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1714 *b++ = (unsigned char) (c1); \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1715 *b++ = (unsigned char) (c2); \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1716 *b++ = (unsigned char) (c3); \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1717 } while (0)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1718
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1719
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1720 /* Store a jump with opcode OP at LOC to location TO. We store a
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1721 relative address offset by the three bytes the jump itself occupies. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1722 #define STORE_JUMP(op, loc, to) \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1723 store_op1 (op, loc, (to) - (loc) - 3)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1724
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1725 /* Likewise, for a two-argument jump. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1726 #define STORE_JUMP2(op, loc, to, arg) \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1727 store_op2 (op, loc, (to) - (loc) - 3, arg)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1728
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1729 /* Like `STORE_JUMP', but for inserting. Assume `b' is the buffer end. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1730 #define INSERT_JUMP(op, loc, to) \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1731 insert_op1 (op, loc, (to) - (loc) - 3, b)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1732
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1733 /* Like `STORE_JUMP2', but for inserting. Assume `b' is the buffer end. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1734 #define INSERT_JUMP2(op, loc, to, arg) \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1735 insert_op2 (op, loc, (to) - (loc) - 3, arg, b)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1736
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1737
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1738 /* This is not an arbitrary limit: the arguments which represent offsets
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1739 into the pattern are two bytes long. So if 2^16 bytes turns out to
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1740 be too small, many things would have to change. */
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1741 /* Any other compiler which, like MSC, has allocation limit below 2^16
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1742 bytes will have to use approach similar to what was done below for
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1743 MSC and drop MAX_BUF_SIZE a bit. Otherwise you may end up
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1744 reallocating to 0 bytes. Such thing is not going to work too well.
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1745 You have been warned!! */
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1746 #if defined _MSC_VER && !defined WIN32
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1747 /* Microsoft C 16-bit versions limit malloc to approx 65512 bytes. */
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1748 # define MAX_BUF_SIZE 65500L
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1749 #else
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1750 # define MAX_BUF_SIZE (1L << 16)
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1751 #endif
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1752
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1753 /* Extend the buffer by twice its current size via realloc and
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1754 reset the pointers that pointed into the old block to point to the
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1755 correct places in the new one. If extending the buffer results in it
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1756 being larger than MAX_BUF_SIZE, then flag memory exhausted. */
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1757 #if __BOUNDED_POINTERS__
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1758 # define SET_HIGH_BOUND(P) (__ptrhigh (P) = __ptrlow (P) + bufp->allocated)
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1759 # define MOVE_BUFFER_POINTER(P) \
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1760 (__ptrlow (P) += incr, SET_HIGH_BOUND (P), __ptrvalue (P) += incr)
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1761 # define ELSE_EXTEND_BUFFER_HIGH_BOUND \
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1762 else \
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1763 { \
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1764 SET_HIGH_BOUND (b); \
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1765 SET_HIGH_BOUND (begalt); \
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1766 if (fixup_alt_jump) \
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1767 SET_HIGH_BOUND (fixup_alt_jump); \
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1768 if (laststart) \
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1769 SET_HIGH_BOUND (laststart); \
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1770 if (pending_exact) \
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1771 SET_HIGH_BOUND (pending_exact); \
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1772 }
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1773 #else
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1774 # define MOVE_BUFFER_POINTER(P) (P) += incr
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1775 # define ELSE_EXTEND_BUFFER_HIGH_BOUND
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1776 #endif
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1777 #define EXTEND_BUFFER() \
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1778 do { \
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
1779 re_char *old_buffer = bufp->buffer; \
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1780 if (bufp->allocated == MAX_BUF_SIZE) \
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1781 return REG_ESIZE; \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1782 bufp->allocated <<= 1; \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1783 if (bufp->allocated > MAX_BUF_SIZE) \
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1784 bufp->allocated = MAX_BUF_SIZE; \
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
1785 RETALLOC (bufp->buffer, bufp->allocated, unsigned char); \
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1786 if (bufp->buffer == NULL) \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1787 return REG_ESPACE; \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1788 /* If the buffer moved, move all the pointers into it. */ \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1789 if (old_buffer != bufp->buffer) \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1790 { \
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1791 int incr = bufp->buffer - old_buffer; \
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1792 MOVE_BUFFER_POINTER (b); \
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1793 MOVE_BUFFER_POINTER (begalt); \
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1794 if (fixup_alt_jump) \
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1795 MOVE_BUFFER_POINTER (fixup_alt_jump); \
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1796 if (laststart) \
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1797 MOVE_BUFFER_POINTER (laststart); \
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1798 if (pending_exact) \
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1799 MOVE_BUFFER_POINTER (pending_exact); \
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1800 } \
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1801 ELSE_EXTEND_BUFFER_HIGH_BOUND \
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1802 } while (0)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1803
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1804
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1805 /* Since we have one byte reserved for the register number argument to
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1806 {start,stop}_memory, the maximum number of groups we can report
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1807 things about is what fits in that byte. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1808 #define MAX_REGNUM 255
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1809
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1810 /* But patterns can have more than `MAX_REGNUM' registers. We just
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1811 ignore the excess. */
47337
a4b9dff21d74 (regnum_t): Use signed int, not unsigned int.
Richard M. Stallman <rms@gnu.org>
parents: 47250
diff changeset
1812 typedef int regnum_t;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1813
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1814
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1815 /* Macros for the compile stack. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1816
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1817 /* Since offsets can go either forwards or backwards, this type needs to
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1818 be able to hold values from -(MAX_BUF_SIZE - 1) to MAX_BUF_SIZE - 1. */
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1819 /* int may be not enough when sizeof(int) == 2. */
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1820 typedef long pattern_offset_t;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1821
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1822 typedef struct
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1823 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1824 pattern_offset_t begalt_offset;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1825 pattern_offset_t fixup_alt_jump;
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
1826 pattern_offset_t laststart_offset;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1827 regnum_t regnum;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1828 } compile_stack_elt_t;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1829
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1830
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1831 typedef struct
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1832 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1833 compile_stack_elt_t *stack;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1834 unsigned size;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1835 unsigned avail; /* Offset of next open position. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1836 } compile_stack_type;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1837
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1838
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1839 #define INIT_COMPILE_STACK_SIZE 32
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1840
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1841 #define COMPILE_STACK_EMPTY (compile_stack.avail == 0)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1842 #define COMPILE_STACK_FULL (compile_stack.avail == compile_stack.size)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1843
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1844 /* The next available element. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1845 #define COMPILE_STACK_TOP (compile_stack.stack[compile_stack.avail])
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1846
47233
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
1847 /* Explicit quit checking is only used on NTemacs. */
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
1848 #if defined WINDOWSNT && defined emacs && defined QUIT
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
1849 extern int immediate_quit;
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
1850 # define IMMEDIATE_QUIT_CHECK \
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
1851 do { \
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
1852 if (immediate_quit) QUIT; \
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
1853 } while (0)
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
1854 #else
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
1855 # define IMMEDIATE_QUIT_CHECK ((void)0)
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
1856 #endif
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
1857
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
1858 /* Structure to manage work area for range table. */
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
1859 struct range_table_work_area
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
1860 {
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
1861 int *table; /* actual work area. */
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
1862 int allocated; /* allocated size for work area in bytes. */
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1863 int used; /* actually used size in words. */
25440
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
1864 int bits; /* flag to record character classes */
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
1865 };
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
1866
47233
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
1867 /* Make sure that WORK_AREA can hold more N multibyte characters.
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
1868 This is used only in set_image_of_range and set_image_of_range_1.
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
1869 It expects WORK_AREA to be a pointer.
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
1870 If it can't get the space, it returns from the surrounding function. */
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
1871
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
1872 #define EXTEND_RANGE_TABLE(work_area, n) \
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
1873 do { \
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
1874 if (((work_area)->used + (n)) * sizeof (int) > (work_area)->allocated) \
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
1875 { \
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
1876 extend_range_table_work_area (work_area); \
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
1877 if ((work_area)->table == 0) \
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
1878 return (REG_ESPACE); \
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
1879 } \
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
1880 } while (0)
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
1881
25440
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
1882 #define SET_RANGE_TABLE_WORK_AREA_BIT(work_area, bit) \
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
1883 (work_area).bits |= (bit)
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
1884
31360
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1885 /* Bits used to implement the multibyte-part of the various character classes
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1886 such as [:alnum:] in a charset's range table. */
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1887 #define BIT_WORD 0x1
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1888 #define BIT_LOWER 0x2
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1889 #define BIT_PUNCT 0x4
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1890 #define BIT_SPACE 0x8
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1891 #define BIT_UPPER 0x10
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1892 #define BIT_MULTIBYTE 0x20
25440
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
1893
47008
c299d527a088 (PATFETCH): Remove the translating fetch.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44145
diff changeset
1894 /* Set a range START..END to WORK_AREA.
c299d527a088 (PATFETCH): Remove the translating fetch.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44145
diff changeset
1895 The range is passed through TRANSLATE, so START and END
c299d527a088 (PATFETCH): Remove the translating fetch.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44145
diff changeset
1896 should be untranslated. */
47233
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
1897 #define SET_RANGE_TABLE_WORK_AREA(work_area, start, end) \
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
1898 do { \
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
1899 int tem; \
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
1900 tem = set_image_of_range (&work_area, start, end, translate); \
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
1901 if (tem > 0) \
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
1902 FREE_STACK_RETURN (tem); \
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
1903 } while (0)
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
1904
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1905 /* Free allocated memory for WORK_AREA. */
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
1906 #define FREE_RANGE_TABLE_WORK_AREA(work_area) \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
1907 do { \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
1908 if ((work_area).table) \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
1909 free ((work_area).table); \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
1910 } while (0)
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
1911
25440
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
1912 #define CLEAR_RANGE_TABLE_WORK_USED(work_area) ((work_area).used = 0, (work_area).bits = 0)
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
1913 #define RANGE_TABLE_WORK_USED(work_area) ((work_area).used)
25440
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
1914 #define RANGE_TABLE_WORK_BITS(work_area) ((work_area).bits)
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
1915 #define RANGE_TABLE_WORK_ELT(work_area, i) ((work_area).table[i])
47233
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
1916
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
1917
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1918 /* Set the bit for character C in a list. */
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
1919 #define SET_LIST_BIT(c) (b[((c)) / BYTEWIDTH] |= 1 << ((c) % BYTEWIDTH))
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1920
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1921
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1922 /* Get the next unsigned number in the uncompiled pattern. */
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1923 #define GET_UNSIGNED_NUMBER(num) \
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
1924 do { if (p != pend) \
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
1925 { \
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1926 PATFETCH (c); \
44145
aad3682a49ba (GET_UNSIGNED_NUMBER): Give proper error for spaces.
Richard M. Stallman <rms@gnu.org>
parents: 44063
diff changeset
1927 if (c == ' ') \
aad3682a49ba (GET_UNSIGNED_NUMBER): Give proper error for spaces.
Richard M. Stallman <rms@gnu.org>
parents: 44063
diff changeset
1928 FREE_STACK_RETURN (REG_BADBR); \
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
1929 while ('0' <= c && c <= '9') \
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1930 { \
44063
fd6c1f8ebd4e (DISCARD_FAILURE_REG_OR_COUNT): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 40650
diff changeset
1931 int prev; \
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1932 if (num < 0) \
44063
fd6c1f8ebd4e (DISCARD_FAILURE_REG_OR_COUNT): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 40650
diff changeset
1933 num = 0; \
fd6c1f8ebd4e (DISCARD_FAILURE_REG_OR_COUNT): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 40650
diff changeset
1934 prev = num; \
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1935 num = num * 10 + c - '0'; \
44063
fd6c1f8ebd4e (DISCARD_FAILURE_REG_OR_COUNT): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 40650
diff changeset
1936 if (num / 10 != prev) \
fd6c1f8ebd4e (DISCARD_FAILURE_REG_OR_COUNT): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 40650
diff changeset
1937 FREE_STACK_RETURN (REG_BADBR); \
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1938 if (p == pend) \
44063
fd6c1f8ebd4e (DISCARD_FAILURE_REG_OR_COUNT): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 40650
diff changeset
1939 break; \
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1940 PATFETCH (c); \
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1941 } \
44145
aad3682a49ba (GET_UNSIGNED_NUMBER): Give proper error for spaces.
Richard M. Stallman <rms@gnu.org>
parents: 44063
diff changeset
1942 if (c == ' ') \
aad3682a49ba (GET_UNSIGNED_NUMBER): Give proper error for spaces.
Richard M. Stallman <rms@gnu.org>
parents: 44063
diff changeset
1943 FREE_STACK_RETURN (REG_BADBR); \
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
1944 } \
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
1945 } while (0)
47233
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
1946
32499
3a5e6f70d313 (WIDE_CHAR_SUPPORT): Define if _LIBC as well.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31729
diff changeset
1947 #if WIDE_CHAR_SUPPORT
31360
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1948 /* The GNU C library provides support for user-defined character classes
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1949 and the functions from ISO C amendement 1. */
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1950 # ifdef CHARCLASS_NAME_MAX
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1951 # define CHAR_CLASS_MAX_LENGTH CHARCLASS_NAME_MAX
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1952 # else
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1953 /* This shouldn't happen but some implementation might still have this
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1954 problem. Use a reasonable default value. */
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1955 # define CHAR_CLASS_MAX_LENGTH 256
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1956 # endif
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1957 typedef wctype_t re_wctype_t;
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
1958 typedef wchar_t re_wchar_t;
31360
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1959 # define re_wctype wctype
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1960 # define re_iswctype iswctype
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1961 # define re_wctype_to_bit(cc) 0
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1962 #else
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1963 # define CHAR_CLASS_MAX_LENGTH 9 /* Namely, `multibyte'. */
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1964 # define btowc(c) c
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1965
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
1966 /* Character classes. */
31360
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1967 typedef enum { RECC_ERROR = 0,
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1968 RECC_ALNUM, RECC_ALPHA, RECC_WORD,
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1969 RECC_GRAPH, RECC_PRINT,
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1970 RECC_LOWER, RECC_UPPER,
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1971 RECC_PUNCT, RECC_CNTRL,
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1972 RECC_DIGIT, RECC_XDIGIT,
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1973 RECC_BLANK, RECC_SPACE,
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1974 RECC_MULTIBYTE, RECC_NONASCII,
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1975 RECC_ASCII, RECC_UNIBYTE
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1976 } re_wctype_t;
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1977
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
1978 typedef int re_wchar_t;
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
1979
31360
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1980 /* Map a string to the char class it names (if any). */
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1981 static re_wctype_t
40650
ded4aa3c81b2 (re_wctype): Try to fix some warnings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39718
diff changeset
1982 re_wctype (str)
ded4aa3c81b2 (re_wctype): Try to fix some warnings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39718
diff changeset
1983 re_char *str;
31360
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1984 {
40650
ded4aa3c81b2 (re_wctype): Try to fix some warnings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39718
diff changeset
1985 const char *string = str;
31360
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1986 if (STREQ (string, "alnum")) return RECC_ALNUM;
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1987 else if (STREQ (string, "alpha")) return RECC_ALPHA;
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1988 else if (STREQ (string, "word")) return RECC_WORD;
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1989 else if (STREQ (string, "ascii")) return RECC_ASCII;
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1990 else if (STREQ (string, "nonascii")) return RECC_NONASCII;
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1991 else if (STREQ (string, "graph")) return RECC_GRAPH;
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1992 else if (STREQ (string, "lower")) return RECC_LOWER;
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1993 else if (STREQ (string, "print")) return RECC_PRINT;
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1994 else if (STREQ (string, "punct")) return RECC_PUNCT;
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1995 else if (STREQ (string, "space")) return RECC_SPACE;
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1996 else if (STREQ (string, "upper")) return RECC_UPPER;
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1997 else if (STREQ (string, "unibyte")) return RECC_UNIBYTE;
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1998 else if (STREQ (string, "multibyte")) return RECC_MULTIBYTE;
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
1999 else if (STREQ (string, "digit")) return RECC_DIGIT;
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2000 else if (STREQ (string, "xdigit")) return RECC_XDIGIT;
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2001 else if (STREQ (string, "cntrl")) return RECC_CNTRL;
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2002 else if (STREQ (string, "blank")) return RECC_BLANK;
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2003 else return 0;
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2004 }
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2005
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2006 /* True iff CH is in the char class CC. */
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2007 static boolean
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2008 re_iswctype (ch, cc)
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2009 int ch;
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2010 re_wctype_t cc;
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2011 {
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2012 switch (cc)
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2013 {
33066
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
2014 case RECC_ALNUM: return ISALNUM (ch);
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
2015 case RECC_ALPHA: return ISALPHA (ch);
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
2016 case RECC_BLANK: return ISBLANK (ch);
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
2017 case RECC_CNTRL: return ISCNTRL (ch);
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
2018 case RECC_DIGIT: return ISDIGIT (ch);
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
2019 case RECC_GRAPH: return ISGRAPH (ch);
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
2020 case RECC_LOWER: return ISLOWER (ch);
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
2021 case RECC_PRINT: return ISPRINT (ch);
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
2022 case RECC_PUNCT: return ISPUNCT (ch);
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
2023 case RECC_SPACE: return ISSPACE (ch);
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
2024 case RECC_UPPER: return ISUPPER (ch);
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
2025 case RECC_XDIGIT: return ISXDIGIT (ch);
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
2026 case RECC_ASCII: return IS_REAL_ASCII (ch);
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
2027 case RECC_NONASCII: return !IS_REAL_ASCII (ch);
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
2028 case RECC_UNIBYTE: return ISUNIBYTE (ch);
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
2029 case RECC_MULTIBYTE: return !ISUNIBYTE (ch);
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
2030 case RECC_WORD: return ISWORD (ch);
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
2031 case RECC_ERROR: return false;
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
2032 default:
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
2033 abort();
31360
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2034 }
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2035 }
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2036
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2037 /* Return a bit-pattern to use in the range-table bits to match multibyte
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2038 chars of class CC. */
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2039 static int
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2040 re_wctype_to_bit (cc)
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2041 re_wctype_t cc;
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2042 {
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2043 switch (cc)
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2044 {
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2045 case RECC_NONASCII: case RECC_PRINT: case RECC_GRAPH:
33066
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
2046 case RECC_MULTIBYTE: return BIT_MULTIBYTE;
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
2047 case RECC_ALPHA: case RECC_ALNUM: case RECC_WORD: return BIT_WORD;
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
2048 case RECC_LOWER: return BIT_LOWER;
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
2049 case RECC_UPPER: return BIT_UPPER;
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
2050 case RECC_PUNCT: return BIT_PUNCT;
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
2051 case RECC_SPACE: return BIT_SPACE;
31360
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2052 case RECC_ASCII: case RECC_DIGIT: case RECC_XDIGIT: case RECC_CNTRL:
33066
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
2053 case RECC_BLANK: case RECC_UNIBYTE: case RECC_ERROR: return 0;
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
2054 default:
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
2055 abort();
31360
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2056 }
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2057 }
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2058 #endif
47233
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2059
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2060 /* Filling in the work area of a range. */
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2061
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2062 /* Actually extend the space in WORK_AREA. */
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2063
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2064 static void
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2065 extend_range_table_work_area (work_area)
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2066 struct range_table_work_area *work_area;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49276
diff changeset
2067 {
47233
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2068 work_area->allocated += 16 * sizeof (int);
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2069 if (work_area->table)
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2070 work_area->table
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2071 = (int *) realloc (work_area->table, work_area->allocated);
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2072 else
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2073 work_area->table
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2074 = (int *) malloc (work_area->allocated);
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2075 }
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2076
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2077 #ifdef emacs
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2078
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2079 /* Carefully find the ranges of codes that are equivalent
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2080 under case conversion to the range start..end when passed through
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2081 TRANSLATE. Handle the case where non-letters can come in between
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2082 two upper-case letters (which happens in Latin-1).
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2083 Also handle the case of groups of more than 2 case-equivalent chars.
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2084
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2085 The basic method is to look at consecutive characters and see
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2086 if they can form a run that can be handled as one.
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2087
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2088 Returns -1 if successful, REG_ESPACE if ran out of space. */
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2089
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2090 static int
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2091 set_image_of_range_1 (work_area, start, end, translate)
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2092 RE_TRANSLATE_TYPE translate;
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2093 struct range_table_work_area *work_area;
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2094 re_wchar_t start, end;
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2095 {
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2096 /* `one_case' indicates a character, or a run of characters,
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2097 each of which is an isolate (no case-equivalents).
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2098 This includes all ASCII non-letters.
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2099
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2100 `two_case' indicates a character, or a run of characters,
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2101 each of which has two case-equivalent forms.
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2102 This includes all ASCII letters.
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2103
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2104 `strange' indicates a character that has more than one
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2105 case-equivalent. */
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49276
diff changeset
2106
47233
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2107 enum case_type {one_case, two_case, strange};
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2108
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2109 /* Describe the run that is in progress,
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2110 which the next character can try to extend.
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2111 If run_type is strange, that means there really is no run.
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2112 If run_type is one_case, then run_start...run_end is the run.
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2113 If run_type is two_case, then the run is run_start...run_end,
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2114 and the case-equivalents end at run_eqv_end. */
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2115
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2116 enum case_type run_type = strange;
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2117 int run_start, run_end, run_eqv_end;
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2118
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2119 Lisp_Object eqv_table;
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2120
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2121 if (!RE_TRANSLATE_P (translate))
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2122 {
47250
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2123 EXTEND_RANGE_TABLE (work_area, 2);
47233
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2124 work_area->table[work_area->used++] = (start);
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2125 work_area->table[work_area->used++] = (end);
47250
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2126 return -1;
47233
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2127 }
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2128
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2129 eqv_table = XCHAR_TABLE (translate)->extras[2];
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2130
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2131 for (; start <= end; start++)
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2132 {
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2133 enum case_type this_type;
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2134 int eqv = RE_TRANSLATE (eqv_table, start);
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2135 int minchar, maxchar;
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2136
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2137 /* Classify this character */
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2138 if (eqv == start)
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2139 this_type = one_case;
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2140 else if (RE_TRANSLATE (eqv_table, eqv) == start)
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2141 this_type = two_case;
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2142 else
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2143 this_type = strange;
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2144
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2145 if (start < eqv)
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2146 minchar = start, maxchar = eqv;
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2147 else
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2148 minchar = eqv, maxchar = start;
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2149
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2150 /* Can this character extend the run in progress? */
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2151 if (this_type == strange || this_type != run_type
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2152 || !(minchar == run_end + 1
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2153 && (run_type == two_case
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2154 ? maxchar == run_eqv_end + 1 : 1)))
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2155 {
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2156 /* No, end the run.
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2157 Record each of its equivalent ranges. */
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2158 if (run_type == one_case)
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2159 {
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2160 EXTEND_RANGE_TABLE (work_area, 2);
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2161 work_area->table[work_area->used++] = run_start;
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2162 work_area->table[work_area->used++] = run_end;
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2163 }
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2164 else if (run_type == two_case)
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2165 {
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2166 EXTEND_RANGE_TABLE (work_area, 4);
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2167 work_area->table[work_area->used++] = run_start;
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2168 work_area->table[work_area->used++] = run_end;
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2169 work_area->table[work_area->used++]
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2170 = RE_TRANSLATE (eqv_table, run_start);
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2171 work_area->table[work_area->used++]
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2172 = RE_TRANSLATE (eqv_table, run_end);
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2173 }
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2174 run_type = strange;
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2175 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49276
diff changeset
2176
47233
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2177 if (this_type == strange)
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2178 {
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2179 /* For a strange character, add each of its equivalents, one
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2180 by one. Don't start a range. */
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2181 do
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2182 {
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2183 EXTEND_RANGE_TABLE (work_area, 2);
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2184 work_area->table[work_area->used++] = eqv;
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2185 work_area->table[work_area->used++] = eqv;
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2186 eqv = RE_TRANSLATE (eqv_table, eqv);
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2187 }
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2188 while (eqv != start);
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2189 }
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2190
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2191 /* Add this char to the run, or start a new run. */
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2192 else if (run_type == strange)
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2193 {
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2194 /* Initialize a new range. */
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2195 run_type = this_type;
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2196 run_start = start;
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2197 run_end = start;
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2198 run_eqv_end = RE_TRANSLATE (eqv_table, run_end);
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2199 }
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2200 else
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2201 {
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2202 /* Extend a running range. */
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2203 run_end = minchar;
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2204 run_eqv_end = RE_TRANSLATE (eqv_table, run_end);
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2205 }
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2206 }
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2207
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2208 /* If a run is still in progress at the end, finish it now
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2209 by recording its equivalent ranges. */
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2210 if (run_type == one_case)
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2211 {
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2212 EXTEND_RANGE_TABLE (work_area, 2);
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2213 work_area->table[work_area->used++] = run_start;
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2214 work_area->table[work_area->used++] = run_end;
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2215 }
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2216 else if (run_type == two_case)
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2217 {
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2218 EXTEND_RANGE_TABLE (work_area, 4);
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2219 work_area->table[work_area->used++] = run_start;
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2220 work_area->table[work_area->used++] = run_end;
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2221 work_area->table[work_area->used++]
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2222 = RE_TRANSLATE (eqv_table, run_start);
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2223 work_area->table[work_area->used++]
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2224 = RE_TRANSLATE (eqv_table, run_end);
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2225 }
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2226
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2227 return -1;
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2228 }
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2229
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2230 #endif /* emacs */
47008
c299d527a088 (PATFETCH): Remove the translating fetch.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44145
diff changeset
2231
47250
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2232 /* Record the the image of the range start..end when passed through
47008
c299d527a088 (PATFETCH): Remove the translating fetch.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44145
diff changeset
2233 TRANSLATE. This is not necessarily TRANSLATE(start)..TRANSLATE(end)
c299d527a088 (PATFETCH): Remove the translating fetch.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44145
diff changeset
2234 and is not even necessarily contiguous.
47250
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2235 Normally we approximate it with the smallest contiguous range that contains
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2236 all the chars we need. However, for Latin-1 we go to extra effort
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2237 to do a better job.
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2238
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2239 This function is not called for ASCII ranges.
47233
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2240
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2241 Returns -1 if successful, REG_ESPACE if ran out of space. */
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2242
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2243 static int
47008
c299d527a088 (PATFETCH): Remove the translating fetch.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44145
diff changeset
2244 set_image_of_range (work_area, start, end, translate)
c299d527a088 (PATFETCH): Remove the translating fetch.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44145
diff changeset
2245 RE_TRANSLATE_TYPE translate;
c299d527a088 (PATFETCH): Remove the translating fetch.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44145
diff changeset
2246 struct range_table_work_area *work_area;
c299d527a088 (PATFETCH): Remove the translating fetch.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44145
diff changeset
2247 re_wchar_t start, end;
c299d527a088 (PATFETCH): Remove the translating fetch.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44145
diff changeset
2248 {
47233
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2249 re_wchar_t cmin, cmax;
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2250
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2251 #ifdef emacs
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2252 /* For Latin-1 ranges, use set_image_of_range_1
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2253 to get proper handling of ranges that include letters and nonletters.
47250
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2254 For a range that includes the whole of Latin-1, this is not necessary.
47233
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2255 For other character sets, we don't bother to get this right. */
47250
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2256 if (RE_TRANSLATE_P (translate) && start < 04400
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2257 && !(start < 04200 && end >= 04377))
47233
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2258 {
47250
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2259 int newend;
47233
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2260 int tem;
47250
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2261 newend = end;
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2262 if (newend > 04377)
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2263 newend = 04377;
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2264 tem = set_image_of_range_1 (work_area, start, newend, translate);
47233
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2265 if (tem > 0)
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2266 return tem;
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2267
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2268 start = 04400;
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2269 if (end < 04400)
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2270 return -1;
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2271 }
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2272 #endif
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2273
47250
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2274 EXTEND_RANGE_TABLE (work_area, 2);
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2275 work_area->table[work_area->used++] = (start);
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2276 work_area->table[work_area->used++] = (end);
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2277
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2278 cmin = -1, cmax = -1;
47233
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2279
47008
c299d527a088 (PATFETCH): Remove the translating fetch.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44145
diff changeset
2280 if (RE_TRANSLATE_P (translate))
47250
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2281 {
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2282 int ch;
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2283
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2284 for (ch = start; ch <= end; ch++)
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2285 {
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2286 re_wchar_t c = TRANSLATE (ch);
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2287 if (! (start <= c && c <= end))
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2288 {
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2289 if (cmin == -1)
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2290 cmin = c, cmax = c;
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2291 else
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2292 {
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2293 cmin = MIN (cmin, c);
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2294 cmax = MAX (cmax, c);
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2295 }
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2296 }
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2297 }
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2298
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2299 if (cmin != -1)
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2300 {
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2301 EXTEND_RANGE_TABLE (work_area, 2);
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2302 work_area->table[work_area->used++] = (cmin);
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2303 work_area->table[work_area->used++] = (cmax);
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2304 }
923aa802303b (set_image_of_range_1): In no-TRANSLATE case,
Richard M. Stallman <rms@gnu.org>
parents: 47233
diff changeset
2305 }
47233
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2306
620fccf981d3 (set_image_of_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 47008
diff changeset
2307 return -1;
47008
c299d527a088 (PATFETCH): Remove the translating fetch.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44145
diff changeset
2308 }
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2309
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2310 #ifndef MATCH_MAY_ALLOCATE
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2311
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2312 /* If we cannot allocate large objects within re_match_2_internal,
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2313 we make the fail stack and register vectors global.
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2314 The fail stack, we grow to the maximum size when a regexp
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2315 is compiled.
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2316 The register vectors, we adjust in size each time we
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2317 compile a regexp, according to the number of registers it needs. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2318
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2319 static fail_stack_type fail_stack;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2320
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2321 /* Size with which the following vectors are currently allocated.
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2322 That is so we can make them bigger as needed,
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
2323 but never make them smaller. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2324 static int regs_allocated_size;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2325
28138
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
2326 static re_char ** regstart, ** regend;
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
2327 static re_char **best_regstart, **best_regend;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2328
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2329 /* Make the register vectors big enough for NUM_REGS registers,
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
2330 but don't make them smaller. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2331
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2332 static
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2333 regex_grow_registers (num_regs)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2334 int num_regs;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2335 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2336 if (num_regs > regs_allocated_size)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2337 {
28138
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
2338 RETALLOC_IF (regstart, num_regs, re_char *);
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
2339 RETALLOC_IF (regend, num_regs, re_char *);
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
2340 RETALLOC_IF (best_regstart, num_regs, re_char *);
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
2341 RETALLOC_IF (best_regend, num_regs, re_char *);
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2342
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2343 regs_allocated_size = num_regs;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2344 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2345 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2346
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2347 #endif /* not MATCH_MAY_ALLOCATE */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2348
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
2349 static boolean group_in_compile_stack _RE_ARGS ((compile_stack_type
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
2350 compile_stack,
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
2351 regnum_t regnum));
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
2352
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2353 /* `regex_compile' compiles PATTERN (of length SIZE) according to SYNTAX.
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2354 Returns one of error codes defined in `regex.h', or zero for success.
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2355
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2356 Assumes the `allocated' (and perhaps `buffer') and `translate'
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2357 fields are set in BUFP on entry.
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2358
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2359 If it succeeds, results are put in BUFP (if it returns an error, the
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2360 contents of BUFP are undefined):
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2361 `buffer' is the compiled pattern;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2362 `syntax' is set to SYNTAX;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2363 `used' is set to the length of the compiled pattern;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2364 `fastmap_accurate' is zero;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2365 `re_nsub' is the number of subexpressions in PATTERN;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2366 `not_bol' and `not_eol' are zero;
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
2367
31312
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
2368 The `fastmap' field is neither examined nor set. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2369
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
2370 /* Insert the `jump' from the end of last alternative to "here".
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
2371 The space for the jump has already been allocated. */
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
2372 #define FIXUP_ALT_JUMP() \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
2373 do { \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
2374 if (fixup_alt_jump) \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
2375 STORE_JUMP (jump, fixup_alt_jump, b); \
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
2376 } while (0)
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
2377
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
2378
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2379 /* Return, freeing storage we allocated. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2380 #define FREE_STACK_RETURN(value) \
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2381 do { \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2382 FREE_RANGE_TABLE_WORK_AREA (range_table_work); \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2383 free (compile_stack.stack); \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2384 return value; \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2385 } while (0)
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2386
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2387 static reg_errcode_t
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2388 regex_compile (pattern, size, syntax, bufp)
28138
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
2389 re_char *pattern;
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
2390 size_t size;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2391 reg_syntax_t syntax;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2392 struct re_pattern_buffer *bufp;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2393 {
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
2394 /* We fetch characters from PATTERN here. */
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
2395 register re_wchar_t c, c1;
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
2396
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2397 /* A random temporary spot in PATTERN. */
28138
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
2398 re_char *p1;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2399
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2400 /* Points to the end of the buffer, where we should append. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2401 register unsigned char *b;
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
2402
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2403 /* Keeps track of unclosed groups. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2404 compile_stack_type compile_stack;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2405
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2406 /* Points to the current (ending) position in the pattern. */
22821
dc8ce74d8633 (regex_compile): Declare p with non-const type on AIX.
Richard M. Stallman <rms@gnu.org>
parents: 22411
diff changeset
2407 #ifdef AIX
dc8ce74d8633 (regex_compile): Declare p with non-const type on AIX.
Richard M. Stallman <rms@gnu.org>
parents: 22411
diff changeset
2408 /* `const' makes AIX compiler fail. */
28138
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
2409 unsigned char *p = pattern;
22821
dc8ce74d8633 (regex_compile): Declare p with non-const type on AIX.
Richard M. Stallman <rms@gnu.org>
parents: 22411
diff changeset
2410 #else
28138
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
2411 re_char *p = pattern;
22821
dc8ce74d8633 (regex_compile): Declare p with non-const type on AIX.
Richard M. Stallman <rms@gnu.org>
parents: 22411
diff changeset
2412 #endif
28138
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
2413 re_char *pend = pattern + size;
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
2414
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2415 /* How to translate the characters in the pattern. */
13250
52e053f46f76 (TRANSLATE, PATFETCH): Cast elt of `translate'.
Richard M. Stallman <rms@gnu.org>
parents: 13100
diff changeset
2416 RE_TRANSLATE_TYPE translate = bufp->translate;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2417
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2418 /* Address of the count-byte of the most recently inserted `exactn'
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2419 command. This makes it possible to tell if a new exact-match
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2420 character can be added to that command or if the character requires
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2421 a new `exactn' command. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2422 unsigned char *pending_exact = 0;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2423
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2424 /* Address of start of the most recently finished expression.
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2425 This tells, e.g., postfix * where to find the start of its
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2426 operand. Reset at the beginning of groups and alternatives. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2427 unsigned char *laststart = 0;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2428
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2429 /* Address of beginning of regexp, or inside of last group. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2430 unsigned char *begalt;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2431
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2432 /* Place in the uncompiled pattern (i.e., the {) to
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2433 which to go back if the interval is invalid. */
28138
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
2434 re_char *beg_interval;
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
2435
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2436 /* Address of the place where a forward jump should go to the end of
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2437 the containing expression. Each alternative of an `or' -- except the
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2438 last -- ends with a forward jump of this sort. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2439 unsigned char *fixup_alt_jump = 0;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2440
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2441 /* Counts open-groups as they are encountered. Remembered for the
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2442 matching close-group on the compile stack, so the same register
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2443 number is put in the stop_memory as the start_memory. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2444 regnum_t regnum = 0;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2445
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2446 /* Work area for range table of charset. */
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2447 struct range_table_work_area range_table_work;
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2448
28473
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
2449 /* If the object matched can contain multibyte characters. */
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
2450 const boolean multibyte = RE_MULTIBYTE_P (bufp);
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
2451
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2452 #ifdef DEBUG
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
2453 debug++;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2454 DEBUG_PRINT1 ("\nCompiling pattern: ");
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
2455 if (debug > 0)
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2456 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2457 unsigned debug_count;
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
2458
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2459 for (debug_count = 0; debug_count < size; debug_count++)
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2460 putchar (pattern[debug_count]);
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2461 putchar ('\n');
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2462 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2463 #endif /* DEBUG */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2464
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2465 /* Initialize the compile stack. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2466 compile_stack.stack = TALLOC (INIT_COMPILE_STACK_SIZE, compile_stack_elt_t);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2467 if (compile_stack.stack == NULL)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2468 return REG_ESPACE;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2469
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2470 compile_stack.size = INIT_COMPILE_STACK_SIZE;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2471 compile_stack.avail = 0;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2472
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2473 range_table_work.table = 0;
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2474 range_table_work.allocated = 0;
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2475
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2476 /* Initialize the pattern buffer. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2477 bufp->syntax = syntax;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2478 bufp->fastmap_accurate = 0;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2479 bufp->not_bol = bufp->not_eol = 0;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2480
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2481 /* Set `used' to zero, so that if we return an error, the pattern
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2482 printer (for debugging) will think there's no pattern. We reset it
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2483 at the end. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2484 bufp->used = 0;
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
2485
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2486 /* Always count groups, whether or not bufp->no_sub is set. */
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
2487 bufp->re_nsub = 0;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2488
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
2489 #if !defined emacs && !defined SYNTAX_TABLE
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2490 /* Initialize the syntax table. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2491 init_syntax_once ();
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2492 #endif
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2493
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2494 if (bufp->allocated == 0)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2495 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2496 if (bufp->buffer)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2497 { /* If zero allocated, but buffer is non-null, try to realloc
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2498 enough space. This loses if buffer's address is bogus, but
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2499 that is the user's responsibility. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2500 RETALLOC (bufp->buffer, INIT_BUF_SIZE, unsigned char);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2501 }
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2502 else
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2503 { /* Caller did not allocate a buffer. Do it for them. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2504 bufp->buffer = TALLOC (INIT_BUF_SIZE, unsigned char);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2505 }
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2506 if (!bufp->buffer) FREE_STACK_RETURN (REG_ESPACE);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2507
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2508 bufp->allocated = INIT_BUF_SIZE;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2509 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2510
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2511 begalt = b = bufp->buffer;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2512
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2513 /* Loop through the uncompiled pattern until we're at the end. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2514 while (p != pend)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2515 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2516 PATFETCH (c);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2517
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2518 switch (c)
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2519 {
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2520 case '^':
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2521 {
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2522 if ( /* If at start of pattern, it's an operator. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2523 p == pattern + 1
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2524 /* If context independent, it's an operator. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2525 || syntax & RE_CONTEXT_INDEP_ANCHORS
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2526 /* Otherwise, depends on what's come before. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2527 || at_begline_loc_p (pattern, p, syntax))
31312
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
2528 BUF_PUSH ((syntax & RE_NO_NEWLINE_ANCHOR) ? begbuf : begline);
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2529 else
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2530 goto normal_char;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2531 }
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2532 break;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2533
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2534
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2535 case '$':
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2536 {
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2537 if ( /* If at end of pattern, it's an operator. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2538 p == pend
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2539 /* If context independent, it's an operator. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2540 || syntax & RE_CONTEXT_INDEP_ANCHORS
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2541 /* Otherwise, depends on what's next. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2542 || at_endline_loc_p (p, pend, syntax))
31312
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
2543 BUF_PUSH ((syntax & RE_NO_NEWLINE_ANCHOR) ? endbuf : endline);
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2544 else
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2545 goto normal_char;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2546 }
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2547 break;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2548
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2549
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2550 case '+':
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2551 case '?':
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2552 if ((syntax & RE_BK_PLUS_QM)
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2553 || (syntax & RE_LIMITED_OPS))
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2554 goto normal_char;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2555 handle_plus:
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2556 case '*':
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2557 /* If there is no previous pattern... */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2558 if (!laststart)
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2559 {
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2560 if (syntax & RE_CONTEXT_INVALID_OPS)
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2561 FREE_STACK_RETURN (REG_BADRPT);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2562 else if (!(syntax & RE_CONTEXT_INDEP_OPS))
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2563 goto normal_char;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2564 }
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2565
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2566 {
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2567 /* 1 means zero (many) matches is allowed. */
28138
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
2568 boolean zero_times_ok = 0, many_times_ok = 0;
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
2569 boolean greedy = 1;
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2570
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2571 /* If there is a sequence of repetition chars, collapse it
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2572 down to just one (the right one). We can't combine
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2573 interval operators with these because of, e.g., `a{2}*',
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2574 which should only match an even number of `a's. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2575
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2576 for (;;)
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2577 {
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
2578 if ((syntax & RE_FRUGAL)
26906
5eb1e428de28 1999-12-15 Kenichi Handa <handa@etl.go.jp>
Dave Love <fx@gnu.org>
parents: 26237
diff changeset
2579 && c == '?' && (zero_times_ok || many_times_ok))
5eb1e428de28 1999-12-15 Kenichi Handa <handa@etl.go.jp>
Dave Love <fx@gnu.org>
parents: 26237
diff changeset
2580 greedy = 0;
5eb1e428de28 1999-12-15 Kenichi Handa <handa@etl.go.jp>
Dave Love <fx@gnu.org>
parents: 26237
diff changeset
2581 else
5eb1e428de28 1999-12-15 Kenichi Handa <handa@etl.go.jp>
Dave Love <fx@gnu.org>
parents: 26237
diff changeset
2582 {
5eb1e428de28 1999-12-15 Kenichi Handa <handa@etl.go.jp>
Dave Love <fx@gnu.org>
parents: 26237
diff changeset
2583 zero_times_ok |= c != '+';
5eb1e428de28 1999-12-15 Kenichi Handa <handa@etl.go.jp>
Dave Love <fx@gnu.org>
parents: 26237
diff changeset
2584 many_times_ok |= c != '?';
5eb1e428de28 1999-12-15 Kenichi Handa <handa@etl.go.jp>
Dave Love <fx@gnu.org>
parents: 26237
diff changeset
2585 }
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2586
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2587 if (p == pend)
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2588 break;
28372
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
2589 else if (*p == '*'
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
2590 || (!(syntax & RE_BK_PLUS_QM)
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
2591 && (*p == '+' || *p == '?')))
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2592 ;
28372
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
2593 else if (syntax & RE_BK_PLUS_QM && *p == '\\')
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2594 {
28372
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
2595 if (p+1 == pend)
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
2596 FREE_STACK_RETURN (REG_EESCAPE);
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
2597 if (p[1] == '+' || p[1] == '?')
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
2598 PATFETCH (c); /* Gobble up the backslash. */
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
2599 else
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
2600 break;
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2601 }
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2602 else
28372
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
2603 break;
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2604 /* If we get here, we found another repeat character. */
28372
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
2605 PATFETCH (c);
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
2606 }
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2607
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2608 /* Star, etc. applied to an empty pattern is equivalent
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2609 to an empty pattern. */
28203
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
2610 if (!laststart || laststart == b)
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2611 break;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2612
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2613 /* Now we know whether or not zero matches is allowed
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2614 and also whether or not two or more matches is allowed. */
26906
5eb1e428de28 1999-12-15 Kenichi Handa <handa@etl.go.jp>
Dave Love <fx@gnu.org>
parents: 26237
diff changeset
2615 if (greedy)
5eb1e428de28 1999-12-15 Kenichi Handa <handa@etl.go.jp>
Dave Love <fx@gnu.org>
parents: 26237
diff changeset
2616 {
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
2617 if (many_times_ok)
28203
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
2618 {
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
2619 boolean simple = skip_one_char (laststart) == b;
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
2620 unsigned int startoffset = 0;
28380
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
2621 re_opcode_t ofj =
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
2622 /* Check if the loop can match the empty string. */
47368
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
2623 (simple || !analyse_first (laststart, b, NULL, 0))
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
2624 ? on_failure_jump : on_failure_jump_loop;
28203
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
2625 assert (skip_one_char (laststart) <= b);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49276
diff changeset
2626
28203
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
2627 if (!zero_times_ok && simple)
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
2628 { /* Since simple * loops can be made faster by using
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
2629 on_failure_keep_string_jump, we turn simple P+
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
2630 into PP* if P is simple. */
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
2631 unsigned char *p1, *p2;
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
2632 startoffset = b - laststart;
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
2633 GET_BUFFER_SPACE (startoffset);
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
2634 p1 = b; p2 = laststart;
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
2635 while (p2 < p1)
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
2636 *b++ = *p2++;
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
2637 zero_times_ok = 1;
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
2638 }
28203
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
2639
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
2640 GET_BUFFER_SPACE (6);
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
2641 if (!zero_times_ok)
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
2642 /* A + loop. */
28380
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
2643 STORE_JUMP (ofj, b, b + 6);
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
2644 else
28203
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
2645 /* Simple * loops can use on_failure_keep_string_jump
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
2646 depending on what follows. But since we don't know
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
2647 that yet, we leave the decision up to
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
2648 on_failure_jump_smart. */
28380
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
2649 INSERT_JUMP (simple ? on_failure_jump_smart : ofj,
28203
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
2650 laststart + startoffset, b + 6);
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
2651 b += 3;
28203
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
2652 STORE_JUMP (jump, b, laststart + startoffset);
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
2653 b += 3;
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2654 }
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2655 else
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
2656 {
28203
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
2657 /* A simple ? pattern. */
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
2658 assert (zero_times_ok);
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
2659 GET_BUFFER_SPACE (3);
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
2660 INSERT_JUMP (on_failure_jump, laststart, b + 3);
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
2661 b += 3;
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
2662 }
26906
5eb1e428de28 1999-12-15 Kenichi Handa <handa@etl.go.jp>
Dave Love <fx@gnu.org>
parents: 26237
diff changeset
2663 }
5eb1e428de28 1999-12-15 Kenichi Handa <handa@etl.go.jp>
Dave Love <fx@gnu.org>
parents: 26237
diff changeset
2664 else /* not greedy */
5eb1e428de28 1999-12-15 Kenichi Handa <handa@etl.go.jp>
Dave Love <fx@gnu.org>
parents: 26237
diff changeset
2665 { /* I wish the greedy and non-greedy cases could be merged. */
5eb1e428de28 1999-12-15 Kenichi Handa <handa@etl.go.jp>
Dave Love <fx@gnu.org>
parents: 26237
diff changeset
2666
28342
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
2667 GET_BUFFER_SPACE (7); /* We might use less. */
26906
5eb1e428de28 1999-12-15 Kenichi Handa <handa@etl.go.jp>
Dave Love <fx@gnu.org>
parents: 26237
diff changeset
2668 if (many_times_ok)
5eb1e428de28 1999-12-15 Kenichi Handa <handa@etl.go.jp>
Dave Love <fx@gnu.org>
parents: 26237
diff changeset
2669 {
28380
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
2670 boolean emptyp = analyse_first (laststart, b, NULL, 0);
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
2671
47368
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
2672 /* The non-greedy multiple match looks like
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
2673 a repeat..until: we only need a conditional jump
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
2674 at the end of the loop. */
28380
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
2675 if (emptyp) BUF_PUSH (no_op);
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
2676 STORE_JUMP (emptyp ? on_failure_jump_nastyloop
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
2677 : on_failure_jump, b, laststart);
26906
5eb1e428de28 1999-12-15 Kenichi Handa <handa@etl.go.jp>
Dave Love <fx@gnu.org>
parents: 26237
diff changeset
2678 b += 3;
5eb1e428de28 1999-12-15 Kenichi Handa <handa@etl.go.jp>
Dave Love <fx@gnu.org>
parents: 26237
diff changeset
2679 if (zero_times_ok)
5eb1e428de28 1999-12-15 Kenichi Handa <handa@etl.go.jp>
Dave Love <fx@gnu.org>
parents: 26237
diff changeset
2680 {
5eb1e428de28 1999-12-15 Kenichi Handa <handa@etl.go.jp>
Dave Love <fx@gnu.org>
parents: 26237
diff changeset
2681 /* The repeat...until naturally matches one or more.
5eb1e428de28 1999-12-15 Kenichi Handa <handa@etl.go.jp>
Dave Love <fx@gnu.org>
parents: 26237
diff changeset
2682 To also match zero times, we need to first jump to
47368
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
2683 the end of the loop (its conditional jump). */
26906
5eb1e428de28 1999-12-15 Kenichi Handa <handa@etl.go.jp>
Dave Love <fx@gnu.org>
parents: 26237
diff changeset
2684 INSERT_JUMP (jump, laststart, b);
5eb1e428de28 1999-12-15 Kenichi Handa <handa@etl.go.jp>
Dave Love <fx@gnu.org>
parents: 26237
diff changeset
2685 b += 3;
5eb1e428de28 1999-12-15 Kenichi Handa <handa@etl.go.jp>
Dave Love <fx@gnu.org>
parents: 26237
diff changeset
2686 }
5eb1e428de28 1999-12-15 Kenichi Handa <handa@etl.go.jp>
Dave Love <fx@gnu.org>
parents: 26237
diff changeset
2687 }
5eb1e428de28 1999-12-15 Kenichi Handa <handa@etl.go.jp>
Dave Love <fx@gnu.org>
parents: 26237
diff changeset
2688 else
5eb1e428de28 1999-12-15 Kenichi Handa <handa@etl.go.jp>
Dave Love <fx@gnu.org>
parents: 26237
diff changeset
2689 {
5eb1e428de28 1999-12-15 Kenichi Handa <handa@etl.go.jp>
Dave Love <fx@gnu.org>
parents: 26237
diff changeset
2690 /* non-greedy a?? */
5eb1e428de28 1999-12-15 Kenichi Handa <handa@etl.go.jp>
Dave Love <fx@gnu.org>
parents: 26237
diff changeset
2691 INSERT_JUMP (jump, laststart, b + 3);
5eb1e428de28 1999-12-15 Kenichi Handa <handa@etl.go.jp>
Dave Love <fx@gnu.org>
parents: 26237
diff changeset
2692 b += 3;
5eb1e428de28 1999-12-15 Kenichi Handa <handa@etl.go.jp>
Dave Love <fx@gnu.org>
parents: 26237
diff changeset
2693 INSERT_JUMP (on_failure_jump, laststart, laststart + 6);
5eb1e428de28 1999-12-15 Kenichi Handa <handa@etl.go.jp>
Dave Love <fx@gnu.org>
parents: 26237
diff changeset
2694 b += 3;
5eb1e428de28 1999-12-15 Kenichi Handa <handa@etl.go.jp>
Dave Love <fx@gnu.org>
parents: 26237
diff changeset
2695 }
5eb1e428de28 1999-12-15 Kenichi Handa <handa@etl.go.jp>
Dave Love <fx@gnu.org>
parents: 26237
diff changeset
2696 }
5eb1e428de28 1999-12-15 Kenichi Handa <handa@etl.go.jp>
Dave Love <fx@gnu.org>
parents: 26237
diff changeset
2697 }
28203
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
2698 pending_exact = 0;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2699 break;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2700
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2701
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2702 case '.':
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2703 laststart = b;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2704 BUF_PUSH (anychar);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2705 break;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2706
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2707
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2708 case '[':
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2709 {
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2710 CLEAR_RANGE_TABLE_WORK_USED (range_table_work);
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2711
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2712 if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2713
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2714 /* Ensure that we have enough space to push a charset: the
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2715 opcode, the length count, and the bitset; 34 bytes in all. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2716 GET_BUFFER_SPACE (34);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2717
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2718 laststart = b;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2719
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2720 /* We test `*p == '^' twice, instead of using an if
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2721 statement, so we only need one BUF_PUSH. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2722 BUF_PUSH (*p == '^' ? charset_not : charset);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2723 if (*p == '^')
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2724 p++;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2725
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2726 /* Remember the first position in the bracket expression. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2727 p1 = p;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2728
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2729 /* Push the number of bytes in the bitmap. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2730 BUF_PUSH ((1 << BYTEWIDTH) / BYTEWIDTH);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2731
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2732 /* Clear the whole map. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2733 bzero (b, (1 << BYTEWIDTH) / BYTEWIDTH);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2734
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2735 /* charset_not matches newline according to a syntax bit. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2736 if ((re_opcode_t) b[-2] == charset_not
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2737 && (syntax & RE_HAT_LISTS_NOT_NEWLINE))
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2738 SET_LIST_BIT ('\n');
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2739
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2740 /* Read in characters and ranges, setting map bits. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2741 for (;;)
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2742 {
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2743 boolean escaped_char = false;
28473
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
2744 const unsigned char *p2 = p;
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2745
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2746 if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2747
47008
c299d527a088 (PATFETCH): Remove the translating fetch.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44145
diff changeset
2748 /* Don't translate yet. The range TRANSLATE(X..Y) cannot
c299d527a088 (PATFETCH): Remove the translating fetch.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44145
diff changeset
2749 always be determined from TRANSLATE(X) and TRANSLATE(Y)
c299d527a088 (PATFETCH): Remove the translating fetch.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44145
diff changeset
2750 So the translation is done later in a loop. Example:
c299d527a088 (PATFETCH): Remove the translating fetch.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44145
diff changeset
2751 (let ((case-fold-search t)) (string-match "[A-_]" "A")) */
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2752 PATFETCH (c);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2753
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2754 /* \ might escape characters inside [...] and [^...]. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2755 if ((syntax & RE_BACKSLASH_ESCAPE_IN_LISTS) && c == '\\')
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2756 {
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2757 if (p == pend) FREE_STACK_RETURN (REG_EESCAPE);
16010
4addc35d079b Clean up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 16009
diff changeset
2758
4addc35d079b Clean up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 16009
diff changeset
2759 PATFETCH (c);
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2760 escaped_char = true;
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2761 }
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2762 else
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2763 {
19184
83b4daf16443 Whitespace change.
Richard M. Stallman <rms@gnu.org>
parents: 18614
diff changeset
2764 /* Could be the end of the bracket expression. If it's
83b4daf16443 Whitespace change.
Richard M. Stallman <rms@gnu.org>
parents: 18614
diff changeset
2765 not (i.e., when the bracket expression is `[]' so
83b4daf16443 Whitespace change.
Richard M. Stallman <rms@gnu.org>
parents: 18614
diff changeset
2766 far), the ']' character bit gets set way below. */
28473
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
2767 if (c == ']' && p2 != p1)
19184
83b4daf16443 Whitespace change.
Richard M. Stallman <rms@gnu.org>
parents: 18614
diff changeset
2768 break;
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2769 }
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2770
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2771 /* What should we do for the character which is
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2772 greater than 0x7F, but not BASE_LEADING_CODE_P?
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2773 XXX */
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2774
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2775 /* See if we're at the beginning of a possible character
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2776 class. */
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2777
28473
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
2778 if (!escaped_char &&
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
2779 syntax & RE_CHAR_CLASSES && c == '[' && *p == ':')
19184
83b4daf16443 Whitespace change.
Richard M. Stallman <rms@gnu.org>
parents: 18614
diff changeset
2780 {
83b4daf16443 Whitespace change.
Richard M. Stallman <rms@gnu.org>
parents: 18614
diff changeset
2781 /* Leave room for the null. */
31360
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2782 unsigned char str[CHAR_CLASS_MAX_LENGTH + 1];
28372
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
2783 const unsigned char *class_beg;
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2784
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2785 PATFETCH (c);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2786 c1 = 0;
28372
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
2787 class_beg = p;
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2788
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2789 /* If pattern is `[[:'. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2790 if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2791
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2792 for (;;)
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2793 {
31360
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2794 PATFETCH (c);
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2795 if ((c == ':' && *p == ']') || p == pend)
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2796 break;
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2797 if (c1 < CHAR_CLASS_MAX_LENGTH)
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2798 str[c1++] = c;
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2799 else
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2800 /* This is in any case an invalid class name. */
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2801 str[0] = '\0';
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2802 }
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2803 str[c1] = '\0';
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2804
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2805 /* If isn't a word bracketed by `[:' and `:]':
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2806 undo the ending character, the letters, and
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2807 leave the leading `:' and `[' (but set bits for
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2808 them). */
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2809 if (c == ':' && *p == ']')
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2810 {
47008
c299d527a088 (PATFETCH): Remove the translating fetch.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44145
diff changeset
2811 re_wchar_t ch;
31360
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2812 re_wctype_t cc;
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2813
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2814 cc = re_wctype (str);
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2815
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2816 if (cc == 0)
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2817 FREE_STACK_RETURN (REG_ECTYPE);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2818
31360
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2819 /* Throw away the ] at the end of the character
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2820 class. */
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2821 PATFETCH (c);
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2822
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2823 if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2824
25440
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
2825 /* Most character classes in a multibyte match
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
2826 just set a flag. Exceptions are is_blank,
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
2827 is_digit, is_cntrl, and is_xdigit, since
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
2828 they can only match ASCII characters. We
31360
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2829 don't need to handle them for multibyte.
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2830 They are distinguished by a negative wctype. */
25440
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
2831
28473
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
2832 if (multibyte)
31360
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2833 SET_RANGE_TABLE_WORK_AREA_BIT (range_table_work,
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2834 re_wctype_to_bit (cc));
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2835
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2836 for (ch = 0; ch < 1 << BYTEWIDTH; ++ch)
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2837 {
16239
c196d1ded35c (regex_compile): Use TRANSLATE before calling SET_LIST_BIT.
Richard M. Stallman <rms@gnu.org>
parents: 16034
diff changeset
2838 int translated = TRANSLATE (ch);
31360
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
2839 if (re_iswctype (btowc (ch), cc))
25440
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
2840 SET_LIST_BIT (translated);
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2841 }
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2842
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2843 /* Repeat the loop. */
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2844 continue;
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2845 }
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2846 else
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2847 {
28372
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
2848 /* Go back to right after the "[:". */
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
2849 p = class_beg;
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2850 SET_LIST_BIT ('[');
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2851
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2852 /* Because the `:' may starts the range, we
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2853 can't simply set bit and repeat the loop.
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2854 Instead, just set it to C and handle below. */
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2855 c = ':';
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2856 }
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2857 }
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2858
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2859 if (p < pend && p[0] == '-' && p[1] != ']')
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2860 {
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2861
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2862 /* Discard the `-'. */
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2863 PATFETCH (c1);
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2864
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2865 /* Fetch the character which ends the range. */
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2866 PATFETCH (c1);
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2867
29546
fbe764633971 (MAKE_CHAR) [!emacs]: Dummy macro for non-Emacs env.
Kenichi Handa <handa@m17n.org>
parents: 29296
diff changeset
2868 if (SINGLE_BYTE_CHAR_P (c))
21348
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
2869 {
29546
fbe764633971 (MAKE_CHAR) [!emacs]: Dummy macro for non-Emacs env.
Kenichi Handa <handa@m17n.org>
parents: 29296
diff changeset
2870 if (! SINGLE_BYTE_CHAR_P (c1))
fbe764633971 (MAKE_CHAR) [!emacs]: Dummy macro for non-Emacs env.
Kenichi Handa <handa@m17n.org>
parents: 29296
diff changeset
2871 {
32804
45c2b9e0aa68 (regex_compile): Change the way of handling a range from a char less
Kenichi Handa <handa@m17n.org>
parents: 32565
diff changeset
2872 /* Handle a range starting with a
45c2b9e0aa68 (regex_compile): Change the way of handling a range from a char less
Kenichi Handa <handa@m17n.org>
parents: 32565
diff changeset
2873 character of less than 256, and ending
45c2b9e0aa68 (regex_compile): Change the way of handling a range from a char less
Kenichi Handa <handa@m17n.org>
parents: 32565
diff changeset
2874 with a character of not less than 256.
45c2b9e0aa68 (regex_compile): Change the way of handling a range from a char less
Kenichi Handa <handa@m17n.org>
parents: 32565
diff changeset
2875 Split that into two ranges, the low one
45c2b9e0aa68 (regex_compile): Change the way of handling a range from a char less
Kenichi Handa <handa@m17n.org>
parents: 32565
diff changeset
2876 ending at 0377, and the high one
45c2b9e0aa68 (regex_compile): Change the way of handling a range from a char less
Kenichi Handa <handa@m17n.org>
parents: 32565
diff changeset
2877 starting at the smallest character in
45c2b9e0aa68 (regex_compile): Change the way of handling a range from a char less
Kenichi Handa <handa@m17n.org>
parents: 32565
diff changeset
2878 the charset of C1 and ending at C1. */
29546
fbe764633971 (MAKE_CHAR) [!emacs]: Dummy macro for non-Emacs env.
Kenichi Handa <handa@m17n.org>
parents: 29296
diff changeset
2879 int charset = CHAR_CHARSET (c1);
47008
c299d527a088 (PATFETCH): Remove the translating fetch.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44145
diff changeset
2880 re_wchar_t c2 = MAKE_CHAR (charset, 0, 0);
c299d527a088 (PATFETCH): Remove the translating fetch.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44145
diff changeset
2881
29546
fbe764633971 (MAKE_CHAR) [!emacs]: Dummy macro for non-Emacs env.
Kenichi Handa <handa@m17n.org>
parents: 29296
diff changeset
2882 SET_RANGE_TABLE_WORK_AREA (range_table_work,
fbe764633971 (MAKE_CHAR) [!emacs]: Dummy macro for non-Emacs env.
Kenichi Handa <handa@m17n.org>
parents: 29296
diff changeset
2883 c2, c1);
32805
112b31ea0526 (regex_compile): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 32804
diff changeset
2884 c1 = 0377;
29546
fbe764633971 (MAKE_CHAR) [!emacs]: Dummy macro for non-Emacs env.
Kenichi Handa <handa@m17n.org>
parents: 29296
diff changeset
2885 }
21348
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
2886 }
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
2887 else if (!SAME_CHARSET_P (c, c1))
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2888 FREE_STACK_RETURN (REG_ERANGE);
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2889 }
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2890 else
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2891 /* Range from C to C. */
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2892 c1 = c;
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2893
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2894 /* Set the range ... */
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2895 if (SINGLE_BYTE_CHAR_P (c))
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2896 /* ... into bitmap. */
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2897 {
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
2898 re_wchar_t this_char;
47008
c299d527a088 (PATFETCH): Remove the translating fetch.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44145
diff changeset
2899 re_wchar_t range_start = c, range_end = c1;
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2900
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2901 /* If the start is after the end, the range is empty. */
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2902 if (range_start > range_end)
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2903 {
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2904 if (syntax & RE_NO_EMPTY_RANGES)
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2905 FREE_STACK_RETURN (REG_ERANGE);
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2906 /* Else, repeat the loop. */
16010
4addc35d079b Clean up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 16009
diff changeset
2907 }
4addc35d079b Clean up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 16009
diff changeset
2908 else
4addc35d079b Clean up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 16009
diff changeset
2909 {
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2910 for (this_char = range_start; this_char <= range_end;
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2911 this_char++)
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2912 SET_LIST_BIT (TRANSLATE (this_char));
21348
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
2913 }
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2914 }
16010
4addc35d079b Clean up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 16009
diff changeset
2915 else
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2916 /* ... into range table. */
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2917 SET_RANGE_TABLE_WORK_AREA (range_table_work, c, c1);
16010
4addc35d079b Clean up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 16009
diff changeset
2918 }
4addc35d079b Clean up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 16009
diff changeset
2919
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2920 /* Discard any (non)matching list bytes that are all 0 at the
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2921 end of the map. Decrease the map-length byte too. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2922 while ((int) b[-1] > 0 && b[b[-1] - 1] == 0)
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2923 b[-1]--;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2924 b += b[-1];
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2925
25440
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
2926 /* Build real range table from work area. */
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
2927 if (RANGE_TABLE_WORK_USED (range_table_work)
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
2928 || RANGE_TABLE_WORK_BITS (range_table_work))
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2929 {
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2930 int i;
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2931 int used = RANGE_TABLE_WORK_USED (range_table_work);
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2932
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2933 /* Allocate space for COUNT + RANGE_TABLE. Needs two
25440
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
2934 bytes for flags, two for COUNT, and three bytes for
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
2935 each character. */
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
2936 GET_BUFFER_SPACE (4 + used * 3);
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2937
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2938 /* Indicate the existence of range table. */
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2939 laststart[1] |= 0x80;
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2940
25440
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
2941 /* Store the character class flag bits into the range table.
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
2942 If not in emacs, these flag bits are always 0. */
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
2943 *b++ = RANGE_TABLE_WORK_BITS (range_table_work) & 0xff;
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
2944 *b++ = RANGE_TABLE_WORK_BITS (range_table_work) >> 8;
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
2945
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2946 STORE_NUMBER_AND_INCR (b, used / 2);
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2947 for (i = 0; i < used; i++)
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2948 STORE_CHARACTER_AND_INCR
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2949 (b, RANGE_TABLE_WORK_ELT (range_table_work, i));
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
2950 }
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2951 }
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2952 break;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2953
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2954
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2955 case '(':
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2956 if (syntax & RE_NO_BK_PARENS)
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2957 goto handle_open;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2958 else
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2959 goto normal_char;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2960
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2961
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2962 case ')':
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2963 if (syntax & RE_NO_BK_PARENS)
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2964 goto handle_close;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2965 else
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2966 goto normal_char;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2967
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2968
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2969 case '\n':
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2970 if (syntax & RE_NEWLINE_ALT)
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2971 goto handle_alt;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2972 else
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2973 goto normal_char;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2974
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2975
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
2976 case '|':
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2977 if (syntax & RE_NO_BK_VBAR)
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2978 goto handle_alt;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2979 else
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2980 goto normal_char;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2981
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2982
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2983 case '{':
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2984 if (syntax & RE_INTERVALS && syntax & RE_NO_BK_BRACES)
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2985 goto handle_interval;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2986 else
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2987 goto normal_char;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2988
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2989
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2990 case '\\':
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2991 if (p == pend) FREE_STACK_RETURN (REG_EESCAPE);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2992
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2993 /* Do not translate the character after the \, so that we can
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2994 distinguish, e.g., \B from \b, even if we normally would
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2995 translate, e.g., B to b. */
47008
c299d527a088 (PATFETCH): Remove the translating fetch.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44145
diff changeset
2996 PATFETCH (c);
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2997
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2998 switch (c)
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
2999 {
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3000 case '(':
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3001 if (syntax & RE_NO_BK_PARENS)
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3002 goto normal_backslash;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3003
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3004 handle_open:
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3005 {
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3006 int shy = 0;
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3007 if (p+1 < pend)
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3008 {
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3009 /* Look for a special (?...) construct */
28372
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
3010 if ((syntax & RE_SHY_GROUPS) && *p == '?')
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3011 {
28372
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
3012 PATFETCH (c); /* Gobble up the '?'. */
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3013 PATFETCH (c);
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3014 switch (c)
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3015 {
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3016 case ':': shy = 1; break;
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3017 default:
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3018 /* Only (?:...) is supported right now. */
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3019 FREE_STACK_RETURN (REG_BADPAT);
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3020 }
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3021 }
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3022 }
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3023
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3024 if (!shy)
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3025 {
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3026 bufp->re_nsub++;
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3027 regnum++;
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3028 }
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3029
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
3030 if (COMPILE_STACK_FULL)
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
3031 {
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
3032 RETALLOC (compile_stack.stack, compile_stack.size << 1,
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
3033 compile_stack_elt_t);
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
3034 if (compile_stack.stack == NULL) return REG_ESPACE;
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
3035
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
3036 compile_stack.size <<= 1;
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
3037 }
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
3038
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
3039 /* These are the values to restore when we hit end of this
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
3040 group. They are all relative offsets, so that if the
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
3041 whole pattern moves because of realloc, they will still
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
3042 be valid. */
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
3043 COMPILE_STACK_TOP.begalt_offset = begalt - bufp->buffer;
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
3044 COMPILE_STACK_TOP.fixup_alt_jump
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
3045 = fixup_alt_jump ? fixup_alt_jump - bufp->buffer + 1 : 0;
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
3046 COMPILE_STACK_TOP.laststart_offset = b - bufp->buffer;
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
3047 COMPILE_STACK_TOP.regnum = shy ? -regnum : regnum;
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
3048
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
3049 /* Do not push a
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
3050 start_memory for groups beyond the last one we can
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
3051 represent in the compiled pattern. */
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
3052 if (regnum <= MAX_REGNUM && !shy)
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
3053 BUF_PUSH_2 (start_memory, regnum);
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
3054
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
3055 compile_stack.avail++;
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
3056
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
3057 fixup_alt_jump = 0;
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
3058 laststart = 0;
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
3059 begalt = b;
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
3060 /* If we've reached MAX_REGNUM groups, then this open
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
3061 won't actually generate any code, so we'll have to
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
3062 clear pending_exact explicitly. */
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
3063 pending_exact = 0;
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
3064 break;
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3065 }
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3066
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3067 case ')':
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3068 if (syntax & RE_NO_BK_PARENS) goto normal_backslash;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3069
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3070 if (COMPILE_STACK_EMPTY)
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3071 {
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3072 if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD)
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3073 goto normal_backslash;
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3074 else
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3075 FREE_STACK_RETURN (REG_ERPAREN);
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3076 }
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3077
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3078 handle_close:
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3079 FIXUP_ALT_JUMP ();
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3080
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3081 /* See similar code for backslashed left paren above. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3082 if (COMPILE_STACK_EMPTY)
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3083 {
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3084 if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD)
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3085 goto normal_char;
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3086 else
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3087 FREE_STACK_RETURN (REG_ERPAREN);
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3088 }
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3089
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3090 /* Since we just checked for an empty stack above, this
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3091 ``can't happen''. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3092 assert (compile_stack.avail != 0);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3093 {
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3094 /* We don't just want to restore into `regnum', because
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3095 later groups should continue to be numbered higher,
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3096 as in `(ab)c(de)' -- the second group is #2. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3097 regnum_t this_group_regnum;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3098
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3099 compile_stack.avail--;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3100 begalt = bufp->buffer + COMPILE_STACK_TOP.begalt_offset;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3101 fixup_alt_jump
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3102 = COMPILE_STACK_TOP.fixup_alt_jump
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3103 ? bufp->buffer + COMPILE_STACK_TOP.fixup_alt_jump - 1
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3104 : 0;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3105 laststart = bufp->buffer + COMPILE_STACK_TOP.laststart_offset;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3106 this_group_regnum = COMPILE_STACK_TOP.regnum;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3107 /* If we've reached MAX_REGNUM groups, then this open
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3108 won't actually generate any code, so we'll have to
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3109 clear pending_exact explicitly. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3110 pending_exact = 0;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3111
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3112 /* We're at the end of the group, so now we know how many
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3113 groups were inside this one. */
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3114 if (this_group_regnum <= MAX_REGNUM && this_group_regnum > 0)
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3115 BUF_PUSH_2 (stop_memory, this_group_regnum);
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3116 }
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3117 break;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3118
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3119
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3120 case '|': /* `\|'. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3121 if (syntax & RE_LIMITED_OPS || syntax & RE_NO_BK_VBAR)
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3122 goto normal_backslash;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3123 handle_alt:
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3124 if (syntax & RE_LIMITED_OPS)
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3125 goto normal_char;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3126
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3127 /* Insert before the previous alternative a jump which
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3128 jumps to this alternative if the former fails. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3129 GET_BUFFER_SPACE (3);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3130 INSERT_JUMP (on_failure_jump, begalt, b + 6);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3131 pending_exact = 0;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3132 b += 3;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3133
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3134 /* The alternative before this one has a jump after it
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3135 which gets executed if it gets matched. Adjust that
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3136 jump so it will jump to this alternative's analogous
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3137 jump (put in below, which in turn will jump to the next
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3138 (if any) alternative's such jump, etc.). The last such
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3139 jump jumps to the correct final destination. A picture:
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3140 _____ _____
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3141 | | | |
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3142 | v | v
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3143 a | b | c
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3144
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3145 If we are at `b', then fixup_alt_jump right now points to a
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3146 three-byte space after `a'. We'll put in the jump, set
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3147 fixup_alt_jump to right after `b', and leave behind three
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3148 bytes which we'll fill in when we get to after `c'. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3149
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3150 FIXUP_ALT_JUMP ();
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3151
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3152 /* Mark and leave space for a jump after this alternative,
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3153 to be filled in later either by next alternative or
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3154 when know we're at the end of a series of alternatives. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3155 fixup_alt_jump = b;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3156 GET_BUFFER_SPACE (3);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3157 b += 3;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3158
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3159 laststart = 0;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3160 begalt = b;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3161 break;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3162
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3163
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3164 case '{':
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3165 /* If \{ is a literal. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3166 if (!(syntax & RE_INTERVALS)
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3167 /* If we're at `\{' and it's not the open-interval
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3168 operator. */
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
3169 || (syntax & RE_NO_BK_BRACES))
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3170 goto normal_backslash;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3171
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3172 handle_interval:
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3173 {
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3174 /* If got here, then the syntax allows intervals. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3175
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3176 /* At least (most) this many matches must be made. */
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
3177 int lower_bound = 0, upper_bound = -1;
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3178
28372
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
3179 beg_interval = p;
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3180
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3181 if (p == pend)
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
3182 FREE_STACK_RETURN (REG_EBRACE);
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3183
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3184 GET_UNSIGNED_NUMBER (lower_bound);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3185
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3186 if (c == ',')
28372
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
3187 GET_UNSIGNED_NUMBER (upper_bound);
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3188 else
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3189 /* Interval such as `{1}' => match exactly once. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3190 upper_bound = lower_bound;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3191
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3192 if (lower_bound < 0 || upper_bound > RE_DUP_MAX
28372
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
3193 || (upper_bound >= 0 && lower_bound > upper_bound))
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
3194 FREE_STACK_RETURN (REG_BADBR);
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3195
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3196 if (!(syntax & RE_NO_BK_BRACES))
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3197 {
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
3198 if (c != '\\')
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
3199 FREE_STACK_RETURN (REG_BADBR);
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3200
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3201 PATFETCH (c);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3202 }
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3203
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3204 if (c != '}')
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
3205 FREE_STACK_RETURN (REG_BADBR);
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3206
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3207 /* We just parsed a valid interval. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3208
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3209 /* If it's invalid to have no preceding re. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3210 if (!laststart)
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3211 {
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3212 if (syntax & RE_CONTEXT_INVALID_OPS)
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3213 FREE_STACK_RETURN (REG_BADRPT);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3214 else if (syntax & RE_CONTEXT_INDEP_OPS)
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3215 laststart = b;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3216 else
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3217 goto unfetch_interval;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3218 }
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3219
47368
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3220 if (upper_bound == 0)
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3221 /* If the upper bound is zero, just drop the sub pattern
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3222 altogether. */
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3223 b = laststart;
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3224 else if (lower_bound == 1 && upper_bound == 1)
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3225 /* Just match it once: nothing to do here. */
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3226 ;
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3227
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3228 /* Otherwise, we have a nontrivial interval. When
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3229 we're all done, the pattern will look like:
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3230 set_number_at <jump count> <upper bound>
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3231 set_number_at <succeed_n count> <lower bound>
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3232 succeed_n <after jump addr> <succeed_n count>
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3233 <body of loop>
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3234 jump_n <succeed_n addr> <jump count>
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3235 (The upper bound and `jump_n' are omitted if
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3236 `upper_bound' is 1, though.) */
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3237 else
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3238 { /* If the upper bound is > 1, we need to insert
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3239 more at the end of the loop. */
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3240 unsigned int nbytes = (upper_bound < 0 ? 3
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3241 : upper_bound > 1 ? 5 : 0);
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3242 unsigned int startoffset = 0;
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3243
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3244 GET_BUFFER_SPACE (20); /* We might use less. */
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3245
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3246 if (lower_bound == 0)
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3247 {
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3248 /* A succeed_n that starts with 0 is really a
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3249 a simple on_failure_jump_loop. */
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3250 INSERT_JUMP (on_failure_jump_loop, laststart,
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3251 b + 3 + nbytes);
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3252 b += 3;
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3253 }
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3254 else
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3255 {
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3256 /* Initialize lower bound of the `succeed_n', even
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3257 though it will be set during matching by its
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3258 attendant `set_number_at' (inserted next),
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3259 because `re_compile_fastmap' needs to know.
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3260 Jump to the `jump_n' we might insert below. */
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3261 INSERT_JUMP2 (succeed_n, laststart,
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3262 b + 5 + nbytes,
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3263 lower_bound);
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3264 b += 5;
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3265
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3266 /* Code to initialize the lower bound. Insert
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3267 before the `succeed_n'. The `5' is the last two
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3268 bytes of this `set_number_at', plus 3 bytes of
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3269 the following `succeed_n'. */
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3270 insert_op2 (set_number_at, laststart, 5, lower_bound, b);
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3271 b += 5;
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3272 startoffset += 5;
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3273 }
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3274
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3275 if (upper_bound < 0)
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3276 {
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3277 /* A negative upper bound stands for infinity,
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3278 in which case it degenerates to a plain jump. */
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3279 STORE_JUMP (jump, b, laststart + startoffset);
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3280 b += 3;
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3281 }
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3282 else if (upper_bound > 1)
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3283 { /* More than one repetition is allowed, so
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3284 append a backward jump to the `succeed_n'
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3285 that starts this interval.
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3286
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3287 When we've reached this during matching,
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3288 we'll have matched the interval once, so
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3289 jump back only `upper_bound - 1' times. */
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3290 STORE_JUMP2 (jump_n, b, laststart + startoffset,
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3291 upper_bound - 1);
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3292 b += 5;
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3293
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3294 /* The location we want to set is the second
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3295 parameter of the `jump_n'; that is `b-2' as
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3296 an absolute address. `laststart' will be
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3297 the `set_number_at' we're about to insert;
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3298 `laststart+3' the number to set, the source
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3299 for the relative address. But we are
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3300 inserting into the middle of the pattern --
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3301 so everything is getting moved up by 5.
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3302 Conclusion: (b - 2) - (laststart + 3) + 5,
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3303 i.e., b - laststart.
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3304
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3305 We insert this at the beginning of the loop
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3306 so that if we fail during matching, we'll
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3307 reinitialize the bounds. */
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3308 insert_op2 (set_number_at, laststart, b - laststart,
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3309 upper_bound - 1, b);
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3310 b += 5;
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3311 }
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
3312 }
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3313 pending_exact = 0;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3314 beg_interval = NULL;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3315 }
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3316 break;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3317
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3318 unfetch_interval:
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3319 /* If an invalid interval, match the characters as literals. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3320 assert (beg_interval);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3321 p = beg_interval;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3322 beg_interval = NULL;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3323
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3324 /* normal_char and normal_backslash need `c'. */
28372
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
3325 c = '{';
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3326
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3327 if (!(syntax & RE_NO_BK_BRACES))
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3328 {
28372
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
3329 assert (p > pattern && p[-1] == '\\');
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
3330 goto normal_backslash;
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3331 }
28372
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
3332 else
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
3333 goto normal_char;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3334
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3335 #ifdef emacs
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3336 /* There is no way to specify the before_dot and after_dot
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3337 operators. rms says this is ok. --karl */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3338 case '=':
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3339 BUF_PUSH (at_dot);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3340 break;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3341
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3342 case 's':
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3343 laststart = b;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3344 PATFETCH (c);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3345 BUF_PUSH_2 (syntaxspec, syntax_spec_code[c]);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3346 break;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3347
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3348 case 'S':
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3349 laststart = b;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3350 PATFETCH (c);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3351 BUF_PUSH_2 (notsyntaxspec, syntax_spec_code[c]);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3352 break;
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3353
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3354 case 'c':
16010
4addc35d079b Clean up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 16009
diff changeset
3355 laststart = b;
47008
c299d527a088 (PATFETCH): Remove the translating fetch.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44145
diff changeset
3356 PATFETCH (c);
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3357 BUF_PUSH_2 (categoryspec, c);
16010
4addc35d079b Clean up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 16009
diff changeset
3358 break;
4addc35d079b Clean up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 16009
diff changeset
3359
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3360 case 'C':
16010
4addc35d079b Clean up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 16009
diff changeset
3361 laststart = b;
47008
c299d527a088 (PATFETCH): Remove the translating fetch.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44145
diff changeset
3362 PATFETCH (c);
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3363 BUF_PUSH_2 (notcategoryspec, c);
16010
4addc35d079b Clean up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 16009
diff changeset
3364 break;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3365 #endif /* emacs */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3366
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3367
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3368 case 'w':
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
3369 if (syntax & RE_NO_GNU_OPS)
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
3370 goto normal_char;
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3371 laststart = b;
28261
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3372 BUF_PUSH_2 (syntaxspec, Sword);
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3373 break;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3374
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3375
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3376 case 'W':
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
3377 if (syntax & RE_NO_GNU_OPS)
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
3378 goto normal_char;
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3379 laststart = b;
28261
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3380 BUF_PUSH_2 (notsyntaxspec, Sword);
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3381 break;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3382
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3383
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3384 case '<':
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
3385 if (syntax & RE_NO_GNU_OPS)
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
3386 goto normal_char;
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3387 BUF_PUSH (wordbeg);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3388 break;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3389
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3390 case '>':
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
3391 if (syntax & RE_NO_GNU_OPS)
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
3392 goto normal_char;
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3393 BUF_PUSH (wordend);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3394 break;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3395
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3396 case 'b':
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
3397 if (syntax & RE_NO_GNU_OPS)
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
3398 goto normal_char;
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3399 BUF_PUSH (wordbound);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3400 break;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3401
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3402 case 'B':
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
3403 if (syntax & RE_NO_GNU_OPS)
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
3404 goto normal_char;
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3405 BUF_PUSH (notwordbound);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3406 break;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3407
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3408 case '`':
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
3409 if (syntax & RE_NO_GNU_OPS)
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
3410 goto normal_char;
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3411 BUF_PUSH (begbuf);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3412 break;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3413
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3414 case '\'':
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
3415 if (syntax & RE_NO_GNU_OPS)
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
3416 goto normal_char;
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3417 BUF_PUSH (endbuf);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3418 break;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3419
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3420 case '1': case '2': case '3': case '4': case '5':
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3421 case '6': case '7': case '8': case '9':
33066
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
3422 {
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
3423 regnum_t reg;
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
3424
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
3425 if (syntax & RE_NO_BK_REFS)
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
3426 goto normal_backslash;
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
3427
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
3428 reg = c - '0';
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
3429
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
3430 /* Can't back reference to a subexpression before its end. */
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
3431 if (reg > regnum || group_in_compile_stack (compile_stack, reg))
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
3432 FREE_STACK_RETURN (REG_ESUBREG);
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
3433
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
3434 laststart = b;
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
3435 BUF_PUSH_2 (duplicate, reg);
c782e22760e0 (re_iswctype, re_wctype_to_bit): Fix braino.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32954
diff changeset
3436 }
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3437 break;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3438
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3439
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3440 case '+':
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3441 case '?':
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3442 if (syntax & RE_BK_PLUS_QM)
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3443 goto handle_plus;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3444 else
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3445 goto normal_backslash;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3446
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3447 default:
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3448 normal_backslash:
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3449 /* You might think it would be useful for \ to mean
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3450 not to translate; but if we don't translate it
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
3451 it will never match anything. */
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3452 goto normal_char;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3453 }
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3454 break;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3455
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3456
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3457 default:
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3458 /* Expects the character in `c'. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3459 normal_char:
47008
c299d527a088 (PATFETCH): Remove the translating fetch.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44145
diff changeset
3460 /* If no exactn currently being built. */
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3461 if (!pending_exact
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3462
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3463 /* If last exactn not at current position. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3464 || pending_exact + *pending_exact + 1 != b
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3465
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3466 /* We have only one byte following the exactn for the count. */
28473
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
3467 || *pending_exact >= (1 << BYTEWIDTH) - MAX_MULTIBYTE_LENGTH
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3468
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3469 /* If followed by a repetition operator. */
21963
b717a61747c5 (regex_compile): When checking after exactn
Richard M. Stallman <rms@gnu.org>
parents: 21838
diff changeset
3470 || (p != pend && (*p == '*' || *p == '^'))
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3471 || ((syntax & RE_BK_PLUS_QM)
21963
b717a61747c5 (regex_compile): When checking after exactn
Richard M. Stallman <rms@gnu.org>
parents: 21838
diff changeset
3472 ? p + 1 < pend && *p == '\\' && (p[1] == '+' || p[1] == '?')
b717a61747c5 (regex_compile): When checking after exactn
Richard M. Stallman <rms@gnu.org>
parents: 21838
diff changeset
3473 : p != pend && (*p == '+' || *p == '?'))
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3474 || ((syntax & RE_INTERVALS)
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3475 && ((syntax & RE_NO_BK_BRACES)
21963
b717a61747c5 (regex_compile): When checking after exactn
Richard M. Stallman <rms@gnu.org>
parents: 21838
diff changeset
3476 ? p != pend && *p == '{'
b717a61747c5 (regex_compile): When checking after exactn
Richard M. Stallman <rms@gnu.org>
parents: 21838
diff changeset
3477 : p + 1 < pend && p[0] == '\\' && p[1] == '{')))
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3478 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3479 /* Start building a new exactn. */
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
3480
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3481 laststart = b;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3482
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3483 BUF_PUSH_2 (exactn, 0);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3484 pending_exact = b - 1;
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3485 }
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3486
28473
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
3487 GET_BUFFER_SPACE (MAX_MULTIBYTE_LENGTH);
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
3488 {
30752
db737e34fc36 (regex_compile) <normal_char>: Pay attention to multibyteness.
Kenichi Handa <handa@m17n.org>
parents: 29801
diff changeset
3489 int len;
db737e34fc36 (regex_compile) <normal_char>: Pay attention to multibyteness.
Kenichi Handa <handa@m17n.org>
parents: 29801
diff changeset
3490
47008
c299d527a088 (PATFETCH): Remove the translating fetch.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44145
diff changeset
3491 c = TRANSLATE (c);
30752
db737e34fc36 (regex_compile) <normal_char>: Pay attention to multibyteness.
Kenichi Handa <handa@m17n.org>
parents: 29801
diff changeset
3492 if (multibyte)
db737e34fc36 (regex_compile) <normal_char>: Pay attention to multibyteness.
Kenichi Handa <handa@m17n.org>
parents: 29801
diff changeset
3493 len = CHAR_STRING (c, b);
db737e34fc36 (regex_compile) <normal_char>: Pay attention to multibyteness.
Kenichi Handa <handa@m17n.org>
parents: 29801
diff changeset
3494 else
db737e34fc36 (regex_compile) <normal_char>: Pay attention to multibyteness.
Kenichi Handa <handa@m17n.org>
parents: 29801
diff changeset
3495 *b = c, len = 1;
28473
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
3496 b += len;
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
3497 (*pending_exact) += len;
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
3498 }
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
3499
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3500 break;
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3501 } /* switch (c) */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3502 } /* while p != pend */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3503
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
3504
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3505 /* Through the pattern now. */
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
3506
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3507 FIXUP_ALT_JUMP ();
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3508
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
3509 if (!COMPILE_STACK_EMPTY)
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3510 FREE_STACK_RETURN (REG_EPAREN);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3511
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3512 /* If we don't want backtracking, force success
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3513 the first time we reach the end of the compiled pattern. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3514 if (syntax & RE_NO_POSIX_BACKTRACKING)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3515 BUF_PUSH (succeed);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3516
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3517 free (compile_stack.stack);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3518
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3519 /* We have succeeded; set the length of the buffer. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3520 bufp->used = b - bufp->buffer;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3521
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3522 #ifdef DEBUG
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
3523 if (debug > 0)
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3524 {
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3525 re_compile_fastmap (bufp);
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3526 DEBUG_PRINT1 ("\nCompiled pattern: \n");
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3527 print_compiled_pattern (bufp);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3528 }
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
3529 debug--;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3530 #endif /* DEBUG */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3531
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3532 #ifndef MATCH_MAY_ALLOCATE
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3533 /* Initialize the failure stack to the largest possible stack. This
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3534 isn't necessary unless we're trying to avoid calling alloca in
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3535 the search and match routines. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3536 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3537 int num_regs = bufp->re_nsub + 1;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3538
20449
fc965930c738 (TYPICAL_FAILURE_SIZE): Renamed from MAX_FAILURE_ITEMS.
Karl Heuer <kwzh@gnu.org>
parents: 19184
diff changeset
3539 if (fail_stack.size < re_max_failures * TYPICAL_FAILURE_SIZE)
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3540 {
21352
b9275822b6f5 (regex_compile) [!MATCH_MAY_ALLOCATE]: Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents: 21348
diff changeset
3541 fail_stack.size = re_max_failures * TYPICAL_FAILURE_SIZE;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3542
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3543 if (! fail_stack.stack)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3544 fail_stack.stack
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
3545 = (fail_stack_elt_t *) malloc (fail_stack.size
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3546 * sizeof (fail_stack_elt_t));
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3547 else
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3548 fail_stack.stack
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3549 = (fail_stack_elt_t *) realloc (fail_stack.stack,
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3550 (fail_stack.size
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3551 * sizeof (fail_stack_elt_t)));
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3552 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3553
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3554 regex_grow_registers (num_regs);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3555 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3556 #endif /* not MATCH_MAY_ALLOCATE */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3557
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3558 return REG_NOERROR;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3559 } /* regex_compile */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3560
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3561 /* Subroutines for `regex_compile'. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3562
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3563 /* Store OP at LOC followed by two-byte integer parameter ARG. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3564
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3565 static void
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3566 store_op1 (op, loc, arg)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3567 re_opcode_t op;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3568 unsigned char *loc;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3569 int arg;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3570 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3571 *loc = (unsigned char) op;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3572 STORE_NUMBER (loc + 1, arg);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3573 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3574
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3575
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3576 /* Like `store_op1', but for two two-byte parameters ARG1 and ARG2. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3577
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3578 static void
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3579 store_op2 (op, loc, arg1, arg2)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3580 re_opcode_t op;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3581 unsigned char *loc;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3582 int arg1, arg2;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3583 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3584 *loc = (unsigned char) op;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3585 STORE_NUMBER (loc + 1, arg1);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3586 STORE_NUMBER (loc + 3, arg2);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3587 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3588
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3589
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3590 /* Copy the bytes from LOC to END to open up three bytes of space at LOC
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3591 for OP followed by two-byte integer parameter ARG. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3592
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3593 static void
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3594 insert_op1 (op, loc, arg, end)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3595 re_opcode_t op;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3596 unsigned char *loc;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3597 int arg;
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
3598 unsigned char *end;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3599 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3600 register unsigned char *pfrom = end;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3601 register unsigned char *pto = end + 3;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3602
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3603 while (pfrom != loc)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3604 *--pto = *--pfrom;
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
3605
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3606 store_op1 (op, loc, arg);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3607 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3608
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3609
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3610 /* Like `insert_op1', but for two two-byte parameters ARG1 and ARG2. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3611
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3612 static void
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3613 insert_op2 (op, loc, arg1, arg2, end)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3614 re_opcode_t op;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3615 unsigned char *loc;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3616 int arg1, arg2;
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
3617 unsigned char *end;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3618 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3619 register unsigned char *pfrom = end;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3620 register unsigned char *pto = end + 5;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3621
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3622 while (pfrom != loc)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3623 *--pto = *--pfrom;
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
3624
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3625 store_op2 (op, loc, arg1, arg2);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3626 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3627
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3628
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3629 /* P points to just after a ^ in PATTERN. Return true if that ^ comes
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3630 after an alternative or a begin-subexpression. We assume there is at
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3631 least one character before the ^. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3632
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3633 static boolean
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3634 at_begline_loc_p (pattern, p, syntax)
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
3635 re_char *pattern, *p;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3636 reg_syntax_t syntax;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3637 {
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
3638 re_char *prev = p - 2;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3639 boolean prev_prev_backslash = prev > pattern && prev[-1] == '\\';
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
3640
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3641 return
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3642 /* After a subexpression? */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3643 (*prev == '(' && (syntax & RE_NO_BK_PARENS || prev_prev_backslash))
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3644 /* After an alternative? */
29194
fe06affca294 (at_begline_loc_p): Also recognize the \\(?:^ case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28662
diff changeset
3645 || (*prev == '|' && (syntax & RE_NO_BK_VBAR || prev_prev_backslash))
fe06affca294 (at_begline_loc_p): Also recognize the \\(?:^ case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28662
diff changeset
3646 /* After a shy subexpression? */
fe06affca294 (at_begline_loc_p): Also recognize the \\(?:^ case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28662
diff changeset
3647 || ((syntax & RE_SHY_GROUPS) && prev - 2 >= pattern
fe06affca294 (at_begline_loc_p): Also recognize the \\(?:^ case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28662
diff changeset
3648 && prev[-1] == '?' && prev[-2] == '('
fe06affca294 (at_begline_loc_p): Also recognize the \\(?:^ case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28662
diff changeset
3649 && (syntax & RE_NO_BK_PARENS
fe06affca294 (at_begline_loc_p): Also recognize the \\(?:^ case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28662
diff changeset
3650 || (prev - 3 >= pattern && prev[-3] == '\\')));
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3651 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3652
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3653
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3654 /* The dual of at_begline_loc_p. This one is for $. We assume there is
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3655 at least one character after the $, i.e., `P < PEND'. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3656
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3657 static boolean
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3658 at_endline_loc_p (p, pend, syntax)
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
3659 re_char *p, *pend;
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
3660 reg_syntax_t syntax;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3661 {
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
3662 re_char *next = p;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3663 boolean next_backslash = *next == '\\';
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
3664 re_char *next_next = p + 1 < pend ? p + 1 : 0;
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
3665
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3666 return
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3667 /* Before a subexpression? */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3668 (syntax & RE_NO_BK_PARENS ? *next == ')'
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3669 : next_backslash && next_next && *next_next == ')')
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3670 /* Before an alternative? */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3671 || (syntax & RE_NO_BK_VBAR ? *next == '|'
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3672 : next_backslash && next_next && *next_next == '|');
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3673 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3674
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3675
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
3676 /* Returns true if REGNUM is in one of COMPILE_STACK's elements and
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3677 false if it's not. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3678
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3679 static boolean
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3680 group_in_compile_stack (compile_stack, regnum)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3681 compile_stack_type compile_stack;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3682 regnum_t regnum;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3683 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3684 int this_element;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3685
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
3686 for (this_element = compile_stack.avail - 1;
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
3687 this_element >= 0;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3688 this_element--)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3689 if (compile_stack.stack[this_element].regnum == regnum)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3690 return true;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3691
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3692 return false;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3693 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3694
28380
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
3695 /* analyse_first.
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
3696 If fastmap is non-NULL, go through the pattern and fill fastmap
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
3697 with all the possible leading chars. If fastmap is NULL, don't
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
3698 bother filling it up (obviously) and only return whether the
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
3699 pattern could potentially match the empty string.
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
3700
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
3701 Return 1 if p..pend might match the empty string.
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
3702 Return 0 if p..pend matches at least one char.
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
3703 Return -1 if fastmap was not updated accurately. */
28380
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
3704
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
3705 static int
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
3706 analyse_first (p, pend, fastmap, multibyte)
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
3707 re_char *p, *pend;
28380
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
3708 char *fastmap;
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
3709 const int multibyte;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3710 {
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3711 int j, k;
28261
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3712 boolean not;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3713
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3714 /* If all elements for base leading-codes in fastmap is set, this
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3715 flag is set true. */
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3716 boolean match_any_multibyte_characters = false;
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3717
28380
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
3718 assert (p);
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
3719
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3720 /* The loop below works as follows:
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3721 - It has a working-list kept in the PATTERN_STACK and which basically
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3722 starts by only containing a pointer to the first operation.
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3723 - If the opcode we're looking at is a match against some set of
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3724 chars, then we add those chars to the fastmap and go on to the
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3725 next work element from the worklist (done via `break').
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3726 - If the opcode is a control operator on the other hand, we either
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3727 ignore it (if it's meaningless at this point, such as `start_memory')
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3728 or execute it (if it's a jump). If the jump has several destinations
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3729 (i.e. `on_failure_jump'), then we push the other destination onto the
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3730 worklist.
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3731 We guarantee termination by ignoring backward jumps (more or less),
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3732 so that `p' is monotonically increasing. More to the point, we
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3733 never set `p' (or push) anything `<= p1'. */
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3734
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
3735 while (p < pend)
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3736 {
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3737 /* `p1' is used as a marker of how far back a `on_failure_jump'
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3738 can go without being ignored. It is normally equal to `p'
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3739 (which prevents any backward `on_failure_jump') except right
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3740 after a plain `jump', to allow patterns such as:
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3741 0: jump 10
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3742 3..9: <body>
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3743 10: on_failure_jump 3
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3744 as used for the *? operator. */
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
3745 re_char *p1 = p;
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
3746
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3747 switch (SWITCH_ENUM_CAST ((re_opcode_t) *p++))
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3748 {
28380
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
3749 case succeed:
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
3750 return 1;
28380
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
3751 continue;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3752
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3753 case duplicate:
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3754 /* If the first character has to match a backreference, that means
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3755 that the group was empty (since it already matched). Since this
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3756 is the only case that interests us here, we can assume that the
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3757 backreference must match the empty string. */
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3758 p++;
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3759 continue;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3760
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3761
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3762 /* Following are the cases which match a character. These end
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3763 with `break'. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3764
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3765 case exactn:
30752
db737e34fc36 (regex_compile) <normal_char>: Pay attention to multibyteness.
Kenichi Handa <handa@m17n.org>
parents: 29801
diff changeset
3766 if (fastmap)
db737e34fc36 (regex_compile) <normal_char>: Pay attention to multibyteness.
Kenichi Handa <handa@m17n.org>
parents: 29801
diff changeset
3767 {
db737e34fc36 (regex_compile) <normal_char>: Pay attention to multibyteness.
Kenichi Handa <handa@m17n.org>
parents: 29801
diff changeset
3768 int c = RE_STRING_CHAR (p + 1, pend - p);
db737e34fc36 (regex_compile) <normal_char>: Pay attention to multibyteness.
Kenichi Handa <handa@m17n.org>
parents: 29801
diff changeset
3769
db737e34fc36 (regex_compile) <normal_char>: Pay attention to multibyteness.
Kenichi Handa <handa@m17n.org>
parents: 29801
diff changeset
3770 if (SINGLE_BYTE_CHAR_P (c))
db737e34fc36 (regex_compile) <normal_char>: Pay attention to multibyteness.
Kenichi Handa <handa@m17n.org>
parents: 29801
diff changeset
3771 fastmap[c] = 1;
db737e34fc36 (regex_compile) <normal_char>: Pay attention to multibyteness.
Kenichi Handa <handa@m17n.org>
parents: 29801
diff changeset
3772 else
db737e34fc36 (regex_compile) <normal_char>: Pay attention to multibyteness.
Kenichi Handa <handa@m17n.org>
parents: 29801
diff changeset
3773 fastmap[p[1]] = 1;
db737e34fc36 (regex_compile) <normal_char>: Pay attention to multibyteness.
Kenichi Handa <handa@m17n.org>
parents: 29801
diff changeset
3774 }
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3775 break;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3776
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3777
28261
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3778 case anychar:
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3779 /* We could put all the chars except for \n (and maybe \0)
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3780 but we don't bother since it is generally not worth it. */
28380
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
3781 if (!fastmap) break;
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
3782 return -1;
28261
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3783
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3784
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3785 case charset_not:
28261
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3786 /* Chars beyond end of bitmap are possible matches.
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3787 All the single-byte codes can occur in multibyte buffers.
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3788 So any that are not listed in the charset
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3789 are possible matches, even in multibyte buffers. */
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3790 if (!fastmap) break;
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3791 for (j = CHARSET_BITMAP_SIZE (&p[-1]) * BYTEWIDTH;
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3792 j < (1 << BYTEWIDTH); j++)
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3793 fastmap[j] = 1;
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3794 /* Fallthrough */
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3795 case charset:
28261
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3796 if (!fastmap) break;
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3797 not = (re_opcode_t) *(p - 1) == charset_not;
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3798 for (j = CHARSET_BITMAP_SIZE (&p[-1]) * BYTEWIDTH - 1, p++;
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3799 j >= 0; j--)
28261
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3800 if (!!(p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH))) ^ not)
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3801 fastmap[j] = 1;
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3802
28261
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3803 if ((not && multibyte)
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3804 /* Any character set can possibly contain a character
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3805 which doesn't match the specified set of characters. */
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3806 || (CHARSET_RANGE_TABLE_EXISTS_P (&p[-2])
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3807 && CHARSET_RANGE_TABLE_BITS (&p[-2]) != 0))
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3808 /* If we can match a character class, we can match
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3809 any character set. */
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3810 {
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3811 set_fastmap_for_multibyte_characters:
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3812 if (match_any_multibyte_characters == false)
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3813 {
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3814 for (j = 0x80; j < 0xA0; j++) /* XXX */
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3815 if (BASE_LEADING_CODE_P (j))
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3816 fastmap[j] = 1;
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3817 match_any_multibyte_characters = true;
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3818 }
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3819 }
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3820
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3821 else if (!not && CHARSET_RANGE_TABLE_EXISTS_P (&p[-2])
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3822 && match_any_multibyte_characters == false)
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3823 {
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3824 /* Set fastmap[I] 1 where I is a base leading code of each
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3825 multibyte character in the range table. */
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3826 int c, count;
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3827
28261
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3828 /* Make P points the range table. `+ 2' is to skip flag
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
3829 bits for a character class. */
28261
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3830 p += CHARSET_BITMAP_SIZE (&p[-2]) + 2;
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3831
25877
9a7d8b436a5d 1999-09-04 Richard Stallman <rms@gnu.org>
Dave Love <fx@gnu.org>
parents: 25440
diff changeset
3832 /* Extract the number of ranges in range table into COUNT. */
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3833 EXTRACT_NUMBER_AND_INCR (count, p);
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3834 for (; count > 0; count--, p += 2 * 3) /* XXX */
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3835 {
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3836 /* Extract the start of each range. */
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3837 EXTRACT_CHARACTER (c, p);
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3838 j = CHAR_CHARSET (c);
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3839 fastmap[CHARSET_LEADING_CODE_BASE (j)] = 1;
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3840 }
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3841 }
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3842 break;
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3843
28261
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3844 case syntaxspec:
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3845 case notsyntaxspec:
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3846 if (!fastmap) break;
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3847 #ifndef emacs
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3848 not = (re_opcode_t)p[-1] == notsyntaxspec;
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3849 k = *p++;
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3850 for (j = 0; j < (1 << BYTEWIDTH); j++)
28279
24a23e27dac6 (enum syntaxcode): Provide default for non-Emacs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28268
diff changeset
3851 if ((SYNTAX (j) == (enum syntaxcode) k) ^ not)
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3852 fastmap[j] = 1;
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3853 break;
28261
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3854 #else /* emacs */
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3855 /* This match depends on text properties. These end with
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3856 aborting optimizations. */
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
3857 return -1;
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3858
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3859 case categoryspec:
28261
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3860 case notcategoryspec:
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3861 if (!fastmap) break;
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3862 not = (re_opcode_t)p[-1] == notcategoryspec;
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3863 k = *p++;
28261
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3864 for (j = 0; j < (1 << BYTEWIDTH); j++)
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3865 if ((CHAR_HAS_CATEGORY (j, k)) ^ not)
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3866 fastmap[j] = 1;
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3867
28261
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3868 if (multibyte)
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3869 /* Any character set can possibly contain a character
28261
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3870 whose category is K (or not). */
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3871 goto set_fastmap_for_multibyte_characters;
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
3872 break;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3873
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3874 /* All cases after this match the empty string. These end with
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3875 `continue'. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3876
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3877 case before_dot:
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3878 case at_dot:
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3879 case after_dot:
28261
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
3880 #endif /* !emacs */
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3881 case no_op:
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3882 case begline:
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3883 case endline:
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3884 case begbuf:
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3885 case endbuf:
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3886 case wordbound:
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3887 case notwordbound:
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3888 case wordbeg:
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3889 case wordend:
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3890 continue;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3891
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3892
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3893 case jump:
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3894 EXTRACT_NUMBER_AND_INCR (j, p);
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3895 if (j < 0)
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3896 /* Backward jumps can only go back to code that we've already
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3897 visited. `re_compile' should make sure this is true. */
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3898 break;
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
3899 p += j;
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3900 switch (SWITCH_ENUM_CAST ((re_opcode_t) *p))
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3901 {
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3902 case on_failure_jump:
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3903 case on_failure_keep_string_jump:
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3904 case on_failure_jump_loop:
28342
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
3905 case on_failure_jump_nastyloop:
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3906 case on_failure_jump_smart:
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3907 p++;
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3908 break;
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3909 default:
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3910 continue;
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3911 };
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3912 /* Keep `p1' to allow the `on_failure_jump' we are jumping to
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3913 to jump back to "just after here". */
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3914 /* Fallthrough */
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3915
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3916 case on_failure_jump:
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3917 case on_failure_keep_string_jump:
28342
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
3918 case on_failure_jump_nastyloop:
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3919 case on_failure_jump_loop:
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3920 case on_failure_jump_smart:
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3921 EXTRACT_NUMBER_AND_INCR (j, p);
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3922 if (p + j <= p1)
28372
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
3923 ; /* Backward jump to be ignored. */
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
3924 else
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
3925 { /* We have to look down both arms.
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
3926 We first go down the "straight" path so as to minimize
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
3927 stack usage when going through alternatives. */
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
3928 int r = analyse_first (p, pend, fastmap, multibyte);
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
3929 if (r) return r;
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
3930 p += j;
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
3931 }
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3932 continue;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3933
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3934
28372
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
3935 case jump_n:
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
3936 /* This code simply does not properly handle forward jump_n. */
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
3937 DEBUG_STATEMENT (EXTRACT_NUMBER (j, p); assert (j < 0));
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
3938 p += 4;
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
3939 /* jump_n can either jump or fall through. The (backward) jump
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
3940 case has already been handled, so we only need to look at the
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
3941 fallthrough case. */
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
3942 continue;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49276
diff changeset
3943
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3944 case succeed_n:
28372
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
3945 /* If N == 0, it should be an on_failure_jump_loop instead. */
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
3946 DEBUG_STATEMENT (EXTRACT_NUMBER (j, p + 2); assert (j > 0));
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
3947 p += 4;
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
3948 /* We only care about one iteration of the loop, so we don't
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
3949 need to consider the case where this behaves like an
bc86be15099e (REGEX_FREE_STACK, RESET_FAIL_STACK): Make them usable as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28342
diff changeset
3950 on_failure_jump. */
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3951 continue;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3952
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3953
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3954 case set_number_at:
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3955 p += 4;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3956 continue;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3957
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3958
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3959 case start_memory:
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3960 case stop_memory:
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
3961 p += 1;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3962 continue;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3963
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3964
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3965 default:
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3966 abort (); /* We have listed all the cases. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3967 } /* switch *p++ */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3968
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3969 /* Getting here means we have found the possible starting
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
3970 characters for one path of the pattern -- and that the empty
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
3971 string does not match. We need not follow this path further. */
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
3972 return 0;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3973 } /* while p */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
3974
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
3975 /* We reached the end without matching anything. */
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
3976 return 1;
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
3977
28380
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
3978 } /* analyse_first */
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
3979
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
3980 /* re_compile_fastmap computes a ``fastmap'' for the compiled pattern in
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
3981 BUFP. A fastmap records which of the (1 << BYTEWIDTH) possible
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
3982 characters can start a string that matches the pattern. This fastmap
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
3983 is used by re_search to skip quickly over impossible starting points.
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
3984
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
3985 Character codes above (1 << BYTEWIDTH) are not represented in the
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
3986 fastmap, but the leading codes are represented. Thus, the fastmap
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
3987 indicates which character sets could start a match.
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
3988
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
3989 The caller must supply the address of a (1 << BYTEWIDTH)-byte data
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
3990 area as BUFP->fastmap.
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
3991
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
3992 We set the `fastmap', `fastmap_accurate', and `can_be_null' fields in
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
3993 the pattern buffer.
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
3994
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
3995 Returns 0 if we succeed, -2 if an internal error. */
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
3996
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
3997 int
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
3998 re_compile_fastmap (bufp)
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
3999 struct re_pattern_buffer *bufp;
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
4000 {
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
4001 char *fastmap = bufp->fastmap;
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
4002 int analysis;
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
4003
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
4004 assert (fastmap && bufp->buffer);
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
4005
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
4006 bzero (fastmap, 1 << BYTEWIDTH); /* Assume nothing's valid. */
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
4007 bufp->fastmap_accurate = 1; /* It will be when we're done. */
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
4008
5478842aea4c (analyse_first): New function obtained by ripping out most
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28372
diff changeset
4009 analysis = analyse_first (bufp->buffer, bufp->buffer + bufp->used,
28473
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
4010 fastmap, RE_MULTIBYTE_P (bufp));
31312
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
4011 bufp->can_be_null = (analysis != 0);
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4012 return 0;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4013 } /* re_compile_fastmap */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4014
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4015 /* Set REGS to hold NUM_REGS registers, storing them in STARTS and
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4016 ENDS. Subsequent matches using PATTERN_BUFFER and REGS will use
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4017 this memory for recording register information. STARTS and ENDS
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4018 must be allocated using the malloc library routine, and must each
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4019 be at least NUM_REGS * sizeof (regoff_t) bytes long.
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4020
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4021 If NUM_REGS == 0, then subsequent matches should allocate their own
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4022 register data.
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4023
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4024 Unless this function is called, the first search or match using
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4025 PATTERN_BUFFER will allocate its own register data, without
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4026 freeing the old data. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4027
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4028 void
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4029 re_set_registers (bufp, regs, num_regs, starts, ends)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4030 struct re_pattern_buffer *bufp;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4031 struct re_registers *regs;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4032 unsigned num_regs;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4033 regoff_t *starts, *ends;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4034 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4035 if (num_regs)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4036 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4037 bufp->regs_allocated = REGS_REALLOCATE;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4038 regs->num_regs = num_regs;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4039 regs->start = starts;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4040 regs->end = ends;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4041 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4042 else
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4043 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4044 bufp->regs_allocated = REGS_UNALLOCATED;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4045 regs->num_regs = 0;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4046 regs->start = regs->end = (regoff_t *) 0;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4047 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4048 }
31312
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
4049 WEAK_ALIAS (__re_set_registers, re_set_registers)
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4050
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4051 /* Searching routines. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4052
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4053 /* Like re_search_2, below, but only one string is specified, and
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4054 doesn't let you say where to stop matching. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4055
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4056 int
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4057 re_search (bufp, string, size, startpos, range, regs)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4058 struct re_pattern_buffer *bufp;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4059 const char *string;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4060 int size, startpos, range;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4061 struct re_registers *regs;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4062 {
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
4063 return re_search_2 (bufp, NULL, 0, string, size, startpos, range,
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4064 regs, size);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4065 }
31312
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
4066 WEAK_ALIAS (__re_search, re_search)
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4067
49276
f71131f142ff (GET_CHAR_BEFORE_2): Use PREV_CHAR_BOUNDARY.
Kenichi Handa <handa@m17n.org>
parents: 48424
diff changeset
4068 /* Head address of virtual concatenation of string. */
f71131f142ff (GET_CHAR_BEFORE_2): Use PREV_CHAR_BOUNDARY.
Kenichi Handa <handa@m17n.org>
parents: 48424
diff changeset
4069 #define HEAD_ADDR_VSTRING(P) \
f71131f142ff (GET_CHAR_BEFORE_2): Use PREV_CHAR_BOUNDARY.
Kenichi Handa <handa@m17n.org>
parents: 48424
diff changeset
4070 (((P) >= size1 ? string2 : string1))
f71131f142ff (GET_CHAR_BEFORE_2): Use PREV_CHAR_BOUNDARY.
Kenichi Handa <handa@m17n.org>
parents: 48424
diff changeset
4071
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4072 /* End address of virtual concatenation of string. */
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4073 #define STOP_ADDR_VSTRING(P) \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4074 (((P) >= size1 ? string2 + size2 : string1 + size1))
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4075
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4076 /* Address of POS in the concatenation of virtual string. */
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4077 #define POS_ADDR_VSTRING(POS) \
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4078 (((POS) >= size1 ? string2 - size1 : string1) + (POS))
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4079
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4080 /* Using the compiled pattern in BUFP->buffer, first tries to match the
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4081 virtual concatenation of STRING1 and STRING2, starting first at index
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4082 STARTPOS, then at STARTPOS + 1, and so on.
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
4083
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4084 STRING1 and STRING2 have length SIZE1 and SIZE2, respectively.
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
4085
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4086 RANGE is how far to scan while trying to match. RANGE = 0 means try
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4087 only at STARTPOS; in general, the last start tried is STARTPOS +
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4088 RANGE.
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
4089
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4090 In REGS, return the indices of the virtual concatenation of STRING1
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4091 and STRING2 that matched the entire BUFP->buffer and its contained
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4092 subexpressions.
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
4093
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4094 Do not consider matching one past the index STOP in the virtual
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4095 concatenation of STRING1 and STRING2.
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4096
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4097 We return either the position in the strings at which the match was
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4098 found, -1 if no match, or -2 if error (such as failure
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4099 stack overflow). */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4100
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4101 int
28138
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
4102 re_search_2 (bufp, str1, size1, str2, size2, startpos, range, regs, stop)
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4103 struct re_pattern_buffer *bufp;
28138
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
4104 const char *str1, *str2;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4105 int size1, size2;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4106 int startpos;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4107 int range;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4108 struct re_registers *regs;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4109 int stop;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4110 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4111 int val;
28138
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
4112 re_char *string1 = (re_char*) str1;
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
4113 re_char *string2 = (re_char*) str2;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4114 register char *fastmap = bufp->fastmap;
13250
52e053f46f76 (TRANSLATE, PATFETCH): Cast elt of `translate'.
Richard M. Stallman <rms@gnu.org>
parents: 13100
diff changeset
4115 register RE_TRANSLATE_TYPE translate = bufp->translate;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4116 int total_size = size1 + size2;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4117 int endpos = startpos + range;
31312
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
4118 boolean anchored_start;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4119
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4120 /* Nonzero if we have to concern multibyte character. */
28473
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
4121 const boolean multibyte = RE_MULTIBYTE_P (bufp);
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4122
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4123 /* Check for out-of-range STARTPOS. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4124 if (startpos < 0 || startpos > total_size)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4125 return -1;
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
4126
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4127 /* Fix up RANGE if it might eventually take us outside
13100
4f0f50fc3aaf (re_search_2): Use 0, not -1, as the lower bound
Richard M. Stallman <rms@gnu.org>
parents: 12983
diff changeset
4128 the virtual concatenation of STRING1 and STRING2.
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
4129 Make sure we won't move STARTPOS below 0 or above TOTAL_SIZE. */
13100
4f0f50fc3aaf (re_search_2): Use 0, not -1, as the lower bound
Richard M. Stallman <rms@gnu.org>
parents: 12983
diff changeset
4130 if (endpos < 0)
4f0f50fc3aaf (re_search_2): Use 0, not -1, as the lower bound
Richard M. Stallman <rms@gnu.org>
parents: 12983
diff changeset
4131 range = 0 - startpos;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4132 else if (endpos > total_size)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4133 range = total_size - startpos;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4134
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4135 /* If the search isn't to be a backwards one, don't waste time in a
21760
f97c01dfd603 (re_search_2): Fix handling of at_dot.
Richard M. Stallman <rms@gnu.org>
parents: 21562
diff changeset
4136 search for a pattern anchored at beginning of buffer. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4137 if (bufp->used > 0 && (re_opcode_t) bufp->buffer[0] == begbuf && range > 0)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4138 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4139 if (startpos > 0)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4140 return -1;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4141 else
21760
f97c01dfd603 (re_search_2): Fix handling of at_dot.
Richard M. Stallman <rms@gnu.org>
parents: 21562
diff changeset
4142 range = 0;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4143 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4144
12983
ed39ba26313b (re_search_2): If pattern starts with \=, optimize search.
Richard M. Stallman <rms@gnu.org>
parents: 12931
diff changeset
4145 #ifdef emacs
ed39ba26313b (re_search_2): If pattern starts with \=, optimize search.
Richard M. Stallman <rms@gnu.org>
parents: 12931
diff changeset
4146 /* In a forward search for something that starts with \=.
ed39ba26313b (re_search_2): If pattern starts with \=, optimize search.
Richard M. Stallman <rms@gnu.org>
parents: 12931
diff changeset
4147 don't keep searching past point. */
ed39ba26313b (re_search_2): If pattern starts with \=, optimize search.
Richard M. Stallman <rms@gnu.org>
parents: 12931
diff changeset
4148 if (bufp->used > 0 && (re_opcode_t) bufp->buffer[0] == at_dot && range > 0)
ed39ba26313b (re_search_2): If pattern starts with \=, optimize search.
Richard M. Stallman <rms@gnu.org>
parents: 12931
diff changeset
4149 {
21760
f97c01dfd603 (re_search_2): Fix handling of at_dot.
Richard M. Stallman <rms@gnu.org>
parents: 21562
diff changeset
4150 range = PT_BYTE - BEGV_BYTE - startpos;
f97c01dfd603 (re_search_2): Fix handling of at_dot.
Richard M. Stallman <rms@gnu.org>
parents: 21562
diff changeset
4151 if (range < 0)
12983
ed39ba26313b (re_search_2): If pattern starts with \=, optimize search.
Richard M. Stallman <rms@gnu.org>
parents: 12931
diff changeset
4152 return -1;
ed39ba26313b (re_search_2): If pattern starts with \=, optimize search.
Richard M. Stallman <rms@gnu.org>
parents: 12931
diff changeset
4153 }
ed39ba26313b (re_search_2): If pattern starts with \=, optimize search.
Richard M. Stallman <rms@gnu.org>
parents: 12931
diff changeset
4154 #endif /* emacs */
ed39ba26313b (re_search_2): If pattern starts with \=, optimize search.
Richard M. Stallman <rms@gnu.org>
parents: 12931
diff changeset
4155
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4156 /* Update the fastmap now if not correct already. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4157 if (fastmap && !bufp->fastmap_accurate)
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
4158 re_compile_fastmap (bufp);
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
4159
16009
2a4da819f152 (re_search_2): Optimize regexp that starts with ^.
Richard M. Stallman <rms@gnu.org>
parents: 16008
diff changeset
4160 /* See whether the pattern is anchored. */
31312
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
4161 anchored_start = (bufp->buffer[0] == begline);
16009
2a4da819f152 (re_search_2): Optimize regexp that starts with ^.
Richard M. Stallman <rms@gnu.org>
parents: 16008
diff changeset
4162
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4163 #ifdef emacs
21482
9898a4994a12 (re_match_2, re_search_2): Convert position to a charpos,
Karl Heuer <kwzh@gnu.org>
parents: 21404
diff changeset
4164 gl_state.object = re_match_object;
9898a4994a12 (re_match_2, re_search_2): Convert position to a charpos,
Karl Heuer <kwzh@gnu.org>
parents: 21404
diff changeset
4165 {
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
4166 int charpos = SYNTAX_TABLE_BYTE_TO_CHAR (POS_AS_IN_BUFFER (startpos));
21482
9898a4994a12 (re_match_2, re_search_2): Convert position to a charpos,
Karl Heuer <kwzh@gnu.org>
parents: 21404
diff changeset
4167
9898a4994a12 (re_match_2, re_search_2): Convert position to a charpos,
Karl Heuer <kwzh@gnu.org>
parents: 21404
diff changeset
4168 SETUP_SYNTAX_TABLE_FOR_OBJECT (re_match_object, charpos, 1);
9898a4994a12 (re_match_2, re_search_2): Convert position to a charpos,
Karl Heuer <kwzh@gnu.org>
parents: 21404
diff changeset
4169 }
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4170 #endif
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4171
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4172 /* Loop through the string, looking for a place to start matching. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4173 for (;;)
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
4174 {
16009
2a4da819f152 (re_search_2): Optimize regexp that starts with ^.
Richard M. Stallman <rms@gnu.org>
parents: 16008
diff changeset
4175 /* If the pattern is anchored,
2a4da819f152 (re_search_2): Optimize regexp that starts with ^.
Richard M. Stallman <rms@gnu.org>
parents: 16008
diff changeset
4176 skip quickly past places we cannot match.
2a4da819f152 (re_search_2): Optimize regexp that starts with ^.
Richard M. Stallman <rms@gnu.org>
parents: 16008
diff changeset
4177 We don't bother to treat startpos == 0 specially
2a4da819f152 (re_search_2): Optimize regexp that starts with ^.
Richard M. Stallman <rms@gnu.org>
parents: 16008
diff changeset
4178 because that case doesn't repeat. */
2a4da819f152 (re_search_2): Optimize regexp that starts with ^.
Richard M. Stallman <rms@gnu.org>
parents: 16008
diff changeset
4179 if (anchored_start && startpos > 0)
2a4da819f152 (re_search_2): Optimize regexp that starts with ^.
Richard M. Stallman <rms@gnu.org>
parents: 16008
diff changeset
4180 {
31312
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
4181 if (! ((startpos <= size1 ? string1[startpos - 1]
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
4182 : string2[startpos - size1 - 1])
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
4183 == '\n'))
16009
2a4da819f152 (re_search_2): Optimize regexp that starts with ^.
Richard M. Stallman <rms@gnu.org>
parents: 16008
diff changeset
4184 goto advance;
2a4da819f152 (re_search_2): Optimize regexp that starts with ^.
Richard M. Stallman <rms@gnu.org>
parents: 16008
diff changeset
4185 }
2a4da819f152 (re_search_2): Optimize regexp that starts with ^.
Richard M. Stallman <rms@gnu.org>
parents: 16008
diff changeset
4186
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4187 /* If a fastmap is supplied, skip quickly over characters that
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4188 cannot be the start of a match. If the pattern can match the
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4189 null string, however, we don't need to skip characters; we want
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4190 the first null string. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4191 if (fastmap && startpos < total_size && !bufp->can_be_null)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4192 {
28138
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
4193 register re_char *d;
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
4194 register re_wchar_t buf_ch;
21348
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
4195
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
4196 d = POS_ADDR_VSTRING (startpos);
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
4197
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4198 if (range > 0) /* Searching forwards. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4199 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4200 register int lim = 0;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4201 int irange = range;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4202
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4203 if (startpos < size1 && startpos + range >= size1)
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4204 lim = range - (size1 - startpos);
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4205
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4206 /* Written out as an if-else to avoid testing `translate'
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4207 inside the loop. */
21838
1d93b782b983 (re_search_2): Fix indentation.
Andreas Schwab <schwab@suse.de>
parents: 21760
diff changeset
4208 if (RE_TRANSLATE_P (translate))
1d93b782b983 (re_search_2): Fix indentation.
Andreas Schwab <schwab@suse.de>
parents: 21760
diff changeset
4209 {
21348
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
4210 if (multibyte)
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
4211 while (range > lim)
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
4212 {
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
4213 int buf_charlen;
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
4214
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
4215 buf_ch = STRING_CHAR_AND_LENGTH (d, range - lim,
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
4216 buf_charlen);
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
4217
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
4218 buf_ch = RE_TRANSLATE (translate, buf_ch);
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
4219 if (buf_ch >= 0400
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
4220 || fastmap[buf_ch])
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
4221 break;
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
4222
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
4223 range -= buf_charlen;
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
4224 d += buf_charlen;
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
4225 }
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
4226 else
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
4227 while (range > lim
28138
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
4228 && !fastmap[RE_TRANSLATE (translate, *d)])
22237
566c88b62de6 (re_search_2): Don't use ++ inside RE_TRANSLATE.
Richard M. Stallman <rms@gnu.org>
parents: 21963
diff changeset
4229 {
566c88b62de6 (re_search_2): Don't use ++ inside RE_TRANSLATE.
Richard M. Stallman <rms@gnu.org>
parents: 21963
diff changeset
4230 d++;
566c88b62de6 (re_search_2): Don't use ++ inside RE_TRANSLATE.
Richard M. Stallman <rms@gnu.org>
parents: 21963
diff changeset
4231 range--;
566c88b62de6 (re_search_2): Don't use ++ inside RE_TRANSLATE.
Richard M. Stallman <rms@gnu.org>
parents: 21963
diff changeset
4232 }
21348
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
4233 }
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4234 else
28138
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
4235 while (range > lim && !fastmap[*d])
22237
566c88b62de6 (re_search_2): Don't use ++ inside RE_TRANSLATE.
Richard M. Stallman <rms@gnu.org>
parents: 21963
diff changeset
4236 {
566c88b62de6 (re_search_2): Don't use ++ inside RE_TRANSLATE.
Richard M. Stallman <rms@gnu.org>
parents: 21963
diff changeset
4237 d++;
566c88b62de6 (re_search_2): Don't use ++ inside RE_TRANSLATE.
Richard M. Stallman <rms@gnu.org>
parents: 21963
diff changeset
4238 range--;
566c88b62de6 (re_search_2): Don't use ++ inside RE_TRANSLATE.
Richard M. Stallman <rms@gnu.org>
parents: 21963
diff changeset
4239 }
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4240
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4241 startpos += irange - range;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4242 }
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4243 else /* Searching backwards. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4244 {
28473
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
4245 int room = (startpos >= size1
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
4246 ? size2 + size1 - startpos
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
4247 : size1 - startpos);
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
4248 buf_ch = RE_STRING_CHAR (d, room);
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
4249 buf_ch = TRANSLATE (buf_ch);
21348
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
4250
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
4251 if (! (buf_ch >= 0400
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
4252 || fastmap[buf_ch]))
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4253 goto advance;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4254 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4255 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4256
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4257 /* If can't match the null string, and that's all we have left, fail. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4258 if (range >= 0 && startpos == total_size && fastmap
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4259 && !bufp->can_be_null)
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4260 return -1;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4261
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4262 val = re_match_2_internal (bufp, string1, size1, string2, size2,
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4263 startpos, regs, stop);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4264 #ifndef REGEX_MALLOC
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
4265 # ifdef C_ALLOCA
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4266 alloca (0);
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
4267 # endif
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4268 #endif
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4269
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4270 if (val >= 0)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4271 return startpos;
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
4272
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4273 if (val == -2)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4274 return -2;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4275
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4276 advance:
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
4277 if (!range)
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4278 break;
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
4279 else if (range > 0)
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4280 {
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4281 /* Update STARTPOS to the next character boundary. */
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4282 if (multibyte)
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4283 {
28138
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
4284 re_char *p = POS_ADDR_VSTRING (startpos);
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
4285 re_char *pend = STOP_ADDR_VSTRING (startpos);
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4286 int len = MULTIBYTE_FORM_LENGTH (p, pend - p);
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4287
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4288 range -= len;
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4289 if (range < 0)
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4290 break;
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4291 startpos += len;
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4292 }
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4293 else
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4294 {
18532
488df9d19f5e (re_search_2): Cast result of POS_ADDR_VSTRING.
Richard M. Stallman <rms@gnu.org>
parents: 18263
diff changeset
4295 range--;
488df9d19f5e (re_search_2): Cast result of POS_ADDR_VSTRING.
Richard M. Stallman <rms@gnu.org>
parents: 18263
diff changeset
4296 startpos++;
488df9d19f5e (re_search_2): Cast result of POS_ADDR_VSTRING.
Richard M. Stallman <rms@gnu.org>
parents: 18263
diff changeset
4297 }
16010
4addc35d079b Clean up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 16009
diff changeset
4298 }
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4299 else
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4300 {
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4301 range++;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4302 startpos--;
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4303
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4304 /* Update STARTPOS to the previous character boundary. */
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4305 if (multibyte)
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4306 {
49276
f71131f142ff (GET_CHAR_BEFORE_2): Use PREV_CHAR_BOUNDARY.
Kenichi Handa <handa@m17n.org>
parents: 48424
diff changeset
4307 re_char *p = POS_ADDR_VSTRING (startpos) + 1;
f71131f142ff (GET_CHAR_BEFORE_2): Use PREV_CHAR_BOUNDARY.
Kenichi Handa <handa@m17n.org>
parents: 48424
diff changeset
4308 re_char *p0 = p;
f71131f142ff (GET_CHAR_BEFORE_2): Use PREV_CHAR_BOUNDARY.
Kenichi Handa <handa@m17n.org>
parents: 48424
diff changeset
4309 re_char *phead = HEAD_ADDR_VSTRING (startpos);
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4310
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4311 /* Find the head of multibyte form. */
49276
f71131f142ff (GET_CHAR_BEFORE_2): Use PREV_CHAR_BOUNDARY.
Kenichi Handa <handa@m17n.org>
parents: 48424
diff changeset
4312 PREV_CHAR_BOUNDARY (p, phead);
f71131f142ff (GET_CHAR_BEFORE_2): Use PREV_CHAR_BOUNDARY.
Kenichi Handa <handa@m17n.org>
parents: 48424
diff changeset
4313 range += p0 - 1 - p;
f71131f142ff (GET_CHAR_BEFORE_2): Use PREV_CHAR_BOUNDARY.
Kenichi Handa <handa@m17n.org>
parents: 48424
diff changeset
4314 if (range > 0)
f71131f142ff (GET_CHAR_BEFORE_2): Use PREV_CHAR_BOUNDARY.
Kenichi Handa <handa@m17n.org>
parents: 48424
diff changeset
4315 break;
f71131f142ff (GET_CHAR_BEFORE_2): Use PREV_CHAR_BOUNDARY.
Kenichi Handa <handa@m17n.org>
parents: 48424
diff changeset
4316
f71131f142ff (GET_CHAR_BEFORE_2): Use PREV_CHAR_BOUNDARY.
Kenichi Handa <handa@m17n.org>
parents: 48424
diff changeset
4317 startpos -= p0 - 1 - p;
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4318 }
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4319 }
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4320 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4321 return -1;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4322 } /* re_search_2 */
31312
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
4323 WEAK_ALIAS (__re_search_2, re_search_2)
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4324
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4325 /* Declarations and macros for re_match_2. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4326
28473
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
4327 static int bcmp_translate _RE_ARGS((re_char *s1, re_char *s2,
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
4328 register int len,
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
4329 RE_TRANSLATE_TYPE translate,
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
4330 const int multibyte));
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4331
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4332 /* This converts PTR, a pointer into one of the search strings `string1'
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4333 and `string2' into an offset from the beginning of that string. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4334 #define POINTER_TO_OFFSET(ptr) \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4335 (FIRST_STRING_P (ptr) \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4336 ? ((regoff_t) ((ptr) - string1)) \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4337 : ((regoff_t) ((ptr) - string2 + size1)))
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4338
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4339 /* Call before fetching a character with *d. This switches over to
28662
d40a7f046efe (re_match_2_internal): Don't shorten the strings anymore,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28473
diff changeset
4340 string2 if necessary.
d40a7f046efe (re_match_2_internal): Don't shorten the strings anymore,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28473
diff changeset
4341 Check re_match_2_internal for a discussion of why end_match_2 might
d40a7f046efe (re_match_2_internal): Don't shorten the strings anymore,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28473
diff changeset
4342 not be within string2 (but be equal to end_match_1 instead). */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4343 #define PREFETCH() \
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4344 while (d == dend) \
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4345 { \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4346 /* End of string2 => fail. */ \
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4347 if (dend == end_match_2) \
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4348 goto fail; \
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
4349 /* End of string1 => advance to string2. */ \
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4350 d = string2; \
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4351 dend = end_match_2; \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4352 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4353
29296
b2c75746a989 (PREFETCH_NOLIMIT): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29194
diff changeset
4354 /* Call before fetching a char with *d if you already checked other limits.
b2c75746a989 (PREFETCH_NOLIMIT): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29194
diff changeset
4355 This is meant for use in lookahead operations like wordend, etc..
b2c75746a989 (PREFETCH_NOLIMIT): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29194
diff changeset
4356 where we might need to look at parts of the string that might be
b2c75746a989 (PREFETCH_NOLIMIT): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29194
diff changeset
4357 outside of the LIMITs (i.e past `stop'). */
b2c75746a989 (PREFETCH_NOLIMIT): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29194
diff changeset
4358 #define PREFETCH_NOLIMIT() \
b2c75746a989 (PREFETCH_NOLIMIT): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29194
diff changeset
4359 if (d == end1) \
b2c75746a989 (PREFETCH_NOLIMIT): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29194
diff changeset
4360 { \
b2c75746a989 (PREFETCH_NOLIMIT): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29194
diff changeset
4361 d = string2; \
b2c75746a989 (PREFETCH_NOLIMIT): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29194
diff changeset
4362 dend = end_match_2; \
b2c75746a989 (PREFETCH_NOLIMIT): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29194
diff changeset
4363 } \
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4364
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4365 /* Test if at very beginning or at very end of the virtual concatenation
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4366 of `string1' and `string2'. If only one string, it's `string2'. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4367 #define AT_STRINGS_BEG(d) ((d) == (size1 ? string1 : string2) || !size2)
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
4368 #define AT_STRINGS_END(d) ((d) == end2)
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4369
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4370
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4371 /* Test if D points to a character which is word-constituent. We have
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4372 two special cases to check for: if past the end of string1, look at
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4373 the first character in string2; and if before the beginning of
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4374 string2, look at the last character in string1. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4375 #define WORDCHAR_P(d) \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4376 (SYNTAX ((d) == end1 ? *string2 \
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4377 : (d) == string2 - 1 ? *(end1 - 1) : *(d)) \
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4378 == Sword)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4379
13722
e2669b8a46e2 (AT_WORD_BOUNDARY): Disable macro.
Karl Heuer <kwzh@gnu.org>
parents: 13565
diff changeset
4380 /* Disabled due to a compiler bug -- see comment at case wordbound */
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4381
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4382 /* The comment at case wordbound is following one, but we don't use
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4383 AT_WORD_BOUNDARY anymore to support multibyte form.
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4384
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4385 The DEC Alpha C compiler 3.x generates incorrect code for the
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4386 test WORDCHAR_P (d - 1) != WORDCHAR_P (d) in the expansion of
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4387 AT_WORD_BOUNDARY, so this code is disabled. Expanding the
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4388 macro and introducing temporary variables works around the bug. */
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4389
13722
e2669b8a46e2 (AT_WORD_BOUNDARY): Disable macro.
Karl Heuer <kwzh@gnu.org>
parents: 13565
diff changeset
4390 #if 0
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4391 /* Test if the character before D and the one at D differ with respect
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4392 to being word-constituent. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4393 #define AT_WORD_BOUNDARY(d) \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4394 (AT_STRINGS_BEG (d) || AT_STRINGS_END (d) \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4395 || WORDCHAR_P (d - 1) != WORDCHAR_P (d))
13722
e2669b8a46e2 (AT_WORD_BOUNDARY): Disable macro.
Karl Heuer <kwzh@gnu.org>
parents: 13565
diff changeset
4396 #endif
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4397
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4398 /* Free everything we malloc. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4399 #ifdef MATCH_MAY_ALLOCATE
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
4400 # define FREE_VAR(var) if (var) { REGEX_FREE (var); var = NULL; } else
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
4401 # define FREE_VARIABLES() \
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4402 do { \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4403 REGEX_FREE_STACK (fail_stack.stack); \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4404 FREE_VAR (regstart); \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4405 FREE_VAR (regend); \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4406 FREE_VAR (best_regstart); \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4407 FREE_VAR (best_regend); \
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4408 } while (0)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4409 #else
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
4410 # define FREE_VARIABLES() ((void)0) /* Do nothing! But inhibit gcc warning. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4411 #endif /* not MATCH_MAY_ALLOCATE */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4412
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4413
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4414 /* Optimization routines. */
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4415
28203
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4416 /* If the operation is a match against one or more chars,
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4417 return a pointer to the next operation, else return NULL. */
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
4418 static re_char *
28203
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4419 skip_one_char (p)
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
4420 re_char *p;
28203
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4421 {
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4422 switch (SWITCH_ENUM_CAST (*p++))
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4423 {
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4424 case anychar:
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4425 break;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49276
diff changeset
4426
28203
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4427 case exactn:
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4428 p += *p + 1;
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4429 break;
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4430
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4431 case charset_not:
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4432 case charset:
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4433 if (CHARSET_RANGE_TABLE_EXISTS_P (p - 1))
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4434 {
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4435 int mcnt;
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4436 p = CHARSET_RANGE_TABLE (p - 1);
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4437 EXTRACT_NUMBER_AND_INCR (mcnt, p);
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4438 p = CHARSET_RANGE_TABLE_END (p, mcnt);
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4439 }
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4440 else
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4441 p += 1 + CHARSET_BITMAP_SIZE (p - 1);
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4442 break;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49276
diff changeset
4443
28203
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4444 case syntaxspec:
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4445 case notsyntaxspec:
28261
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
4446 #ifdef emacs
28203
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4447 case categoryspec:
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4448 case notcategoryspec:
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4449 #endif /* emacs */
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4450 p++;
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4451 break;
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4452
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4453 default:
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4454 p = NULL;
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4455 }
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4456 return p;
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4457 }
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4458
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4459
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4460 /* Jump over non-matching operations. */
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4461 static unsigned char *
28203
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4462 skip_noops (p, pend)
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4463 unsigned char *p, *pend;
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4464 {
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4465 int mcnt;
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4466 while (p < pend)
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4467 {
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4468 switch (SWITCH_ENUM_CAST ((re_opcode_t) *p))
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4469 {
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4470 case start_memory:
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4471 case stop_memory:
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4472 p += 2; break;
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4473 case no_op:
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4474 p += 1; break;
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4475 case jump:
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4476 p += 1;
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4477 EXTRACT_NUMBER_AND_INCR (mcnt, p);
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4478 p += mcnt;
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4479 break;
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4480 default:
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4481 return p;
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4482 }
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4483 }
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4484 assert (p == pend);
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4485 return p;
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4486 }
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4487
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4488 /* Non-zero if "p1 matches something" implies "p2 fails". */
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4489 static int
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4490 mutually_exclusive_p (bufp, p1, p2)
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4491 struct re_pattern_buffer *bufp;
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4492 unsigned char *p1, *p2;
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4493 {
28203
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4494 re_opcode_t op2;
28473
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
4495 const boolean multibyte = RE_MULTIBYTE_P (bufp);
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4496 unsigned char *pend = bufp->buffer + bufp->used;
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4497
28203
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4498 assert (p1 >= bufp->buffer && p1 < pend
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4499 && p2 >= bufp->buffer && p2 <= pend);
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4500
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4501 /* Skip over open/close-group commands.
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4502 If what follows this loop is a ...+ construct,
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4503 look at what begins its body, since we will have to
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4504 match at least one of that. */
28203
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4505 p2 = skip_noops (p2, pend);
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4506 /* The same skip can be done for p1, except that this function
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4507 is only used in the case where p1 is a simple match operator. */
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4508 /* p1 = skip_noops (p1, pend); */
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4509
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4510 assert (p1 >= bufp->buffer && p1 < pend
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4511 && p2 >= bufp->buffer && p2 <= pend);
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4512
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4513 op2 = p2 == pend ? succeed : *p2;
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4514
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4515 switch (SWITCH_ENUM_CAST (op2))
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4516 {
28203
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4517 case succeed:
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4518 case endbuf:
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4519 /* If we're at the end of the pattern, we can change. */
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4520 if (skip_one_char (p1))
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4521 {
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4522 DEBUG_PRINT1 (" End of pattern: fast loop.\n");
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4523 return 1;
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4524 }
28203
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4525 break;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49276
diff changeset
4526
28203
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4527 case endline:
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4528 case exactn:
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4529 {
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
4530 register re_wchar_t c
28203
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4531 = (re_opcode_t) *p2 == endline ? '\n'
35525
95c2eedea354 (mutually_exclusive_p): Don't blindly handle `charset_not'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33066
diff changeset
4532 : RE_STRING_CHAR (p2 + 2, pend - p2 - 2);
28203
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4533
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4534 if ((re_opcode_t) *p1 == exactn)
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4535 {
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4536 if (c != RE_STRING_CHAR (p1 + 2, pend - p1 - 2))
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4537 {
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4538 DEBUG_PRINT3 (" '%c' != '%c' => fast loop.\n", c, p1[2]);
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4539 return 1;
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4540 }
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4541 }
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4542
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4543 else if ((re_opcode_t) *p1 == charset
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4544 || (re_opcode_t) *p1 == charset_not)
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4545 {
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4546 int not = (re_opcode_t) *p1 == charset_not;
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4547
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4548 /* Test if C is listed in charset (or charset_not)
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4549 at `p1'. */
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4550 if (SINGLE_BYTE_CHAR_P (c))
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4551 {
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4552 if (c < CHARSET_BITMAP_SIZE (p1) * BYTEWIDTH
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4553 && p1[2 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH)))
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4554 not = !not;
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4555 }
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4556 else if (CHARSET_RANGE_TABLE_EXISTS_P (p1))
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4557 CHARSET_LOOKUP_RANGE_TABLE (not, c, p1);
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4558
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4559 /* `not' is equal to 1 if c would match, which means
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4560 that we can't change to pop_failure_jump. */
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4561 if (!not)
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4562 {
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4563 DEBUG_PRINT1 (" No match => fast loop.\n");
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4564 return 1;
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4565 }
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4566 }
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4567 else if ((re_opcode_t) *p1 == anychar
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4568 && c == '\n')
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4569 {
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4570 DEBUG_PRINT1 (" . != \\n => fast loop.\n");
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4571 return 1;
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4572 }
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4573 }
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4574 break;
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4575
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4576 case charset:
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4577 {
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4578 if ((re_opcode_t) *p1 == exactn)
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4579 /* Reuse the code above. */
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4580 return mutually_exclusive_p (bufp, p2, p1);
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4581
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4582 /* It is hard to list up all the character in charset
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4583 P2 if it includes multibyte character. Give up in
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4584 such case. */
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4585 else if (!multibyte || !CHARSET_RANGE_TABLE_EXISTS_P (p2))
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4586 {
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4587 /* Now, we are sure that P2 has no range table.
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4588 So, for the size of bitmap in P2, `p2[1]' is
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4589 enough. But P1 may have range table, so the
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4590 size of bitmap table of P1 is extracted by
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4591 using macro `CHARSET_BITMAP_SIZE'.
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4592
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4593 Since we know that all the character listed in
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4594 P2 is ASCII, it is enough to test only bitmap
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4595 table of P1. */
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4596
35525
95c2eedea354 (mutually_exclusive_p): Don't blindly handle `charset_not'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33066
diff changeset
4597 if ((re_opcode_t) *p1 == charset)
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4598 {
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4599 int idx;
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4600 /* We win if the charset inside the loop
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4601 has no overlap with the one after the loop. */
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4602 for (idx = 0;
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4603 (idx < (int) p2[1]
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4604 && idx < CHARSET_BITMAP_SIZE (p1));
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4605 idx++)
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4606 if ((p2[2 + idx] & p1[2 + idx]) != 0)
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4607 break;
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4608
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4609 if (idx == p2[1]
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4610 || idx == CHARSET_BITMAP_SIZE (p1))
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4611 {
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4612 DEBUG_PRINT1 (" No match => fast loop.\n");
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4613 return 1;
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4614 }
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4615 }
35525
95c2eedea354 (mutually_exclusive_p): Don't blindly handle `charset_not'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33066
diff changeset
4616 else if ((re_opcode_t) *p1 == charset_not)
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4617 {
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4618 int idx;
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4619 /* We win if the charset_not inside the loop lists
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4620 every character listed in the charset after. */
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4621 for (idx = 0; idx < (int) p2[1]; idx++)
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4622 if (! (p2[2 + idx] == 0
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4623 || (idx < CHARSET_BITMAP_SIZE (p1)
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4624 && ((p2[2 + idx] & ~ p1[2 + idx]) == 0))))
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4625 break;
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4626
28203
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4627 if (idx == p2[1])
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4628 {
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4629 DEBUG_PRINT1 (" No match => fast loop.\n");
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4630 return 1;
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4631 }
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4632 }
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4633 }
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4634 }
35533
6bd789b0ccc3 (mutually_exclusive_p): Add missing `break' at the end of `charset' processing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 35525
diff changeset
4635 break;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49276
diff changeset
4636
35525
95c2eedea354 (mutually_exclusive_p): Don't blindly handle `charset_not'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33066
diff changeset
4637 case charset_not:
95c2eedea354 (mutually_exclusive_p): Don't blindly handle `charset_not'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33066
diff changeset
4638 switch (SWITCH_ENUM_CAST (*p1))
95c2eedea354 (mutually_exclusive_p): Don't blindly handle `charset_not'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33066
diff changeset
4639 {
95c2eedea354 (mutually_exclusive_p): Don't blindly handle `charset_not'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33066
diff changeset
4640 case exactn:
95c2eedea354 (mutually_exclusive_p): Don't blindly handle `charset_not'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33066
diff changeset
4641 case charset:
95c2eedea354 (mutually_exclusive_p): Don't blindly handle `charset_not'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33066
diff changeset
4642 /* Reuse the code above. */
95c2eedea354 (mutually_exclusive_p): Don't blindly handle `charset_not'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33066
diff changeset
4643 return mutually_exclusive_p (bufp, p2, p1);
95c2eedea354 (mutually_exclusive_p): Don't blindly handle `charset_not'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33066
diff changeset
4644 case charset_not:
95c2eedea354 (mutually_exclusive_p): Don't blindly handle `charset_not'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33066
diff changeset
4645 /* When we have two charset_not, it's very unlikely that
95c2eedea354 (mutually_exclusive_p): Don't blindly handle `charset_not'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33066
diff changeset
4646 they don't overlap. The union of the two sets of excluded
95c2eedea354 (mutually_exclusive_p): Don't blindly handle `charset_not'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33066
diff changeset
4647 chars should cover all possible chars, which, as a matter of
95c2eedea354 (mutually_exclusive_p): Don't blindly handle `charset_not'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33066
diff changeset
4648 fact, is virtually impossible in multibyte buffers. */
47008
c299d527a088 (PATFETCH): Remove the translating fetch.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44145
diff changeset
4649 break;
35525
95c2eedea354 (mutually_exclusive_p): Don't blindly handle `charset_not'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33066
diff changeset
4650 }
95c2eedea354 (mutually_exclusive_p): Don't blindly handle `charset_not'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33066
diff changeset
4651 break;
95c2eedea354 (mutually_exclusive_p): Don't blindly handle `charset_not'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33066
diff changeset
4652
28203
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4653 case wordend:
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4654 case notsyntaxspec:
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4655 return ((re_opcode_t) *p1 == syntaxspec
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4656 && p1[1] == (op2 == wordend ? Sword : p2[1]));
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4657
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4658 case wordbeg:
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4659 case syntaxspec:
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4660 return ((re_opcode_t) *p1 == notsyntaxspec
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4661 && p1[1] == (op2 == wordend ? Sword : p2[1]));
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4662
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4663 case wordbound:
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4664 return (((re_opcode_t) *p1 == notsyntaxspec
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4665 || (re_opcode_t) *p1 == syntaxspec)
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4666 && p1[1] == Sword);
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4667
28261
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
4668 #ifdef emacs
28203
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4669 case categoryspec:
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4670 return ((re_opcode_t) *p1 == notcategoryspec && p1[1] == p2[1]);
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4671 case notcategoryspec:
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4672 return ((re_opcode_t) *p1 == categoryspec && p1[1] == p2[1]);
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4673 #endif /* emacs */
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4674
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4675 default:
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
4676 ;
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4677 }
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4678
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4679 /* Safe default. */
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4680 return 0;
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4681 }
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4682
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4683
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4684 /* Matching routines. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4685
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4686 #ifndef emacs /* Emacs never uses this. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4687 /* re_match is like re_match_2 except it takes only a single string. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4688
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4689 int
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4690 re_match (bufp, string, size, pos, regs)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4691 struct re_pattern_buffer *bufp;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4692 const char *string;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4693 int size, pos;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4694 struct re_registers *regs;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4695 {
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
4696 int result = re_match_2_internal (bufp, NULL, 0, (re_char*) string, size,
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4697 pos, regs, size);
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
4698 # if defined C_ALLOCA && !defined REGEX_MALLOC
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4699 alloca (0);
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
4700 # endif
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4701 return result;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4702 }
31312
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
4703 WEAK_ALIAS (__re_match, re_match)
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4704 #endif /* not emacs */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4705
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4706 #ifdef emacs
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4707 /* In Emacs, this is the string or buffer in which we
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4708 are matching. It is used for looking up syntax properties. */
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4709 Lisp_Object re_match_object;
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4710 #endif
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4711
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4712 /* re_match_2 matches the compiled pattern in BUFP against the
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4713 the (virtual) concatenation of STRING1 and STRING2 (of length SIZE1
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4714 and SIZE2, respectively). We start matching at POS, and stop
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4715 matching at STOP.
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
4716
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4717 If REGS is non-null and the `no_sub' field of BUFP is nonzero, we
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4718 store offsets for the substring each group matched in REGS. See the
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4719 documentation for exactly how many groups we fill.
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4720
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4721 We return -1 if no match, -2 if an internal error (such as the
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4722 failure stack overflowing). Otherwise, we return the length of the
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4723 matched substring. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4724
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4725 int
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4726 re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4727 struct re_pattern_buffer *bufp;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4728 const char *string1, *string2;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4729 int size1, size2;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4730 int pos;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4731 struct re_registers *regs;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4732 int stop;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4733 {
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4734 int result;
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4735
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4736 #ifdef emacs
21482
9898a4994a12 (re_match_2, re_search_2): Convert position to a charpos,
Karl Heuer <kwzh@gnu.org>
parents: 21404
diff changeset
4737 int charpos;
9898a4994a12 (re_match_2, re_search_2): Convert position to a charpos,
Karl Heuer <kwzh@gnu.org>
parents: 21404
diff changeset
4738 gl_state.object = re_match_object;
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
4739 charpos = SYNTAX_TABLE_BYTE_TO_CHAR (POS_AS_IN_BUFFER (pos));
21482
9898a4994a12 (re_match_2, re_search_2): Convert position to a charpos,
Karl Heuer <kwzh@gnu.org>
parents: 21404
diff changeset
4740 SETUP_SYNTAX_TABLE_FOR_OBJECT (re_match_object, charpos, 1);
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4741 #endif
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4742
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
4743 result = re_match_2_internal (bufp, (re_char*) string1, size1,
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
4744 (re_char*) string2, size2,
21482
9898a4994a12 (re_match_2, re_search_2): Convert position to a charpos,
Karl Heuer <kwzh@gnu.org>
parents: 21404
diff changeset
4745 pos, regs, stop);
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
4746 #if defined C_ALLOCA && !defined REGEX_MALLOC
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4747 alloca (0);
29801
3ea64112b4ba (re_match, re_match_2): Protect calls to alloca (0).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29546
diff changeset
4748 #endif
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4749 return result;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4750 }
31312
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
4751 WEAK_ALIAS (__re_match_2, re_match_2)
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4752
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4753 /* This is a separate function so that we can force an alloca cleanup
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4754 afterwards. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4755 static int
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4756 re_match_2_internal (bufp, string1, size1, string2, size2, pos, regs, stop)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4757 struct re_pattern_buffer *bufp;
28138
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
4758 re_char *string1, *string2;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4759 int size1, size2;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4760 int pos;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4761 struct re_registers *regs;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4762 int stop;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4763 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4764 /* General temporaries. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4765 int mcnt;
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
4766 size_t reg;
28138
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
4767 boolean not;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4768
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4769 /* Just past the end of the corresponding string. */
28138
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
4770 re_char *end1, *end2;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4771
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4772 /* Pointers into string1 and string2, just past the last characters in
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4773 each to consider matching. */
28138
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
4774 re_char *end_match_1, *end_match_2;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4775
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4776 /* Where we are in the data, and the end of the current string. */
28138
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
4777 re_char *d, *dend;
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
4778
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
4779 /* Used sometimes to remember where we were before starting matching
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
4780 an operator so that we can go back in case of failure. This "atomic"
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
4781 behavior of matching opcodes is indispensable to the correctness
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
4782 of the on_failure_keep_string_jump optimization. */
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
4783 re_char *dfail;
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
4784
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4785 /* Where we are in the pattern, and the end of the pattern. */
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
4786 re_char *p = bufp->buffer;
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
4787 re_char *pend = p + bufp->used;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4788
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4789 /* We use this to map every character in the string. */
13250
52e053f46f76 (TRANSLATE, PATFETCH): Cast elt of `translate'.
Richard M. Stallman <rms@gnu.org>
parents: 13100
diff changeset
4790 RE_TRANSLATE_TYPE translate = bufp->translate;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4791
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4792 /* Nonzero if we have to concern multibyte character. */
28473
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
4793 const boolean multibyte = RE_MULTIBYTE_P (bufp);
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
4794
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4795 /* Failure point stack. Each place that can handle a failure further
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4796 down the line pushes a failure point on this stack. It consists of
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4797 regstart, and regend for all registers corresponding to
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4798 the subexpressions we're currently inside, plus the number of such
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4799 registers, and, finally, two char *'s. The first char * is where
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4800 to resume scanning the pattern; the second one is where to resume
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4801 scanning the strings. */
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4802 #ifdef MATCH_MAY_ALLOCATE /* otherwise, this is global. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4803 fail_stack_type fail_stack;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4804 #endif
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4805 #ifdef DEBUG
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4806 unsigned nfailure_points_pushed = 0, nfailure_points_popped = 0;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4807 #endif
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4808
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
4809 #if defined REL_ALLOC && defined REGEX_MALLOC
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4810 /* This holds the pointer to the failure stack, when
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4811 it is allocated relocatably. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4812 fail_stack_elt_t *failure_stack_ptr;
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
4813 #endif
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4814
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4815 /* We fill all the registers internally, independent of what we
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4816 return, for use in backreferences. The number here includes
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4817 an element for register zero. */
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
4818 size_t num_regs = bufp->re_nsub + 1;
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
4819
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4820 /* Information on the contents of registers. These are pointers into
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4821 the input strings; they record just what was matched (on this
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4822 attempt) by a subexpression part of the pattern, that is, the
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4823 regnum-th regstart pointer points to where in the pattern we began
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4824 matching and the regnum-th regend points to right after where we
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4825 stopped matching the regnum-th subexpression. (The zeroth register
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4826 keeps track of what the whole pattern matches.) */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4827 #ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global. */
28138
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
4828 re_char **regstart, **regend;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4829 #endif
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4830
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4831 /* The following record the register info as found in the above
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
4832 variables when we find a match better than any we've seen before.
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4833 This happens as we backtrack through the failure points, which in
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4834 turn happens only if we have not yet matched the entire string. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4835 unsigned best_regs_set = false;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4836 #ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global. */
28138
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
4837 re_char **best_regstart, **best_regend;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4838 #endif
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
4839
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4840 /* Logically, this is `best_regend[0]'. But we don't want to have to
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4841 allocate space for that if we're not allocating space for anything
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4842 else (see below). Also, we never need info about register 0 for
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4843 any of the other register vectors, and it seems rather a kludge to
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4844 treat `best_regend' differently than the rest. So we keep track of
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4845 the end of the best match so far in a separate variable. We
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4846 initialize this to NULL so that when we backtrack the first time
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4847 and need to test it, it's not garbage. */
28138
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
4848 re_char *match_end = NULL;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4849
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4850 #ifdef DEBUG
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4851 /* Counts the total number of registers pushed. */
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
4852 unsigned num_regs_pushed = 0;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4853 #endif
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4854
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4855 DEBUG_PRINT1 ("\n\nEntering re_match_2.\n");
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
4856
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4857 INIT_FAIL_STACK ();
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
4858
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4859 #ifdef MATCH_MAY_ALLOCATE
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4860 /* Do not bother to initialize all the register variables if there are
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4861 no groups in the pattern, as it takes a fair amount of time. If
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4862 there are groups, we include space for register 0 (the whole
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4863 pattern), even though we never use it, since it simplifies the
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4864 array indexing. We should fix this. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4865 if (bufp->re_nsub)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4866 {
28138
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
4867 regstart = REGEX_TALLOC (num_regs, re_char *);
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
4868 regend = REGEX_TALLOC (num_regs, re_char *);
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
4869 best_regstart = REGEX_TALLOC (num_regs, re_char *);
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
4870 best_regend = REGEX_TALLOC (num_regs, re_char *);
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4871
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4872 if (!(regstart && regend && best_regstart && best_regend))
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4873 {
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4874 FREE_VARIABLES ();
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4875 return -2;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4876 }
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4877 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4878 else
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4879 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4880 /* We must initialize all our variables to NULL, so that
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4881 `FREE_VARIABLES' doesn't try to free them. */
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4882 regstart = regend = best_regstart = best_regend = NULL;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4883 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4884 #endif /* MATCH_MAY_ALLOCATE */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4885
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4886 /* The starting position is bogus. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4887 if (pos < 0 || pos > size1 + size2)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4888 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4889 FREE_VARIABLES ();
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4890 return -1;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4891 }
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
4892
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4893 /* Initialize subexpression text positions to -1 to mark ones that no
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4894 start_memory/stop_memory has been seen for. Also initialize the
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4895 register information struct. */
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
4896 for (reg = 1; reg < num_regs; reg++)
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
4897 regstart[reg] = regend[reg] = NULL;
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
4898
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4899 /* We move `string1' into `string2' if the latter's empty -- but not if
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4900 `string1' is null. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4901 if (size2 == 0 && string1 != NULL)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4902 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4903 string2 = string1;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4904 size2 = size1;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4905 string1 = 0;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4906 size1 = 0;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4907 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4908 end1 = string1 + size1;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4909 end2 = string2 + size2;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4910
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
4911 /* `p' scans through the pattern as `d' scans through the data.
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4912 `dend' is the end of the input string that `d' points within. `d'
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4913 is advanced into the following input string whenever necessary, but
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4914 this happens before fetching; therefore, at the beginning of the
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4915 loop, `d' can be pointing at the end of a string, but it cannot
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4916 equal `string2'. */
28662
d40a7f046efe (re_match_2_internal): Don't shorten the strings anymore,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28473
diff changeset
4917 if (pos >= size1)
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4918 {
28662
d40a7f046efe (re_match_2_internal): Don't shorten the strings anymore,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28473
diff changeset
4919 /* Only match within string2. */
d40a7f046efe (re_match_2_internal): Don't shorten the strings anymore,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28473
diff changeset
4920 d = string2 + pos - size1;
d40a7f046efe (re_match_2_internal): Don't shorten the strings anymore,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28473
diff changeset
4921 dend = end_match_2 = string2 + stop - size1;
d40a7f046efe (re_match_2_internal): Don't shorten the strings anymore,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28473
diff changeset
4922 end_match_1 = end1; /* Just to give it a value. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4923 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4924 else
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4925 {
29296
b2c75746a989 (PREFETCH_NOLIMIT): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29194
diff changeset
4926 if (stop < size1)
28662
d40a7f046efe (re_match_2_internal): Don't shorten the strings anymore,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28473
diff changeset
4927 {
d40a7f046efe (re_match_2_internal): Don't shorten the strings anymore,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28473
diff changeset
4928 /* Only match within string1. */
d40a7f046efe (re_match_2_internal): Don't shorten the strings anymore,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28473
diff changeset
4929 end_match_1 = string1 + stop;
d40a7f046efe (re_match_2_internal): Don't shorten the strings anymore,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28473
diff changeset
4930 /* BEWARE!
d40a7f046efe (re_match_2_internal): Don't shorten the strings anymore,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28473
diff changeset
4931 When we reach end_match_1, PREFETCH normally switches to string2.
d40a7f046efe (re_match_2_internal): Don't shorten the strings anymore,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28473
diff changeset
4932 But in the present case, this means that just doing a PREFETCH
d40a7f046efe (re_match_2_internal): Don't shorten the strings anymore,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28473
diff changeset
4933 makes us jump from `stop' to `gap' within the string.
d40a7f046efe (re_match_2_internal): Don't shorten the strings anymore,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28473
diff changeset
4934 What we really want here is for the search to stop as
d40a7f046efe (re_match_2_internal): Don't shorten the strings anymore,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28473
diff changeset
4935 soon as we hit end_match_1. That's why we set end_match_2
d40a7f046efe (re_match_2_internal): Don't shorten the strings anymore,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28473
diff changeset
4936 to end_match_1 (since PREFETCH fails as soon as we hit
d40a7f046efe (re_match_2_internal): Don't shorten the strings anymore,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28473
diff changeset
4937 end_match_2). */
d40a7f046efe (re_match_2_internal): Don't shorten the strings anymore,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28473
diff changeset
4938 end_match_2 = end_match_1;
d40a7f046efe (re_match_2_internal): Don't shorten the strings anymore,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28473
diff changeset
4939 }
d40a7f046efe (re_match_2_internal): Don't shorten the strings anymore,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28473
diff changeset
4940 else
29296
b2c75746a989 (PREFETCH_NOLIMIT): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29194
diff changeset
4941 { /* It's important to use this code when stop == size so that
b2c75746a989 (PREFETCH_NOLIMIT): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29194
diff changeset
4942 moving `d' from end1 to string2 will not prevent the d == dend
b2c75746a989 (PREFETCH_NOLIMIT): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29194
diff changeset
4943 check from catching the end of string. */
28662
d40a7f046efe (re_match_2_internal): Don't shorten the strings anymore,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28473
diff changeset
4944 end_match_1 = end1;
d40a7f046efe (re_match_2_internal): Don't shorten the strings anymore,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28473
diff changeset
4945 end_match_2 = string2 + stop - size1;
d40a7f046efe (re_match_2_internal): Don't shorten the strings anymore,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28473
diff changeset
4946 }
d40a7f046efe (re_match_2_internal): Don't shorten the strings anymore,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28473
diff changeset
4947 d = string1 + pos;
d40a7f046efe (re_match_2_internal): Don't shorten the strings anymore,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28473
diff changeset
4948 dend = end_match_1;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4949 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4950
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4951 DEBUG_PRINT1 ("The compiled pattern is: ");
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4952 DEBUG_PRINT_COMPILED_PATTERN (bufp, p, pend);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4953 DEBUG_PRINT1 ("The string to match is: `");
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4954 DEBUG_PRINT_DOUBLE_STRING (d, string1, size1, string2, size2);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4955 DEBUG_PRINT1 ("'\n");
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
4956
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4957 /* This loops over pattern commands. It exits by returning from the
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4958 function if the match is complete, or it drops through if the match
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4959 fails at this starting point in the input data. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4960 for (;;)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4961 {
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
4962 DEBUG_PRINT2 ("\n%p: ", p);
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4963
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4964 if (p == pend)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4965 { /* End of pattern means we might have succeeded. */
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4966 DEBUG_PRINT1 ("end of pattern ... ");
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
4967
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4968 /* If we haven't matched the entire string, and we want the
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4969 longest match, try backtracking. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4970 if (d != end_match_2)
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4971 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4972 /* 1 if this match ends in the same string (string1 or string2)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4973 as the best previous match. */
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
4974 boolean same_str_p = (FIRST_STRING_P (match_end)
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
4975 == FIRST_STRING_P (d));
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4976 /* 1 if this match is the best seen so far. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4977 boolean best_match_p;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4978
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4979 /* AIX compiler got confused when this was combined
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4980 with the previous declaration. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4981 if (same_str_p)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4982 best_match_p = d > match_end;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4983 else
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
4984 best_match_p = !FIRST_STRING_P (d);
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
4985
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4986 DEBUG_PRINT1 ("backtracking.\n");
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4987
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4988 if (!FAIL_STACK_EMPTY ())
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4989 { /* More failure points to try. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4990
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4991 /* If exceeds best match so far, save it. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4992 if (!best_regs_set || best_match_p)
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4993 {
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4994 best_regs_set = true;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4995 match_end = d;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4996
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4997 DEBUG_PRINT1 ("\nSAVING match as best so far.\n");
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
4998
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
4999 for (reg = 1; reg < num_regs; reg++)
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5000 {
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
5001 best_regstart[reg] = regstart[reg];
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
5002 best_regend[reg] = regend[reg];
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5003 }
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5004 }
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5005 goto fail;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5006 }
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5007
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5008 /* If no failure points, don't restore garbage. And if
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5009 last match is real best match, don't restore second
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5010 best one. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5011 else if (best_regs_set && !best_match_p)
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5012 {
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5013 restore_best_regs:
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5014 /* Restore best match. It may happen that `dend ==
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5015 end_match_1' while the restored d is in string2.
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5016 For example, the pattern `x.*y.*z' against the
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5017 strings `x-' and `y-z-', if the two strings are
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5018 not consecutive in memory. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5019 DEBUG_PRINT1 ("Restoring best registers.\n");
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5020
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5021 d = match_end;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5022 dend = ((d >= string1 && d <= end1)
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5023 ? end_match_1 : end_match_2);
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5024
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
5025 for (reg = 1; reg < num_regs; reg++)
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5026 {
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
5027 regstart[reg] = best_regstart[reg];
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
5028 regend[reg] = best_regend[reg];
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5029 }
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5030 }
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5031 } /* d != end_match_2 */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5032
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5033 succeed_label:
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5034 DEBUG_PRINT1 ("Accepting match.\n");
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5035
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5036 /* If caller wants register contents data back, do it. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5037 if (regs && !bufp->no_sub)
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5038 {
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5039 /* Have the register data arrays been allocated? */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5040 if (bufp->regs_allocated == REGS_UNALLOCATED)
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5041 { /* No. So allocate them with malloc. We need one
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5042 extra element beyond `num_regs' for the `-1' marker
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5043 GNU code uses. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5044 regs->num_regs = MAX (RE_NREGS, num_regs + 1);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5045 regs->start = TALLOC (regs->num_regs, regoff_t);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5046 regs->end = TALLOC (regs->num_regs, regoff_t);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5047 if (regs->start == NULL || regs->end == NULL)
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5048 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5049 FREE_VARIABLES ();
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5050 return -2;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5051 }
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5052 bufp->regs_allocated = REGS_REALLOCATE;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5053 }
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5054 else if (bufp->regs_allocated == REGS_REALLOCATE)
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5055 { /* Yes. If we need more elements than were already
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5056 allocated, reallocate them. If we need fewer, just
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5057 leave it alone. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5058 if (regs->num_regs < num_regs + 1)
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5059 {
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5060 regs->num_regs = num_regs + 1;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5061 RETALLOC (regs->start, regs->num_regs, regoff_t);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5062 RETALLOC (regs->end, regs->num_regs, regoff_t);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5063 if (regs->start == NULL || regs->end == NULL)
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5064 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5065 FREE_VARIABLES ();
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5066 return -2;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5067 }
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5068 }
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5069 }
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5070 else
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5071 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5072 /* These braces fend off a "empty body in an else-statement"
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5073 warning under GCC when assert expands to nothing. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5074 assert (bufp->regs_allocated == REGS_FIXED);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5075 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5076
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5077 /* Convert the pointer data in `regstart' and `regend' to
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5078 indices. Register zero has to be set differently,
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5079 since we haven't kept track of any info for it. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5080 if (regs->num_regs > 0)
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5081 {
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5082 regs->start[0] = pos;
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
5083 regs->end[0] = POINTER_TO_OFFSET (d);
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5084 }
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5085
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5086 /* Go through the first `min (num_regs, regs->num_regs)'
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5087 registers, since that is all we initialized. */
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
5088 for (reg = 1; reg < MIN (num_regs, regs->num_regs); reg++)
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5089 {
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
5090 if (REG_UNSET (regstart[reg]) || REG_UNSET (regend[reg]))
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
5091 regs->start[reg] = regs->end[reg] = -1;
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5092 else
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5093 {
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
5094 regs->start[reg]
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
5095 = (regoff_t) POINTER_TO_OFFSET (regstart[reg]);
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
5096 regs->end[reg]
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
5097 = (regoff_t) POINTER_TO_OFFSET (regend[reg]);
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5098 }
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5099 }
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
5100
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5101 /* If the regs structure we return has more elements than
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5102 were in the pattern, set the extra elements to -1. If
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5103 we (re)allocated the registers, this is the case,
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5104 because we always allocate enough to have at least one
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5105 -1 at the end. */
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
5106 for (reg = num_regs; reg < regs->num_regs; reg++)
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
5107 regs->start[reg] = regs->end[reg] = -1;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5108 } /* regs && !bufp->no_sub */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5109
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5110 DEBUG_PRINT4 ("%u failure points pushed, %u popped (%u remain).\n",
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5111 nfailure_points_pushed, nfailure_points_popped,
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5112 nfailure_points_pushed - nfailure_points_popped);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5113 DEBUG_PRINT2 ("%u registers pushed.\n", num_regs_pushed);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5114
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
5115 mcnt = POINTER_TO_OFFSET (d) - pos;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5116
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5117 DEBUG_PRINT2 ("Returning %d from re_match_2.\n", mcnt);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5118
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5119 FREE_VARIABLES ();
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5120 return mcnt;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5121 }
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5122
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5123 /* Otherwise match next pattern command. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5124 switch (SWITCH_ENUM_CAST ((re_opcode_t) *p++))
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5125 {
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5126 /* Ignore these. Used to ignore the n of succeed_n's which
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5127 currently have n == 0. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5128 case no_op:
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5129 DEBUG_PRINT1 ("EXECUTING no_op.\n");
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5130 break;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5131
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5132 case succeed:
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5133 DEBUG_PRINT1 ("EXECUTING succeed.\n");
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5134 goto succeed_label;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5135
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5136 /* Match the next n pattern characters exactly. The following
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5137 byte in the pattern defines n, and the n bytes after that
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5138 are the characters to match. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5139 case exactn:
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5140 mcnt = *p++;
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5141 DEBUG_PRINT2 ("EXECUTING exactn %d.\n", mcnt);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5142
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
5143 /* Remember the start point to rollback upon failure. */
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
5144 dfail = d;
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
5145
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5146 /* This is written out as an if-else so we don't waste time
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5147 testing `translate' inside the loop. */
21562
afd0a04106ec Use RE_TRANSLATE_P to check whether translation is
Andreas Schwab <schwab@suse.de>
parents: 21558
diff changeset
5148 if (RE_TRANSLATE_P (translate))
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5149 {
21348
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5150 if (multibyte)
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5151 do
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5152 {
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5153 int pat_charlen, buf_charlen;
21401
7afa39c82ea2 (re_match_2_internal): Declare buf_ch unsigned int.
Richard M. Stallman <rms@gnu.org>
parents: 21352
diff changeset
5154 unsigned int pat_ch, buf_ch;
21348
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5155
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5156 PREFETCH ();
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5157 pat_ch = STRING_CHAR_AND_LENGTH (p, pend - p, pat_charlen);
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5158 buf_ch = STRING_CHAR_AND_LENGTH (d, dend - d, buf_charlen);
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5159
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5160 if (RE_TRANSLATE (translate, buf_ch)
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5161 != pat_ch)
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
5162 {
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
5163 d = dfail;
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
5164 goto fail;
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
5165 }
21348
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5166
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5167 p += pat_charlen;
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5168 d += buf_charlen;
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5169 mcnt -= pat_charlen;
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5170 }
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5171 while (mcnt > 0);
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5172 else
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5173 do
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5174 {
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5175 PREFETCH ();
28138
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
5176 if (RE_TRANSLATE (translate, *d) != *p++)
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
5177 {
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
5178 d = dfail;
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
5179 goto fail;
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
5180 }
22237
566c88b62de6 (re_search_2): Don't use ++ inside RE_TRANSLATE.
Richard M. Stallman <rms@gnu.org>
parents: 21963
diff changeset
5181 d++;
21348
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5182 }
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5183 while (--mcnt);
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5184 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5185 else
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5186 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5187 do
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5188 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5189 PREFETCH ();
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
5190 if (*d++ != *p++)
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
5191 {
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
5192 d = dfail;
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
5193 goto fail;
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
5194 }
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5195 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5196 while (--mcnt);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5197 }
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5198 break;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5199
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5200
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5201 /* Match any character except possibly a newline or a null. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5202 case anychar:
21348
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5203 {
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5204 int buf_charlen;
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
5205 re_wchar_t buf_ch;
21348
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5206
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5207 DEBUG_PRINT1 ("EXECUTING anychar.\n");
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5208
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5209 PREFETCH ();
28473
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
5210 buf_ch = RE_STRING_CHAR_AND_LENGTH (d, dend - d, buf_charlen);
21348
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5211 buf_ch = TRANSLATE (buf_ch);
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5212
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5213 if ((!(bufp->syntax & RE_DOT_NEWLINE)
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5214 && buf_ch == '\n')
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5215 || ((bufp->syntax & RE_DOT_NOT_NULL)
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5216 && buf_ch == '\000'))
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5217 goto fail;
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5218
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5219 DEBUG_PRINT2 (" Matched `%d'.\n", *d);
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5220 d += buf_charlen;
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5221 }
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5222 break;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5223
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5224
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5225 case charset:
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5226 case charset_not:
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5227 {
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5228 register unsigned int c;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5229 boolean not = (re_opcode_t) *(p - 1) == charset_not;
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5230 int len;
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5231
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5232 /* Start of actual range_table, or end of bitmap if there is no
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5233 range table. */
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
5234 re_char *range_table;
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5235
25440
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
5236 /* Nonzero if there is a range table. */
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5237 int range_table_exists;
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5238
25440
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
5239 /* Number of ranges of range table. This is not included
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
5240 in the initial byte-length of the command. */
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
5241 int count = 0;
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5242
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5243 DEBUG_PRINT2 ("EXECUTING charset%s.\n", not ? "_not" : "");
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5244
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5245 range_table_exists = CHARSET_RANGE_TABLE_EXISTS_P (&p[-1]);
25440
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
5246
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5247 if (range_table_exists)
25440
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
5248 {
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
5249 range_table = CHARSET_RANGE_TABLE (&p[-1]); /* Past the bitmap. */
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
5250 EXTRACT_NUMBER_AND_INCR (count, range_table);
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
5251 }
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5252
28473
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
5253 PREFETCH ();
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
5254 c = RE_STRING_CHAR_AND_LENGTH (d, dend - d, len);
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
5255 c = TRANSLATE (c); /* The character to match. */
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5256
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5257 if (SINGLE_BYTE_CHAR_P (c))
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5258 { /* Lookup bitmap. */
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5259 /* Cast to `unsigned' instead of `unsigned char' in
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5260 case the bit list is a full 32 bytes long. */
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5261 if (c < (unsigned) (CHARSET_BITMAP_SIZE (&p[-1]) * BYTEWIDTH)
25440
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
5262 && p[1 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH)))
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
5263 not = !not;
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5264 }
25440
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
5265 #ifdef emacs
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5266 else if (range_table_exists)
25440
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
5267 {
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
5268 int class_bits = CHARSET_RANGE_TABLE_BITS (&p[-1]);
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
5269
31360
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
5270 if ( (class_bits & BIT_LOWER && ISLOWER (c))
b8513fe83893 (WIDE_CHAR_SUPPORT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31312
diff changeset
5271 | (class_bits & BIT_MULTIBYTE)
25440
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
5272 | (class_bits & BIT_PUNCT && ISPUNCT (c))
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
5273 | (class_bits & BIT_SPACE && ISSPACE (c))
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
5274 | (class_bits & BIT_UPPER && ISUPPER (c))
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
5275 | (class_bits & BIT_WORD && ISWORD (c)))
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
5276 not = !not;
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
5277 else
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
5278 CHARSET_LOOKUP_RANGE_TABLE_RAW (not, c, range_table, count);
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
5279 }
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
5280 #endif /* emacs */
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
5281
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
5282 if (range_table_exists)
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
5283 p = CHARSET_RANGE_TABLE_END (range_table, count);
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
5284 else
0a1099580297 [emacs]: Handle character classes for multibyte chars:
Richard M. Stallman <rms@gnu.org>
parents: 24119
diff changeset
5285 p += CHARSET_BITMAP_SIZE (&p[-1]) + 1;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5286
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5287 if (!not) goto fail;
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
5288
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5289 d += len;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5290 break;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5291 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5292
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5293
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5294 /* The beginning of a group is represented by start_memory.
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5295 The argument is the register number. The text
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5296 matched within the group is recorded (in the internal
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5297 registers data structure) under the register number. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5298 case start_memory:
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5299 DEBUG_PRINT2 ("EXECUTING start_memory %d:\n", *p);
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5300
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5301 /* In case we need to undo this operation (via backtracking). */
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5302 PUSH_FAILURE_REG ((unsigned int)*p);
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5303
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5304 regstart[*p] = d;
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
5305 regend[*p] = NULL; /* probably unnecessary. -sm */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5306 DEBUG_PRINT2 (" regstart: %d\n", POINTER_TO_OFFSET (regstart[*p]));
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5307
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5308 /* Move past the register number and inner group count. */
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5309 p += 1;
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5310 break;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5311
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5312
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5313 /* The stop_memory opcode represents the end of a group. Its
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5314 argument is the same as start_memory's: the register number. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5315 case stop_memory:
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5316 DEBUG_PRINT2 ("EXECUTING stop_memory %d:\n", *p);
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5317
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5318 assert (!REG_UNSET (regstart[*p]));
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5319 /* Strictly speaking, there should be code such as:
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49276
diff changeset
5320
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
5321 assert (REG_UNSET (regend[*p]));
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5322 PUSH_FAILURE_REGSTOP ((unsigned int)*p);
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5323
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5324 But the only info to be pushed is regend[*p] and it is known to
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5325 be UNSET, so there really isn't anything to push.
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5326 Not pushing anything, on the other hand deprives us from the
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5327 guarantee that regend[*p] is UNSET since undoing this operation
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5328 will not reset its value properly. This is not important since
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5329 the value will only be read on the next start_memory or at
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5330 the very end and both events can only happen if this stop_memory
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5331 is *not* undone. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5332
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5333 regend[*p] = d;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5334 DEBUG_PRINT2 (" regend: %d\n", POINTER_TO_OFFSET (regend[*p]));
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5335
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5336 /* Move past the register number and the inner group count. */
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5337 p += 1;
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5338 break;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5339
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5340
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5341 /* \<digit> has been turned into a `duplicate' command which is
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5342 followed by the numeric value of <digit> as the register number. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5343 case duplicate:
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5344 {
28138
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
5345 register re_char *d2, *dend2;
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5346 int regno = *p++; /* Get which register to match against. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5347 DEBUG_PRINT2 ("EXECUTING duplicate %d.\n", regno);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5348
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5349 /* Can't back reference a group which we've never matched. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5350 if (REG_UNSET (regstart[regno]) || REG_UNSET (regend[regno]))
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5351 goto fail;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5352
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5353 /* Where in input to try to start matching. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5354 d2 = regstart[regno];
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5355
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
5356 /* Remember the start point to rollback upon failure. */
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
5357 dfail = d;
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
5358
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5359 /* Where to stop matching; if both the place to start and
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5360 the place to stop matching are in the same string, then
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5361 set to the place to stop, otherwise, for now have to use
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5362 the end of the first string. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5363
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5364 dend2 = ((FIRST_STRING_P (regstart[regno])
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5365 == FIRST_STRING_P (regend[regno]))
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5366 ? regend[regno] : end_match_1);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5367 for (;;)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5368 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5369 /* If necessary, advance to next segment in register
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5370 contents. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5371 while (d2 == dend2)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5372 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5373 if (dend2 == end_match_2) break;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5374 if (dend2 == regend[regno]) break;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5375
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5376 /* End of string1 => advance to string2. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5377 d2 = string2;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5378 dend2 = regend[regno];
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5379 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5380 /* At end of register contents => success */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5381 if (d2 == dend2) break;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5382
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5383 /* If necessary, advance to next segment in data. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5384 PREFETCH ();
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5385
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5386 /* How many characters left in this segment to match. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5387 mcnt = dend - d;
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
5388
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5389 /* Want how many consecutive characters we can match in
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5390 one shot, so, if necessary, adjust the count. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5391 if (mcnt > dend2 - d2)
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5392 mcnt = dend2 - d2;
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
5393
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5394 /* Compare that many; failure if mismatch, else move
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5395 past them. */
21562
afd0a04106ec Use RE_TRANSLATE_P to check whether translation is
Andreas Schwab <schwab@suse.de>
parents: 21558
diff changeset
5396 if (RE_TRANSLATE_P (translate)
28473
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
5397 ? bcmp_translate (d, d2, mcnt, translate, multibyte)
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
5398 : memcmp (d, d2, mcnt))
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
5399 {
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
5400 d = dfail;
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
5401 goto fail;
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
5402 }
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5403 d += mcnt, d2 += mcnt;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5404 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5405 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5406 break;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5407
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5408
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5409 /* begline matches the empty string at the beginning of the string
31312
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
5410 (unless `not_bol' is set in `bufp'), and after newlines. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5411 case begline:
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5412 DEBUG_PRINT1 ("EXECUTING begline.\n");
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5413
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5414 if (AT_STRINGS_BEG (d))
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5415 {
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5416 if (!bufp->not_bol) break;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5417 }
28662
d40a7f046efe (re_match_2_internal): Don't shorten the strings anymore,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28473
diff changeset
5418 else
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5419 {
28662
d40a7f046efe (re_match_2_internal): Don't shorten the strings anymore,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28473
diff changeset
5420 unsigned char c;
d40a7f046efe (re_match_2_internal): Don't shorten the strings anymore,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28473
diff changeset
5421 GET_CHAR_BEFORE_2 (c, d, string1, end1, string2, end2);
31312
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
5422 if (c == '\n')
28662
d40a7f046efe (re_match_2_internal): Don't shorten the strings anymore,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28473
diff changeset
5423 break;
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5424 }
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5425 /* In all other cases, we fail. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5426 goto fail;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5427
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5428
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5429 /* endline is the dual of begline. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5430 case endline:
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5431 DEBUG_PRINT1 ("EXECUTING endline.\n");
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5432
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5433 if (AT_STRINGS_END (d))
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5434 {
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5435 if (!bufp->not_eol) break;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5436 }
29296
b2c75746a989 (PREFETCH_NOLIMIT): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29194
diff changeset
5437 else
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5438 {
29296
b2c75746a989 (PREFETCH_NOLIMIT): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29194
diff changeset
5439 PREFETCH_NOLIMIT ();
31312
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
5440 if (*d == '\n')
29296
b2c75746a989 (PREFETCH_NOLIMIT): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29194
diff changeset
5441 break;
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5442 }
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5443 goto fail;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5444
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5445
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5446 /* Match at the very beginning of the data. */
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5447 case begbuf:
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5448 DEBUG_PRINT1 ("EXECUTING begbuf.\n");
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5449 if (AT_STRINGS_BEG (d))
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5450 break;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5451 goto fail;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5452
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5453
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5454 /* Match at the very end of the data. */
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5455 case endbuf:
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5456 DEBUG_PRINT1 ("EXECUTING endbuf.\n");
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5457 if (AT_STRINGS_END (d))
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5458 break;
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5459 goto fail;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5460
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5461
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5462 /* on_failure_keep_string_jump is used to optimize `.*\n'. It
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5463 pushes NULL as the value for the string on the stack. Then
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5464 `POP_FAILURE_POINT' will keep the current value for the
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5465 string, instead of restoring it. To see why, consider
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5466 matching `foo\nbar' against `.*\n'. The .* matches the foo;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5467 then the . fails against the \n. But the next thing we want
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5468 to do is match the \n against the \n; if we restored the
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5469 string value, we would be back at the foo.
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5470
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5471 Because this is used only in specific cases, we don't need to
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5472 check all the things that `on_failure_jump' does, to make
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5473 sure the right things get saved on the stack. Hence we don't
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5474 share its code. The only reason to push anything on the
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5475 stack at all is that otherwise we would have to change
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5476 `anychar's code to do something besides goto fail in this
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5477 case; that seems worse than this. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5478 case on_failure_keep_string_jump:
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5479 EXTRACT_NUMBER_AND_INCR (mcnt, p);
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5480 DEBUG_PRINT3 ("EXECUTING on_failure_keep_string_jump %d (to %p):\n",
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5481 mcnt, p + mcnt);
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5482
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5483 PUSH_FAILURE_POINT (p - 3, NULL);
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5484 break;
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5485
28342
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
5486 /* A nasty loop is introduced by the non-greedy *? and +?.
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
5487 With such loops, the stack only ever contains one failure point
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
5488 at a time, so that a plain on_failure_jump_loop kind of
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
5489 cycle detection cannot work. Worse yet, such a detection
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
5490 can not only fail to detect a cycle, but it can also wrongly
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
5491 detect a cycle (between different instantiations of the same
47368
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
5492 loop).
28342
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
5493 So the method used for those nasty loops is a little different:
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
5494 We use a special cycle-detection-stack-frame which is pushed
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
5495 when the on_failure_jump_nastyloop failure-point is *popped*.
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
5496 This special frame thus marks the beginning of one iteration
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
5497 through the loop and we can hence easily check right here
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
5498 whether something matched between the beginning and the end of
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
5499 the loop. */
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
5500 case on_failure_jump_nastyloop:
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
5501 EXTRACT_NUMBER_AND_INCR (mcnt, p);
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
5502 DEBUG_PRINT3 ("EXECUTING on_failure_jump_nastyloop %d (to %p):\n",
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
5503 mcnt, p + mcnt);
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
5504
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
5505 assert ((re_opcode_t)p[-4] == no_op);
47368
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
5506 {
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
5507 int cycle = 0;
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
5508 CHECK_INFINITE_LOOP (p - 4, d);
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
5509 if (!cycle)
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
5510 /* If there's a cycle, just continue without pushing
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
5511 this failure point. The failure point is the "try again"
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
5512 option, which shouldn't be tried.
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
5513 We want (x?)*?y\1z to match both xxyz and xxyxz. */
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
5514 PUSH_FAILURE_POINT (p - 3, d);
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
5515 }
28342
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
5516 break;
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
5517
28203
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
5518 /* Simple loop detecting on_failure_jump: just check on the
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
5519 failure stack if the same spot was already hit earlier. */
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5520 case on_failure_jump_loop:
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5521 on_failure:
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5522 EXTRACT_NUMBER_AND_INCR (mcnt, p);
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5523 DEBUG_PRINT3 ("EXECUTING on_failure_jump_loop %d (to %p):\n",
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5524 mcnt, p + mcnt);
47368
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
5525 {
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
5526 int cycle = 0;
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
5527 CHECK_INFINITE_LOOP (p - 3, d);
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
5528 if (cycle)
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
5529 /* If there's a cycle, get out of the loop, as if the matching
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
5530 had failed. We used to just `goto fail' here, but that was
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
5531 aborting the search a bit too early: we want to keep the
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
5532 empty-loop-match and keep matching after the loop.
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
5533 We want (x?)*y\1z to match both xxyz and xxyxz. */
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
5534 p += mcnt;
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
5535 else
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
5536 PUSH_FAILURE_POINT (p - 3, d);
3f5cad2781e7 (DISCARD_FAILURE_REG_OR_COUNT): Delete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47337
diff changeset
5537 }
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5538 break;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5539
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5540
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5541 /* Uses of on_failure_jump:
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
5542
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5543 Each alternative starts with an on_failure_jump that points
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5544 to the beginning of the next alternative. Each alternative
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5545 except the last ends with a jump that in effect jumps past
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5546 the rest of the alternatives. (They really jump to the
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5547 ending jump of the following alternative, because tensioning
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5548 these jumps is a hassle.)
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5549
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5550 Repeats start with an on_failure_jump that points past both
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5551 the repetition text and either the following jump or
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5552 pop_failure_jump back to this on_failure_jump. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5553 case on_failure_jump:
32823
2a7f61d7ae12 (IMMEDIATE_QUIT_CHECK): New macro, which does QUIT on
Andrew Innes <andrewi@gnu.org>
parents: 32805
diff changeset
5554 IMMEDIATE_QUIT_CHECK;
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5555 EXTRACT_NUMBER_AND_INCR (mcnt, p);
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5556 DEBUG_PRINT3 ("EXECUTING on_failure_jump %d (to %p):\n",
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5557 mcnt, p + mcnt);
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5558
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5559 PUSH_FAILURE_POINT (p -3, d);
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5560 break;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5561
28203
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
5562 /* This operation is used for greedy *.
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5563 Compare the beginning of the repeat with what in the
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5564 pattern follows its end. If we can establish that there
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5565 is nothing that they would both match, i.e., that we
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5566 would have to backtrack because of (as in, e.g., `a*a')
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5567 then we can use a non-backtracking loop based on
28203
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
5568 on_failure_keep_string_jump instead of on_failure_jump. */
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5569 case on_failure_jump_smart:
32823
2a7f61d7ae12 (IMMEDIATE_QUIT_CHECK): New macro, which does QUIT on
Andrew Innes <andrewi@gnu.org>
parents: 32805
diff changeset
5570 IMMEDIATE_QUIT_CHECK;
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5571 EXTRACT_NUMBER_AND_INCR (mcnt, p);
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5572 DEBUG_PRINT3 ("EXECUTING on_failure_jump_smart %d (to %p).\n",
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5573 mcnt, p + mcnt);
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5574 {
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
5575 re_char *p1 = p; /* Next operation. */
32954
f77e6c51dd07 (POP_FAILURE_REG_OR_COUNT, re_match_2_internal)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32891
diff changeset
5576 /* Here, we discard `const', making re_match non-reentrant. */
f77e6c51dd07 (POP_FAILURE_REG_OR_COUNT, re_match_2_internal)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32891
diff changeset
5577 unsigned char *p2 = (unsigned char*) p + mcnt; /* Jump dest. */
f77e6c51dd07 (POP_FAILURE_REG_OR_COUNT, re_match_2_internal)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32891
diff changeset
5578 unsigned char *p3 = (unsigned char*) p - 3; /* opcode location. */
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5579
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5580 p -= 3; /* Reset so that we will re-execute the
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5581 instruction once it's been changed. */
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5582
28203
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
5583 EXTRACT_NUMBER (mcnt, p2 - 2);
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
5584
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
5585 /* Ensure this is a indeed the trivial kind of loop
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
5586 we are expecting. */
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
5587 assert (skip_one_char (p1) == p2 - 3);
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
5588 assert ((re_opcode_t) p2[-3] == jump && p2 + mcnt == p);
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
5589 DEBUG_STATEMENT (debug += 2);
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5590 if (mutually_exclusive_p (bufp, p1, p2))
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5591 {
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5592 /* Use a fast `on_failure_keep_string_jump' loop. */
28203
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
5593 DEBUG_PRINT1 (" smart exclusive => fast loop.\n");
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
5594 *p3 = (unsigned char) on_failure_keep_string_jump;
28203
c10ee0e6982b (RE_STRING_CHAR): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28163
diff changeset
5595 STORE_NUMBER (p2 - 2, mcnt + 3);
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5596 }
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5597 else
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5598 {
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5599 /* Default to a safe `on_failure_jump' loop. */
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5600 DEBUG_PRINT1 (" smart default => slow loop.\n");
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
5601 *p3 = (unsigned char) on_failure_jump;
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5602 }
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
5603 DEBUG_STATEMENT (debug -= 2);
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5604 }
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5605 break;
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5606
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5607 /* Unconditionally jump (without popping any failure points). */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5608 case jump:
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5609 unconditional_jump:
32823
2a7f61d7ae12 (IMMEDIATE_QUIT_CHECK): New macro, which does QUIT on
Andrew Innes <andrewi@gnu.org>
parents: 32805
diff changeset
5610 IMMEDIATE_QUIT_CHECK;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5611 EXTRACT_NUMBER_AND_INCR (mcnt, p); /* Get the amount to jump. */
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5612 DEBUG_PRINT2 ("EXECUTING jump %d ", mcnt);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5613 p += mcnt; /* Do the jump. */
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5614 DEBUG_PRINT2 ("(to %p).\n", p);
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5615 break;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5616
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5617
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5618 /* Have to succeed matching what follows at least n times.
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5619 After that, handle like `on_failure_jump'. */
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5620 case succeed_n:
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
5621 /* Signedness doesn't matter since we only compare MCNT to 0. */
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5622 EXTRACT_NUMBER (mcnt, p + 2);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5623 DEBUG_PRINT2 ("EXECUTING succeed_n %d.\n", mcnt);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5624
31172
0ee53ec2081a (PUSH_FAILURE_COUNT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30752
diff changeset
5625 /* Originally, mcnt is how many times we HAVE to succeed. */
0ee53ec2081a (PUSH_FAILURE_COUNT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30752
diff changeset
5626 if (mcnt != 0)
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5627 {
32954
f77e6c51dd07 (POP_FAILURE_REG_OR_COUNT, re_match_2_internal)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32891
diff changeset
5628 /* Here, we discard `const', making re_match non-reentrant. */
f77e6c51dd07 (POP_FAILURE_REG_OR_COUNT, re_match_2_internal)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32891
diff changeset
5629 unsigned char *p2 = (unsigned char*) p + 2; /* counter loc. */
31172
0ee53ec2081a (PUSH_FAILURE_COUNT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30752
diff changeset
5630 mcnt--;
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
5631 p += 4;
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
5632 PUSH_NUMBER (p2, mcnt);
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5633 }
31172
0ee53ec2081a (PUSH_FAILURE_COUNT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30752
diff changeset
5634 else
0ee53ec2081a (PUSH_FAILURE_COUNT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30752
diff changeset
5635 /* The two bytes encoding mcnt == 0 are two no_op opcodes. */
0ee53ec2081a (PUSH_FAILURE_COUNT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30752
diff changeset
5636 goto on_failure;
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5637 break;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5638
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5639 case jump_n:
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
5640 /* Signedness doesn't matter since we only compare MCNT to 0. */
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5641 EXTRACT_NUMBER (mcnt, p + 2);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5642 DEBUG_PRINT2 ("EXECUTING jump_n %d.\n", mcnt);
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5643
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5644 /* Originally, this is how many times we CAN jump. */
31172
0ee53ec2081a (PUSH_FAILURE_COUNT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30752
diff changeset
5645 if (mcnt != 0)
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5646 {
32954
f77e6c51dd07 (POP_FAILURE_REG_OR_COUNT, re_match_2_internal)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32891
diff changeset
5647 /* Here, we discard `const', making re_match non-reentrant. */
f77e6c51dd07 (POP_FAILURE_REG_OR_COUNT, re_match_2_internal)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32891
diff changeset
5648 unsigned char *p2 = (unsigned char*) p + 2; /* counter loc. */
31172
0ee53ec2081a (PUSH_FAILURE_COUNT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30752
diff changeset
5649 mcnt--;
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
5650 PUSH_NUMBER (p2, mcnt);
31172
0ee53ec2081a (PUSH_FAILURE_COUNT): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30752
diff changeset
5651 goto unconditional_jump;
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5652 }
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5653 /* If don't have to jump any more, skip over the rest of command. */
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
5654 else
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
5655 p += 4;
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5656 break;
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
5657
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5658 case set_number_at:
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5659 {
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
5660 unsigned char *p2; /* Location of the counter. */
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5661 DEBUG_PRINT1 ("EXECUTING set_number_at.\n");
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5662
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5663 EXTRACT_NUMBER_AND_INCR (mcnt, p);
32954
f77e6c51dd07 (POP_FAILURE_REG_OR_COUNT, re_match_2_internal)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32891
diff changeset
5664 /* Here, we discard `const', making re_match non-reentrant. */
f77e6c51dd07 (POP_FAILURE_REG_OR_COUNT, re_match_2_internal)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32891
diff changeset
5665 p2 = (unsigned char*) p + mcnt;
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
5666 /* Signedness doesn't matter since we only copy MCNT's bits . */
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5667 EXTRACT_NUMBER_AND_INCR (mcnt, p);
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
5668 DEBUG_PRINT3 (" Setting %p to %d.\n", p2, mcnt);
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
5669 PUSH_NUMBER (p2, mcnt);
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5670 break;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5671 }
13722
e2669b8a46e2 (AT_WORD_BOUNDARY): Disable macro.
Karl Heuer <kwzh@gnu.org>
parents: 13565
diff changeset
5672
e2669b8a46e2 (AT_WORD_BOUNDARY): Disable macro.
Karl Heuer <kwzh@gnu.org>
parents: 13565
diff changeset
5673 case wordbound:
28138
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
5674 case notwordbound:
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
5675 not = (re_opcode_t) *(p - 1) == notwordbound;
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
5676 DEBUG_PRINT2 ("EXECUTING %swordbound.\n", not?"not":"");
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5677
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
5678 /* We SUCCEED (or FAIL) in one of the following cases: */
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5679
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5680 /* Case 1: D is at the beginning or the end of string. */
13722
e2669b8a46e2 (AT_WORD_BOUNDARY): Disable macro.
Karl Heuer <kwzh@gnu.org>
parents: 13565
diff changeset
5681 if (AT_STRINGS_BEG (d) || AT_STRINGS_END (d))
28138
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
5682 not = !not;
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5683 else
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5684 {
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5685 /* C1 is the character before D, S1 is the syntax of C1, C2
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5686 is the character at D, and S2 is the syntax of C2. */
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
5687 re_wchar_t c1, c2;
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
5688 int s1, s2;
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5689 #ifdef emacs
28473
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
5690 int offset = PTR_TO_OFFSET (d - 1);
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
5691 int charpos = SYNTAX_TABLE_BYTE_TO_CHAR (offset);
20633
063756386696 (re_search_2): Fix call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents: 20455
diff changeset
5692 UPDATE_SYNTAX_TABLE (charpos);
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5693 #endif
28138
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
5694 GET_CHAR_BEFORE_2 (c1, d, string1, end1, string2, end2);
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5695 s1 = SYNTAX (c1);
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5696 #ifdef emacs
20633
063756386696 (re_search_2): Fix call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents: 20455
diff changeset
5697 UPDATE_SYNTAX_TABLE_FORWARD (charpos + 1);
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5698 #endif
29296
b2c75746a989 (PREFETCH_NOLIMIT): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29194
diff changeset
5699 PREFETCH_NOLIMIT ();
28473
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
5700 c2 = RE_STRING_CHAR (d, dend - d);
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5701 s2 = SYNTAX (c2);
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5702
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5703 if (/* Case 2: Only one of S1 and S2 is Sword. */
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5704 ((s1 == Sword) != (s2 == Sword))
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5705 /* Case 3: Both of S1 and S2 are Sword, and macro
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5706 WORD_BOUNDARY_P (C1, C2) returns nonzero. */
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5707 || ((s1 == Sword) && WORD_BOUNDARY_P (c1, c2)))
28138
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
5708 not = !not;
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
5709 }
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
5710 if (not)
13722
e2669b8a46e2 (AT_WORD_BOUNDARY): Disable macro.
Karl Heuer <kwzh@gnu.org>
parents: 13565
diff changeset
5711 break;
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5712 else
13722
e2669b8a46e2 (AT_WORD_BOUNDARY): Disable macro.
Karl Heuer <kwzh@gnu.org>
parents: 13565
diff changeset
5713 goto fail;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5714
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5715 case wordbeg:
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5716 DEBUG_PRINT1 ("EXECUTING wordbeg.\n");
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5717
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5718 /* We FAIL in one of the following cases: */
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5719
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5720 /* Case 1: D is at the end of string. */
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5721 if (AT_STRINGS_END (d))
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
5722 goto fail;
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5723 else
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5724 {
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5725 /* C1 is the character before D, S1 is the syntax of C1, C2
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5726 is the character at D, and S2 is the syntax of C2. */
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
5727 re_wchar_t c1, c2;
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
5728 int s1, s2;
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5729 #ifdef emacs
28473
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
5730 int offset = PTR_TO_OFFSET (d);
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
5731 int charpos = SYNTAX_TABLE_BYTE_TO_CHAR (offset);
20650
427fa7757472 (re_match_2_internal): Use SYNTAX_TABLE_BYTE_TO_CHAR.
Richard M. Stallman <rms@gnu.org>
parents: 20633
diff changeset
5732 UPDATE_SYNTAX_TABLE (charpos);
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5733 #endif
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
5734 PREFETCH ();
28473
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
5735 c2 = RE_STRING_CHAR (d, dend - d);
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5736 s2 = SYNTAX (c2);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49276
diff changeset
5737
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5738 /* Case 2: S2 is not Sword. */
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5739 if (s2 != Sword)
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5740 goto fail;
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5741
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5742 /* Case 3: D is not at the beginning of string ... */
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5743 if (!AT_STRINGS_BEG (d))
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5744 {
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5745 GET_CHAR_BEFORE_2 (c1, d, string1, end1, string2, end2);
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5746 #ifdef emacs
20633
063756386696 (re_search_2): Fix call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents: 20455
diff changeset
5747 UPDATE_SYNTAX_TABLE_BACKWARD (charpos - 1);
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5748 #endif
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5749 s1 = SYNTAX (c1);
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5750
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5751 /* ... and S1 is Sword, and WORD_BOUNDARY_P (C1, C2)
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5752 returns 0. */
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5753 if ((s1 == Sword) && !WORD_BOUNDARY_P (c1, c2))
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5754 goto fail;
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5755 }
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5756 }
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5757 break;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5758
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5759 case wordend:
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5760 DEBUG_PRINT1 ("EXECUTING wordend.\n");
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5761
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5762 /* We FAIL in one of the following cases: */
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5763
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5764 /* Case 1: D is at the beginning of string. */
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5765 if (AT_STRINGS_BEG (d))
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5766 goto fail;
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5767 else
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5768 {
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5769 /* C1 is the character before D, S1 is the syntax of C1, C2
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5770 is the character at D, and S2 is the syntax of C2. */
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
5771 re_wchar_t c1, c2;
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
5772 int s1, s2;
20633
063756386696 (re_search_2): Fix call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents: 20455
diff changeset
5773 #ifdef emacs
28473
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
5774 int offset = PTR_TO_OFFSET (d) - 1;
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
5775 int charpos = SYNTAX_TABLE_BYTE_TO_CHAR (offset);
20650
427fa7757472 (re_match_2_internal): Use SYNTAX_TABLE_BYTE_TO_CHAR.
Richard M. Stallman <rms@gnu.org>
parents: 20633
diff changeset
5776 UPDATE_SYNTAX_TABLE (charpos);
20633
063756386696 (re_search_2): Fix call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents: 20455
diff changeset
5777 #endif
28163
c314d747a819 (re_match_2): Fix string shortening (to fit `stop') to make sure
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28138
diff changeset
5778 GET_CHAR_BEFORE_2 (c1, d, string1, end1, string2, end2);
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5779 s1 = SYNTAX (c1);
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5780
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5781 /* Case 2: S1 is not Sword. */
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5782 if (s1 != Sword)
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5783 goto fail;
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5784
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5785 /* Case 3: D is not at the end of string ... */
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5786 if (!AT_STRINGS_END (d))
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5787 {
29296
b2c75746a989 (PREFETCH_NOLIMIT): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29194
diff changeset
5788 PREFETCH_NOLIMIT ();
28473
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
5789 c2 = RE_STRING_CHAR (d, dend - d);
20633
063756386696 (re_search_2): Fix call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents: 20455
diff changeset
5790 #ifdef emacs
063756386696 (re_search_2): Fix call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents: 20455
diff changeset
5791 UPDATE_SYNTAX_TABLE_FORWARD (charpos);
063756386696 (re_search_2): Fix call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents: 20455
diff changeset
5792 #endif
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5793 s2 = SYNTAX (c2);
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5794
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5795 /* ... and S2 is Sword, and WORD_BOUNDARY_P (C1, C2)
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5796 returns 0. */
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5797 if ((s2 == Sword) && !WORD_BOUNDARY_P (c1, c2))
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5798 goto fail;
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5799 }
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5800 }
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5801 break;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5802
28261
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
5803 case syntaxspec:
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
5804 case notsyntaxspec:
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
5805 not = (re_opcode_t) *(p - 1) == notsyntaxspec;
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
5806 mcnt = *p++;
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
5807 DEBUG_PRINT3 ("EXECUTING %ssyntaxspec %d.\n", not?"not":"", mcnt);
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
5808 PREFETCH ();
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
5809 #ifdef emacs
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
5810 {
28473
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
5811 int offset = PTR_TO_OFFSET (d);
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
5812 int pos1 = SYNTAX_TABLE_BYTE_TO_CHAR (offset);
28261
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
5813 UPDATE_SYNTAX_TABLE (pos1);
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
5814 }
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
5815 #endif
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
5816 {
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
5817 int len;
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
5818 re_wchar_t c;
28261
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
5819
28473
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
5820 c = RE_STRING_CHAR_AND_LENGTH (d, dend - d, len);
28261
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
5821
28279
24a23e27dac6 (enum syntaxcode): Provide default for non-Emacs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28268
diff changeset
5822 if ((SYNTAX (c) != (enum syntaxcode) mcnt) ^ not)
28261
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
5823 goto fail;
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
5824 d += len;
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
5825 }
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
5826 break;
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
5827
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5828 #ifdef emacs
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5829 case before_dot:
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5830 DEBUG_PRINT1 ("EXECUTING before_dot.\n");
28138
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
5831 if (PTR_BYTE_POS (d) >= PT_BYTE)
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5832 goto fail;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5833 break;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5834
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5835 case at_dot:
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5836 DEBUG_PRINT1 ("EXECUTING at_dot.\n");
28138
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
5837 if (PTR_BYTE_POS (d) != PT_BYTE)
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5838 goto fail;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5839 break;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5840
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5841 case after_dot:
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5842 DEBUG_PRINT1 ("EXECUTING after_dot.\n");
28138
d2e19a90c9ef * regex.c: Declare a new type `re_char' used throughout the code for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28062
diff changeset
5843 if (PTR_BYTE_POS (d) <= PT_BYTE)
18262
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5844 goto fail;
e5e99de79a88 Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 18260
diff changeset
5845 break;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5846
28261
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
5847 case categoryspec:
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
5848 case notcategoryspec:
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
5849 not = (re_opcode_t) *(p - 1) == notcategoryspec;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5850 mcnt = *p++;
28261
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
5851 DEBUG_PRINT3 ("EXECUTING %scategoryspec %d.\n", not?"not":"", mcnt);
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5852 PREFETCH ();
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5853 {
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
5854 int len;
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
5855 re_wchar_t c;
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
5856
28473
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
5857 c = RE_STRING_CHAR_AND_LENGTH (d, dend - d, len);
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5858
28261
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
5859 if ((!CHAR_HAS_CATEGORY (c, mcnt)) ^ not)
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5860 goto fail;
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5861 d += len;
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5862 }
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5863 break;
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5864
28261
f955117a1fcd (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE): Add default
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28203
diff changeset
5865 #endif /* emacs */
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
5866
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
5867 default:
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
5868 abort ();
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5869 }
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5870 continue; /* Successfully executed one pattern command; keep going. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5871
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5872
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5873 /* We goto here if a matching operation fails. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5874 fail:
32823
2a7f61d7ae12 (IMMEDIATE_QUIT_CHECK): New macro, which does QUIT on
Andrew Innes <andrewi@gnu.org>
parents: 32805
diff changeset
5875 IMMEDIATE_QUIT_CHECK;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5876 if (!FAIL_STACK_EMPTY ())
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5877 {
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
5878 re_char *str, *pat;
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5879 /* A restart point is known. Restore to that state. */
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
5880 DEBUG_PRINT1 ("\nFAIL:\n");
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
5881 POP_FAILURE_POINT (str, pat);
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5882 switch (SWITCH_ENUM_CAST ((re_opcode_t) *pat++))
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5883 {
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5884 case on_failure_keep_string_jump:
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5885 assert (str == NULL);
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5886 goto continue_failure_jump;
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5887
28342
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
5888 case on_failure_jump_nastyloop:
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
5889 assert ((re_opcode_t)pat[-2] == no_op);
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
5890 PUSH_FAILURE_POINT (pat - 2, str);
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
5891 /* Fallthrough */
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
5892
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5893 case on_failure_jump_loop:
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5894 case on_failure_jump:
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5895 case succeed_n:
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5896 d = str;
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5897 continue_failure_jump:
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5898 EXTRACT_NUMBER_AND_INCR (mcnt, pat);
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5899 p = pat + mcnt;
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5900 break;
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5901
28342
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
5902 case no_op:
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
5903 /* A special frame used for nastyloops. */
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
5904 goto fail;
9761cf2351fa (enum re_opcode_t): New opcode on_failure_jump_nastyloop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28279
diff changeset
5905
28062
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5906 default:
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5907 abort();
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5908 }
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5909
26edef632c89 This is a big redesign of failure-stack and register handling, prompted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27359
diff changeset
5910 assert (p >= bufp->buffer && p <= pend);
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5911
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
5912 if (d >= string1 && d <= end1)
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5913 dend = end_match_1;
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
5914 }
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5915 else
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
5916 break; /* Matching at this starting point really fails. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5917 } /* for (;;) */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5918
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5919 if (best_regs_set)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5920 goto restore_best_regs;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5921
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5922 FREE_VARIABLES ();
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5923
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5924 return -1; /* Failure to match. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5925 } /* re_match_2 */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5926
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5927 /* Subroutine definitions for re_match_2. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5928
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5929 /* Return zero if TRANSLATE[S1] and TRANSLATE[S2] are identical for LEN
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5930 bytes; nonzero otherwise. */
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
5931
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5932 static int
28473
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
5933 bcmp_translate (s1, s2, len, translate, multibyte)
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
5934 re_char *s1, *s2;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5935 register int len;
13250
52e053f46f76 (TRANSLATE, PATFETCH): Cast elt of `translate'.
Richard M. Stallman <rms@gnu.org>
parents: 13100
diff changeset
5936 RE_TRANSLATE_TYPE translate;
28473
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
5937 const int multibyte;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5938 {
28473
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
5939 register re_char *p1 = s1, *p2 = s2;
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
5940 re_char *p1_end = s1 + len;
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
5941 re_char *p2_end = s2 + len;
21348
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5942
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
5943 /* FIXME: Checking both p1 and p2 presumes that the two strings might have
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
5944 different lengths, but relying on a single `len' would break this. -sm */
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
5945 while (p1 < p1_end && p2 < p2_end)
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5946 {
21348
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5947 int p1_charlen, p2_charlen;
32891
56a4ce418f35 More `unsigned char' -> `re_char' changes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32823
diff changeset
5948 re_wchar_t p1_ch, p2_ch;
21348
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5949
28473
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
5950 p1_ch = RE_STRING_CHAR_AND_LENGTH (p1, p1_end - p1, p1_charlen);
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28380
diff changeset
5951 p2_ch = RE_STRING_CHAR_AND_LENGTH (p2, p2_end - p2, p2_charlen);
21348
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5952
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5953 if (RE_TRANSLATE (translate, p1_ch)
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5954 != RE_TRANSLATE (translate, p2_ch))
18614
a9bf61beded5 (TRANSLATE, re_search_2, re_match_2_internal,bcmp_translate):
Richard M. Stallman <rms@gnu.org>
parents: 18532
diff changeset
5955 return 1;
21348
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5956
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5957 p1 += p1_charlen, p2 += p2_charlen;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5958 }
21348
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5959
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5960 if (p1 != p1_end || p2 != p2_end)
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5961 return 1;
64590f10c605 (compile_range): Unused function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 20650
diff changeset
5962
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5963 return 0;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5964 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5965
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5966 /* Entry points for GNU code. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5967
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5968 /* re_compile_pattern is the GNU regular expression compiler: it
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5969 compiles PATTERN (of length SIZE) and puts the result in BUFP.
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5970 Returns 0 if the pattern was valid, otherwise an error string.
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
5971
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5972 Assumes the `allocated' (and perhaps `buffer') and `translate' fields
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5973 are set in BUFP on entry.
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
5974
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
5975 We call regex_compile to do the actual compilation. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5976
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5977 const char *
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5978 re_compile_pattern (pattern, length, bufp)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5979 const char *pattern;
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
5980 size_t length;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5981 struct re_pattern_buffer *bufp;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5982 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5983 reg_errcode_t ret;
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
5984
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5985 /* GNU code is written to assume at least RE_NREGS registers will be set
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5986 (and at least one extra will be -1). */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5987 bufp->regs_allocated = REGS_UNALLOCATED;
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
5988
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5989 /* And GNU code determines whether or not to get register information
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5990 by passing null for the REGS argument to re_match, etc., not by
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5991 setting no_sub. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5992 bufp->no_sub = 0;
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
5993
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
5994 ret = regex_compile ((re_char*) pattern, length, re_syntax_options, bufp);
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5995
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5996 if (!ret)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5997 return NULL;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
5998 return gettext (re_error_msgid[(int) ret]);
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
5999 }
31312
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
6000 WEAK_ALIAS (__re_compile_pattern, re_compile_pattern)
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6001
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
6002 /* Entry points compatible with 4.2 BSD regex library. We don't define
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
6003 them unless specifically requested. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6004
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
6005 #if defined _REGEX_RE_COMP || defined _LIBC
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6006
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6007 /* BSD has one and only one pattern buffer. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6008 static struct re_pattern_buffer re_comp_buf;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6009
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6010 char *
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
6011 # ifdef _LIBC
15635
89f7ba4ccd22 [_LIBC] (re_comp, re_exec): Use `weak_function' keyword in defn instead of
Roland McGrath <roland@gnu.org>
parents: 15516
diff changeset
6012 /* Make these definitions weak in libc, so POSIX programs can redefine
89f7ba4ccd22 [_LIBC] (re_comp, re_exec): Use `weak_function' keyword in defn instead of
Roland McGrath <roland@gnu.org>
parents: 15516
diff changeset
6013 these names if they don't use our functions, and still use
89f7ba4ccd22 [_LIBC] (re_comp, re_exec): Use `weak_function' keyword in defn instead of
Roland McGrath <roland@gnu.org>
parents: 15516
diff changeset
6014 regcomp/regexec below without link errors. */
89f7ba4ccd22 [_LIBC] (re_comp, re_exec): Use `weak_function' keyword in defn instead of
Roland McGrath <roland@gnu.org>
parents: 15516
diff changeset
6015 weak_function
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
6016 # endif
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6017 re_comp (s)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6018 const char *s;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6019 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6020 reg_errcode_t ret;
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
6021
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6022 if (!s)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6023 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6024 if (!re_comp_buf.buffer)
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
6025 /* Yes, we're discarding `const' here if !HAVE_LIBINTL. */
29801
3ea64112b4ba (re_match, re_match_2): Protect calls to alloca (0).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29546
diff changeset
6026 return (char *) gettext ("No previous regular expression");
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6027 return 0;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6028 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6029
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6030 if (!re_comp_buf.buffer)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6031 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6032 re_comp_buf.buffer = (unsigned char *) malloc (200);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6033 if (re_comp_buf.buffer == NULL)
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
6034 /* Yes, we're discarding `const' here if !HAVE_LIBINTL. */
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
6035 return (char *) gettext (re_error_msgid[(int) REG_ESPACE]);
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6036 re_comp_buf.allocated = 200;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6037
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6038 re_comp_buf.fastmap = (char *) malloc (1 << BYTEWIDTH);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6039 if (re_comp_buf.fastmap == NULL)
29801
3ea64112b4ba (re_match, re_match_2): Protect calls to alloca (0).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29546
diff changeset
6040 /* Yes, we're discarding `const' here if !HAVE_LIBINTL. */
3ea64112b4ba (re_match, re_match_2): Protect calls to alloca (0).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29546
diff changeset
6041 return (char *) gettext (re_error_msgid[(int) REG_ESPACE]);
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6042 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6043
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6044 /* Since `re_exec' always passes NULL for the `regs' argument, we
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6045 don't need to initialize the pattern buffer fields which affect it. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6046
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6047 ret = regex_compile (s, strlen (s), re_syntax_options, &re_comp_buf);
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
6048
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6049 if (!ret)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6050 return NULL;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6051
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6052 /* Yes, we're discarding `const' here if !HAVE_LIBINTL. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6053 return (char *) gettext (re_error_msgid[(int) ret]);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6054 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6055
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6056
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6057 int
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
6058 # ifdef _LIBC
15635
89f7ba4ccd22 [_LIBC] (re_comp, re_exec): Use `weak_function' keyword in defn instead of
Roland McGrath <roland@gnu.org>
parents: 15516
diff changeset
6059 weak_function
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
6060 # endif
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6061 re_exec (s)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6062 const char *s;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6063 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6064 const int len = strlen (s);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6065 return
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6066 0 <= re_search (&re_comp_buf, s, len, 0, len, (struct re_registers *) 0);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6067 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6068 #endif /* _REGEX_RE_COMP */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6069
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6070 /* POSIX.2 functions. Don't define these for Emacs. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6071
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6072 #ifndef emacs
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6073
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6074 /* regcomp takes a regular expression as a string and compiles it.
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6075
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
6076 PREG is a regex_t *. We do not expect any fields to be initialized,
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6077 since POSIX says we shouldn't. Thus, we set
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6078
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6079 `buffer' to the compiled pattern;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6080 `used' to the length of the compiled pattern;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6081 `syntax' to RE_SYNTAX_POSIX_EXTENDED if the
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6082 REG_EXTENDED bit in CFLAGS is set; otherwise, to
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6083 RE_SYNTAX_POSIX_BASIC;
31312
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
6084 `fastmap' to an allocated space for the fastmap;
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
6085 `fastmap_accurate' to zero;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6086 `re_nsub' to the number of subexpressions in PATTERN.
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6087
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6088 PATTERN is the address of the pattern string.
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6089
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6090 CFLAGS is a series of bits which affect compilation.
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6091
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6092 If REG_EXTENDED is set, we use POSIX extended syntax; otherwise, we
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6093 use POSIX basic syntax.
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6094
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6095 If REG_NEWLINE is set, then . and [^...] don't match newline.
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6096 Also, regexec will try a match beginning after every newline.
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6097
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6098 If REG_ICASE is set, then we considers upper- and lowercase
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6099 versions of letters to be equivalent when matching.
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6100
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6101 If REG_NOSUB is set, then when PREG is passed to regexec, that
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6102 routine will report only success or failure, and nothing about the
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6103 registers.
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6104
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
6105 It returns 0 if it succeeds, nonzero if it doesn't. (See regex.h for
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6106 the return codes and their meanings.) */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6107
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6108 int
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6109 regcomp (preg, pattern, cflags)
40650
ded4aa3c81b2 (re_wctype): Try to fix some warnings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39718
diff changeset
6110 regex_t *__restrict preg;
ded4aa3c81b2 (re_wctype): Try to fix some warnings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39718
diff changeset
6111 const char *__restrict pattern;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6112 int cflags;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6113 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6114 reg_errcode_t ret;
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
6115 reg_syntax_t syntax
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6116 = (cflags & REG_EXTENDED) ?
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6117 RE_SYNTAX_POSIX_EXTENDED : RE_SYNTAX_POSIX_BASIC;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6118
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6119 /* regex_compile will allocate the space for the compiled pattern. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6120 preg->buffer = 0;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6121 preg->allocated = 0;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6122 preg->used = 0;
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
6123
31312
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
6124 /* Try to allocate space for the fastmap. */
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
6125 preg->fastmap = (char *) malloc (1 << BYTEWIDTH);
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
6126
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6127 if (cflags & REG_ICASE)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6128 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6129 unsigned i;
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
6130
13250
52e053f46f76 (TRANSLATE, PATFETCH): Cast elt of `translate'.
Richard M. Stallman <rms@gnu.org>
parents: 13100
diff changeset
6131 preg->translate
52e053f46f76 (TRANSLATE, PATFETCH): Cast elt of `translate'.
Richard M. Stallman <rms@gnu.org>
parents: 13100
diff changeset
6132 = (RE_TRANSLATE_TYPE) malloc (CHAR_SET_SIZE
52e053f46f76 (TRANSLATE, PATFETCH): Cast elt of `translate'.
Richard M. Stallman <rms@gnu.org>
parents: 13100
diff changeset
6133 * sizeof (*(RE_TRANSLATE_TYPE)0));
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6134 if (preg->translate == NULL)
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
6135 return (int) REG_ESPACE;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6136
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6137 /* Map uppercase characters to corresponding lowercase ones. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6138 for (i = 0; i < CHAR_SET_SIZE; i++)
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
6139 preg->translate[i] = ISUPPER (i) ? TOLOWER (i) : i;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6140 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6141 else
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6142 preg->translate = NULL;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6143
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6144 /* If REG_NEWLINE is set, newlines are treated differently. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6145 if (cflags & REG_NEWLINE)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6146 { /* REG_NEWLINE implies neither . nor [^...] match newline. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6147 syntax &= ~RE_DOT_NEWLINE;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6148 syntax |= RE_HAT_LISTS_NOT_NEWLINE;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6149 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6150 else
31312
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
6151 syntax |= RE_NO_NEWLINE_ANCHOR;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6152
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6153 preg->no_sub = !!(cflags & REG_NOSUB);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6154
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
6155 /* POSIX says a null character in the pattern terminates it, so we
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6156 can use strlen here in compiling the pattern. */
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
6157 ret = regex_compile ((re_char*) pattern, strlen (pattern), syntax, preg);
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
6158
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6159 /* POSIX doesn't distinguish between an unmatched open-group and an
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6160 unmatched close-group: both are REG_EPAREN. */
31312
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
6161 if (ret == REG_ERPAREN)
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
6162 ret = REG_EPAREN;
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
6163
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
6164 if (ret == REG_NOERROR && preg->fastmap)
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
6165 { /* Compute the fastmap now, since regexec cannot modify the pattern
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
6166 buffer. */
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
6167 re_compile_fastmap (preg);
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
6168 if (preg->can_be_null)
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
6169 { /* The fastmap can't be used anyway. */
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
6170 free (preg->fastmap);
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
6171 preg->fastmap = NULL;
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
6172 }
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
6173 }
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6174 return (int) ret;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6175 }
31312
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
6176 WEAK_ALIAS (__regcomp, regcomp)
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6177
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6178
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6179 /* regexec searches for a given pattern, specified by PREG, in the
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6180 string STRING.
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
6181
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6182 If NMATCH is zero or REG_NOSUB was set in the cflags argument to
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
6183 `regcomp', we ignore PMATCH. Otherwise, we assume PMATCH has at
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6184 least NMATCH elements, and we set them to the offsets of the
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6185 corresponding matched substrings.
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
6186
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6187 EFLAGS specifies `execution flags' which affect matching: if
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6188 REG_NOTBOL is set, then ^ does not match at the beginning of the
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6189 string; if REG_NOTEOL is set, then $ does not match at the end.
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
6190
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6191 We return 0 if we find a match and REG_NOMATCH if not. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6192
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6193 int
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6194 regexec (preg, string, nmatch, pmatch, eflags)
40650
ded4aa3c81b2 (re_wctype): Try to fix some warnings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39718
diff changeset
6195 const regex_t *__restrict preg;
ded4aa3c81b2 (re_wctype): Try to fix some warnings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39718
diff changeset
6196 const char *__restrict string;
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
6197 size_t nmatch;
48205
b8b2159aed5e (regexec): Fix pmatch declaration.
Dave Love <fx@gnu.org>
parents: 47368
diff changeset
6198 regmatch_t pmatch[__restrict_arr];
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6199 int eflags;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6200 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6201 int ret;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6202 struct re_registers regs;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6203 regex_t private_preg;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6204 int len = strlen (string);
31312
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
6205 boolean want_reg_info = !preg->no_sub && nmatch > 0 && pmatch;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6206
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6207 private_preg = *preg;
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
6208
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6209 private_preg.not_bol = !!(eflags & REG_NOTBOL);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6210 private_preg.not_eol = !!(eflags & REG_NOTEOL);
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
6211
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6212 /* The user has told us exactly how many registers to return
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6213 information about, via `nmatch'. We have to pass that on to the
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
6214 matching routines. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6215 private_preg.regs_allocated = REGS_FIXED;
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
6216
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6217 if (want_reg_info)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6218 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6219 regs.num_regs = nmatch;
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
6220 regs.start = TALLOC (nmatch * 2, regoff_t);
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
6221 if (regs.start == NULL)
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
6222 return (int) REG_NOMATCH;
31299
34c25566aab3 Merge some changes from GNU libc. Add prototypes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31213
diff changeset
6223 regs.end = regs.start + nmatch;
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6224 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6225
31312
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
6226 /* Instead of using not_eol to implement REG_NOTEOL, we could simply
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
6227 pass (&private_preg, string, len + 1, 0, len, ...) pretending the string
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
6228 was a little bit longer but still only matching the real part.
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
6229 This works because the `endline' will check for a '\n' and will find a
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
6230 '\0', correctly deciding that this is not the end of a line.
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
6231 But it doesn't work out so nicely for REG_NOTBOL, since we don't have
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
6232 a convenient '\0' there. For all we know, the string could be preceded
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
6233 by '\n' which would throw things off. */
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
6234
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6235 /* Perform the searching operation. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6236 ret = re_search (&private_preg, string, len,
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
6237 /* start: */ 0, /* range: */ len,
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
6238 want_reg_info ? &regs : (struct re_registers *) 0);
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
6239
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6240 /* Copy the register information to the POSIX structure. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6241 if (want_reg_info)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6242 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6243 if (ret >= 0)
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
6244 {
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
6245 unsigned r;
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
6246
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
6247 for (r = 0; r < nmatch; r++)
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
6248 {
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
6249 pmatch[r].rm_so = regs.start[r];
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
6250 pmatch[r].rm_eo = regs.end[r];
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
6251 }
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
6252 }
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
6253
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
6254 /* If we needed the temporary register info, free the space now. */
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6255 free (regs.start);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6256 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6257
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6258 /* We want zero return to mean success, unlike `re_search'. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6259 return ret >= 0 ? (int) REG_NOERROR : (int) REG_NOMATCH;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6260 }
31312
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
6261 WEAK_ALIAS (__regexec, regexec)
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6262
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6263
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6264 /* Returns a message corresponding to an error code, ERRCODE, returned
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6265 from either regcomp or regexec. We don't use PREG here. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6266
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6267 size_t
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6268 regerror (errcode, preg, errbuf, errbuf_size)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6269 int errcode;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6270 const regex_t *preg;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6271 char *errbuf;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6272 size_t errbuf_size;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6273 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6274 const char *msg;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6275 size_t msg_size;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6276
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6277 if (errcode < 0
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6278 || errcode >= (sizeof (re_error_msgid) / sizeof (re_error_msgid[0])))
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
6279 /* Only error codes returned by the rest of the code should be passed
18260
a642c99198ec (PTR_TO_OFFSET): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16537
diff changeset
6280 to this routine. If we are given anything else, or if other regex
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6281 code generates an invalid error code, then the program has a bug.
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6282 Dump core so we can fix it. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6283 abort ();
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6284
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6285 msg = gettext (re_error_msgid[errcode]);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6286
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6287 msg_size = strlen (msg) + 1; /* Includes the null. */
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
6288
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6289 if (errbuf_size != 0)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6290 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6291 if (msg_size > errbuf_size)
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
6292 {
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
6293 strncpy (errbuf, msg, errbuf_size - 1);
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
6294 errbuf[errbuf_size - 1] = 0;
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
6295 }
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6296 else
31213
9efb8adfefa4 * regex.c: Indent cpp directives and remove parens after `defined'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31172
diff changeset
6297 strcpy (errbuf, msg);
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6298 }
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6299
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6300 return msg_size;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6301 }
31312
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
6302 WEAK_ALIAS (__regerror, regerror)
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6303
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6304
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6305 /* Free dynamically allocated space used by PREG. */
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6306
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6307 void
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6308 regfree (preg)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6309 regex_t *preg;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6310 {
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6311 if (preg->buffer != NULL)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6312 free (preg->buffer);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6313 preg->buffer = NULL;
13565
c66885b6330c (gettext_noop): New macro, identity fn.
Roland McGrath <roland@gnu.org>
parents: 13517
diff changeset
6314
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6315 preg->allocated = 0;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6316 preg->used = 0;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6317
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6318 if (preg->fastmap != NULL)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6319 free (preg->fastmap);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6320 preg->fastmap = NULL;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6321 preg->fastmap_accurate = 0;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6322
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6323 if (preg->translate != NULL)
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6324 free (preg->translate);
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6325 preg->translate = NULL;
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6326 }
31312
e6b19a60e035 * regex.h (RE_NO_NEWLINE_ANCHOR): New syntax flag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31299
diff changeset
6327 WEAK_ALIAS (__regfree, regfree)
11864
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6328
620c7195b48f Add `#ifdef _LIBC' in a few places, so this can be compiled in libc.
Roland McGrath <roland@gnu.org>
parents: 11843
diff changeset
6329 #endif /* not emacs */