Mercurial > cpython-lru_cache-weakref
annotate Modules/_sre.c @ 78069:a8aa77458e12 3.2
Add c_size_t and c_ssize_t to the ctypes summary table.
| author | Antoine Pitrou <solipsis@pitrou.net> |
|---|---|
| date | Thu, 12 Jul 2012 20:31:50 +0200 |
| parents | 10a79a33d09b |
| children | a3579d766fb6 17dfe24e5107 |
| rev | line source |
|---|---|
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1 /* |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2 * Secret Labs' Regular Expression Engine |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3 * |
|
13119
fd12cd996154
- removed "alpha only" licensing restriction
Fredrik Lundh <fredrik@pythonware.com>
parents:
13118
diff
changeset
|
4 * regular expression matching engine |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
5 * |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
6 * partial history: |
|
14726
176660ff0c95
- fixed yet another gcc -pedantic warning
Fredrik Lundh <fredrik@pythonware.com>
parents:
14381
diff
changeset
|
7 * 1999-10-24 fl created (based on existing template matcher code) |
|
15355
2a3696d32721
-- properly reset groups in findall (bug #117612)
Fredrik Lundh <fredrik@pythonware.com>
parents:
15000
diff
changeset
|
8 * 2000-03-06 fl first alpha, sort of |
|
2a3696d32721
-- properly reset groups in findall (bug #117612)
Fredrik Lundh <fredrik@pythonware.com>
parents:
15000
diff
changeset
|
9 * 2000-08-01 fl fixes for 1.6b1 |
|
14726
176660ff0c95
- fixed yet another gcc -pedantic warning
Fredrik Lundh <fredrik@pythonware.com>
parents:
14381
diff
changeset
|
10 * 2000-08-07 fl use PyOS_CheckStack() if available |
|
176660ff0c95
- fixed yet another gcc -pedantic warning
Fredrik Lundh <fredrik@pythonware.com>
parents:
14381
diff
changeset
|
11 * 2000-09-20 fl added expand method |
| 17144 | 12 * 2001-03-20 fl lots of fixes for 2.1b2 |
|
17532
dd6be625a923
SRE: made "copyright" string static, to avoid potential linking
Fredrik Lundh <fredrik@pythonware.com>
parents:
17144
diff
changeset
|
13 * 2001-04-15 fl export copyright as Python attribute, not global |
|
18363
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
14 * 2001-04-28 fl added __copy__ methods (work in progress) |
|
26345
9f469da591a9
fix for SF #635398 (don't "downcast" return strings from unicode to ascii)
Fredrik Lundh <fredrik@pythonware.com>
parents:
26141
diff
changeset
|
15 * 2001-05-14 fl fixes for 1.5.2 compatibility |
|
18367
eaabca13174e
pythonware repository roundtrip (untabification)
Fredrik Lundh <fredrik@pythonware.com>
parents:
18366
diff
changeset
|
16 * 2001-07-01 fl added BIGCHARSET support (from Martin von Loewis) |
| 20534 | 17 * 2001-10-18 fl fixed group reset issue (from Matthew Mueller) |
|
20585
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
18 * 2001-10-20 fl added split primitive; reenable unicode for 1.6/2.0/2.1 |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
19 * 2001-10-21 fl added sub/subn primitive |
|
20660
c05d4895234c
(experimental) "finditer" method/function. this works pretty much
Fredrik Lundh <fredrik@pythonware.com>
parents:
20620
diff
changeset
|
20 * 2001-10-24 fl added finditer primitive (for 2.2 only) |
|
21319
4bcfb9dc57e0
bug #133283, #477728, #483789, #490573
Fredrik Lundh <fredrik@pythonware.com>
parents:
21313
diff
changeset
|
21 * 2001-12-07 fl fixed memory leak in sub/subn (Guido van Rossum) |
|
26345
9f469da591a9
fix for SF #635398 (don't "downcast" return strings from unicode to ascii)
Fredrik Lundh <fredrik@pythonware.com>
parents:
26141
diff
changeset
|
22 * 2002-11-09 fl fixed empty sub/subn return type |
|
28691
c9925fa29ea3
Fully support 32-bit codes. Enable BIGCHARSET in UCS-4 builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
28603
diff
changeset
|
23 * 2003-04-18 mvl fully support 4-byte codes |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
24 * 2003-10-17 gn implemented non recursive scheme |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
25 * |
|
15855
152d00718006
SRE fixes for 2.1 alpha:
Fredrik Lundh <fredrik@pythonware.com>
parents:
15643
diff
changeset
|
26 * Copyright (c) 1997-2001 by Secret Labs AB. All rights reserved. |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
27 * |
|
13789
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
28 * This version of the SRE library can be redistributed under CNRI's |
|
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
29 * Python 1.6 license. For any other use, please contact Secret Labs |
|
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
30 * AB (info@pythonware.com). |
|
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
31 * |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
32 * Portions of this engine have been developed in cooperation with |
|
13789
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
33 * CNRI. Hewlett-Packard provided funding for 1.6 integration and |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
34 * other compatibility work. |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
35 */ |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
36 |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
37 #ifndef SRE_RECURSIVE |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
38 |
|
17532
dd6be625a923
SRE: made "copyright" string static, to avoid potential linking
Fredrik Lundh <fredrik@pythonware.com>
parents:
17144
diff
changeset
|
39 static char copyright[] = |
|
26345
9f469da591a9
fix for SF #635398 (don't "downcast" return strings from unicode to ascii)
Fredrik Lundh <fredrik@pythonware.com>
parents:
26141
diff
changeset
|
40 " SRE 2.2.2 Copyright (c) 1997-2002 by Secret Labs AB "; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
41 |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
42 #define PY_SSIZE_T_CLEAN |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
43 |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
44 #include "Python.h" |
|
18363
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
45 #include "structmember.h" /* offsetof */ |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
46 |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
47 #include "sre.h" |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
48 |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
49 #include <ctype.h> |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
50 |
| 13118 | 51 /* name of this module, minus the leading underscore */ |
|
15909
8db319ddfb37
bumped SRE version number to 2.1. cleaned up and added 1.5.2
Fredrik Lundh <fredrik@pythonware.com>
parents:
15906
diff
changeset
|
52 #if !defined(SRE_MODULE) |
|
8db319ddfb37
bumped SRE version number to 2.1. cleaned up and added 1.5.2
Fredrik Lundh <fredrik@pythonware.com>
parents:
15906
diff
changeset
|
53 #define SRE_MODULE "sre" |
|
8db319ddfb37
bumped SRE version number to 2.1. cleaned up and added 1.5.2
Fredrik Lundh <fredrik@pythonware.com>
parents:
15906
diff
changeset
|
54 #endif |
| 13118 | 55 |
|
37877
6a45f26ea619
Merge trunk up to 43069, putting re.py back and hopefully making the branch
Thomas Wouters <thomas@python.org>
parents:
37141
diff
changeset
|
56 #define SRE_PY_MODULE "re" |
|
6a45f26ea619
Merge trunk up to 43069, putting re.py back and hopefully making the branch
Thomas Wouters <thomas@python.org>
parents:
37141
diff
changeset
|
57 |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
58 /* defining this one enables tracing */ |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
59 #undef VERBOSE |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
60 |
|
13299
2fb3fb646cc5
today's SRE update:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13247
diff
changeset
|
61 /* defining this enables unicode support (default under 1.6a1 and later) */ |
| 13118 | 62 #define HAVE_UNICODE |
| 63 | |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
64 /* -------------------------------------------------------------------- */ |
|
13164
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
65 /* optional features */ |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
66 |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
67 /* enables fast searching */ |
|
13164
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
68 #define USE_FAST_SEARCH |
|
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
69 |
|
18363
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
70 /* enables copy/deepcopy handling (work in progress) */ |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
71 #undef USE_BUILTIN_COPY |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
72 |
|
15909
8db319ddfb37
bumped SRE version number to 2.1. cleaned up and added 1.5.2
Fredrik Lundh <fredrik@pythonware.com>
parents:
15906
diff
changeset
|
73 #if PY_VERSION_HEX < 0x01060000 |
|
8db319ddfb37
bumped SRE version number to 2.1. cleaned up and added 1.5.2
Fredrik Lundh <fredrik@pythonware.com>
parents:
15906
diff
changeset
|
74 #define PyObject_DEL(op) PyMem_DEL((op)) |
|
8db319ddfb37
bumped SRE version number to 2.1. cleaned up and added 1.5.2
Fredrik Lundh <fredrik@pythonware.com>
parents:
15906
diff
changeset
|
75 #endif |
|
8db319ddfb37
bumped SRE version number to 2.1. cleaned up and added 1.5.2
Fredrik Lundh <fredrik@pythonware.com>
parents:
15906
diff
changeset
|
76 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
77 /* -------------------------------------------------------------------- */ |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
78 |
|
13139
c2207d6c03a8
- fixed another split problem
Fredrik Lundh <fredrik@pythonware.com>
parents:
13136
diff
changeset
|
79 #if defined(_MSC_VER) |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
80 #pragma optimize("agtw", on) /* doesn't seem to make much difference... */ |
|
13361
bef7b629ac95
maintenance release:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13328
diff
changeset
|
81 #pragma warning(disable: 4710) /* who cares if functions are not inlined ;-) */ |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
82 /* fastest possible local call under MSVC */ |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
83 #define LOCAL(type) static __inline type __fastcall |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
84 #elif defined(USE_INLINE) |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
85 #define LOCAL(type) static inline type |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
86 #else |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
87 #define LOCAL(type) static type |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
88 #endif |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
89 |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
90 /* error codes */ |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
91 #define SRE_ERROR_ILLEGAL -1 /* illegal opcode */ |
|
13789
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
92 #define SRE_ERROR_STATE -2 /* illegal state */ |
|
13829
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
93 #define SRE_ERROR_RECURSION_LIMIT -3 /* runaway recursion */ |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
94 #define SRE_ERROR_MEMORY -9 /* out of memory */ |
|
44604
94ab572ed6dd
Merged revisions 59843-59863 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44351
diff
changeset
|
95 #define SRE_ERROR_INTERRUPTED -10 /* signal handler raised exception */ |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
96 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
97 #if defined(VERBOSE) |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
98 #define TRACE(v) printf v |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
99 #else |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
100 #define TRACE(v) |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
101 #endif |
| 13118 | 102 |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
103 /* -------------------------------------------------------------------- */ |
|
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
104 /* search engine state */ |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
105 |
| 13118 | 106 /* default character predicates (run sre_chars.py to regenerate tables) */ |
| 107 | |
| 108 #define SRE_DIGIT_MASK 1 | |
| 109 #define SRE_SPACE_MASK 2 | |
| 110 #define SRE_LINEBREAK_MASK 4 | |
| 111 #define SRE_ALNUM_MASK 8 | |
| 112 #define SRE_WORD_MASK 16 | |
| 113 | |
|
19963
969e306b62fd
an SRE bugfix a day keeps Guido away...
Fredrik Lundh <fredrik@pythonware.com>
parents:
19603
diff
changeset
|
114 /* FIXME: this assumes ASCII. create tables in init_sre() instead */ |
|
969e306b62fd
an SRE bugfix a day keeps Guido away...
Fredrik Lundh <fredrik@pythonware.com>
parents:
19603
diff
changeset
|
115 |
| 13118 | 116 static char sre_char_info[128] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 6, 2, |
| 117 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, | |
| 118 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 25, 25, 25, 25, 25, 25, | |
| 119 25, 25, 0, 0, 0, 0, 0, 0, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, | |
| 120 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, | |
| 121 0, 0, 16, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, | |
| 122 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, 0, 0, 0 }; | |
| 123 | |
|
13124
5021db674019
- renamed "tolower" hook (it happened to work with
Fredrik Lundh <fredrik@pythonware.com>
parents:
13121
diff
changeset
|
124 static char sre_char_lower[128] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, |
| 13118 | 125 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, |
| 126 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, | |
| 127 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, | |
| 128 61, 62, 63, 64, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, | |
| 129 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, | |
| 130 122, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, | |
| 131 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, | |
| 132 120, 121, 122, 123, 124, 125, 126, 127 }; | |
| 133 | |
| 134 #define SRE_IS_DIGIT(ch)\ | |
| 135 ((ch) < 128 ? (sre_char_info[(ch)] & SRE_DIGIT_MASK) : 0) | |
| 136 #define SRE_IS_SPACE(ch)\ | |
| 137 ((ch) < 128 ? (sre_char_info[(ch)] & SRE_SPACE_MASK) : 0) | |
| 138 #define SRE_IS_LINEBREAK(ch)\ | |
| 139 ((ch) < 128 ? (sre_char_info[(ch)] & SRE_LINEBREAK_MASK) : 0) | |
| 140 #define SRE_IS_ALNUM(ch)\ | |
| 141 ((ch) < 128 ? (sre_char_info[(ch)] & SRE_ALNUM_MASK) : 0) | |
| 142 #define SRE_IS_WORD(ch)\ | |
| 143 ((ch) < 128 ? (sre_char_info[(ch)] & SRE_WORD_MASK) : 0) | |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
144 |
| 17144 | 145 static unsigned int sre_lower(unsigned int ch) |
| 146 { | |
|
31525
4ef568c653d9
- Fixing annoying warnings.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
31180
diff
changeset
|
147 return ((ch) < 128 ? (unsigned int)sre_char_lower[ch] : ch); |
| 17144 | 148 } |
| 149 | |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
150 /* locale-specific character predicates */ |
|
31525
4ef568c653d9
- Fixing annoying warnings.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
31180
diff
changeset
|
151 /* !(c & ~N) == (c < N+1) for any unsigned c, this avoids |
|
4ef568c653d9
- Fixing annoying warnings.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
31180
diff
changeset
|
152 * warnings when c's type supports only numbers < N+1 */ |
|
4ef568c653d9
- Fixing annoying warnings.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
31180
diff
changeset
|
153 #define SRE_LOC_IS_DIGIT(ch) (!((ch) & ~255) ? isdigit((ch)) : 0) |
|
4ef568c653d9
- Fixing annoying warnings.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
31180
diff
changeset
|
154 #define SRE_LOC_IS_SPACE(ch) (!((ch) & ~255) ? isspace((ch)) : 0) |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
155 #define SRE_LOC_IS_LINEBREAK(ch) ((ch) == '\n') |
|
31525
4ef568c653d9
- Fixing annoying warnings.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
31180
diff
changeset
|
156 #define SRE_LOC_IS_ALNUM(ch) (!((ch) & ~255) ? isalnum((ch)) : 0) |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
157 #define SRE_LOC_IS_WORD(ch) (SRE_LOC_IS_ALNUM((ch)) || (ch) == '_') |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
158 |
| 17144 | 159 static unsigned int sre_lower_locale(unsigned int ch) |
| 160 { | |
|
31525
4ef568c653d9
- Fixing annoying warnings.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
31180
diff
changeset
|
161 return ((ch) < 256 ? (unsigned int)tolower((ch)) : ch); |
| 17144 | 162 } |
| 163 | |
| 13118 | 164 /* unicode-specific character predicates */ |
| 165 | |
| 166 #if defined(HAVE_UNICODE) | |
| 17144 | 167 |
|
55477
3d45367cc62a
Issue #6561: '\d' in a regular expression should match only Unicode
Mark Dickinson <dickinsm@gmail.com>
parents:
51271
diff
changeset
|
168 #define SRE_UNI_IS_DIGIT(ch) Py_UNICODE_ISDECIMAL((Py_UNICODE)(ch)) |
| 13118 | 169 #define SRE_UNI_IS_SPACE(ch) Py_UNICODE_ISSPACE((Py_UNICODE)(ch)) |
| 170 #define SRE_UNI_IS_LINEBREAK(ch) Py_UNICODE_ISLINEBREAK((Py_UNICODE)(ch)) | |
|
13299
2fb3fb646cc5
today's SRE update:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13247
diff
changeset
|
171 #define SRE_UNI_IS_ALNUM(ch) Py_UNICODE_ISALNUM((Py_UNICODE)(ch)) |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
172 #define SRE_UNI_IS_WORD(ch) (SRE_UNI_IS_ALNUM((ch)) || (ch) == '_') |
| 17144 | 173 |
| 174 static unsigned int sre_lower_unicode(unsigned int ch) | |
| 175 { | |
| 176 return (unsigned int) Py_UNICODE_TOLOWER((Py_UNICODE)(ch)); | |
| 177 } | |
| 178 | |
| 13118 | 179 #endif |
| 180 | |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
181 LOCAL(int) |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
182 sre_category(SRE_CODE category, unsigned int ch) |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
183 { |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
184 switch (category) { |
| 13118 | 185 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
186 case SRE_CATEGORY_DIGIT: |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
187 return SRE_IS_DIGIT(ch); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
188 case SRE_CATEGORY_NOT_DIGIT: |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
189 return !SRE_IS_DIGIT(ch); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
190 case SRE_CATEGORY_SPACE: |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
191 return SRE_IS_SPACE(ch); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
192 case SRE_CATEGORY_NOT_SPACE: |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
193 return !SRE_IS_SPACE(ch); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
194 case SRE_CATEGORY_WORD: |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
195 return SRE_IS_WORD(ch); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
196 case SRE_CATEGORY_NOT_WORD: |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
197 return !SRE_IS_WORD(ch); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
198 case SRE_CATEGORY_LINEBREAK: |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
199 return SRE_IS_LINEBREAK(ch); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
200 case SRE_CATEGORY_NOT_LINEBREAK: |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
201 return !SRE_IS_LINEBREAK(ch); |
| 13118 | 202 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
203 case SRE_CATEGORY_LOC_WORD: |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
204 return SRE_LOC_IS_WORD(ch); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
205 case SRE_CATEGORY_LOC_NOT_WORD: |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
206 return !SRE_LOC_IS_WORD(ch); |
| 13118 | 207 |
| 208 #if defined(HAVE_UNICODE) | |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
209 case SRE_CATEGORY_UNI_DIGIT: |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
210 return SRE_UNI_IS_DIGIT(ch); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
211 case SRE_CATEGORY_UNI_NOT_DIGIT: |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
212 return !SRE_UNI_IS_DIGIT(ch); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
213 case SRE_CATEGORY_UNI_SPACE: |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
214 return SRE_UNI_IS_SPACE(ch); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
215 case SRE_CATEGORY_UNI_NOT_SPACE: |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
216 return !SRE_UNI_IS_SPACE(ch); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
217 case SRE_CATEGORY_UNI_WORD: |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
218 return SRE_UNI_IS_WORD(ch); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
219 case SRE_CATEGORY_UNI_NOT_WORD: |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
220 return !SRE_UNI_IS_WORD(ch); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
221 case SRE_CATEGORY_UNI_LINEBREAK: |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
222 return SRE_UNI_IS_LINEBREAK(ch); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
223 case SRE_CATEGORY_UNI_NOT_LINEBREAK: |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
224 return !SRE_UNI_IS_LINEBREAK(ch); |
|
15909
8db319ddfb37
bumped SRE version number to 2.1. cleaned up and added 1.5.2
Fredrik Lundh <fredrik@pythonware.com>
parents:
15906
diff
changeset
|
225 #else |
|
8db319ddfb37
bumped SRE version number to 2.1. cleaned up and added 1.5.2
Fredrik Lundh <fredrik@pythonware.com>
parents:
15906
diff
changeset
|
226 case SRE_CATEGORY_UNI_DIGIT: |
|
8db319ddfb37
bumped SRE version number to 2.1. cleaned up and added 1.5.2
Fredrik Lundh <fredrik@pythonware.com>
parents:
15906
diff
changeset
|
227 return SRE_IS_DIGIT(ch); |
|
8db319ddfb37
bumped SRE version number to 2.1. cleaned up and added 1.5.2
Fredrik Lundh <fredrik@pythonware.com>
parents:
15906
diff
changeset
|
228 case SRE_CATEGORY_UNI_NOT_DIGIT: |
|
8db319ddfb37
bumped SRE version number to 2.1. cleaned up and added 1.5.2
Fredrik Lundh <fredrik@pythonware.com>
parents:
15906
diff
changeset
|
229 return !SRE_IS_DIGIT(ch); |
|
8db319ddfb37
bumped SRE version number to 2.1. cleaned up and added 1.5.2
Fredrik Lundh <fredrik@pythonware.com>
parents:
15906
diff
changeset
|
230 case SRE_CATEGORY_UNI_SPACE: |
|
8db319ddfb37
bumped SRE version number to 2.1. cleaned up and added 1.5.2
Fredrik Lundh <fredrik@pythonware.com>
parents:
15906
diff
changeset
|
231 return SRE_IS_SPACE(ch); |
|
8db319ddfb37
bumped SRE version number to 2.1. cleaned up and added 1.5.2
Fredrik Lundh <fredrik@pythonware.com>
parents:
15906
diff
changeset
|
232 case SRE_CATEGORY_UNI_NOT_SPACE: |
|
8db319ddfb37
bumped SRE version number to 2.1. cleaned up and added 1.5.2
Fredrik Lundh <fredrik@pythonware.com>
parents:
15906
diff
changeset
|
233 return !SRE_IS_SPACE(ch); |
|
8db319ddfb37
bumped SRE version number to 2.1. cleaned up and added 1.5.2
Fredrik Lundh <fredrik@pythonware.com>
parents:
15906
diff
changeset
|
234 case SRE_CATEGORY_UNI_WORD: |
|
8db319ddfb37
bumped SRE version number to 2.1. cleaned up and added 1.5.2
Fredrik Lundh <fredrik@pythonware.com>
parents:
15906
diff
changeset
|
235 return SRE_LOC_IS_WORD(ch); |
|
8db319ddfb37
bumped SRE version number to 2.1. cleaned up and added 1.5.2
Fredrik Lundh <fredrik@pythonware.com>
parents:
15906
diff
changeset
|
236 case SRE_CATEGORY_UNI_NOT_WORD: |
|
8db319ddfb37
bumped SRE version number to 2.1. cleaned up and added 1.5.2
Fredrik Lundh <fredrik@pythonware.com>
parents:
15906
diff
changeset
|
237 return !SRE_LOC_IS_WORD(ch); |
|
8db319ddfb37
bumped SRE version number to 2.1. cleaned up and added 1.5.2
Fredrik Lundh <fredrik@pythonware.com>
parents:
15906
diff
changeset
|
238 case SRE_CATEGORY_UNI_LINEBREAK: |
|
8db319ddfb37
bumped SRE version number to 2.1. cleaned up and added 1.5.2
Fredrik Lundh <fredrik@pythonware.com>
parents:
15906
diff
changeset
|
239 return SRE_IS_LINEBREAK(ch); |
|
8db319ddfb37
bumped SRE version number to 2.1. cleaned up and added 1.5.2
Fredrik Lundh <fredrik@pythonware.com>
parents:
15906
diff
changeset
|
240 case SRE_CATEGORY_UNI_NOT_LINEBREAK: |
|
8db319ddfb37
bumped SRE version number to 2.1. cleaned up and added 1.5.2
Fredrik Lundh <fredrik@pythonware.com>
parents:
15906
diff
changeset
|
241 return !SRE_IS_LINEBREAK(ch); |
| 13118 | 242 #endif |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
243 } |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
244 return 0; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
245 } |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
246 |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
247 /* helpers */ |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
248 |
|
13789
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
249 static void |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
250 data_stack_dealloc(SRE_STATE* state) |
|
13789
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
251 { |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
252 if (state->data_stack) { |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
253 PyMem_FREE(state->data_stack); |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
254 state->data_stack = NULL; |
|
13829
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
255 } |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
256 state->data_stack_size = state->data_stack_base = 0; |
|
13789
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
257 } |
|
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
258 |
|
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
259 static int |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
260 data_stack_grow(SRE_STATE* state, Py_ssize_t size) |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
261 { |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
262 Py_ssize_t minsize, cursize; |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
263 minsize = state->data_stack_base+size; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
264 cursize = state->data_stack_size; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
265 if (cursize < minsize) { |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
266 void* stack; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
267 cursize = minsize+minsize/4+1024; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
268 TRACE(("allocate/grow stack %d\n", cursize)); |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
269 stack = PyMem_REALLOC(state->data_stack, cursize); |
|
13789
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
270 if (!stack) { |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
271 data_stack_dealloc(state); |
|
13789
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
272 return SRE_ERROR_MEMORY; |
|
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
273 } |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
274 state->data_stack = (char *)stack; |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
275 state->data_stack_size = cursize; |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
276 } |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
277 return 0; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
278 } |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
279 |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
280 /* generate 8-bit version */ |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
281 |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
282 #define SRE_CHAR unsigned char |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
283 #define SRE_AT sre_at |
|
13829
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
284 #define SRE_COUNT sre_count |
|
13886
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
285 #define SRE_CHARSET sre_charset |
|
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
286 #define SRE_INFO sre_info |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
287 #define SRE_MATCH sre_match |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
288 #define SRE_MATCH_CONTEXT sre_match_context |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
289 #define SRE_SEARCH sre_search |
|
20620
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
290 #define SRE_LITERAL_TEMPLATE sre_literal_template |
| 13118 | 291 |
| 292 #if defined(HAVE_UNICODE) | |
| 293 | |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
294 #define SRE_RECURSIVE |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
295 #include "_sre.c" |
| 13118 | 296 #undef SRE_RECURSIVE |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
297 |
|
20620
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
298 #undef SRE_LITERAL_TEMPLATE |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
299 #undef SRE_SEARCH |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
300 #undef SRE_MATCH |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
301 #undef SRE_MATCH_CONTEXT |
|
13886
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
302 #undef SRE_INFO |
|
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
303 #undef SRE_CHARSET |
|
13829
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
304 #undef SRE_COUNT |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
305 #undef SRE_AT |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
306 #undef SRE_CHAR |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
307 |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
308 /* generate 16-bit unicode version */ |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
309 |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
310 #define SRE_CHAR Py_UNICODE |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
311 #define SRE_AT sre_uat |
|
13829
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
312 #define SRE_COUNT sre_ucount |
|
13886
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
313 #define SRE_CHARSET sre_ucharset |
|
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
314 #define SRE_INFO sre_uinfo |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
315 #define SRE_MATCH sre_umatch |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
316 #define SRE_MATCH_CONTEXT sre_umatch_context |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
317 #define SRE_SEARCH sre_usearch |
|
20620
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
318 #define SRE_LITERAL_TEMPLATE sre_uliteral_template |
| 13118 | 319 #endif |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
320 |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
321 #endif /* SRE_RECURSIVE */ |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
322 |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
323 /* -------------------------------------------------------------------- */ |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
324 /* String matching engine */ |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
325 |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
326 /* the following section is compiled twice, with different character |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
327 settings */ |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
328 |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
329 LOCAL(int) |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
330 SRE_AT(SRE_STATE* state, SRE_CHAR* ptr, SRE_CODE at) |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
331 { |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
332 /* check if pointer is at given position */ |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
333 |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
334 Py_ssize_t thisp, thatp; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
335 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
336 switch (at) { |
|
13139
c2207d6c03a8
- fixed another split problem
Fredrik Lundh <fredrik@pythonware.com>
parents:
13136
diff
changeset
|
337 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
338 case SRE_AT_BEGINNING: |
|
15855
152d00718006
SRE fixes for 2.1 alpha:
Fredrik Lundh <fredrik@pythonware.com>
parents:
15643
diff
changeset
|
339 case SRE_AT_BEGINNING_STRING: |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
340 return ((void*) ptr == state->beginning); |
|
13139
c2207d6c03a8
- fixed another split problem
Fredrik Lundh <fredrik@pythonware.com>
parents:
13136
diff
changeset
|
341 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
342 case SRE_AT_BEGINNING_LINE: |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
343 return ((void*) ptr == state->beginning || |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
344 SRE_IS_LINEBREAK((int) ptr[-1])); |
|
13139
c2207d6c03a8
- fixed another split problem
Fredrik Lundh <fredrik@pythonware.com>
parents:
13136
diff
changeset
|
345 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
346 case SRE_AT_END: |
|
13247
589202c64887
-- changed $ to match before a trailing newline, even
Fredrik Lundh <fredrik@pythonware.com>
parents:
13201
diff
changeset
|
347 return (((void*) (ptr+1) == state->end && |
|
589202c64887
-- changed $ to match before a trailing newline, even
Fredrik Lundh <fredrik@pythonware.com>
parents:
13201
diff
changeset
|
348 SRE_IS_LINEBREAK((int) ptr[0])) || |
|
589202c64887
-- changed $ to match before a trailing newline, even
Fredrik Lundh <fredrik@pythonware.com>
parents:
13201
diff
changeset
|
349 ((void*) ptr == state->end)); |
|
13139
c2207d6c03a8
- fixed another split problem
Fredrik Lundh <fredrik@pythonware.com>
parents:
13136
diff
changeset
|
350 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
351 case SRE_AT_END_LINE: |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
352 return ((void*) ptr == state->end || |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
353 SRE_IS_LINEBREAK((int) ptr[0])); |
|
13139
c2207d6c03a8
- fixed another split problem
Fredrik Lundh <fredrik@pythonware.com>
parents:
13136
diff
changeset
|
354 |
|
15855
152d00718006
SRE fixes for 2.1 alpha:
Fredrik Lundh <fredrik@pythonware.com>
parents:
15643
diff
changeset
|
355 case SRE_AT_END_STRING: |
|
152d00718006
SRE fixes for 2.1 alpha:
Fredrik Lundh <fredrik@pythonware.com>
parents:
15643
diff
changeset
|
356 return ((void*) ptr == state->end); |
|
152d00718006
SRE fixes for 2.1 alpha:
Fredrik Lundh <fredrik@pythonware.com>
parents:
15643
diff
changeset
|
357 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
358 case SRE_AT_BOUNDARY: |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
359 if (state->beginning == state->end) |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
360 return 0; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
361 thatp = ((void*) ptr > state->beginning) ? |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
362 SRE_IS_WORD((int) ptr[-1]) : 0; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
363 thisp = ((void*) ptr < state->end) ? |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
364 SRE_IS_WORD((int) ptr[0]) : 0; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
365 return thisp != thatp; |
|
13139
c2207d6c03a8
- fixed another split problem
Fredrik Lundh <fredrik@pythonware.com>
parents:
13136
diff
changeset
|
366 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
367 case SRE_AT_NON_BOUNDARY: |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
368 if (state->beginning == state->end) |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
369 return 0; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
370 thatp = ((void*) ptr > state->beginning) ? |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
371 SRE_IS_WORD((int) ptr[-1]) : 0; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
372 thisp = ((void*) ptr < state->end) ? |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
373 SRE_IS_WORD((int) ptr[0]) : 0; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
374 return thisp == thatp; |
| 17144 | 375 |
| 376 case SRE_AT_LOC_BOUNDARY: | |
| 377 if (state->beginning == state->end) | |
| 378 return 0; | |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
379 thatp = ((void*) ptr > state->beginning) ? |
| 17144 | 380 SRE_LOC_IS_WORD((int) ptr[-1]) : 0; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
381 thisp = ((void*) ptr < state->end) ? |
| 17144 | 382 SRE_LOC_IS_WORD((int) ptr[0]) : 0; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
383 return thisp != thatp; |
| 17144 | 384 |
| 385 case SRE_AT_LOC_NON_BOUNDARY: | |
| 386 if (state->beginning == state->end) | |
| 387 return 0; | |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
388 thatp = ((void*) ptr > state->beginning) ? |
| 17144 | 389 SRE_LOC_IS_WORD((int) ptr[-1]) : 0; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
390 thisp = ((void*) ptr < state->end) ? |
| 17144 | 391 SRE_LOC_IS_WORD((int) ptr[0]) : 0; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
392 return thisp == thatp; |
| 17144 | 393 |
|
18363
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
394 #if defined(HAVE_UNICODE) |
| 17144 | 395 case SRE_AT_UNI_BOUNDARY: |
| 396 if (state->beginning == state->end) | |
| 397 return 0; | |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
398 thatp = ((void*) ptr > state->beginning) ? |
| 17144 | 399 SRE_UNI_IS_WORD((int) ptr[-1]) : 0; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
400 thisp = ((void*) ptr < state->end) ? |
| 17144 | 401 SRE_UNI_IS_WORD((int) ptr[0]) : 0; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
402 return thisp != thatp; |
| 17144 | 403 |
| 404 case SRE_AT_UNI_NON_BOUNDARY: | |
| 405 if (state->beginning == state->end) | |
| 406 return 0; | |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
407 thatp = ((void*) ptr > state->beginning) ? |
| 17144 | 408 SRE_UNI_IS_WORD((int) ptr[-1]) : 0; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
409 thisp = ((void*) ptr < state->end) ? |
| 17144 | 410 SRE_UNI_IS_WORD((int) ptr[0]) : 0; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
411 return thisp == thatp; |
|
18363
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
412 #endif |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
413 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
414 } |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
415 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
416 return 0; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
417 } |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
418 |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
419 LOCAL(int) |
|
13886
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
420 SRE_CHARSET(SRE_CODE* set, SRE_CODE ch) |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
421 { |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
422 /* check if character is a member of the given set */ |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
423 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
424 int ok = 1; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
425 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
426 for (;;) { |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
427 switch (*set++) { |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
428 |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
429 case SRE_OP_FAILURE: |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
430 return !ok; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
431 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
432 case SRE_OP_LITERAL: |
|
13789
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
433 /* <LITERAL> <code> */ |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
434 if (ch == set[0]) |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
435 return ok; |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
436 set++; |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
437 break; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
438 |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
439 case SRE_OP_CATEGORY: |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
440 /* <CATEGORY> <code> */ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
441 if (sre_category(set[0], (int) ch)) |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
442 return ok; |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
443 set += 1; |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
444 break; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
445 |
|
13306
384fa9b9e253
-- use charset bitmaps where appropriate. this gives a 5-10%
Fredrik Lundh <fredrik@pythonware.com>
parents:
13305
diff
changeset
|
446 case SRE_OP_CHARSET: |
|
28691
c9925fa29ea3
Fully support 32-bit codes. Enable BIGCHARSET in UCS-4 builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
28603
diff
changeset
|
447 if (sizeof(SRE_CODE) == 2) { |
|
c9925fa29ea3
Fully support 32-bit codes. Enable BIGCHARSET in UCS-4 builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
28603
diff
changeset
|
448 /* <CHARSET> <bitmap> (16 bits per code word) */ |
|
c9925fa29ea3
Fully support 32-bit codes. Enable BIGCHARSET in UCS-4 builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
28603
diff
changeset
|
449 if (ch < 256 && (set[ch >> 4] & (1 << (ch & 15)))) |
|
c9925fa29ea3
Fully support 32-bit codes. Enable BIGCHARSET in UCS-4 builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
28603
diff
changeset
|
450 return ok; |
|
c9925fa29ea3
Fully support 32-bit codes. Enable BIGCHARSET in UCS-4 builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
28603
diff
changeset
|
451 set += 16; |
|
36363
6fcb5405074e
_compile(): raise an exception if downcasting to SRE_CODE
Tim Peters <tim.peters@gmail.com>
parents:
36324
diff
changeset
|
452 } |
|
28691
c9925fa29ea3
Fully support 32-bit codes. Enable BIGCHARSET in UCS-4 builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
28603
diff
changeset
|
453 else { |
|
c9925fa29ea3
Fully support 32-bit codes. Enable BIGCHARSET in UCS-4 builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
28603
diff
changeset
|
454 /* <CHARSET> <bitmap> (32 bits per code word) */ |
|
c9925fa29ea3
Fully support 32-bit codes. Enable BIGCHARSET in UCS-4 builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
28603
diff
changeset
|
455 if (ch < 256 && (set[ch >> 5] & (1 << (ch & 31)))) |
|
c9925fa29ea3
Fully support 32-bit codes. Enable BIGCHARSET in UCS-4 builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
28603
diff
changeset
|
456 return ok; |
|
c9925fa29ea3
Fully support 32-bit codes. Enable BIGCHARSET in UCS-4 builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
28603
diff
changeset
|
457 set += 8; |
|
c9925fa29ea3
Fully support 32-bit codes. Enable BIGCHARSET in UCS-4 builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
28603
diff
changeset
|
458 } |
|
13306
384fa9b9e253
-- use charset bitmaps where appropriate. this gives a 5-10%
Fredrik Lundh <fredrik@pythonware.com>
parents:
13305
diff
changeset
|
459 break; |
|
384fa9b9e253
-- use charset bitmaps where appropriate. this gives a 5-10%
Fredrik Lundh <fredrik@pythonware.com>
parents:
13305
diff
changeset
|
460 |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
461 case SRE_OP_RANGE: |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
462 /* <RANGE> <lower> <upper> */ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
463 if (set[0] <= ch && ch <= set[1]) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
464 return ok; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
465 set += 2; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
466 break; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
467 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
468 case SRE_OP_NEGATE: |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
469 ok = !ok; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
470 break; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
471 |
|
18367
eaabca13174e
pythonware repository roundtrip (untabification)
Fredrik Lundh <fredrik@pythonware.com>
parents:
18366
diff
changeset
|
472 case SRE_OP_BIGCHARSET: |
|
eaabca13174e
pythonware repository roundtrip (untabification)
Fredrik Lundh <fredrik@pythonware.com>
parents:
18366
diff
changeset
|
473 /* <BIGCHARSET> <blockcount> <256 blockindices> <blocks> */ |
|
eaabca13174e
pythonware repository roundtrip (untabification)
Fredrik Lundh <fredrik@pythonware.com>
parents:
18366
diff
changeset
|
474 { |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
475 Py_ssize_t count, block; |
|
18367
eaabca13174e
pythonware repository roundtrip (untabification)
Fredrik Lundh <fredrik@pythonware.com>
parents:
18366
diff
changeset
|
476 count = *(set++); |
|
28691
c9925fa29ea3
Fully support 32-bit codes. Enable BIGCHARSET in UCS-4 builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
28603
diff
changeset
|
477 |
|
c9925fa29ea3
Fully support 32-bit codes. Enable BIGCHARSET in UCS-4 builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
28603
diff
changeset
|
478 if (sizeof(SRE_CODE) == 2) { |
|
c9925fa29ea3
Fully support 32-bit codes. Enable BIGCHARSET in UCS-4 builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
28603
diff
changeset
|
479 block = ((unsigned char*)set)[ch >> 8]; |
|
c9925fa29ea3
Fully support 32-bit codes. Enable BIGCHARSET in UCS-4 builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
28603
diff
changeset
|
480 set += 128; |
|
c9925fa29ea3
Fully support 32-bit codes. Enable BIGCHARSET in UCS-4 builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
28603
diff
changeset
|
481 if (set[block*16 + ((ch & 255)>>4)] & (1 << (ch & 15))) |
|
c9925fa29ea3
Fully support 32-bit codes. Enable BIGCHARSET in UCS-4 builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
28603
diff
changeset
|
482 return ok; |
|
c9925fa29ea3
Fully support 32-bit codes. Enable BIGCHARSET in UCS-4 builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
28603
diff
changeset
|
483 set += count*16; |
|
c9925fa29ea3
Fully support 32-bit codes. Enable BIGCHARSET in UCS-4 builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
28603
diff
changeset
|
484 } |
|
c9925fa29ea3
Fully support 32-bit codes. Enable BIGCHARSET in UCS-4 builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
28603
diff
changeset
|
485 else { |
|
31525
4ef568c653d9
- Fixing annoying warnings.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
31180
diff
changeset
|
486 /* !(c & ~N) == (c < N+1) for any unsigned c, this avoids |
|
4ef568c653d9
- Fixing annoying warnings.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
31180
diff
changeset
|
487 * warnings when c's type supports only numbers < N+1 */ |
|
4ef568c653d9
- Fixing annoying warnings.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
31180
diff
changeset
|
488 if (!(ch & ~65535)) |
|
28691
c9925fa29ea3
Fully support 32-bit codes. Enable BIGCHARSET in UCS-4 builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
28603
diff
changeset
|
489 block = ((unsigned char*)set)[ch >> 8]; |
|
c9925fa29ea3
Fully support 32-bit codes. Enable BIGCHARSET in UCS-4 builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
28603
diff
changeset
|
490 else |
|
c9925fa29ea3
Fully support 32-bit codes. Enable BIGCHARSET in UCS-4 builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
28603
diff
changeset
|
491 block = -1; |
|
c9925fa29ea3
Fully support 32-bit codes. Enable BIGCHARSET in UCS-4 builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
28603
diff
changeset
|
492 set += 64; |
|
36363
6fcb5405074e
_compile(): raise an exception if downcasting to SRE_CODE
Tim Peters <tim.peters@gmail.com>
parents:
36324
diff
changeset
|
493 if (block >=0 && |
|
28691
c9925fa29ea3
Fully support 32-bit codes. Enable BIGCHARSET in UCS-4 builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
28603
diff
changeset
|
494 (set[block*8 + ((ch & 255)>>5)] & (1 << (ch & 31)))) |
|
c9925fa29ea3
Fully support 32-bit codes. Enable BIGCHARSET in UCS-4 builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
28603
diff
changeset
|
495 return ok; |
|
c9925fa29ea3
Fully support 32-bit codes. Enable BIGCHARSET in UCS-4 builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
28603
diff
changeset
|
496 set += count*8; |
|
c9925fa29ea3
Fully support 32-bit codes. Enable BIGCHARSET in UCS-4 builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
28603
diff
changeset
|
497 } |
|
18367
eaabca13174e
pythonware repository roundtrip (untabification)
Fredrik Lundh <fredrik@pythonware.com>
parents:
18366
diff
changeset
|
498 break; |
|
eaabca13174e
pythonware repository roundtrip (untabification)
Fredrik Lundh <fredrik@pythonware.com>
parents:
18366
diff
changeset
|
499 } |
|
18366
451c0abbf8a9
added martin's BIGCHARSET patch to SRE 2.1.1. martin reports 2x
Fredrik Lundh <fredrik@pythonware.com>
parents:
18363
diff
changeset
|
500 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
501 default: |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
502 /* internal error -- there's not much we can do about it |
|
13139
c2207d6c03a8
- fixed another split problem
Fredrik Lundh <fredrik@pythonware.com>
parents:
13136
diff
changeset
|
503 here, so let's just pretend it didn't match... */ |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
504 return 0; |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
505 } |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
506 } |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
507 } |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
508 |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
509 LOCAL(Py_ssize_t) SRE_MATCH(SRE_STATE* state, SRE_CODE* pattern); |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
510 |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
511 LOCAL(Py_ssize_t) |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
512 SRE_COUNT(SRE_STATE* state, SRE_CODE* pattern, Py_ssize_t maxcount) |
|
13829
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
513 { |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
514 SRE_CODE chr; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
515 SRE_CHAR* ptr = (SRE_CHAR *)state->ptr; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
516 SRE_CHAR* end = (SRE_CHAR *)state->end; |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
517 Py_ssize_t i; |
|
13829
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
518 |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
519 /* adjust end */ |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
520 if (maxcount < end - ptr && maxcount != 65535) |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
521 end = ptr + maxcount; |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
522 |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
523 switch (pattern[0]) { |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
524 |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
525 case SRE_OP_IN: |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
526 /* repeated set */ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
527 TRACE(("|%p|%p|COUNT IN\n", pattern, ptr)); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
528 while (ptr < end && SRE_CHARSET(pattern + 2, *ptr)) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
529 ptr++; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
530 break; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
531 |
|
13829
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
532 case SRE_OP_ANY: |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
533 /* repeated dot wildcard. */ |
|
13886
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
534 TRACE(("|%p|%p|COUNT ANY\n", pattern, ptr)); |
|
13829
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
535 while (ptr < end && !SRE_IS_LINEBREAK(*ptr)) |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
536 ptr++; |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
537 break; |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
538 |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
539 case SRE_OP_ANY_ALL: |
|
33398
d1f8c632b605
Fixing bug #817234, which made SRE get into an infinite loop on
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
32695
diff
changeset
|
540 /* repeated dot wildcard. skip to the end of the target |
|
13829
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
541 string, and backtrack from there */ |
|
13886
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
542 TRACE(("|%p|%p|COUNT ANY_ALL\n", pattern, ptr)); |
|
13829
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
543 ptr = end; |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
544 break; |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
545 |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
546 case SRE_OP_LITERAL: |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
547 /* repeated literal */ |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
548 chr = pattern[1]; |
|
13886
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
549 TRACE(("|%p|%p|COUNT LITERAL %d\n", pattern, ptr, chr)); |
|
13829
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
550 while (ptr < end && (SRE_CODE) *ptr == chr) |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
551 ptr++; |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
552 break; |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
553 |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
554 case SRE_OP_LITERAL_IGNORE: |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
555 /* repeated literal */ |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
556 chr = pattern[1]; |
|
13886
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
557 TRACE(("|%p|%p|COUNT LITERAL_IGNORE %d\n", pattern, ptr, chr)); |
|
13829
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
558 while (ptr < end && (SRE_CODE) state->lower(*ptr) == chr) |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
559 ptr++; |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
560 break; |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
561 |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
562 case SRE_OP_NOT_LITERAL: |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
563 /* repeated non-literal */ |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
564 chr = pattern[1]; |
|
13886
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
565 TRACE(("|%p|%p|COUNT NOT_LITERAL %d\n", pattern, ptr, chr)); |
|
13829
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
566 while (ptr < end && (SRE_CODE) *ptr != chr) |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
567 ptr++; |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
568 break; |
|
36363
6fcb5405074e
_compile(): raise an exception if downcasting to SRE_CODE
Tim Peters <tim.peters@gmail.com>
parents:
36324
diff
changeset
|
569 |
|
13829
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
570 case SRE_OP_NOT_LITERAL_IGNORE: |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
571 /* repeated non-literal */ |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
572 chr = pattern[1]; |
|
13886
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
573 TRACE(("|%p|%p|COUNT NOT_LITERAL_IGNORE %d\n", pattern, ptr, chr)); |
|
13829
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
574 while (ptr < end && (SRE_CODE) state->lower(*ptr) != chr) |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
575 ptr++; |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
576 break; |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
577 |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
578 default: |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
579 /* repeated single character pattern */ |
|
13886
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
580 TRACE(("|%p|%p|COUNT SUBPATTERN\n", pattern, ptr)); |
|
13829
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
581 while ((SRE_CHAR*) state->ptr < end) { |
|
31180
4942a0b63c8c
Cleaning up recursive pieces left in the reorganization.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30712
diff
changeset
|
582 i = SRE_MATCH(state, pattern); |
|
13829
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
583 if (i < 0) |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
584 return i; |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
585 if (!i) |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
586 break; |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
587 } |
|
13886
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
588 TRACE(("|%p|%p|COUNT %d\n", pattern, ptr, |
|
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
589 (SRE_CHAR*) state->ptr - ptr)); |
|
13829
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
590 return (SRE_CHAR*) state->ptr - ptr; |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
591 } |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
592 |
|
13886
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
593 TRACE(("|%p|%p|COUNT %d\n", pattern, ptr, ptr - (SRE_CHAR*) state->ptr)); |
|
13829
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
594 return ptr - (SRE_CHAR*) state->ptr; |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
595 } |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
596 |
|
14234
3e5d6e2093df
don't mistake memory errors (including reaching the recursion limit)
Fredrik Lundh <fredrik@pythonware.com>
parents:
14056
diff
changeset
|
597 #if 0 /* not used in this release */ |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
598 LOCAL(int) |
|
13886
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
599 SRE_INFO(SRE_STATE* state, SRE_CODE* pattern) |
|
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
600 { |
|
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
601 /* check if an SRE_OP_INFO block matches at the current position. |
|
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
602 returns the number of SRE_CODE objects to skip if successful, 0 |
|
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
603 if no match */ |
|
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
604 |
|
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
605 SRE_CHAR* end = state->end; |
|
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
606 SRE_CHAR* ptr = state->ptr; |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
607 Py_ssize_t i; |
|
13886
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
608 |
|
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
609 /* check minimal length */ |
|
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
610 if (pattern[3] && (end - ptr) < pattern[3]) |
|
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
611 return 0; |
|
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
612 |
|
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
613 /* check known prefix */ |
|
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
614 if (pattern[2] & SRE_INFO_PREFIX && pattern[5] > 1) { |
|
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
615 /* <length> <skip> <prefix data> <overlap data> */ |
|
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
616 for (i = 0; i < pattern[5]; i++) |
|
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
617 if ((SRE_CODE) ptr[i] != pattern[7 + i]) |
|
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
618 return 0; |
|
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
619 return pattern[0] + 2 * pattern[6]; |
|
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
620 } |
|
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
621 return pattern[0]; |
|
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
622 } |
|
14234
3e5d6e2093df
don't mistake memory errors (including reaching the recursion limit)
Fredrik Lundh <fredrik@pythonware.com>
parents:
14056
diff
changeset
|
623 #endif |
|
13886
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
624 |
|
28866
743ae9cb3a83
- Included detailed documentation in _sre.c explaining how, when, and why
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28865
diff
changeset
|
625 /* The macros below should be used to protect recursive SRE_MATCH() |
|
743ae9cb3a83
- Included detailed documentation in _sre.c explaining how, when, and why
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28865
diff
changeset
|
626 * calls that *failed* and do *not* return immediately (IOW, those |
|
743ae9cb3a83
- Included detailed documentation in _sre.c explaining how, when, and why
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28865
diff
changeset
|
627 * that will backtrack). Explaining: |
|
743ae9cb3a83
- Included detailed documentation in _sre.c explaining how, when, and why
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28865
diff
changeset
|
628 * |
|
743ae9cb3a83
- Included detailed documentation in _sre.c explaining how, when, and why
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28865
diff
changeset
|
629 * - Recursive SRE_MATCH() returned true: that's usually a success |
|
743ae9cb3a83
- Included detailed documentation in _sre.c explaining how, when, and why
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28865
diff
changeset
|
630 * (besides atypical cases like ASSERT_NOT), therefore there's no |
|
743ae9cb3a83
- Included detailed documentation in _sre.c explaining how, when, and why
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28865
diff
changeset
|
631 * reason to restore lastmark; |
|
743ae9cb3a83
- Included detailed documentation in _sre.c explaining how, when, and why
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28865
diff
changeset
|
632 * |
|
743ae9cb3a83
- Included detailed documentation in _sre.c explaining how, when, and why
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28865
diff
changeset
|
633 * - Recursive SRE_MATCH() returned false but the current SRE_MATCH() |
|
743ae9cb3a83
- Included detailed documentation in _sre.c explaining how, when, and why
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28865
diff
changeset
|
634 * is returning to the caller: If the current SRE_MATCH() is the |
|
743ae9cb3a83
- Included detailed documentation in _sre.c explaining how, when, and why
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28865
diff
changeset
|
635 * top function of the recursion, returning false will be a matching |
|
743ae9cb3a83
- Included detailed documentation in _sre.c explaining how, when, and why
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28865
diff
changeset
|
636 * failure, and it doesn't matter where lastmark is pointing to. |
|
743ae9cb3a83
- Included detailed documentation in _sre.c explaining how, when, and why
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28865
diff
changeset
|
637 * If it's *not* the top function, it will be a recursive SRE_MATCH() |
|
743ae9cb3a83
- Included detailed documentation in _sre.c explaining how, when, and why
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28865
diff
changeset
|
638 * failure by itself, and the calling SRE_MATCH() will have to deal |
|
743ae9cb3a83
- Included detailed documentation in _sre.c explaining how, when, and why
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28865
diff
changeset
|
639 * with the failure by the same rules explained here (it will restore |
|
743ae9cb3a83
- Included detailed documentation in _sre.c explaining how, when, and why
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28865
diff
changeset
|
640 * lastmark by itself if necessary); |
|
743ae9cb3a83
- Included detailed documentation in _sre.c explaining how, when, and why
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28865
diff
changeset
|
641 * |
|
743ae9cb3a83
- Included detailed documentation in _sre.c explaining how, when, and why
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28865
diff
changeset
|
642 * - Recursive SRE_MATCH() returned false, and will continue the |
|
743ae9cb3a83
- Included detailed documentation in _sre.c explaining how, when, and why
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28865
diff
changeset
|
643 * outside 'for' loop: must be protected when breaking, since the next |
|
743ae9cb3a83
- Included detailed documentation in _sre.c explaining how, when, and why
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28865
diff
changeset
|
644 * OP could potentially depend on lastmark; |
|
36363
6fcb5405074e
_compile(): raise an exception if downcasting to SRE_CODE
Tim Peters <tim.peters@gmail.com>
parents:
36324
diff
changeset
|
645 * |
|
28866
743ae9cb3a83
- Included detailed documentation in _sre.c explaining how, when, and why
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28865
diff
changeset
|
646 * - Recursive SRE_MATCH() returned false, and will be called again |
|
743ae9cb3a83
- Included detailed documentation in _sre.c explaining how, when, and why
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28865
diff
changeset
|
647 * inside a local for/while loop: must be protected between each |
|
743ae9cb3a83
- Included detailed documentation in _sre.c explaining how, when, and why
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28865
diff
changeset
|
648 * loop iteration, since the recursive SRE_MATCH() could do anything, |
|
743ae9cb3a83
- Included detailed documentation in _sre.c explaining how, when, and why
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28865
diff
changeset
|
649 * and could potentially depend on lastmark. |
|
743ae9cb3a83
- Included detailed documentation in _sre.c explaining how, when, and why
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28865
diff
changeset
|
650 * |
|
743ae9cb3a83
- Included detailed documentation in _sre.c explaining how, when, and why
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28865
diff
changeset
|
651 * For more information, check the discussion at SF patch #712900. |
|
743ae9cb3a83
- Included detailed documentation in _sre.c explaining how, when, and why
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28865
diff
changeset
|
652 */ |
|
28704
fa7874ec6a71
More work on bug #672491 and patch #712900.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28700
diff
changeset
|
653 #define LASTMARK_SAVE() \ |
|
fa7874ec6a71
More work on bug #672491 and patch #712900.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28700
diff
changeset
|
654 do { \ |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
655 ctx->lastmark = state->lastmark; \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
656 ctx->lastindex = state->lastindex; \ |
|
28704
fa7874ec6a71
More work on bug #672491 and patch #712900.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28700
diff
changeset
|
657 } while (0) |
|
fa7874ec6a71
More work on bug #672491 and patch #712900.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28700
diff
changeset
|
658 #define LASTMARK_RESTORE() \ |
|
fa7874ec6a71
More work on bug #672491 and patch #712900.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28700
diff
changeset
|
659 do { \ |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
660 state->lastmark = ctx->lastmark; \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
661 state->lastindex = ctx->lastindex; \ |
|
28704
fa7874ec6a71
More work on bug #672491 and patch #712900.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28700
diff
changeset
|
662 } while (0) |
|
fa7874ec6a71
More work on bug #672491 and patch #712900.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28700
diff
changeset
|
663 |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
664 #define RETURN_ERROR(i) do { return i; } while(0) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
665 #define RETURN_FAILURE do { ret = 0; goto exit; } while(0) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
666 #define RETURN_SUCCESS do { ret = 1; goto exit; } while(0) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
667 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
668 #define RETURN_ON_ERROR(i) \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
669 do { if (i < 0) RETURN_ERROR(i); } while (0) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
670 #define RETURN_ON_SUCCESS(i) \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
671 do { RETURN_ON_ERROR(i); if (i > 0) RETURN_SUCCESS; } while (0) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
672 #define RETURN_ON_FAILURE(i) \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
673 do { RETURN_ON_ERROR(i); if (i == 0) RETURN_FAILURE; } while (0) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
674 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
675 #define SFY(x) #x |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
676 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
677 #define DATA_STACK_ALLOC(state, type, ptr) \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
678 do { \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
679 alloc_pos = state->data_stack_base; \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
680 TRACE(("allocating %s in %d (%d)\n", \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
681 SFY(type), alloc_pos, sizeof(type))); \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
682 if (state->data_stack_size < alloc_pos+sizeof(type)) { \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
683 int j = data_stack_grow(state, sizeof(type)); \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
684 if (j < 0) return j; \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
685 if (ctx_pos != -1) \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
686 DATA_STACK_LOOKUP_AT(state, SRE_MATCH_CONTEXT, ctx, ctx_pos); \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
687 } \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
688 ptr = (type*)(state->data_stack+alloc_pos); \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
689 state->data_stack_base += sizeof(type); \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
690 } while (0) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
691 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
692 #define DATA_STACK_LOOKUP_AT(state, type, ptr, pos) \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
693 do { \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
694 TRACE(("looking up %s at %d\n", SFY(type), pos)); \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
695 ptr = (type*)(state->data_stack+pos); \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
696 } while (0) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
697 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
698 #define DATA_STACK_PUSH(state, data, size) \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
699 do { \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
700 TRACE(("copy data in %p to %d (%d)\n", \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
701 data, state->data_stack_base, size)); \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
702 if (state->data_stack_size < state->data_stack_base+size) { \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
703 int j = data_stack_grow(state, size); \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
704 if (j < 0) return j; \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
705 if (ctx_pos != -1) \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
706 DATA_STACK_LOOKUP_AT(state, SRE_MATCH_CONTEXT, ctx, ctx_pos); \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
707 } \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
708 memcpy(state->data_stack+state->data_stack_base, data, size); \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
709 state->data_stack_base += size; \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
710 } while (0) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
711 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
712 #define DATA_STACK_POP(state, data, size, discard) \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
713 do { \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
714 TRACE(("copy data to %p from %d (%d)\n", \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
715 data, state->data_stack_base-size, size)); \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
716 memcpy(data, state->data_stack+state->data_stack_base-size, size); \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
717 if (discard) \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
718 state->data_stack_base -= size; \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
719 } while (0) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
720 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
721 #define DATA_STACK_POP_DISCARD(state, size) \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
722 do { \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
723 TRACE(("discard data from %d (%d)\n", \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
724 state->data_stack_base-size, size)); \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
725 state->data_stack_base -= size; \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
726 } while(0) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
727 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
728 #define DATA_PUSH(x) \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
729 DATA_STACK_PUSH(state, (x), sizeof(*(x))) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
730 #define DATA_POP(x) \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
731 DATA_STACK_POP(state, (x), sizeof(*(x)), 1) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
732 #define DATA_POP_DISCARD(x) \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
733 DATA_STACK_POP_DISCARD(state, sizeof(*(x))) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
734 #define DATA_ALLOC(t,p) \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
735 DATA_STACK_ALLOC(state, t, p) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
736 #define DATA_LOOKUP_AT(t,p,pos) \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
737 DATA_STACK_LOOKUP_AT(state,t,p,pos) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
738 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
739 #define MARK_PUSH(lastmark) \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
740 do if (lastmark > 0) { \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
741 i = lastmark; /* ctx->lastmark may change if reallocated */ \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
742 DATA_STACK_PUSH(state, state->mark, (i+1)*sizeof(void*)); \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
743 } while (0) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
744 #define MARK_POP(lastmark) \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
745 do if (lastmark > 0) { \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
746 DATA_STACK_POP(state, state->mark, (lastmark+1)*sizeof(void*), 1); \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
747 } while (0) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
748 #define MARK_POP_KEEP(lastmark) \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
749 do if (lastmark > 0) { \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
750 DATA_STACK_POP(state, state->mark, (lastmark+1)*sizeof(void*), 0); \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
751 } while (0) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
752 #define MARK_POP_DISCARD(lastmark) \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
753 do if (lastmark > 0) { \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
754 DATA_STACK_POP_DISCARD(state, (lastmark+1)*sizeof(void*)); \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
755 } while (0) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
756 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
757 #define JUMP_NONE 0 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
758 #define JUMP_MAX_UNTIL_1 1 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
759 #define JUMP_MAX_UNTIL_2 2 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
760 #define JUMP_MAX_UNTIL_3 3 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
761 #define JUMP_MIN_UNTIL_1 4 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
762 #define JUMP_MIN_UNTIL_2 5 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
763 #define JUMP_MIN_UNTIL_3 6 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
764 #define JUMP_REPEAT 7 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
765 #define JUMP_REPEAT_ONE_1 8 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
766 #define JUMP_REPEAT_ONE_2 9 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
767 #define JUMP_MIN_REPEAT_ONE 10 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
768 #define JUMP_BRANCH 11 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
769 #define JUMP_ASSERT 12 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
770 #define JUMP_ASSERT_NOT 13 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
771 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
772 #define DO_JUMP(jumpvalue, jumplabel, nextpattern) \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
773 DATA_ALLOC(SRE_MATCH_CONTEXT, nextctx); \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
774 nextctx->last_ctx_pos = ctx_pos; \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
775 nextctx->jump = jumpvalue; \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
776 nextctx->pattern = nextpattern; \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
777 ctx_pos = alloc_pos; \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
778 ctx = nextctx; \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
779 goto entrance; \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
780 jumplabel: \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
781 while (0) /* gcc doesn't like labels at end of scopes */ \ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
782 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
783 typedef struct { |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
784 Py_ssize_t last_ctx_pos; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
785 Py_ssize_t jump; |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
786 SRE_CHAR* ptr; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
787 SRE_CODE* pattern; |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
788 Py_ssize_t count; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
789 Py_ssize_t lastmark; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
790 Py_ssize_t lastindex; |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
791 union { |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
792 SRE_CODE chr; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
793 SRE_REPEAT* rep; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
794 } u; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
795 } SRE_MATCH_CONTEXT; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
796 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
797 /* check if string matches the given pattern. returns <0 for |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
798 error, 0 for failure, and 1 for success */ |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
799 LOCAL(Py_ssize_t) |
|
31180
4942a0b63c8c
Cleaning up recursive pieces left in the reorganization.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30712
diff
changeset
|
800 SRE_MATCH(SRE_STATE* state, SRE_CODE* pattern) |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
801 { |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
802 SRE_CHAR* end = (SRE_CHAR *)state->end; |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
803 Py_ssize_t alloc_pos, ctx_pos = -1; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
804 Py_ssize_t i, ret = 0; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
805 Py_ssize_t jump; |
|
44604
94ab572ed6dd
Merged revisions 59843-59863 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44351
diff
changeset
|
806 unsigned int sigcount=0; |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
807 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
808 SRE_MATCH_CONTEXT* ctx; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
809 SRE_MATCH_CONTEXT* nextctx; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
810 |
|
31180
4942a0b63c8c
Cleaning up recursive pieces left in the reorganization.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30712
diff
changeset
|
811 TRACE(("|%p|%p|ENTER\n", pattern, state->ptr)); |
|
13829
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
812 |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
813 DATA_ALLOC(SRE_MATCH_CONTEXT, ctx); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
814 ctx->last_ctx_pos = -1; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
815 ctx->jump = JUMP_NONE; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
816 ctx->pattern = pattern; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
817 ctx_pos = alloc_pos; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
818 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
819 entrance: |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
820 |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
821 ctx->ptr = (SRE_CHAR *)state->ptr; |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
822 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
823 if (ctx->pattern[0] == SRE_OP_INFO) { |
|
13164
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
824 /* optimization info block */ |
|
13789
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
825 /* <INFO> <1=skip> <2=flags> <3=min> ... */ |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
826 if (ctx->pattern[3] && (end - ctx->ptr) < ctx->pattern[3]) { |
|
13164
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
827 TRACE(("reject (got %d chars, need %d)\n", |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
828 (end - ctx->ptr), ctx->pattern[3])); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
829 RETURN_FAILURE; |
|
13164
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
830 } |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
831 ctx->pattern += ctx->pattern[1] + 1; |
|
13164
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
832 } |
|
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
833 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
834 for (;;) { |
|
44604
94ab572ed6dd
Merged revisions 59843-59863 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44351
diff
changeset
|
835 ++sigcount; |
|
94ab572ed6dd
Merged revisions 59843-59863 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44351
diff
changeset
|
836 if ((0 == (sigcount & 0xfff)) && PyErr_CheckSignals()) |
|
94ab572ed6dd
Merged revisions 59843-59863 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44351
diff
changeset
|
837 RETURN_ERROR(SRE_ERROR_INTERRUPTED); |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
838 |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
839 switch (*ctx->pattern++) { |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
840 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
841 case SRE_OP_MARK: |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
842 /* set mark */ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
843 /* <MARK> <gid> */ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
844 TRACE(("|%p|%p|MARK %d\n", ctx->pattern, |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
845 ctx->ptr, ctx->pattern[0])); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
846 i = ctx->pattern[0]; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
847 if (i & 1) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
848 state->lastindex = i/2 + 1; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
849 if (i > state->lastmark) { |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
850 /* state->lastmark is the highest valid index in the |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
851 state->mark array. If it is increased by more than 1, |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
852 the intervening marks must be set to NULL to signal |
|
36363
6fcb5405074e
_compile(): raise an exception if downcasting to SRE_CODE
Tim Peters <tim.peters@gmail.com>
parents:
36324
diff
changeset
|
853 that these marks have not been encountered. */ |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
854 Py_ssize_t j = state->lastmark + 1; |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
855 while (j < i) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
856 state->mark[j++] = NULL; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
857 state->lastmark = i; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
858 } |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
859 state->mark[i] = ctx->ptr; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
860 ctx->pattern++; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
861 break; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
862 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
863 case SRE_OP_LITERAL: |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
864 /* match literal string */ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
865 /* <LITERAL> <code> */ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
866 TRACE(("|%p|%p|LITERAL %d\n", ctx->pattern, |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
867 ctx->ptr, *ctx->pattern)); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
868 if (ctx->ptr >= end || (SRE_CODE) ctx->ptr[0] != ctx->pattern[0]) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
869 RETURN_FAILURE; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
870 ctx->pattern++; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
871 ctx->ptr++; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
872 break; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
873 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
874 case SRE_OP_NOT_LITERAL: |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
875 /* match anything that is not literal character */ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
876 /* <NOT_LITERAL> <code> */ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
877 TRACE(("|%p|%p|NOT_LITERAL %d\n", ctx->pattern, |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
878 ctx->ptr, *ctx->pattern)); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
879 if (ctx->ptr >= end || (SRE_CODE) ctx->ptr[0] == ctx->pattern[0]) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
880 RETURN_FAILURE; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
881 ctx->pattern++; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
882 ctx->ptr++; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
883 break; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
884 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
885 case SRE_OP_SUCCESS: |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
886 /* end of pattern */ |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
887 TRACE(("|%p|%p|SUCCESS\n", ctx->pattern, ctx->ptr)); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
888 state->ptr = ctx->ptr; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
889 RETURN_SUCCESS; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
890 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
891 case SRE_OP_AT: |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
892 /* match at given position */ |
|
13789
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
893 /* <AT> <code> */ |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
894 TRACE(("|%p|%p|AT %d\n", ctx->pattern, ctx->ptr, *ctx->pattern)); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
895 if (!SRE_AT(state, ctx->ptr, *ctx->pattern)) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
896 RETURN_FAILURE; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
897 ctx->pattern++; |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
898 break; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
899 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
900 case SRE_OP_CATEGORY: |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
901 /* match at given category */ |
|
13789
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
902 /* <CATEGORY> <code> */ |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
903 TRACE(("|%p|%p|CATEGORY %d\n", ctx->pattern, |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
904 ctx->ptr, *ctx->pattern)); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
905 if (ctx->ptr >= end || !sre_category(ctx->pattern[0], ctx->ptr[0])) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
906 RETURN_FAILURE; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
907 ctx->pattern++; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
908 ctx->ptr++; |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
909 break; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
910 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
911 case SRE_OP_ANY: |
|
13795
8295f8506eae
final 0.9.8 updates:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13793
diff
changeset
|
912 /* match anything (except a newline) */ |
|
8295f8506eae
final 0.9.8 updates:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13793
diff
changeset
|
913 /* <ANY> */ |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
914 TRACE(("|%p|%p|ANY\n", ctx->pattern, ctx->ptr)); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
915 if (ctx->ptr >= end || SRE_IS_LINEBREAK(ctx->ptr[0])) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
916 RETURN_FAILURE; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
917 ctx->ptr++; |
|
13795
8295f8506eae
final 0.9.8 updates:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13793
diff
changeset
|
918 break; |
|
8295f8506eae
final 0.9.8 updates:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13793
diff
changeset
|
919 |
|
8295f8506eae
final 0.9.8 updates:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13793
diff
changeset
|
920 case SRE_OP_ANY_ALL: |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
921 /* match anything */ |
|
13795
8295f8506eae
final 0.9.8 updates:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13793
diff
changeset
|
922 /* <ANY_ALL> */ |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
923 TRACE(("|%p|%p|ANY_ALL\n", ctx->pattern, ctx->ptr)); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
924 if (ctx->ptr >= end) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
925 RETURN_FAILURE; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
926 ctx->ptr++; |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
927 break; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
928 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
929 case SRE_OP_IN: |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
930 /* match set member (or non_member) */ |
|
13789
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
931 /* <IN> <skip> <set> */ |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
932 TRACE(("|%p|%p|IN\n", ctx->pattern, ctx->ptr)); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
933 if (ctx->ptr >= end || !SRE_CHARSET(ctx->pattern + 1, *ctx->ptr)) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
934 RETURN_FAILURE; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
935 ctx->pattern += ctx->pattern[0]; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
936 ctx->ptr++; |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
937 break; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
938 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
939 case SRE_OP_LITERAL_IGNORE: |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
940 TRACE(("|%p|%p|LITERAL_IGNORE %d\n", |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
941 ctx->pattern, ctx->ptr, ctx->pattern[0])); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
942 if (ctx->ptr >= end || |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
943 state->lower(*ctx->ptr) != state->lower(*ctx->pattern)) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
944 RETURN_FAILURE; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
945 ctx->pattern++; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
946 ctx->ptr++; |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
947 break; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
948 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
949 case SRE_OP_NOT_LITERAL_IGNORE: |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
950 TRACE(("|%p|%p|NOT_LITERAL_IGNORE %d\n", |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
951 ctx->pattern, ctx->ptr, *ctx->pattern)); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
952 if (ctx->ptr >= end || |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
953 state->lower(*ctx->ptr) == state->lower(*ctx->pattern)) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
954 RETURN_FAILURE; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
955 ctx->pattern++; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
956 ctx->ptr++; |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
957 break; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
958 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
959 case SRE_OP_IN_IGNORE: |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
960 TRACE(("|%p|%p|IN_IGNORE\n", ctx->pattern, ctx->ptr)); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
961 if (ctx->ptr >= end |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
962 || !SRE_CHARSET(ctx->pattern+1, |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
963 (SRE_CODE)state->lower(*ctx->ptr))) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
964 RETURN_FAILURE; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
965 ctx->pattern += ctx->pattern[0]; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
966 ctx->ptr++; |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
967 break; |
|
13308
fc2ad6fa08ec
- actually enabled charset anchors in the engine (still not
Fredrik Lundh <fredrik@pythonware.com>
parents:
13306
diff
changeset
|
968 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
969 case SRE_OP_JUMP: |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
970 case SRE_OP_INFO: |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
971 /* jump forward */ |
|
13789
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
972 /* <JUMP> <offset> */ |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
973 TRACE(("|%p|%p|JUMP %d\n", ctx->pattern, |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
974 ctx->ptr, ctx->pattern[0])); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
975 ctx->pattern += ctx->pattern[0]; |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
976 break; |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
977 |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
978 case SRE_OP_BRANCH: |
|
13789
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
979 /* alternation */ |
|
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
980 /* <BRANCH> <0=skip> code <JUMP> ... <NULL> */ |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
981 TRACE(("|%p|%p|BRANCH\n", ctx->pattern, ctx->ptr)); |
|
28704
fa7874ec6a71
More work on bug #672491 and patch #712900.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28700
diff
changeset
|
982 LASTMARK_SAVE(); |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
983 ctx->u.rep = state->repeat; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
984 if (ctx->u.rep) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
985 MARK_PUSH(ctx->lastmark); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
986 for (; ctx->pattern[0]; ctx->pattern += ctx->pattern[0]) { |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
987 if (ctx->pattern[1] == SRE_OP_LITERAL && |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
988 (ctx->ptr >= end || |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
989 (SRE_CODE) *ctx->ptr != ctx->pattern[2])) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
990 continue; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
991 if (ctx->pattern[1] == SRE_OP_IN && |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
992 (ctx->ptr >= end || |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
993 !SRE_CHARSET(ctx->pattern + 3, (SRE_CODE) *ctx->ptr))) |
|
13886
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
994 continue; |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
995 state->ptr = ctx->ptr; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
996 DO_JUMP(JUMP_BRANCH, jump_branch, ctx->pattern+1); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
997 if (ret) { |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
998 if (ctx->u.rep) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
999 MARK_POP_DISCARD(ctx->lastmark); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1000 RETURN_ON_ERROR(ret); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1001 RETURN_SUCCESS; |
|
28864
16374052cb5d
Applied patch #725106, by Greg Chapman, fixing capturing groups
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28862
diff
changeset
|
1002 } |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1003 if (ctx->u.rep) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1004 MARK_POP_KEEP(ctx->lastmark); |
|
28704
fa7874ec6a71
More work on bug #672491 and patch #712900.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28700
diff
changeset
|
1005 LASTMARK_RESTORE(); |
|
13789
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
1006 } |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1007 if (ctx->u.rep) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1008 MARK_POP_DISCARD(ctx->lastmark); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1009 RETURN_FAILURE; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1010 |
|
13793
4c10bc811fed
-- fixed width calculations for alternations
Fredrik Lundh <fredrik@pythonware.com>
parents:
13789
diff
changeset
|
1011 case SRE_OP_REPEAT_ONE: |
|
4c10bc811fed
-- fixed width calculations for alternations
Fredrik Lundh <fredrik@pythonware.com>
parents:
13789
diff
changeset
|
1012 /* match repeated sequence (maximizing regexp) */ |
|
4c10bc811fed
-- fixed width calculations for alternations
Fredrik Lundh <fredrik@pythonware.com>
parents:
13789
diff
changeset
|
1013 |
|
4c10bc811fed
-- fixed width calculations for alternations
Fredrik Lundh <fredrik@pythonware.com>
parents:
13789
diff
changeset
|
1014 /* this operator only works if the repeated item is |
|
4c10bc811fed
-- fixed width calculations for alternations
Fredrik Lundh <fredrik@pythonware.com>
parents:
13789
diff
changeset
|
1015 exactly one character wide, and we're not already |
|
4c10bc811fed
-- fixed width calculations for alternations
Fredrik Lundh <fredrik@pythonware.com>
parents:
13789
diff
changeset
|
1016 collecting backtracking points. for other cases, |
|
15855
152d00718006
SRE fixes for 2.1 alpha:
Fredrik Lundh <fredrik@pythonware.com>
parents:
15643
diff
changeset
|
1017 use the MAX_REPEAT operator */ |
|
13793
4c10bc811fed
-- fixed width calculations for alternations
Fredrik Lundh <fredrik@pythonware.com>
parents:
13789
diff
changeset
|
1018 |
|
4c10bc811fed
-- fixed width calculations for alternations
Fredrik Lundh <fredrik@pythonware.com>
parents:
13789
diff
changeset
|
1019 /* <REPEAT_ONE> <skip> <1=min> <2=max> item <SUCCESS> tail */ |
|
4c10bc811fed
-- fixed width calculations for alternations
Fredrik Lundh <fredrik@pythonware.com>
parents:
13789
diff
changeset
|
1020 |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1021 TRACE(("|%p|%p|REPEAT_ONE %d %d\n", ctx->pattern, ctx->ptr, |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1022 ctx->pattern[1], ctx->pattern[2])); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1023 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1024 if (ctx->ptr + ctx->pattern[1] > end) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1025 RETURN_FAILURE; /* cannot match */ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1026 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1027 state->ptr = ctx->ptr; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1028 |
|
34080
609bcdae108a
Fixing bug #1072259 in SRE.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
33553
diff
changeset
|
1029 ret = SRE_COUNT(state, ctx->pattern+3, ctx->pattern[2]); |
|
609bcdae108a
Fixing bug #1072259 in SRE.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
33553
diff
changeset
|
1030 RETURN_ON_ERROR(ret); |
|
609bcdae108a
Fixing bug #1072259 in SRE.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
33553
diff
changeset
|
1031 DATA_LOOKUP_AT(SRE_MATCH_CONTEXT, ctx, ctx_pos); |
|
609bcdae108a
Fixing bug #1072259 in SRE.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
33553
diff
changeset
|
1032 ctx->count = ret; |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1033 ctx->ptr += ctx->count; |
|
13793
4c10bc811fed
-- fixed width calculations for alternations
Fredrik Lundh <fredrik@pythonware.com>
parents:
13789
diff
changeset
|
1034 |
|
4c10bc811fed
-- fixed width calculations for alternations
Fredrik Lundh <fredrik@pythonware.com>
parents:
13789
diff
changeset
|
1035 /* when we arrive here, count contains the number of |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1036 matches, and ctx->ptr points to the tail of the target |
|
13793
4c10bc811fed
-- fixed width calculations for alternations
Fredrik Lundh <fredrik@pythonware.com>
parents:
13789
diff
changeset
|
1037 string. check if the rest of the pattern matches, |
|
4c10bc811fed
-- fixed width calculations for alternations
Fredrik Lundh <fredrik@pythonware.com>
parents:
13789
diff
changeset
|
1038 and backtrack if not. */ |
|
4c10bc811fed
-- fixed width calculations for alternations
Fredrik Lundh <fredrik@pythonware.com>
parents:
13789
diff
changeset
|
1039 |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
1040 if (ctx->count < (Py_ssize_t) ctx->pattern[1]) |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1041 RETURN_FAILURE; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1042 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1043 if (ctx->pattern[ctx->pattern[0]] == SRE_OP_SUCCESS) { |
|
13793
4c10bc811fed
-- fixed width calculations for alternations
Fredrik Lundh <fredrik@pythonware.com>
parents:
13789
diff
changeset
|
1044 /* tail is empty. we're finished */ |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1045 state->ptr = ctx->ptr; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1046 RETURN_SUCCESS; |
|
28704
fa7874ec6a71
More work on bug #672491 and patch #712900.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28700
diff
changeset
|
1047 } |
|
fa7874ec6a71
More work on bug #672491 and patch #712900.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28700
diff
changeset
|
1048 |
|
fa7874ec6a71
More work on bug #672491 and patch #712900.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28700
diff
changeset
|
1049 LASTMARK_SAVE(); |
|
fa7874ec6a71
More work on bug #672491 and patch #712900.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28700
diff
changeset
|
1050 |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1051 if (ctx->pattern[ctx->pattern[0]] == SRE_OP_LITERAL) { |
|
13793
4c10bc811fed
-- fixed width calculations for alternations
Fredrik Lundh <fredrik@pythonware.com>
parents:
13789
diff
changeset
|
1052 /* tail starts with a literal. skip positions where |
|
4c10bc811fed
-- fixed width calculations for alternations
Fredrik Lundh <fredrik@pythonware.com>
parents:
13789
diff
changeset
|
1053 the rest of the pattern cannot possibly match */ |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1054 ctx->u.chr = ctx->pattern[ctx->pattern[0]+1]; |
|
13793
4c10bc811fed
-- fixed width calculations for alternations
Fredrik Lundh <fredrik@pythonware.com>
parents:
13789
diff
changeset
|
1055 for (;;) { |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
1056 while (ctx->count >= (Py_ssize_t) ctx->pattern[1] && |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1057 (ctx->ptr >= end || *ctx->ptr != ctx->u.chr)) { |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1058 ctx->ptr--; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1059 ctx->count--; |
|
13793
4c10bc811fed
-- fixed width calculations for alternations
Fredrik Lundh <fredrik@pythonware.com>
parents:
13789
diff
changeset
|
1060 } |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
1061 if (ctx->count < (Py_ssize_t) ctx->pattern[1]) |
|
13793
4c10bc811fed
-- fixed width calculations for alternations
Fredrik Lundh <fredrik@pythonware.com>
parents:
13789
diff
changeset
|
1062 break; |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1063 state->ptr = ctx->ptr; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1064 DO_JUMP(JUMP_REPEAT_ONE_1, jump_repeat_one_1, |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1065 ctx->pattern+ctx->pattern[0]); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1066 if (ret) { |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1067 RETURN_ON_ERROR(ret); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1068 RETURN_SUCCESS; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1069 } |
|
36363
6fcb5405074e
_compile(): raise an exception if downcasting to SRE_CODE
Tim Peters <tim.peters@gmail.com>
parents:
36324
diff
changeset
|
1070 |
|
28704
fa7874ec6a71
More work on bug #672491 and patch #712900.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28700
diff
changeset
|
1071 LASTMARK_RESTORE(); |
|
36363
6fcb5405074e
_compile(): raise an exception if downcasting to SRE_CODE
Tim Peters <tim.peters@gmail.com>
parents:
36324
diff
changeset
|
1072 |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1073 ctx->ptr--; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1074 ctx->count--; |
|
13793
4c10bc811fed
-- fixed width calculations for alternations
Fredrik Lundh <fredrik@pythonware.com>
parents:
13789
diff
changeset
|
1075 } |
|
4c10bc811fed
-- fixed width calculations for alternations
Fredrik Lundh <fredrik@pythonware.com>
parents:
13789
diff
changeset
|
1076 |
|
4c10bc811fed
-- fixed width calculations for alternations
Fredrik Lundh <fredrik@pythonware.com>
parents:
13789
diff
changeset
|
1077 } else { |
|
4c10bc811fed
-- fixed width calculations for alternations
Fredrik Lundh <fredrik@pythonware.com>
parents:
13789
diff
changeset
|
1078 /* general case */ |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
1079 while (ctx->count >= (Py_ssize_t) ctx->pattern[1]) { |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1080 state->ptr = ctx->ptr; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1081 DO_JUMP(JUMP_REPEAT_ONE_2, jump_repeat_one_2, |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1082 ctx->pattern+ctx->pattern[0]); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1083 if (ret) { |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1084 RETURN_ON_ERROR(ret); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1085 RETURN_SUCCESS; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1086 } |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1087 ctx->ptr--; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1088 ctx->count--; |
|
28704
fa7874ec6a71
More work on bug #672491 and patch #712900.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28700
diff
changeset
|
1089 LASTMARK_RESTORE(); |
|
13793
4c10bc811fed
-- fixed width calculations for alternations
Fredrik Lundh <fredrik@pythonware.com>
parents:
13789
diff
changeset
|
1090 } |
|
4c10bc811fed
-- fixed width calculations for alternations
Fredrik Lundh <fredrik@pythonware.com>
parents:
13789
diff
changeset
|
1091 } |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1092 RETURN_FAILURE; |
|
13793
4c10bc811fed
-- fixed width calculations for alternations
Fredrik Lundh <fredrik@pythonware.com>
parents:
13789
diff
changeset
|
1093 |
|
28603
7fe33c1541df
SF patch #720991 by Gary Herron:
Guido van Rossum <guido@python.org>
parents:
26345
diff
changeset
|
1094 case SRE_OP_MIN_REPEAT_ONE: |
|
7fe33c1541df
SF patch #720991 by Gary Herron:
Guido van Rossum <guido@python.org>
parents:
26345
diff
changeset
|
1095 /* match repeated sequence (minimizing regexp) */ |
|
7fe33c1541df
SF patch #720991 by Gary Herron:
Guido van Rossum <guido@python.org>
parents:
26345
diff
changeset
|
1096 |
|
7fe33c1541df
SF patch #720991 by Gary Herron:
Guido van Rossum <guido@python.org>
parents:
26345
diff
changeset
|
1097 /* this operator only works if the repeated item is |
|
7fe33c1541df
SF patch #720991 by Gary Herron:
Guido van Rossum <guido@python.org>
parents:
26345
diff
changeset
|
1098 exactly one character wide, and we're not already |
|
7fe33c1541df
SF patch #720991 by Gary Herron:
Guido van Rossum <guido@python.org>
parents:
26345
diff
changeset
|
1099 collecting backtracking points. for other cases, |
|
7fe33c1541df
SF patch #720991 by Gary Herron:
Guido van Rossum <guido@python.org>
parents:
26345
diff
changeset
|
1100 use the MIN_REPEAT operator */ |
|
7fe33c1541df
SF patch #720991 by Gary Herron:
Guido van Rossum <guido@python.org>
parents:
26345
diff
changeset
|
1101 |
|
7fe33c1541df
SF patch #720991 by Gary Herron:
Guido van Rossum <guido@python.org>
parents:
26345
diff
changeset
|
1102 /* <MIN_REPEAT_ONE> <skip> <1=min> <2=max> item <SUCCESS> tail */ |
|
7fe33c1541df
SF patch #720991 by Gary Herron:
Guido van Rossum <guido@python.org>
parents:
26345
diff
changeset
|
1103 |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1104 TRACE(("|%p|%p|MIN_REPEAT_ONE %d %d\n", ctx->pattern, ctx->ptr, |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1105 ctx->pattern[1], ctx->pattern[2])); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1106 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1107 if (ctx->ptr + ctx->pattern[1] > end) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1108 RETURN_FAILURE; /* cannot match */ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1109 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1110 state->ptr = ctx->ptr; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1111 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1112 if (ctx->pattern[1] == 0) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1113 ctx->count = 0; |
|
28603
7fe33c1541df
SF patch #720991 by Gary Herron:
Guido van Rossum <guido@python.org>
parents:
26345
diff
changeset
|
1114 else { |
|
7fe33c1541df
SF patch #720991 by Gary Herron:
Guido van Rossum <guido@python.org>
parents:
26345
diff
changeset
|
1115 /* count using pattern min as the maximum */ |
|
34080
609bcdae108a
Fixing bug #1072259 in SRE.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
33553
diff
changeset
|
1116 ret = SRE_COUNT(state, ctx->pattern+3, ctx->pattern[1]); |
|
609bcdae108a
Fixing bug #1072259 in SRE.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
33553
diff
changeset
|
1117 RETURN_ON_ERROR(ret); |
|
609bcdae108a
Fixing bug #1072259 in SRE.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
33553
diff
changeset
|
1118 DATA_LOOKUP_AT(SRE_MATCH_CONTEXT, ctx, ctx_pos); |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
1119 if (ret < (Py_ssize_t) ctx->pattern[1]) |
|
36363
6fcb5405074e
_compile(): raise an exception if downcasting to SRE_CODE
Tim Peters <tim.peters@gmail.com>
parents:
36324
diff
changeset
|
1120 /* didn't match minimum number of times */ |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1121 RETURN_FAILURE; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1122 /* advance past minimum matches of repeat */ |
|
34080
609bcdae108a
Fixing bug #1072259 in SRE.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
33553
diff
changeset
|
1123 ctx->count = ret; |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1124 ctx->ptr += ctx->count; |
|
28603
7fe33c1541df
SF patch #720991 by Gary Herron:
Guido van Rossum <guido@python.org>
parents:
26345
diff
changeset
|
1125 } |
|
7fe33c1541df
SF patch #720991 by Gary Herron:
Guido van Rossum <guido@python.org>
parents:
26345
diff
changeset
|
1126 |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1127 if (ctx->pattern[ctx->pattern[0]] == SRE_OP_SUCCESS) { |
|
28603
7fe33c1541df
SF patch #720991 by Gary Herron:
Guido van Rossum <guido@python.org>
parents:
26345
diff
changeset
|
1128 /* tail is empty. we're finished */ |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1129 state->ptr = ctx->ptr; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1130 RETURN_SUCCESS; |
|
28603
7fe33c1541df
SF patch #720991 by Gary Herron:
Guido van Rossum <guido@python.org>
parents:
26345
diff
changeset
|
1131 |
|
7fe33c1541df
SF patch #720991 by Gary Herron:
Guido van Rossum <guido@python.org>
parents:
26345
diff
changeset
|
1132 } else { |
|
7fe33c1541df
SF patch #720991 by Gary Herron:
Guido van Rossum <guido@python.org>
parents:
26345
diff
changeset
|
1133 /* general case */ |
|
28704
fa7874ec6a71
More work on bug #672491 and patch #712900.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28700
diff
changeset
|
1134 LASTMARK_SAVE(); |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
1135 while ((Py_ssize_t)ctx->pattern[2] == 65535 |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
1136 || ctx->count <= (Py_ssize_t)ctx->pattern[2]) { |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1137 state->ptr = ctx->ptr; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1138 DO_JUMP(JUMP_MIN_REPEAT_ONE,jump_min_repeat_one, |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1139 ctx->pattern+ctx->pattern[0]); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1140 if (ret) { |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1141 RETURN_ON_ERROR(ret); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1142 RETURN_SUCCESS; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1143 } |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1144 state->ptr = ctx->ptr; |
|
31180
4942a0b63c8c
Cleaning up recursive pieces left in the reorganization.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30712
diff
changeset
|
1145 ret = SRE_COUNT(state, ctx->pattern+3, 1); |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1146 RETURN_ON_ERROR(ret); |
|
34080
609bcdae108a
Fixing bug #1072259 in SRE.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
33553
diff
changeset
|
1147 DATA_LOOKUP_AT(SRE_MATCH_CONTEXT, ctx, ctx_pos); |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1148 if (ret == 0) |
|
28603
7fe33c1541df
SF patch #720991 by Gary Herron:
Guido van Rossum <guido@python.org>
parents:
26345
diff
changeset
|
1149 break; |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1150 assert(ret == 1); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1151 ctx->ptr++; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1152 ctx->count++; |
|
28866
743ae9cb3a83
- Included detailed documentation in _sre.c explaining how, when, and why
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28865
diff
changeset
|
1153 LASTMARK_RESTORE(); |
|
28603
7fe33c1541df
SF patch #720991 by Gary Herron:
Guido van Rossum <guido@python.org>
parents:
26345
diff
changeset
|
1154 } |
|
7fe33c1541df
SF patch #720991 by Gary Herron:
Guido van Rossum <guido@python.org>
parents:
26345
diff
changeset
|
1155 } |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1156 RETURN_FAILURE; |
|
28603
7fe33c1541df
SF patch #720991 by Gary Herron:
Guido van Rossum <guido@python.org>
parents:
26345
diff
changeset
|
1157 |
|
13789
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
1158 case SRE_OP_REPEAT: |
|
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
1159 /* create repeat context. all the hard work is done |
|
15855
152d00718006
SRE fixes for 2.1 alpha:
Fredrik Lundh <fredrik@pythonware.com>
parents:
15643
diff
changeset
|
1160 by the UNTIL operator (MAX_UNTIL, MIN_UNTIL) */ |
|
13789
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
1161 /* <REPEAT> <skip> <1=min> <2=max> item <UNTIL> tail */ |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1162 TRACE(("|%p|%p|REPEAT %d %d\n", ctx->pattern, ctx->ptr, |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1163 ctx->pattern[1], ctx->pattern[2])); |
|
13789
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
1164 |
|
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
1165 /* install new repeat context */ |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
1166 ctx->u.rep = (SRE_REPEAT*) PyObject_MALLOC(sizeof(*ctx->u.rep)); |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39610
diff
changeset
|
1167 if (!ctx->u.rep) { |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39610
diff
changeset
|
1168 PyErr_NoMemory(); |
|
39610
3674f20ac781
Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents:
39536
diff
changeset
|
1169 RETURN_FAILURE; |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39610
diff
changeset
|
1170 } |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1171 ctx->u.rep->count = -1; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1172 ctx->u.rep->pattern = ctx->pattern; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1173 ctx->u.rep->prev = state->repeat; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1174 ctx->u.rep->last_ptr = NULL; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1175 state->repeat = ctx->u.rep; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1176 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1177 state->ptr = ctx->ptr; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1178 DO_JUMP(JUMP_REPEAT, jump_repeat, ctx->pattern+ctx->pattern[0]); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1179 state->repeat = ctx->u.rep->prev; |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
1180 PyObject_FREE(ctx->u.rep); |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1181 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1182 if (ret) { |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1183 RETURN_ON_ERROR(ret); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1184 RETURN_SUCCESS; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1185 } |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1186 RETURN_FAILURE; |
|
13789
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
1187 |
|
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
1188 case SRE_OP_MAX_UNTIL: |
|
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
1189 /* maximizing repeat */ |
|
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
1190 /* <REPEAT> <skip> <1=min> <2=max> item <MAX_UNTIL> tail */ |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1191 |
|
13789
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
1192 /* FIXME: we probably need to deal with zero-width |
|
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
1193 matches in here... */ |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1194 |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1195 ctx->u.rep = state->repeat; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1196 if (!ctx->u.rep) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1197 RETURN_ERROR(SRE_ERROR_STATE); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1198 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1199 state->ptr = ctx->ptr; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1200 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1201 ctx->count = ctx->u.rep->count+1; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1202 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1203 TRACE(("|%p|%p|MAX_UNTIL %d\n", ctx->pattern, |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1204 ctx->ptr, ctx->count)); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1205 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1206 if (ctx->count < ctx->u.rep->pattern[1]) { |
|
13789
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
1207 /* not enough matches */ |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1208 ctx->u.rep->count = ctx->count; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1209 DO_JUMP(JUMP_MAX_UNTIL_1, jump_max_until_1, |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1210 ctx->u.rep->pattern+3); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1211 if (ret) { |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1212 RETURN_ON_ERROR(ret); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1213 RETURN_SUCCESS; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1214 } |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1215 ctx->u.rep->count = ctx->count-1; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1216 state->ptr = ctx->ptr; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1217 RETURN_FAILURE; |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1218 } |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1219 |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1220 if ((ctx->count < ctx->u.rep->pattern[2] || |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1221 ctx->u.rep->pattern[2] == 65535) && |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1222 state->ptr != ctx->u.rep->last_ptr) { |
|
13789
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
1223 /* we may have enough matches, but if we can |
|
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
1224 match another item, do so */ |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1225 ctx->u.rep->count = ctx->count; |
|
28866
743ae9cb3a83
- Included detailed documentation in _sre.c explaining how, when, and why
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28865
diff
changeset
|
1226 LASTMARK_SAVE(); |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1227 MARK_PUSH(ctx->lastmark); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1228 /* zero-width match protection */ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1229 DATA_PUSH(&ctx->u.rep->last_ptr); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1230 ctx->u.rep->last_ptr = state->ptr; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1231 DO_JUMP(JUMP_MAX_UNTIL_2, jump_max_until_2, |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1232 ctx->u.rep->pattern+3); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1233 DATA_POP(&ctx->u.rep->last_ptr); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1234 if (ret) { |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1235 MARK_POP_DISCARD(ctx->lastmark); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1236 RETURN_ON_ERROR(ret); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1237 RETURN_SUCCESS; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1238 } |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1239 MARK_POP(ctx->lastmark); |
|
28866
743ae9cb3a83
- Included detailed documentation in _sre.c explaining how, when, and why
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28865
diff
changeset
|
1240 LASTMARK_RESTORE(); |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1241 ctx->u.rep->count = ctx->count-1; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1242 state->ptr = ctx->ptr; |
| 13118 | 1243 } |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1244 |
|
13789
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
1245 /* cannot match more repeated items here. make sure the |
|
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
1246 tail matches */ |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1247 state->repeat = ctx->u.rep->prev; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1248 DO_JUMP(JUMP_MAX_UNTIL_3, jump_max_until_3, ctx->pattern); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1249 RETURN_ON_SUCCESS(ret); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1250 state->repeat = ctx->u.rep; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1251 state->ptr = ctx->ptr; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1252 RETURN_FAILURE; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1253 |
|
13789
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
1254 case SRE_OP_MIN_UNTIL: |
|
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
1255 /* minimizing repeat */ |
|
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
1256 /* <REPEAT> <skip> <1=min> <2=max> item <MIN_UNTIL> tail */ |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1257 |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1258 ctx->u.rep = state->repeat; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1259 if (!ctx->u.rep) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1260 RETURN_ERROR(SRE_ERROR_STATE); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1261 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1262 state->ptr = ctx->ptr; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1263 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1264 ctx->count = ctx->u.rep->count+1; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1265 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1266 TRACE(("|%p|%p|MIN_UNTIL %d %p\n", ctx->pattern, |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1267 ctx->ptr, ctx->count, ctx->u.rep->pattern)); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1268 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1269 if (ctx->count < ctx->u.rep->pattern[1]) { |
|
13789
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
1270 /* not enough matches */ |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1271 ctx->u.rep->count = ctx->count; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1272 DO_JUMP(JUMP_MIN_UNTIL_1, jump_min_until_1, |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1273 ctx->u.rep->pattern+3); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1274 if (ret) { |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1275 RETURN_ON_ERROR(ret); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1276 RETURN_SUCCESS; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1277 } |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1278 ctx->u.rep->count = ctx->count-1; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1279 state->ptr = ctx->ptr; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1280 RETURN_FAILURE; |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1281 } |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1282 |
|
28866
743ae9cb3a83
- Included detailed documentation in _sre.c explaining how, when, and why
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28865
diff
changeset
|
1283 LASTMARK_SAVE(); |
|
743ae9cb3a83
- Included detailed documentation in _sre.c explaining how, when, and why
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28865
diff
changeset
|
1284 |
|
13789
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
1285 /* see if the tail matches */ |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1286 state->repeat = ctx->u.rep->prev; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1287 DO_JUMP(JUMP_MIN_UNTIL_2, jump_min_until_2, ctx->pattern); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1288 if (ret) { |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1289 RETURN_ON_ERROR(ret); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1290 RETURN_SUCCESS; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1291 } |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1292 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1293 state->repeat = ctx->u.rep; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1294 state->ptr = ctx->ptr; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1295 |
|
28866
743ae9cb3a83
- Included detailed documentation in _sre.c explaining how, when, and why
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28865
diff
changeset
|
1296 LASTMARK_RESTORE(); |
|
743ae9cb3a83
- Included detailed documentation in _sre.c explaining how, when, and why
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28865
diff
changeset
|
1297 |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1298 if (ctx->count >= ctx->u.rep->pattern[2] |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1299 && ctx->u.rep->pattern[2] != 65535) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1300 RETURN_FAILURE; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1301 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1302 ctx->u.rep->count = ctx->count; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1303 DO_JUMP(JUMP_MIN_UNTIL_3,jump_min_until_3, |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1304 ctx->u.rep->pattern+3); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1305 if (ret) { |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1306 RETURN_ON_ERROR(ret); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1307 RETURN_SUCCESS; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1308 } |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1309 ctx->u.rep->count = ctx->count-1; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1310 state->ptr = ctx->ptr; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1311 RETURN_FAILURE; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1312 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1313 case SRE_OP_GROUPREF: |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1314 /* match backreference */ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1315 TRACE(("|%p|%p|GROUPREF %d\n", ctx->pattern, |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1316 ctx->ptr, ctx->pattern[0])); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1317 i = ctx->pattern[0]; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1318 { |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
1319 Py_ssize_t groupref = i+i; |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1320 if (groupref >= state->lastmark) { |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1321 RETURN_FAILURE; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1322 } else { |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1323 SRE_CHAR* p = (SRE_CHAR*) state->mark[groupref]; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1324 SRE_CHAR* e = (SRE_CHAR*) state->mark[groupref+1]; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1325 if (!p || !e || e < p) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1326 RETURN_FAILURE; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1327 while (p < e) { |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1328 if (ctx->ptr >= end || *ctx->ptr != *p) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1329 RETURN_FAILURE; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1330 p++; ctx->ptr++; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1331 } |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1332 } |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1333 } |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1334 ctx->pattern++; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1335 break; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1336 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1337 case SRE_OP_GROUPREF_IGNORE: |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1338 /* match backreference */ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1339 TRACE(("|%p|%p|GROUPREF_IGNORE %d\n", ctx->pattern, |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1340 ctx->ptr, ctx->pattern[0])); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1341 i = ctx->pattern[0]; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1342 { |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
1343 Py_ssize_t groupref = i+i; |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1344 if (groupref >= state->lastmark) { |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1345 RETURN_FAILURE; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1346 } else { |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1347 SRE_CHAR* p = (SRE_CHAR*) state->mark[groupref]; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1348 SRE_CHAR* e = (SRE_CHAR*) state->mark[groupref+1]; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1349 if (!p || !e || e < p) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1350 RETURN_FAILURE; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1351 while (p < e) { |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1352 if (ctx->ptr >= end || |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1353 state->lower(*ctx->ptr) != state->lower(*p)) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1354 RETURN_FAILURE; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1355 p++; ctx->ptr++; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1356 } |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1357 } |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1358 } |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1359 ctx->pattern++; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1360 break; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1361 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1362 case SRE_OP_GROUPREF_EXISTS: |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1363 TRACE(("|%p|%p|GROUPREF_EXISTS %d\n", ctx->pattern, |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1364 ctx->ptr, ctx->pattern[0])); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1365 /* <GROUPREF_EXISTS> <group> <skip> codeyes <JUMP> codeno ... */ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1366 i = ctx->pattern[0]; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1367 { |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
1368 Py_ssize_t groupref = i+i; |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1369 if (groupref >= state->lastmark) { |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1370 ctx->pattern += ctx->pattern[1]; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1371 break; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1372 } else { |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1373 SRE_CHAR* p = (SRE_CHAR*) state->mark[groupref]; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1374 SRE_CHAR* e = (SRE_CHAR*) state->mark[groupref+1]; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1375 if (!p || !e || e < p) { |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1376 ctx->pattern += ctx->pattern[1]; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1377 break; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1378 } |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1379 } |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1380 } |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1381 ctx->pattern += 2; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1382 break; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1383 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1384 case SRE_OP_ASSERT: |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1385 /* assert subpattern */ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1386 /* <ASSERT> <skip> <back> <pattern> */ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1387 TRACE(("|%p|%p|ASSERT %d\n", ctx->pattern, |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1388 ctx->ptr, ctx->pattern[1])); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1389 state->ptr = ctx->ptr - ctx->pattern[1]; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1390 if (state->ptr < state->beginning) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1391 RETURN_FAILURE; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1392 DO_JUMP(JUMP_ASSERT, jump_assert, ctx->pattern+2); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1393 RETURN_ON_FAILURE(ret); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1394 ctx->pattern += ctx->pattern[0]; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1395 break; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1396 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1397 case SRE_OP_ASSERT_NOT: |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1398 /* assert not subpattern */ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1399 /* <ASSERT_NOT> <skip> <back> <pattern> */ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1400 TRACE(("|%p|%p|ASSERT_NOT %d\n", ctx->pattern, |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1401 ctx->ptr, ctx->pattern[1])); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1402 state->ptr = ctx->ptr - ctx->pattern[1]; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1403 if (state->ptr >= state->beginning) { |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1404 DO_JUMP(JUMP_ASSERT_NOT, jump_assert_not, ctx->pattern+2); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1405 if (ret) { |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1406 RETURN_ON_ERROR(ret); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1407 RETURN_FAILURE; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1408 } |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1409 } |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1410 ctx->pattern += ctx->pattern[0]; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1411 break; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1412 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1413 case SRE_OP_FAILURE: |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1414 /* immediate failure */ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1415 TRACE(("|%p|%p|FAILURE\n", ctx->pattern, ctx->ptr)); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1416 RETURN_FAILURE; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1417 |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
1418 default: |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1419 TRACE(("|%p|%p|UNKNOWN %d\n", ctx->pattern, ctx->ptr, |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1420 ctx->pattern[-1])); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1421 RETURN_ERROR(SRE_ERROR_ILLEGAL); |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1422 } |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1423 } |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
1424 |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1425 exit: |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1426 ctx_pos = ctx->last_ctx_pos; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1427 jump = ctx->jump; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1428 DATA_POP_DISCARD(ctx); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1429 if (ctx_pos == -1) |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1430 return ret; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1431 DATA_LOOKUP_AT(SRE_MATCH_CONTEXT, ctx, ctx_pos); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1432 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1433 switch (jump) { |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1434 case JUMP_MAX_UNTIL_2: |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1435 TRACE(("|%p|%p|JUMP_MAX_UNTIL_2\n", ctx->pattern, ctx->ptr)); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1436 goto jump_max_until_2; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1437 case JUMP_MAX_UNTIL_3: |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1438 TRACE(("|%p|%p|JUMP_MAX_UNTIL_3\n", ctx->pattern, ctx->ptr)); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1439 goto jump_max_until_3; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1440 case JUMP_MIN_UNTIL_2: |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1441 TRACE(("|%p|%p|JUMP_MIN_UNTIL_2\n", ctx->pattern, ctx->ptr)); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1442 goto jump_min_until_2; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1443 case JUMP_MIN_UNTIL_3: |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1444 TRACE(("|%p|%p|JUMP_MIN_UNTIL_3\n", ctx->pattern, ctx->ptr)); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1445 goto jump_min_until_3; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1446 case JUMP_BRANCH: |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1447 TRACE(("|%p|%p|JUMP_BRANCH\n", ctx->pattern, ctx->ptr)); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1448 goto jump_branch; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1449 case JUMP_MAX_UNTIL_1: |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1450 TRACE(("|%p|%p|JUMP_MAX_UNTIL_1\n", ctx->pattern, ctx->ptr)); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1451 goto jump_max_until_1; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1452 case JUMP_MIN_UNTIL_1: |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1453 TRACE(("|%p|%p|JUMP_MIN_UNTIL_1\n", ctx->pattern, ctx->ptr)); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1454 goto jump_min_until_1; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1455 case JUMP_REPEAT: |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1456 TRACE(("|%p|%p|JUMP_REPEAT\n", ctx->pattern, ctx->ptr)); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1457 goto jump_repeat; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1458 case JUMP_REPEAT_ONE_1: |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1459 TRACE(("|%p|%p|JUMP_REPEAT_ONE_1\n", ctx->pattern, ctx->ptr)); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1460 goto jump_repeat_one_1; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1461 case JUMP_REPEAT_ONE_2: |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1462 TRACE(("|%p|%p|JUMP_REPEAT_ONE_2\n", ctx->pattern, ctx->ptr)); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1463 goto jump_repeat_one_2; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1464 case JUMP_MIN_REPEAT_ONE: |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1465 TRACE(("|%p|%p|JUMP_MIN_REPEAT_ONE\n", ctx->pattern, ctx->ptr)); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1466 goto jump_min_repeat_one; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1467 case JUMP_ASSERT: |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1468 TRACE(("|%p|%p|JUMP_ASSERT\n", ctx->pattern, ctx->ptr)); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1469 goto jump_assert; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1470 case JUMP_ASSERT_NOT: |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1471 TRACE(("|%p|%p|JUMP_ASSERT_NOT\n", ctx->pattern, ctx->ptr)); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1472 goto jump_assert_not; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1473 case JUMP_NONE: |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1474 TRACE(("|%p|%p|RETURN %d\n", ctx->pattern, ctx->ptr, ret)); |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1475 break; |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1476 } |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1477 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1478 return ret; /* should never get here */ |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1479 } |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1480 |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
1481 LOCAL(Py_ssize_t) |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1482 SRE_SEARCH(SRE_STATE* state, SRE_CODE* pattern) |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1483 { |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
1484 SRE_CHAR* ptr = (SRE_CHAR *)state->start; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
1485 SRE_CHAR* end = (SRE_CHAR *)state->end; |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
1486 Py_ssize_t status = 0; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
1487 Py_ssize_t prefix_len = 0; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
1488 Py_ssize_t prefix_skip = 0; |
|
13306
384fa9b9e253
-- use charset bitmaps where appropriate. this gives a 5-10%
Fredrik Lundh <fredrik@pythonware.com>
parents:
13305
diff
changeset
|
1489 SRE_CODE* prefix = NULL; |
|
384fa9b9e253
-- use charset bitmaps where appropriate. this gives a 5-10%
Fredrik Lundh <fredrik@pythonware.com>
parents:
13305
diff
changeset
|
1490 SRE_CODE* charset = NULL; |
|
384fa9b9e253
-- use charset bitmaps where appropriate. this gives a 5-10%
Fredrik Lundh <fredrik@pythonware.com>
parents:
13305
diff
changeset
|
1491 SRE_CODE* overlap = NULL; |
|
384fa9b9e253
-- use charset bitmaps where appropriate. this gives a 5-10%
Fredrik Lundh <fredrik@pythonware.com>
parents:
13305
diff
changeset
|
1492 int flags = 0; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1493 |
| 13118 | 1494 if (pattern[0] == SRE_OP_INFO) { |
|
13164
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
1495 /* optimization info block */ |
|
13789
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
1496 /* <INFO> <1=skip> <2=flags> <3=min> <4=max> <5=prefix info> */ |
|
13306
384fa9b9e253
-- use charset bitmaps where appropriate. this gives a 5-10%
Fredrik Lundh <fredrik@pythonware.com>
parents:
13305
diff
changeset
|
1497 |
|
384fa9b9e253
-- use charset bitmaps where appropriate. this gives a 5-10%
Fredrik Lundh <fredrik@pythonware.com>
parents:
13305
diff
changeset
|
1498 flags = pattern[2]; |
|
13164
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
1499 |
|
29594
eaa062fdd46a
Fixing bug described in patch #756032, where SRE reads invalid data
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
29394
diff
changeset
|
1500 if (pattern[3] > 1) { |
|
13164
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
1501 /* adjust end point (but make sure we leave at least one |
|
13306
384fa9b9e253
-- use charset bitmaps where appropriate. this gives a 5-10%
Fredrik Lundh <fredrik@pythonware.com>
parents:
13305
diff
changeset
|
1502 character in there, so literal search will work) */ |
|
13164
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
1503 end -= pattern[3]-1; |
|
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
1504 if (end <= ptr) |
|
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
1505 end = ptr+1; |
|
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
1506 } |
|
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
1507 |
|
13306
384fa9b9e253
-- use charset bitmaps where appropriate. this gives a 5-10%
Fredrik Lundh <fredrik@pythonware.com>
parents:
13305
diff
changeset
|
1508 if (flags & SRE_INFO_PREFIX) { |
|
13308
fc2ad6fa08ec
- actually enabled charset anchors in the engine (still not
Fredrik Lundh <fredrik@pythonware.com>
parents:
13306
diff
changeset
|
1509 /* pattern starts with a known prefix */ |
|
13886
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
1510 /* <length> <skip> <prefix data> <overlap data> */ |
|
13306
384fa9b9e253
-- use charset bitmaps where appropriate. this gives a 5-10%
Fredrik Lundh <fredrik@pythonware.com>
parents:
13305
diff
changeset
|
1511 prefix_len = pattern[5]; |
|
13886
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
1512 prefix_skip = pattern[6]; |
|
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
1513 prefix = pattern + 7; |
|
13306
384fa9b9e253
-- use charset bitmaps where appropriate. this gives a 5-10%
Fredrik Lundh <fredrik@pythonware.com>
parents:
13305
diff
changeset
|
1514 overlap = prefix + prefix_len - 1; |
|
384fa9b9e253
-- use charset bitmaps where appropriate. this gives a 5-10%
Fredrik Lundh <fredrik@pythonware.com>
parents:
13305
diff
changeset
|
1515 } else if (flags & SRE_INFO_CHARSET) |
|
13308
fc2ad6fa08ec
- actually enabled charset anchors in the engine (still not
Fredrik Lundh <fredrik@pythonware.com>
parents:
13306
diff
changeset
|
1516 /* pattern starts with a character from a known set */ |
|
13886
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
1517 /* <charset> */ |
|
13306
384fa9b9e253
-- use charset bitmaps where appropriate. this gives a 5-10%
Fredrik Lundh <fredrik@pythonware.com>
parents:
13305
diff
changeset
|
1518 charset = pattern + 5; |
|
13164
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
1519 |
|
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
1520 pattern += 1 + pattern[1]; |
| 13118 | 1521 } |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1522 |
|
13886
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
1523 TRACE(("prefix = %p %d %d\n", prefix, prefix_len, prefix_skip)); |
|
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
1524 TRACE(("charset = %p\n", charset)); |
|
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
1525 |
|
13164
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
1526 #if defined(USE_FAST_SEARCH) |
|
13361
bef7b629ac95
maintenance release:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13328
diff
changeset
|
1527 if (prefix_len > 1) { |
|
13164
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
1528 /* pattern starts with a known prefix. use the overlap |
|
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
1529 table to skip forward as fast as we possibly can */ |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
1530 Py_ssize_t i = 0; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
1531 end = (SRE_CHAR *)state->end; |
|
13164
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
1532 while (ptr < end) { |
|
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
1533 for (;;) { |
|
13201
a093fad92ccf
the mad patcher strikes again:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13198
diff
changeset
|
1534 if ((SRE_CODE) ptr[0] != prefix[i]) { |
|
13164
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
1535 if (!i) |
|
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
1536 break; |
|
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
1537 else |
|
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
1538 i = overlap[i]; |
|
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
1539 } else { |
|
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
1540 if (++i == prefix_len) { |
|
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
1541 /* found a potential match */ |
|
13886
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
1542 TRACE(("|%p|%p|SEARCH SCAN\n", pattern, ptr)); |
|
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
1543 state->start = ptr + 1 - prefix_len; |
|
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
1544 state->ptr = ptr + 1 - prefix_len + prefix_skip; |
|
13306
384fa9b9e253
-- use charset bitmaps where appropriate. this gives a 5-10%
Fredrik Lundh <fredrik@pythonware.com>
parents:
13305
diff
changeset
|
1545 if (flags & SRE_INFO_LITERAL) |
|
384fa9b9e253
-- use charset bitmaps where appropriate. this gives a 5-10%
Fredrik Lundh <fredrik@pythonware.com>
parents:
13305
diff
changeset
|
1546 return 1; /* we got all of it */ |
|
31180
4942a0b63c8c
Cleaning up recursive pieces left in the reorganization.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30712
diff
changeset
|
1547 status = SRE_MATCH(state, pattern + 2*prefix_skip); |
|
13164
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
1548 if (status != 0) |
|
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
1549 return status; |
|
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
1550 /* close but no cigar -- try again */ |
|
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
1551 i = overlap[i]; |
|
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
1552 } |
|
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
1553 break; |
|
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
1554 } |
|
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
1555 } |
|
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
1556 ptr++; |
|
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
1557 } |
|
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
1558 return 0; |
|
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
1559 } |
|
6faa411c61fb
still trying to figure out how to fix the remaining
Fredrik Lundh <fredrik@pythonware.com>
parents:
13139
diff
changeset
|
1560 #endif |
|
13139
c2207d6c03a8
- fixed another split problem
Fredrik Lundh <fredrik@pythonware.com>
parents:
13136
diff
changeset
|
1561 |
|
13306
384fa9b9e253
-- use charset bitmaps where appropriate. this gives a 5-10%
Fredrik Lundh <fredrik@pythonware.com>
parents:
13305
diff
changeset
|
1562 if (pattern[0] == SRE_OP_LITERAL) { |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1563 /* pattern starts with a literal character. this is used |
|
13306
384fa9b9e253
-- use charset bitmaps where appropriate. this gives a 5-10%
Fredrik Lundh <fredrik@pythonware.com>
parents:
13305
diff
changeset
|
1564 for short prefixes, and if fast search is disabled */ |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1565 SRE_CODE chr = pattern[1]; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
1566 end = (SRE_CHAR *)state->end; |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1567 for (;;) { |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1568 while (ptr < end && (SRE_CODE) ptr[0] != chr) |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1569 ptr++; |
|
26090
62f88c02c987
Fixed sre bug "[#581080] Provoking infinite scanner loops".
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
26074
diff
changeset
|
1570 if (ptr >= end) |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1571 return 0; |
|
13886
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
1572 TRACE(("|%p|%p|SEARCH LITERAL\n", pattern, ptr)); |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1573 state->start = ptr; |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1574 state->ptr = ++ptr; |
|
20592
82bcfac89642
fixed character set description in docstring (SRE uses Python
Fredrik Lundh <fredrik@pythonware.com>
parents:
20590
diff
changeset
|
1575 if (flags & SRE_INFO_LITERAL) |
|
82bcfac89642
fixed character set description in docstring (SRE uses Python
Fredrik Lundh <fredrik@pythonware.com>
parents:
20590
diff
changeset
|
1576 return 1; /* we got all of it */ |
|
31180
4942a0b63c8c
Cleaning up recursive pieces left in the reorganization.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30712
diff
changeset
|
1577 status = SRE_MATCH(state, pattern + 2); |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1578 if (status != 0) |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1579 break; |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1580 } |
|
13306
384fa9b9e253
-- use charset bitmaps where appropriate. this gives a 5-10%
Fredrik Lundh <fredrik@pythonware.com>
parents:
13305
diff
changeset
|
1581 } else if (charset) { |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1582 /* pattern starts with a character from a known set */ |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
1583 end = (SRE_CHAR *)state->end; |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1584 for (;;) { |
|
13886
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
1585 while (ptr < end && !SRE_CHARSET(charset, ptr[0])) |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1586 ptr++; |
|
26090
62f88c02c987
Fixed sre bug "[#581080] Provoking infinite scanner loops".
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
26074
diff
changeset
|
1587 if (ptr >= end) |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1588 return 0; |
|
13886
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
1589 TRACE(("|%p|%p|SEARCH CHARSET\n", pattern, ptr)); |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1590 state->start = ptr; |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1591 state->ptr = ptr; |
|
31180
4942a0b63c8c
Cleaning up recursive pieces left in the reorganization.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30712
diff
changeset
|
1592 status = SRE_MATCH(state, pattern); |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1593 if (status != 0) |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1594 break; |
|
13886
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
1595 ptr++; |
|
13306
384fa9b9e253
-- use charset bitmaps where appropriate. this gives a 5-10%
Fredrik Lundh <fredrik@pythonware.com>
parents:
13305
diff
changeset
|
1596 } |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1597 } else |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1598 /* general case */ |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1599 while (ptr <= end) { |
|
13886
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
1600 TRACE(("|%p|%p|SEARCH\n", pattern, ptr)); |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1601 state->start = state->ptr = ptr++; |
|
31180
4942a0b63c8c
Cleaning up recursive pieces left in the reorganization.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30712
diff
changeset
|
1602 status = SRE_MATCH(state, pattern); |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1603 if (status != 0) |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1604 break; |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1605 } |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1606 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1607 return status; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1608 } |
|
36363
6fcb5405074e
_compile(): raise an exception if downcasting to SRE_CODE
Tim Peters <tim.peters@gmail.com>
parents:
36324
diff
changeset
|
1609 |
|
20620
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
1610 LOCAL(int) |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
1611 SRE_LITERAL_TEMPLATE(SRE_CHAR* ptr, Py_ssize_t len) |
|
20620
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
1612 { |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
1613 /* check if given string is a literal template (i.e. no escapes) */ |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
1614 while (len-- > 0) |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
1615 if (*ptr++ == '\\') |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
1616 return 0; |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
1617 return 1; |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
1618 } |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1619 |
| 13118 | 1620 #if !defined(SRE_RECURSIVE) |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1621 |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1622 /* -------------------------------------------------------------------- */ |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1623 /* factories and destructors */ |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1624 |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1625 /* see sre.h for object declarations */ |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
1626 static PyObject*pattern_new_match(PatternObject*, SRE_STATE*, int); |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
1627 static PyObject*pattern_scanner(PatternObject*, PyObject*); |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1628 |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1629 static PyObject * |
|
38669
19fd6141940d
Partially merge trunk into p3yk. The removal of Mac/Tools is confusing svn
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1630 sre_codesize(PyObject* self, PyObject *unused) |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1631 { |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
1632 return Py_BuildValue("l", sizeof(SRE_CODE)); |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1633 } |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1634 |
| 13118 | 1635 static PyObject * |
|
13124
5021db674019
- renamed "tolower" hook (it happened to work with
Fredrik Lundh <fredrik@pythonware.com>
parents:
13121
diff
changeset
|
1636 sre_getlower(PyObject* self, PyObject* args) |
| 13118 | 1637 { |
| 1638 int character, flags; | |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1639 if (!PyArg_ParseTuple(args, "ii", &character, &flags)) |
| 13118 | 1640 return NULL; |
| 1641 if (flags & SRE_FLAG_LOCALE) | |
|
13124
5021db674019
- renamed "tolower" hook (it happened to work with
Fredrik Lundh <fredrik@pythonware.com>
parents:
13121
diff
changeset
|
1642 return Py_BuildValue("i", sre_lower_locale(character)); |
|
15909
8db319ddfb37
bumped SRE version number to 2.1. cleaned up and added 1.5.2
Fredrik Lundh <fredrik@pythonware.com>
parents:
15906
diff
changeset
|
1643 if (flags & SRE_FLAG_UNICODE) |
| 13118 | 1644 #if defined(HAVE_UNICODE) |
|
13124
5021db674019
- renamed "tolower" hook (it happened to work with
Fredrik Lundh <fredrik@pythonware.com>
parents:
13121
diff
changeset
|
1645 return Py_BuildValue("i", sre_lower_unicode(character)); |
|
15909
8db319ddfb37
bumped SRE version number to 2.1. cleaned up and added 1.5.2
Fredrik Lundh <fredrik@pythonware.com>
parents:
15906
diff
changeset
|
1646 #else |
|
8db319ddfb37
bumped SRE version number to 2.1. cleaned up and added 1.5.2
Fredrik Lundh <fredrik@pythonware.com>
parents:
15906
diff
changeset
|
1647 return Py_BuildValue("i", sre_lower_locale(character)); |
| 13118 | 1648 #endif |
|
13124
5021db674019
- renamed "tolower" hook (it happened to work with
Fredrik Lundh <fredrik@pythonware.com>
parents:
13121
diff
changeset
|
1649 return Py_BuildValue("i", sre_lower(character)); |
| 13118 | 1650 } |
| 1651 | |
|
13789
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
1652 LOCAL(void) |
|
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
1653 state_reset(SRE_STATE* state) |
|
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
1654 { |
|
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
1655 /* FIXME: dynamic! */ |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1656 /*memset(state->mark, 0, sizeof(*state->mark) * SRE_MARK_SIZE);*/ |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1657 |
|
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1658 state->lastmark = -1; |
|
13789
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
1659 state->lastindex = -1; |
|
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
1660 |
|
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
1661 state->repeat = NULL; |
|
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
1662 |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1663 data_stack_dealloc(state); |
|
13789
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
1664 } |
|
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
1665 |
|
20620
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
1666 static void* |
|
75476
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
1667 getstring(PyObject* string, Py_ssize_t* p_length, int* p_charsize, Py_buffer *view) |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1668 { |
|
20620
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
1669 /* given a python object, return a data pointer, a length (in |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
1670 characters), and a character size. return NULL if the object |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
1671 is not a string (or not compatible) */ |
|
36363
6fcb5405074e
_compile(): raise an exception if downcasting to SRE_CODE
Tim Peters <tim.peters@gmail.com>
parents:
36324
diff
changeset
|
1672 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1673 PyBufferProcs *buffer; |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
1674 Py_ssize_t size, bytes; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
1675 int charsize; |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1676 void* ptr; |
|
14726
176660ff0c95
- fixed yet another gcc -pedantic warning
Fredrik Lundh <fredrik@pythonware.com>
parents:
14381
diff
changeset
|
1677 |
|
43560
ac62eb267206
Remove the buffer API from PyUnicode as specified by PEP 3137. Also,
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
43423
diff
changeset
|
1678 /* Unicode objects do not support the buffer API. So, get the data |
|
ac62eb267206
Remove the buffer API from PyUnicode as specified by PEP 3137. Also,
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
43423
diff
changeset
|
1679 directly instead. */ |
|
ac62eb267206
Remove the buffer API from PyUnicode as specified by PEP 3137. Also,
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
43423
diff
changeset
|
1680 if (PyUnicode_Check(string)) { |
|
ac62eb267206
Remove the buffer API from PyUnicode as specified by PEP 3137. Also,
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
43423
diff
changeset
|
1681 ptr = (void *)PyUnicode_AS_DATA(string); |
|
ac62eb267206
Remove the buffer API from PyUnicode as specified by PEP 3137. Also,
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
43423
diff
changeset
|
1682 *p_length = PyUnicode_GET_SIZE(string); |
|
ac62eb267206
Remove the buffer API from PyUnicode as specified by PEP 3137. Also,
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
43423
diff
changeset
|
1683 *p_charsize = sizeof(Py_UNICODE); |
|
ac62eb267206
Remove the buffer API from PyUnicode as specified by PEP 3137. Also,
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
43423
diff
changeset
|
1684 return ptr; |
|
ac62eb267206
Remove the buffer API from PyUnicode as specified by PEP 3137. Also,
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
43423
diff
changeset
|
1685 } |
|
ac62eb267206
Remove the buffer API from PyUnicode as specified by PEP 3137. Also,
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
43423
diff
changeset
|
1686 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1687 /* get pointer to string buffer */ |
|
75476
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
1688 view->len = -1; |
|
44351
86a2679dca46
#1629: Renamed Py_Size, Py_Type and Py_Refcnt to Py_SIZE, Py_TYPE and Py_REFCNT.
Christian Heimes <christian@cheimes.de>
parents:
44099
diff
changeset
|
1689 buffer = Py_TYPE(string)->tp_as_buffer; |
|
48769
83b2d07b475b
#2834: Change re module semantics, so that str and bytes mixing is forbidden,
Antoine Pitrou <solipsis@pitrou.net>
parents:
48683
diff
changeset
|
1690 if (!buffer || !buffer->bf_getbuffer || |
|
75476
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
1691 (*buffer->bf_getbuffer)(string, view, PyBUF_SIMPLE) < 0) { |
|
42665
85c22b4d4455
Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
42334
diff
changeset
|
1692 PyErr_SetString(PyExc_TypeError, "expected string or buffer"); |
|
85c22b4d4455
Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
42334
diff
changeset
|
1693 return NULL; |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1694 } |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1695 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1696 /* determine buffer size */ |
|
75476
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
1697 bytes = view->len; |
|
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
1698 ptr = view->buf; |
|
42665
85c22b4d4455
Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
42334
diff
changeset
|
1699 |
|
13789
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
1700 if (bytes < 0) { |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1701 PyErr_SetString(PyExc_TypeError, "buffer has negative size"); |
|
75476
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
1702 goto err; |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1703 } |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1704 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1705 /* determine character size */ |
|
13789
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
1706 size = PyObject_Size(string); |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1707 |
|
47301
23ab586c427a
Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents:
44767
diff
changeset
|
1708 if (PyBytes_Check(string) || bytes == size) |
|
20620
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
1709 charsize = 1; |
|
13789
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
1710 #if defined(HAVE_UNICODE) |
|
48769
83b2d07b475b
#2834: Change re module semantics, so that str and bytes mixing is forbidden,
Antoine Pitrou <solipsis@pitrou.net>
parents:
48683
diff
changeset
|
1711 else if (bytes == (Py_ssize_t) (size * sizeof(Py_UNICODE))) |
|
20620
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
1712 charsize = sizeof(Py_UNICODE); |
|
13789
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
1713 #endif |
|
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
1714 else { |
|
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
1715 PyErr_SetString(PyExc_TypeError, "buffer size mismatch"); |
|
75476
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
1716 goto err; |
|
13789
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
1717 } |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1718 |
|
20620
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
1719 *p_length = size; |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
1720 *p_charsize = charsize; |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
1721 |
|
42665
85c22b4d4455
Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
42334
diff
changeset
|
1722 if (ptr == NULL) { |
|
48769
83b2d07b475b
#2834: Change re module semantics, so that str and bytes mixing is forbidden,
Antoine Pitrou <solipsis@pitrou.net>
parents:
48683
diff
changeset
|
1723 PyErr_SetString(PyExc_ValueError, |
|
42665
85c22b4d4455
Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
42334
diff
changeset
|
1724 "Buffer is NULL"); |
|
75476
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
1725 goto err; |
|
42665
85c22b4d4455
Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
42334
diff
changeset
|
1726 } |
|
20620
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
1727 return ptr; |
|
75476
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
1728 err: |
|
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
1729 PyBuffer_Release(view); |
|
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
1730 view->buf = NULL; |
|
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
1731 return NULL; |
|
20620
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
1732 } |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
1733 |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
1734 LOCAL(PyObject*) |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
1735 state_init(SRE_STATE* state, PatternObject* pattern, PyObject* string, |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
1736 Py_ssize_t start, Py_ssize_t end) |
|
20620
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
1737 { |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
1738 /* prepare state object */ |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
1739 |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
1740 Py_ssize_t length; |
|
20620
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
1741 int charsize; |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
1742 void* ptr; |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
1743 |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
1744 memset(state, 0, sizeof(SRE_STATE)); |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
1745 |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1746 state->lastmark = -1; |
|
20620
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
1747 state->lastindex = -1; |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
1748 |
|
75476
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
1749 state->buffer.buf = NULL; |
|
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
1750 ptr = getstring(string, &length, &charsize, &state->buffer); |
|
20620
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
1751 if (!ptr) |
|
75476
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
1752 goto err; |
|
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
1753 |
|
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
1754 if (charsize == 1 && pattern->charsize > 1) { |
|
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
1755 PyErr_SetString(PyExc_TypeError, |
|
48769
83b2d07b475b
#2834: Change re module semantics, so that str and bytes mixing is forbidden,
Antoine Pitrou <solipsis@pitrou.net>
parents:
48683
diff
changeset
|
1756 "can't use a string pattern on a bytes-like object"); |
|
75476
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
1757 goto err; |
|
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
1758 } |
|
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
1759 if (charsize > 1 && pattern->charsize == 1) { |
|
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
1760 PyErr_SetString(PyExc_TypeError, |
|
48769
83b2d07b475b
#2834: Change re module semantics, so that str and bytes mixing is forbidden,
Antoine Pitrou <solipsis@pitrou.net>
parents:
48683
diff
changeset
|
1761 "can't use a bytes pattern on a string-like object"); |
|
75476
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
1762 goto err; |
|
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
1763 } |
|
48769
83b2d07b475b
#2834: Change re module semantics, so that str and bytes mixing is forbidden,
Antoine Pitrou <solipsis@pitrou.net>
parents:
48683
diff
changeset
|
1764 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1765 /* adjust boundaries */ |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1766 if (start < 0) |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1767 start = 0; |
|
20620
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
1768 else if (start > length) |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
1769 start = length; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1770 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1771 if (end < 0) |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1772 end = 0; |
|
20620
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
1773 else if (end > length) |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
1774 end = length; |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
1775 |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
1776 state->charsize = charsize; |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1777 |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1778 state->beginning = ptr; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1779 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1780 state->start = (void*) ((char*) ptr + start * state->charsize); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1781 state->end = (void*) ((char*) ptr + end * state->charsize); |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1782 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1783 Py_INCREF(string); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1784 state->string = string; |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1785 state->pos = start; |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1786 state->endpos = end; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1787 |
| 13118 | 1788 if (pattern->flags & SRE_FLAG_LOCALE) |
|
13124
5021db674019
- renamed "tolower" hook (it happened to work with
Fredrik Lundh <fredrik@pythonware.com>
parents:
13121
diff
changeset
|
1789 state->lower = sre_lower_locale; |
|
15909
8db319ddfb37
bumped SRE version number to 2.1. cleaned up and added 1.5.2
Fredrik Lundh <fredrik@pythonware.com>
parents:
15906
diff
changeset
|
1790 else if (pattern->flags & SRE_FLAG_UNICODE) |
| 13118 | 1791 #if defined(HAVE_UNICODE) |
|
13124
5021db674019
- renamed "tolower" hook (it happened to work with
Fredrik Lundh <fredrik@pythonware.com>
parents:
13121
diff
changeset
|
1792 state->lower = sre_lower_unicode; |
|
15909
8db319ddfb37
bumped SRE version number to 2.1. cleaned up and added 1.5.2
Fredrik Lundh <fredrik@pythonware.com>
parents:
15906
diff
changeset
|
1793 #else |
|
8db319ddfb37
bumped SRE version number to 2.1. cleaned up and added 1.5.2
Fredrik Lundh <fredrik@pythonware.com>
parents:
15906
diff
changeset
|
1794 state->lower = sre_lower_locale; |
| 13118 | 1795 #endif |
| 1796 else | |
|
13124
5021db674019
- renamed "tolower" hook (it happened to work with
Fredrik Lundh <fredrik@pythonware.com>
parents:
13121
diff
changeset
|
1797 state->lower = sre_lower; |
| 13118 | 1798 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1799 return string; |
|
75476
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
1800 err: |
|
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
1801 if (state->buffer.buf) |
|
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
1802 PyBuffer_Release(&state->buffer); |
|
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
1803 return NULL; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1804 } |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1805 |
|
13121
faefff43e58a
- last patch broke parse_template; fixed by changing some
Fredrik Lundh <fredrik@pythonware.com>
parents:
13119
diff
changeset
|
1806 LOCAL(void) |
|
faefff43e58a
- last patch broke parse_template; fixed by changing some
Fredrik Lundh <fredrik@pythonware.com>
parents:
13119
diff
changeset
|
1807 state_fini(SRE_STATE* state) |
|
faefff43e58a
- last patch broke parse_template; fixed by changing some
Fredrik Lundh <fredrik@pythonware.com>
parents:
13119
diff
changeset
|
1808 { |
|
75476
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
1809 if (state->buffer.buf) |
|
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
1810 PyBuffer_Release(&state->buffer); |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1811 Py_XDECREF(state->string); |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1812 data_stack_dealloc(state); |
|
13121
faefff43e58a
- last patch broke parse_template; fixed by changing some
Fredrik Lundh <fredrik@pythonware.com>
parents:
13119
diff
changeset
|
1813 } |
|
faefff43e58a
- last patch broke parse_template; fixed by changing some
Fredrik Lundh <fredrik@pythonware.com>
parents:
13119
diff
changeset
|
1814 |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
1815 /* calculate offset from start of string */ |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
1816 #define STATE_OFFSET(state, member)\ |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
1817 (((char*)(member) - (char*)(state)->beginning) / (state)->charsize) |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
1818 |
|
13121
faefff43e58a
- last patch broke parse_template; fixed by changing some
Fredrik Lundh <fredrik@pythonware.com>
parents:
13119
diff
changeset
|
1819 LOCAL(PyObject*) |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
1820 state_getslice(SRE_STATE* state, Py_ssize_t index, PyObject* string, int empty) |
|
13121
faefff43e58a
- last patch broke parse_template; fixed by changing some
Fredrik Lundh <fredrik@pythonware.com>
parents:
13119
diff
changeset
|
1821 { |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
1822 Py_ssize_t i, j; |
|
13898
d3bf97d532a0
-- changed findall to return empty strings instead of None
Fredrik Lundh <fredrik@pythonware.com>
parents:
13888
diff
changeset
|
1823 |
|
13121
faefff43e58a
- last patch broke parse_template; fixed by changing some
Fredrik Lundh <fredrik@pythonware.com>
parents:
13119
diff
changeset
|
1824 index = (index - 1) * 2; |
|
faefff43e58a
- last patch broke parse_template; fixed by changing some
Fredrik Lundh <fredrik@pythonware.com>
parents:
13119
diff
changeset
|
1825 |
|
30703
8282aa1f9343
Implemented non-recursive SRE matching.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30683
diff
changeset
|
1826 if (string == Py_None || index >= state->lastmark || !state->mark[index] || !state->mark[index+1]) { |
|
20585
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
1827 if (empty) |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
1828 /* want empty string */ |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
1829 i = j = 0; |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
1830 else { |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
1831 Py_INCREF(Py_None); |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
1832 return Py_None; |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
1833 } |
|
13898
d3bf97d532a0
-- changed findall to return empty strings instead of None
Fredrik Lundh <fredrik@pythonware.com>
parents:
13888
diff
changeset
|
1834 } else { |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
1835 i = STATE_OFFSET(state, state->mark[index]); |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
1836 j = STATE_OFFSET(state, state->mark[index+1]); |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1837 } |
|
13121
faefff43e58a
- last patch broke parse_template; fixed by changing some
Fredrik Lundh <fredrik@pythonware.com>
parents:
13119
diff
changeset
|
1838 |
|
13898
d3bf97d532a0
-- changed findall to return empty strings instead of None
Fredrik Lundh <fredrik@pythonware.com>
parents:
13888
diff
changeset
|
1839 return PySequence_GetSlice(string, i, j); |
|
13121
faefff43e58a
- last patch broke parse_template; fixed by changing some
Fredrik Lundh <fredrik@pythonware.com>
parents:
13119
diff
changeset
|
1840 } |
|
faefff43e58a
- last patch broke parse_template; fixed by changing some
Fredrik Lundh <fredrik@pythonware.com>
parents:
13119
diff
changeset
|
1841 |
|
13829
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
1842 static void |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
1843 pattern_error(int status) |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
1844 { |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
1845 switch (status) { |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
1846 case SRE_ERROR_RECURSION_LIMIT: |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
1847 PyErr_SetString( |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
1848 PyExc_RuntimeError, |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
1849 "maximum recursion limit exceeded" |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
1850 ); |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
1851 break; |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
1852 case SRE_ERROR_MEMORY: |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
1853 PyErr_NoMemory(); |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
1854 break; |
|
44604
94ab572ed6dd
Merged revisions 59843-59863 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44351
diff
changeset
|
1855 case SRE_ERROR_INTERRUPTED: |
|
94ab572ed6dd
Merged revisions 59843-59863 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44351
diff
changeset
|
1856 /* An exception has already been raised, so let it fly */ |
|
94ab572ed6dd
Merged revisions 59843-59863 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44351
diff
changeset
|
1857 break; |
|
13829
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
1858 default: |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
1859 /* other error codes indicate compiler/engine bugs */ |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
1860 PyErr_SetString( |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
1861 PyExc_RuntimeError, |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
1862 "internal error in regular expression engine" |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
1863 ); |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
1864 } |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
1865 } |
|
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
1866 |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1867 static void |
|
13121
faefff43e58a
- last patch broke parse_template; fixed by changing some
Fredrik Lundh <fredrik@pythonware.com>
parents:
13119
diff
changeset
|
1868 pattern_dealloc(PatternObject* self) |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1869 { |
|
32160
aec9c98a47d2
Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents:
31525
diff
changeset
|
1870 if (self->weakreflist != NULL) |
|
aec9c98a47d2
Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents:
31525
diff
changeset
|
1871 PyObject_ClearWeakRefs((PyObject *) self); |
|
75476
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
1872 if (self->view.buf) |
|
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
1873 PyBuffer_Release(&self->view); |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1874 Py_XDECREF(self->pattern); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1875 Py_XDECREF(self->groupindex); |
|
15906
50890e3454c9
fixed a memory leak in pattern cleanup (patch #103248 by cgw)
Fredrik Lundh <fredrik@pythonware.com>
parents:
15877
diff
changeset
|
1876 Py_XDECREF(self->indexgroup); |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1877 PyObject_DEL(self); |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1878 } |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1879 |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1880 static PyObject* |
|
15000
0a97f5dde3a7
Accept keyword arguments for (most) pattern and match object
Fredrik Lundh <fredrik@pythonware.com>
parents:
14992
diff
changeset
|
1881 pattern_match(PatternObject* self, PyObject* args, PyObject* kw) |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1882 { |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1883 SRE_STATE state; |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1884 int status; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1885 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1886 PyObject* string; |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
1887 Py_ssize_t start = 0; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
1888 Py_ssize_t end = PY_SSIZE_T_MAX; |
|
36675
dba6494735d0
Revert backwards-incompatible const changes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36363
diff
changeset
|
1889 static char* kwlist[] = { "pattern", "pos", "endpos", NULL }; |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
1890 if (!PyArg_ParseTupleAndKeywords(args, kw, "O|nn:match", kwlist, |
|
15000
0a97f5dde3a7
Accept keyword arguments for (most) pattern and match object
Fredrik Lundh <fredrik@pythonware.com>
parents:
14992
diff
changeset
|
1891 &string, &start, &end)) |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1892 return NULL; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1893 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1894 string = state_init(&state, self, string, start, end); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1895 if (!string) |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1896 return NULL; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1897 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1898 state.ptr = state.start; |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1899 |
|
13886
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
1900 TRACE(("|%p|%p|MATCH\n", PatternObject_GetCode(self), state.ptr)); |
|
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
1901 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1902 if (state.charsize == 1) { |
|
31180
4942a0b63c8c
Cleaning up recursive pieces left in the reorganization.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30712
diff
changeset
|
1903 status = sre_match(&state, PatternObject_GetCode(self)); |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1904 } else { |
| 13118 | 1905 #if defined(HAVE_UNICODE) |
|
31180
4942a0b63c8c
Cleaning up recursive pieces left in the reorganization.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30712
diff
changeset
|
1906 status = sre_umatch(&state, PatternObject_GetCode(self)); |
| 13118 | 1907 #endif |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1908 } |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1909 |
|
13886
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
1910 TRACE(("|%p|%p|END\n", PatternObject_GetCode(self), state.ptr)); |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39610
diff
changeset
|
1911 if (PyErr_Occurred()) |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39610
diff
changeset
|
1912 return NULL; |
|
13886
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
1913 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1914 state_fini(&state); |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1915 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1916 return pattern_new_match(self, &state, status); |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1917 } |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1918 |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1919 static PyObject* |
|
15000
0a97f5dde3a7
Accept keyword arguments for (most) pattern and match object
Fredrik Lundh <fredrik@pythonware.com>
parents:
14992
diff
changeset
|
1920 pattern_search(PatternObject* self, PyObject* args, PyObject* kw) |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1921 { |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1922 SRE_STATE state; |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1923 int status; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1924 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1925 PyObject* string; |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
1926 Py_ssize_t start = 0; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
1927 Py_ssize_t end = PY_SSIZE_T_MAX; |
|
36675
dba6494735d0
Revert backwards-incompatible const changes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36363
diff
changeset
|
1928 static char* kwlist[] = { "pattern", "pos", "endpos", NULL }; |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
1929 if (!PyArg_ParseTupleAndKeywords(args, kw, "O|nn:search", kwlist, |
|
15000
0a97f5dde3a7
Accept keyword arguments for (most) pattern and match object
Fredrik Lundh <fredrik@pythonware.com>
parents:
14992
diff
changeset
|
1930 &string, &start, &end)) |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1931 return NULL; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1932 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1933 string = state_init(&state, self, string, start, end); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1934 if (!string) |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1935 return NULL; |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1936 |
|
13886
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
1937 TRACE(("|%p|%p|SEARCH\n", PatternObject_GetCode(self), state.ptr)); |
|
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
1938 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1939 if (state.charsize == 1) { |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1940 status = sre_search(&state, PatternObject_GetCode(self)); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1941 } else { |
| 13118 | 1942 #if defined(HAVE_UNICODE) |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1943 status = sre_usearch(&state, PatternObject_GetCode(self)); |
| 13118 | 1944 #endif |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1945 } |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1946 |
|
13886
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
1947 TRACE(("|%p|%p|END\n", PatternObject_GetCode(self), state.ptr)); |
|
62494a96dcca
-- reset marks if repeat_one tail doesn't match
Fredrik Lundh <fredrik@pythonware.com>
parents:
13882
diff
changeset
|
1948 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1949 state_fini(&state); |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1950 |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39610
diff
changeset
|
1951 if (PyErr_Occurred()) |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39610
diff
changeset
|
1952 return NULL; |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39610
diff
changeset
|
1953 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
1954 return pattern_new_match(self, &state, status); |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1955 } |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1956 |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1957 static PyObject* |
| 18373 | 1958 call(char* module, char* function, PyObject* args) |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
1959 { |
|
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
1960 PyObject* name; |
| 18373 | 1961 PyObject* mod; |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
1962 PyObject* func; |
|
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
1963 PyObject* result; |
|
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
1964 |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
1965 if (!args) |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
1966 return NULL; |
| 42850 | 1967 name = PyUnicode_FromString(module); |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
1968 if (!name) |
|
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
1969 return NULL; |
| 18373 | 1970 mod = PyImport_Import(name); |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
1971 Py_DECREF(name); |
| 18373 | 1972 if (!mod) |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
1973 return NULL; |
| 18373 | 1974 func = PyObject_GetAttrString(mod, function); |
| 1975 Py_DECREF(mod); | |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
1976 if (!func) |
|
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
1977 return NULL; |
|
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
1978 result = PyObject_CallObject(func, args); |
|
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
1979 Py_DECREF(func); |
|
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
1980 Py_DECREF(args); |
|
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
1981 return result; |
|
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
1982 } |
|
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
1983 |
| 18373 | 1984 #ifdef USE_BUILTIN_COPY |
| 1985 static int | |
| 1986 deepcopy(PyObject** object, PyObject* memo) | |
| 1987 { | |
| 1988 PyObject* copy; | |
| 1989 | |
| 1990 copy = call( | |
| 1991 "copy", "deepcopy", | |
|
30683
3b59fa5d25b1
Simplify and speedup uses of Py_BuildValue():
Raymond Hettinger <python@rcn.com>
parents:
29594
diff
changeset
|
1992 PyTuple_Pack(2, *object, memo) |
| 18373 | 1993 ); |
| 1994 if (!copy) | |
| 1995 return 0; | |
| 1996 | |
| 1997 Py_DECREF(*object); | |
| 1998 *object = copy; | |
| 1999 | |
| 2000 return 1; /* success */ | |
| 2001 } | |
| 2002 #endif | |
| 2003 | |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
2004 static PyObject* |
|
43400
1bac386c17cc
Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
43124
diff
changeset
|
2005 join_list(PyObject* list, PyObject* string) |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2006 { |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2007 /* join list elements */ |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2008 |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2009 PyObject* joiner; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2010 #if PY_VERSION_HEX >= 0x01060000 |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2011 PyObject* function; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2012 PyObject* args; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2013 #endif |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2014 PyObject* result; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2015 |
|
43400
1bac386c17cc
Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
43124
diff
changeset
|
2016 joiner = PySequence_GetSlice(string, 0, 0); |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2017 if (!joiner) |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2018 return NULL; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2019 |
|
43400
1bac386c17cc
Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
43124
diff
changeset
|
2020 if (PyList_GET_SIZE(list) == 0) { |
|
1bac386c17cc
Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
43124
diff
changeset
|
2021 Py_DECREF(list); |
|
1bac386c17cc
Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
43124
diff
changeset
|
2022 return joiner; |
|
1bac386c17cc
Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
43124
diff
changeset
|
2023 } |
|
1bac386c17cc
Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
43124
diff
changeset
|
2024 |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2025 #if PY_VERSION_HEX >= 0x01060000 |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2026 function = PyObject_GetAttrString(joiner, "join"); |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2027 if (!function) { |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2028 Py_DECREF(joiner); |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2029 return NULL; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2030 } |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2031 args = PyTuple_New(1); |
|
20590
050ed8a21cde
sre.Scanner fixes (from Greg Chapman). also added a Scanner sanity
Fredrik Lundh <fredrik@pythonware.com>
parents:
20589
diff
changeset
|
2032 if (!args) { |
|
050ed8a21cde
sre.Scanner fixes (from Greg Chapman). also added a Scanner sanity
Fredrik Lundh <fredrik@pythonware.com>
parents:
20589
diff
changeset
|
2033 Py_DECREF(function); |
|
050ed8a21cde
sre.Scanner fixes (from Greg Chapman). also added a Scanner sanity
Fredrik Lundh <fredrik@pythonware.com>
parents:
20589
diff
changeset
|
2034 Py_DECREF(joiner); |
|
050ed8a21cde
sre.Scanner fixes (from Greg Chapman). also added a Scanner sanity
Fredrik Lundh <fredrik@pythonware.com>
parents:
20589
diff
changeset
|
2035 return NULL; |
|
050ed8a21cde
sre.Scanner fixes (from Greg Chapman). also added a Scanner sanity
Fredrik Lundh <fredrik@pythonware.com>
parents:
20589
diff
changeset
|
2036 } |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2037 PyTuple_SET_ITEM(args, 0, list); |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2038 result = PyObject_CallObject(function, args); |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2039 Py_DECREF(args); /* also removes list */ |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2040 Py_DECREF(function); |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2041 #else |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2042 result = call( |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2043 "string", "join", |
|
30683
3b59fa5d25b1
Simplify and speedup uses of Py_BuildValue():
Raymond Hettinger <python@rcn.com>
parents:
29594
diff
changeset
|
2044 PyTuple_Pack(2, list, joiner) |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2045 ); |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2046 #endif |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2047 Py_DECREF(joiner); |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2048 |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2049 return result; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2050 } |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2051 |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
2052 static PyObject* |
|
15000
0a97f5dde3a7
Accept keyword arguments for (most) pattern and match object
Fredrik Lundh <fredrik@pythonware.com>
parents:
14992
diff
changeset
|
2053 pattern_findall(PatternObject* self, PyObject* args, PyObject* kw) |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2054 { |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
2055 SRE_STATE state; |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
2056 PyObject* list; |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
2057 int status; |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
2058 Py_ssize_t i, b, e; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2059 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
2060 PyObject* string; |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
2061 Py_ssize_t start = 0; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
2062 Py_ssize_t end = PY_SSIZE_T_MAX; |
|
36675
dba6494735d0
Revert backwards-incompatible const changes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36363
diff
changeset
|
2063 static char* kwlist[] = { "source", "pos", "endpos", NULL }; |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
2064 if (!PyArg_ParseTupleAndKeywords(args, kw, "O|nn:findall", kwlist, |
|
15000
0a97f5dde3a7
Accept keyword arguments for (most) pattern and match object
Fredrik Lundh <fredrik@pythonware.com>
parents:
14992
diff
changeset
|
2065 &string, &start, &end)) |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
2066 return NULL; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2067 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
2068 string = state_init(&state, self, string, start, end); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
2069 if (!string) |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
2070 return NULL; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2071 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
2072 list = PyList_New(0); |
|
20590
050ed8a21cde
sre.Scanner fixes (from Greg Chapman). also added a Scanner sanity
Fredrik Lundh <fredrik@pythonware.com>
parents:
20589
diff
changeset
|
2073 if (!list) { |
|
050ed8a21cde
sre.Scanner fixes (from Greg Chapman). also added a Scanner sanity
Fredrik Lundh <fredrik@pythonware.com>
parents:
20589
diff
changeset
|
2074 state_fini(&state); |
|
050ed8a21cde
sre.Scanner fixes (from Greg Chapman). also added a Scanner sanity
Fredrik Lundh <fredrik@pythonware.com>
parents:
20589
diff
changeset
|
2075 return NULL; |
|
050ed8a21cde
sre.Scanner fixes (from Greg Chapman). also added a Scanner sanity
Fredrik Lundh <fredrik@pythonware.com>
parents:
20589
diff
changeset
|
2076 } |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2077 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
2078 while (state.start <= state.end) { |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
2079 |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
2080 PyObject* item; |
|
36363
6fcb5405074e
_compile(): raise an exception if downcasting to SRE_CODE
Tim Peters <tim.peters@gmail.com>
parents:
36324
diff
changeset
|
2081 |
|
15355
2a3696d32721
-- properly reset groups in findall (bug #117612)
Fredrik Lundh <fredrik@pythonware.com>
parents:
15000
diff
changeset
|
2082 state_reset(&state); |
|
2a3696d32721
-- properly reset groups in findall (bug #117612)
Fredrik Lundh <fredrik@pythonware.com>
parents:
15000
diff
changeset
|
2083 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
2084 state.ptr = state.start; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2085 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
2086 if (state.charsize == 1) { |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
2087 status = sre_search(&state, PatternObject_GetCode(self)); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
2088 } else { |
| 13118 | 2089 #if defined(HAVE_UNICODE) |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
2090 status = sre_usearch(&state, PatternObject_GetCode(self)); |
| 13118 | 2091 #endif |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
2092 } |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2093 |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39610
diff
changeset
|
2094 if (PyErr_Occurred()) |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39610
diff
changeset
|
2095 goto error; |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39610
diff
changeset
|
2096 |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2097 if (status <= 0) { |
| 13118 | 2098 if (status == 0) |
| 2099 break; | |
|
13829
02e0816e4b37
-- added recursion limit (currently ~10,000 levels)
Fredrik Lundh <fredrik@pythonware.com>
parents:
13795
diff
changeset
|
2100 pattern_error(status); |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
2101 goto error; |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
2102 } |
|
36363
6fcb5405074e
_compile(): raise an exception if downcasting to SRE_CODE
Tim Peters <tim.peters@gmail.com>
parents:
36324
diff
changeset
|
2103 |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2104 /* don't bother to build a match object */ |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2105 switch (self->groups) { |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2106 case 0: |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2107 b = STATE_OFFSET(&state, state.start); |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2108 e = STATE_OFFSET(&state, state.ptr); |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2109 item = PySequence_GetSlice(string, b, e); |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2110 if (!item) |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2111 goto error; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2112 break; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2113 case 1: |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2114 item = state_getslice(&state, 1, string, 1); |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2115 if (!item) |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2116 goto error; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2117 break; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2118 default: |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2119 item = PyTuple_New(self->groups); |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2120 if (!item) |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2121 goto error; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2122 for (i = 0; i < self->groups; i++) { |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2123 PyObject* o = state_getslice(&state, i+1, string, 1); |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2124 if (!o) { |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2125 Py_DECREF(item); |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2126 goto error; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2127 } |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2128 PyTuple_SET_ITEM(item, i, o); |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2129 } |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2130 break; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2131 } |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2132 |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2133 status = PyList_Append(list, item); |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2134 Py_DECREF(item); |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2135 if (status < 0) |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2136 goto error; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2137 |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2138 if (state.ptr == state.start) |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2139 state.start = (void*) ((char*) state.ptr + state.charsize); |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2140 else |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2141 state.start = state.ptr; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2142 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
2143 } |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2144 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
2145 state_fini(&state); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
2146 return list; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2147 |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2148 error: |
|
13121
faefff43e58a
- last patch broke parse_template; fixed by changing some
Fredrik Lundh <fredrik@pythonware.com>
parents:
13119
diff
changeset
|
2149 Py_DECREF(list); |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
2150 state_fini(&state); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
2151 return NULL; |
|
36363
6fcb5405074e
_compile(): raise an exception if downcasting to SRE_CODE
Tim Peters <tim.peters@gmail.com>
parents:
36324
diff
changeset
|
2152 |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2153 } |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2154 |
|
20660
c05d4895234c
(experimental) "finditer" method/function. this works pretty much
Fredrik Lundh <fredrik@pythonware.com>
parents:
20620
diff
changeset
|
2155 #if PY_VERSION_HEX >= 0x02020000 |
|
c05d4895234c
(experimental) "finditer" method/function. this works pretty much
Fredrik Lundh <fredrik@pythonware.com>
parents:
20620
diff
changeset
|
2156 static PyObject* |
|
c05d4895234c
(experimental) "finditer" method/function. this works pretty much
Fredrik Lundh <fredrik@pythonware.com>
parents:
20620
diff
changeset
|
2157 pattern_finditer(PatternObject* pattern, PyObject* args) |
|
c05d4895234c
(experimental) "finditer" method/function. this works pretty much
Fredrik Lundh <fredrik@pythonware.com>
parents:
20620
diff
changeset
|
2158 { |
|
c05d4895234c
(experimental) "finditer" method/function. this works pretty much
Fredrik Lundh <fredrik@pythonware.com>
parents:
20620
diff
changeset
|
2159 PyObject* scanner; |
|
c05d4895234c
(experimental) "finditer" method/function. this works pretty much
Fredrik Lundh <fredrik@pythonware.com>
parents:
20620
diff
changeset
|
2160 PyObject* search; |
|
c05d4895234c
(experimental) "finditer" method/function. this works pretty much
Fredrik Lundh <fredrik@pythonware.com>
parents:
20620
diff
changeset
|
2161 PyObject* iterator; |
|
c05d4895234c
(experimental) "finditer" method/function. this works pretty much
Fredrik Lundh <fredrik@pythonware.com>
parents:
20620
diff
changeset
|
2162 |
|
c05d4895234c
(experimental) "finditer" method/function. this works pretty much
Fredrik Lundh <fredrik@pythonware.com>
parents:
20620
diff
changeset
|
2163 scanner = pattern_scanner(pattern, args); |
|
c05d4895234c
(experimental) "finditer" method/function. this works pretty much
Fredrik Lundh <fredrik@pythonware.com>
parents:
20620
diff
changeset
|
2164 if (!scanner) |
|
c05d4895234c
(experimental) "finditer" method/function. this works pretty much
Fredrik Lundh <fredrik@pythonware.com>
parents:
20620
diff
changeset
|
2165 return NULL; |
|
c05d4895234c
(experimental) "finditer" method/function. this works pretty much
Fredrik Lundh <fredrik@pythonware.com>
parents:
20620
diff
changeset
|
2166 |
|
c05d4895234c
(experimental) "finditer" method/function. this works pretty much
Fredrik Lundh <fredrik@pythonware.com>
parents:
20620
diff
changeset
|
2167 search = PyObject_GetAttrString(scanner, "search"); |
|
c05d4895234c
(experimental) "finditer" method/function. this works pretty much
Fredrik Lundh <fredrik@pythonware.com>
parents:
20620
diff
changeset
|
2168 Py_DECREF(scanner); |
|
c05d4895234c
(experimental) "finditer" method/function. this works pretty much
Fredrik Lundh <fredrik@pythonware.com>
parents:
20620
diff
changeset
|
2169 if (!search) |
|
c05d4895234c
(experimental) "finditer" method/function. this works pretty much
Fredrik Lundh <fredrik@pythonware.com>
parents:
20620
diff
changeset
|
2170 return NULL; |
|
c05d4895234c
(experimental) "finditer" method/function. this works pretty much
Fredrik Lundh <fredrik@pythonware.com>
parents:
20620
diff
changeset
|
2171 |
|
c05d4895234c
(experimental) "finditer" method/function. this works pretty much
Fredrik Lundh <fredrik@pythonware.com>
parents:
20620
diff
changeset
|
2172 iterator = PyCallIter_New(search, Py_None); |
|
c05d4895234c
(experimental) "finditer" method/function. this works pretty much
Fredrik Lundh <fredrik@pythonware.com>
parents:
20620
diff
changeset
|
2173 Py_DECREF(search); |
|
c05d4895234c
(experimental) "finditer" method/function. this works pretty much
Fredrik Lundh <fredrik@pythonware.com>
parents:
20620
diff
changeset
|
2174 |
|
c05d4895234c
(experimental) "finditer" method/function. this works pretty much
Fredrik Lundh <fredrik@pythonware.com>
parents:
20620
diff
changeset
|
2175 return iterator; |
|
c05d4895234c
(experimental) "finditer" method/function. this works pretty much
Fredrik Lundh <fredrik@pythonware.com>
parents:
20620
diff
changeset
|
2176 } |
|
c05d4895234c
(experimental) "finditer" method/function. this works pretty much
Fredrik Lundh <fredrik@pythonware.com>
parents:
20620
diff
changeset
|
2177 #endif |
|
c05d4895234c
(experimental) "finditer" method/function. this works pretty much
Fredrik Lundh <fredrik@pythonware.com>
parents:
20620
diff
changeset
|
2178 |
|
20585
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2179 static PyObject* |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2180 pattern_split(PatternObject* self, PyObject* args, PyObject* kw) |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2181 { |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2182 SRE_STATE state; |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2183 PyObject* list; |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2184 PyObject* item; |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2185 int status; |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
2186 Py_ssize_t n; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
2187 Py_ssize_t i; |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2188 void* last; |
|
20585
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2189 |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2190 PyObject* string; |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
2191 Py_ssize_t maxsplit = 0; |
|
36675
dba6494735d0
Revert backwards-incompatible const changes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36363
diff
changeset
|
2192 static char* kwlist[] = { "source", "maxsplit", NULL }; |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
2193 if (!PyArg_ParseTupleAndKeywords(args, kw, "O|n:split", kwlist, |
|
20585
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2194 &string, &maxsplit)) |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2195 return NULL; |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2196 |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
2197 string = state_init(&state, self, string, 0, PY_SSIZE_T_MAX); |
|
20585
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2198 if (!string) |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2199 return NULL; |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2200 |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2201 list = PyList_New(0); |
|
20590
050ed8a21cde
sre.Scanner fixes (from Greg Chapman). also added a Scanner sanity
Fredrik Lundh <fredrik@pythonware.com>
parents:
20589
diff
changeset
|
2202 if (!list) { |
|
050ed8a21cde
sre.Scanner fixes (from Greg Chapman). also added a Scanner sanity
Fredrik Lundh <fredrik@pythonware.com>
parents:
20589
diff
changeset
|
2203 state_fini(&state); |
|
050ed8a21cde
sre.Scanner fixes (from Greg Chapman). also added a Scanner sanity
Fredrik Lundh <fredrik@pythonware.com>
parents:
20589
diff
changeset
|
2204 return NULL; |
|
050ed8a21cde
sre.Scanner fixes (from Greg Chapman). also added a Scanner sanity
Fredrik Lundh <fredrik@pythonware.com>
parents:
20589
diff
changeset
|
2205 } |
|
20585
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2206 |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2207 n = 0; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2208 last = state.start; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2209 |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2210 while (!maxsplit || n < maxsplit) { |
|
20585
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2211 |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2212 state_reset(&state); |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2213 |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2214 state.ptr = state.start; |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2215 |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2216 if (state.charsize == 1) { |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2217 status = sre_search(&state, PatternObject_GetCode(self)); |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2218 } else { |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2219 #if defined(HAVE_UNICODE) |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2220 status = sre_usearch(&state, PatternObject_GetCode(self)); |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2221 #endif |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2222 } |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2223 |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39610
diff
changeset
|
2224 if (PyErr_Occurred()) |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39610
diff
changeset
|
2225 goto error; |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39610
diff
changeset
|
2226 |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2227 if (status <= 0) { |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2228 if (status == 0) |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2229 break; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2230 pattern_error(status); |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2231 goto error; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2232 } |
|
36363
6fcb5405074e
_compile(): raise an exception if downcasting to SRE_CODE
Tim Peters <tim.peters@gmail.com>
parents:
36324
diff
changeset
|
2233 |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2234 if (state.start == state.ptr) { |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2235 if (last == state.end) |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2236 break; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2237 /* skip one character */ |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2238 state.start = (void*) ((char*) state.ptr + state.charsize); |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2239 continue; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2240 } |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2241 |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2242 /* get segment before this match */ |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2243 item = PySequence_GetSlice( |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2244 string, STATE_OFFSET(&state, last), |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2245 STATE_OFFSET(&state, state.start) |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2246 ); |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2247 if (!item) |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2248 goto error; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2249 status = PyList_Append(list, item); |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2250 Py_DECREF(item); |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2251 if (status < 0) |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2252 goto error; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2253 |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2254 /* add groups (if any) */ |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2255 for (i = 0; i < self->groups; i++) { |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2256 item = state_getslice(&state, i+1, string, 0); |
|
20585
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2257 if (!item) |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2258 goto error; |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2259 status = PyList_Append(list, item); |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2260 Py_DECREF(item); |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2261 if (status < 0) |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2262 goto error; |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2263 } |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2264 |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2265 n = n + 1; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2266 |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2267 last = state.start = state.ptr; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2268 |
|
20585
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2269 } |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2270 |
|
20605
73702d7f13b1
sre.split should return the last segment, even if empty
Fredrik Lundh <fredrik@pythonware.com>
parents:
20592
diff
changeset
|
2271 /* get segment following last match (even if empty) */ |
|
73702d7f13b1
sre.split should return the last segment, even if empty
Fredrik Lundh <fredrik@pythonware.com>
parents:
20592
diff
changeset
|
2272 item = PySequence_GetSlice( |
|
73702d7f13b1
sre.split should return the last segment, even if empty
Fredrik Lundh <fredrik@pythonware.com>
parents:
20592
diff
changeset
|
2273 string, STATE_OFFSET(&state, last), state.endpos |
|
73702d7f13b1
sre.split should return the last segment, even if empty
Fredrik Lundh <fredrik@pythonware.com>
parents:
20592
diff
changeset
|
2274 ); |
|
73702d7f13b1
sre.split should return the last segment, even if empty
Fredrik Lundh <fredrik@pythonware.com>
parents:
20592
diff
changeset
|
2275 if (!item) |
|
73702d7f13b1
sre.split should return the last segment, even if empty
Fredrik Lundh <fredrik@pythonware.com>
parents:
20592
diff
changeset
|
2276 goto error; |
|
73702d7f13b1
sre.split should return the last segment, even if empty
Fredrik Lundh <fredrik@pythonware.com>
parents:
20592
diff
changeset
|
2277 status = PyList_Append(list, item); |
|
73702d7f13b1
sre.split should return the last segment, even if empty
Fredrik Lundh <fredrik@pythonware.com>
parents:
20592
diff
changeset
|
2278 Py_DECREF(item); |
|
73702d7f13b1
sre.split should return the last segment, even if empty
Fredrik Lundh <fredrik@pythonware.com>
parents:
20592
diff
changeset
|
2279 if (status < 0) |
|
73702d7f13b1
sre.split should return the last segment, even if empty
Fredrik Lundh <fredrik@pythonware.com>
parents:
20592
diff
changeset
|
2280 goto error; |
|
20585
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2281 |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2282 state_fini(&state); |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2283 return list; |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2284 |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2285 error: |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2286 Py_DECREF(list); |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2287 state_fini(&state); |
|
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2288 return NULL; |
|
36363
6fcb5405074e
_compile(): raise an exception if downcasting to SRE_CODE
Tim Peters <tim.peters@gmail.com>
parents:
36324
diff
changeset
|
2289 |
|
20585
7d1257485aef
rewrote the pattern.split method in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20534
diff
changeset
|
2290 } |
|
20592
82bcfac89642
fixed character set description in docstring (SRE uses Python
Fredrik Lundh <fredrik@pythonware.com>
parents:
20590
diff
changeset
|
2291 |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2292 static PyObject* |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2293 pattern_subx(PatternObject* self, PyObject* ptemplate, PyObject* string, |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
2294 Py_ssize_t count, Py_ssize_t subn) |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2295 { |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2296 SRE_STATE state; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2297 PyObject* list; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2298 PyObject* item; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2299 PyObject* filter; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2300 PyObject* args; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2301 PyObject* match; |
|
20620
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
2302 void* ptr; |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2303 int status; |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
2304 Py_ssize_t n; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
2305 Py_ssize_t i, b, e; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
2306 int bint; |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2307 int filter_is_callable; |
|
75476
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
2308 Py_buffer view; |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2309 |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2310 if (PyCallable_Check(ptemplate)) { |
|
20592
82bcfac89642
fixed character set description in docstring (SRE uses Python
Fredrik Lundh <fredrik@pythonware.com>
parents:
20590
diff
changeset
|
2311 /* sub/subn takes either a function or a template */ |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2312 filter = ptemplate; |
|
20592
82bcfac89642
fixed character set description in docstring (SRE uses Python
Fredrik Lundh <fredrik@pythonware.com>
parents:
20590
diff
changeset
|
2313 Py_INCREF(filter); |
|
82bcfac89642
fixed character set description in docstring (SRE uses Python
Fredrik Lundh <fredrik@pythonware.com>
parents:
20590
diff
changeset
|
2314 filter_is_callable = 1; |
|
82bcfac89642
fixed character set description in docstring (SRE uses Python
Fredrik Lundh <fredrik@pythonware.com>
parents:
20590
diff
changeset
|
2315 } else { |
|
20620
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
2316 /* if not callable, check if it's a literal string */ |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
2317 int literal; |
|
75476
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
2318 view.buf = NULL; |
|
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
2319 ptr = getstring(ptemplate, &n, &bint, &view); |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
2320 b = bint; |
|
20620
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
2321 if (ptr) { |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
2322 if (b == 1) { |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2323 literal = sre_literal_template((unsigned char *)ptr, n); |
|
20620
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
2324 } else { |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
2325 #if defined(HAVE_UNICODE) |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2326 literal = sre_uliteral_template((Py_UNICODE *)ptr, n); |
|
20620
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
2327 #endif |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
2328 } |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
2329 } else { |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
2330 PyErr_Clear(); |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
2331 literal = 0; |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
2332 } |
|
75476
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
2333 if (view.buf) |
|
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
2334 PyBuffer_Release(&view); |
|
20620
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
2335 if (literal) { |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2336 filter = ptemplate; |
|
20620
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
2337 Py_INCREF(filter); |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
2338 filter_is_callable = 0; |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
2339 } else { |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
2340 /* not a literal; hand it over to the template compiler */ |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
2341 filter = call( |
|
37877
6a45f26ea619
Merge trunk up to 43069, putting re.py back and hopefully making the branch
Thomas Wouters <thomas@python.org>
parents:
37141
diff
changeset
|
2342 SRE_PY_MODULE, "_subx", |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2343 PyTuple_Pack(2, self, ptemplate) |
|
20620
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
2344 ); |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
2345 if (!filter) |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
2346 return NULL; |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
2347 filter_is_callable = PyCallable_Check(filter); |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
2348 } |
|
20592
82bcfac89642
fixed character set description in docstring (SRE uses Python
Fredrik Lundh <fredrik@pythonware.com>
parents:
20590
diff
changeset
|
2349 } |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2350 |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
2351 string = state_init(&state, self, string, 0, PY_SSIZE_T_MAX); |
|
21319
4bcfb9dc57e0
bug #133283, #477728, #483789, #490573
Fredrik Lundh <fredrik@pythonware.com>
parents:
21313
diff
changeset
|
2352 if (!string) { |
|
4bcfb9dc57e0
bug #133283, #477728, #483789, #490573
Fredrik Lundh <fredrik@pythonware.com>
parents:
21313
diff
changeset
|
2353 Py_DECREF(filter); |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2354 return NULL; |
|
21319
4bcfb9dc57e0
bug #133283, #477728, #483789, #490573
Fredrik Lundh <fredrik@pythonware.com>
parents:
21313
diff
changeset
|
2355 } |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2356 |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2357 list = PyList_New(0); |
|
20590
050ed8a21cde
sre.Scanner fixes (from Greg Chapman). also added a Scanner sanity
Fredrik Lundh <fredrik@pythonware.com>
parents:
20589
diff
changeset
|
2358 if (!list) { |
|
21319
4bcfb9dc57e0
bug #133283, #477728, #483789, #490573
Fredrik Lundh <fredrik@pythonware.com>
parents:
21313
diff
changeset
|
2359 Py_DECREF(filter); |
|
20590
050ed8a21cde
sre.Scanner fixes (from Greg Chapman). also added a Scanner sanity
Fredrik Lundh <fredrik@pythonware.com>
parents:
20589
diff
changeset
|
2360 state_fini(&state); |
|
050ed8a21cde
sre.Scanner fixes (from Greg Chapman). also added a Scanner sanity
Fredrik Lundh <fredrik@pythonware.com>
parents:
20589
diff
changeset
|
2361 return NULL; |
|
050ed8a21cde
sre.Scanner fixes (from Greg Chapman). also added a Scanner sanity
Fredrik Lundh <fredrik@pythonware.com>
parents:
20589
diff
changeset
|
2362 } |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2363 |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2364 n = i = 0; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2365 |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2366 while (!count || n < count) { |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2367 |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2368 state_reset(&state); |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2369 |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2370 state.ptr = state.start; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2371 |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2372 if (state.charsize == 1) { |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2373 status = sre_search(&state, PatternObject_GetCode(self)); |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2374 } else { |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2375 #if defined(HAVE_UNICODE) |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2376 status = sre_usearch(&state, PatternObject_GetCode(self)); |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2377 #endif |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2378 } |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2379 |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39610
diff
changeset
|
2380 if (PyErr_Occurred()) |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39610
diff
changeset
|
2381 goto error; |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39610
diff
changeset
|
2382 |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2383 if (status <= 0) { |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2384 if (status == 0) |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2385 break; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2386 pattern_error(status); |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2387 goto error; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2388 } |
|
36363
6fcb5405074e
_compile(): raise an exception if downcasting to SRE_CODE
Tim Peters <tim.peters@gmail.com>
parents:
36324
diff
changeset
|
2389 |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2390 b = STATE_OFFSET(&state, state.start); |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2391 e = STATE_OFFSET(&state, state.ptr); |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2392 |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2393 if (i < b) { |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2394 /* get segment before this match */ |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2395 item = PySequence_GetSlice(string, i, b); |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2396 if (!item) |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2397 goto error; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2398 status = PyList_Append(list, item); |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2399 Py_DECREF(item); |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2400 if (status < 0) |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2401 goto error; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2402 |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2403 } else if (i == b && i == e && n > 0) |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2404 /* ignore empty match on latest position */ |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2405 goto next; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2406 |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2407 if (filter_is_callable) { |
|
20592
82bcfac89642
fixed character set description in docstring (SRE uses Python
Fredrik Lundh <fredrik@pythonware.com>
parents:
20590
diff
changeset
|
2408 /* pass match object through filter */ |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2409 match = pattern_new_match(self, &state, 1); |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2410 if (!match) |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2411 goto error; |
|
30683
3b59fa5d25b1
Simplify and speedup uses of Py_BuildValue():
Raymond Hettinger <python@rcn.com>
parents:
29594
diff
changeset
|
2412 args = PyTuple_Pack(1, match); |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2413 if (!args) { |
|
21282
d35a5771c4c6
Fix for #489672 (Neil Norwitz): memory leak in test_sre.
Guido van Rossum <guido@python.org>
parents:
20660
diff
changeset
|
2414 Py_DECREF(match); |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2415 goto error; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2416 } |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2417 item = PyObject_CallObject(filter, args); |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2418 Py_DECREF(args); |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2419 Py_DECREF(match); |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2420 if (!item) |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2421 goto error; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2422 } else { |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2423 /* filter is literal string */ |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2424 item = filter; |
|
20592
82bcfac89642
fixed character set description in docstring (SRE uses Python
Fredrik Lundh <fredrik@pythonware.com>
parents:
20590
diff
changeset
|
2425 Py_INCREF(item); |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2426 } |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2427 |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2428 /* add to list */ |
|
20620
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
2429 if (item != Py_None) { |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
2430 status = PyList_Append(list, item); |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
2431 Py_DECREF(item); |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
2432 if (status < 0) |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
2433 goto error; |
|
e4f5138292e6
another major speedup: let sre.sub/subn check for escapes in the
Fredrik Lundh <fredrik@pythonware.com>
parents:
20605
diff
changeset
|
2434 } |
|
36363
6fcb5405074e
_compile(): raise an exception if downcasting to SRE_CODE
Tim Peters <tim.peters@gmail.com>
parents:
36324
diff
changeset
|
2435 |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2436 i = e; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2437 n = n + 1; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2438 |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2439 next: |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2440 /* move on */ |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2441 if (state.ptr == state.start) |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2442 state.start = (void*) ((char*) state.ptr + state.charsize); |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2443 else |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2444 state.start = state.ptr; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2445 |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2446 } |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2447 |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2448 /* get segment following last match */ |
|
20592
82bcfac89642
fixed character set description in docstring (SRE uses Python
Fredrik Lundh <fredrik@pythonware.com>
parents:
20590
diff
changeset
|
2449 if (i < state.endpos) { |
|
82bcfac89642
fixed character set description in docstring (SRE uses Python
Fredrik Lundh <fredrik@pythonware.com>
parents:
20590
diff
changeset
|
2450 item = PySequence_GetSlice(string, i, state.endpos); |
|
82bcfac89642
fixed character set description in docstring (SRE uses Python
Fredrik Lundh <fredrik@pythonware.com>
parents:
20590
diff
changeset
|
2451 if (!item) |
|
82bcfac89642
fixed character set description in docstring (SRE uses Python
Fredrik Lundh <fredrik@pythonware.com>
parents:
20590
diff
changeset
|
2452 goto error; |
|
82bcfac89642
fixed character set description in docstring (SRE uses Python
Fredrik Lundh <fredrik@pythonware.com>
parents:
20590
diff
changeset
|
2453 status = PyList_Append(list, item); |
|
82bcfac89642
fixed character set description in docstring (SRE uses Python
Fredrik Lundh <fredrik@pythonware.com>
parents:
20590
diff
changeset
|
2454 Py_DECREF(item); |
|
82bcfac89642
fixed character set description in docstring (SRE uses Python
Fredrik Lundh <fredrik@pythonware.com>
parents:
20590
diff
changeset
|
2455 if (status < 0) |
|
82bcfac89642
fixed character set description in docstring (SRE uses Python
Fredrik Lundh <fredrik@pythonware.com>
parents:
20590
diff
changeset
|
2456 goto error; |
|
82bcfac89642
fixed character set description in docstring (SRE uses Python
Fredrik Lundh <fredrik@pythonware.com>
parents:
20590
diff
changeset
|
2457 } |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2458 |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2459 state_fini(&state); |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2460 |
|
21282
d35a5771c4c6
Fix for #489672 (Neil Norwitz): memory leak in test_sre.
Guido van Rossum <guido@python.org>
parents:
20660
diff
changeset
|
2461 Py_DECREF(filter); |
|
d35a5771c4c6
Fix for #489672 (Neil Norwitz): memory leak in test_sre.
Guido van Rossum <guido@python.org>
parents:
20660
diff
changeset
|
2462 |
|
20592
82bcfac89642
fixed character set description in docstring (SRE uses Python
Fredrik Lundh <fredrik@pythonware.com>
parents:
20590
diff
changeset
|
2463 /* convert list to single string (also removes list) */ |
|
43400
1bac386c17cc
Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
43124
diff
changeset
|
2464 item = join_list(list, string); |
|
20592
82bcfac89642
fixed character set description in docstring (SRE uses Python
Fredrik Lundh <fredrik@pythonware.com>
parents:
20590
diff
changeset
|
2465 |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2466 if (!item) |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2467 return NULL; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2468 |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2469 if (subn) |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2470 return Py_BuildValue("Ni", item, n); |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2471 |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2472 return item; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2473 |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2474 error: |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2475 Py_DECREF(list); |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2476 state_fini(&state); |
|
21319
4bcfb9dc57e0
bug #133283, #477728, #483789, #490573
Fredrik Lundh <fredrik@pythonware.com>
parents:
21313
diff
changeset
|
2477 Py_DECREF(filter); |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2478 return NULL; |
|
36363
6fcb5405074e
_compile(): raise an exception if downcasting to SRE_CODE
Tim Peters <tim.peters@gmail.com>
parents:
36324
diff
changeset
|
2479 |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2480 } |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2481 |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2482 static PyObject* |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2483 pattern_sub(PatternObject* self, PyObject* args, PyObject* kw) |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2484 { |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2485 PyObject* ptemplate; |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2486 PyObject* string; |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
2487 Py_ssize_t count = 0; |
|
36675
dba6494735d0
Revert backwards-incompatible const changes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36363
diff
changeset
|
2488 static char* kwlist[] = { "repl", "string", "count", NULL }; |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
2489 if (!PyArg_ParseTupleAndKeywords(args, kw, "OO|n:sub", kwlist, |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2490 &ptemplate, &string, &count)) |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2491 return NULL; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2492 |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2493 return pattern_subx(self, ptemplate, string, count, 0); |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2494 } |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2495 |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2496 static PyObject* |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2497 pattern_subn(PatternObject* self, PyObject* args, PyObject* kw) |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2498 { |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2499 PyObject* ptemplate; |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2500 PyObject* string; |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
2501 Py_ssize_t count = 0; |
|
36675
dba6494735d0
Revert backwards-incompatible const changes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36363
diff
changeset
|
2502 static char* kwlist[] = { "repl", "string", "count", NULL }; |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
2503 if (!PyArg_ParseTupleAndKeywords(args, kw, "OO|n:subn", kwlist, |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2504 &ptemplate, &string, &count)) |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2505 return NULL; |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2506 |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2507 return pattern_subx(self, ptemplate, string, count, 1); |
|
20589
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2508 } |
|
d3298435d85b
rewrote the pattern.sub and pattern.subn methods in C
Fredrik Lundh <fredrik@pythonware.com>
parents:
20585
diff
changeset
|
2509 |
|
18363
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
2510 static PyObject* |
|
38669
19fd6141940d
Partially merge trunk into p3yk. The removal of Mac/Tools is confusing svn
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
2511 pattern_copy(PatternObject* self, PyObject *unused) |
|
18363
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
2512 { |
| 18373 | 2513 #ifdef USE_BUILTIN_COPY |
|
18363
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
2514 PatternObject* copy; |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
2515 int offset; |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
2516 |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
2517 copy = PyObject_NEW_VAR(PatternObject, &Pattern_Type, self->codesize); |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
2518 if (!copy) |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
2519 return NULL; |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
2520 |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
2521 offset = offsetof(PatternObject, groups); |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
2522 |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
2523 Py_XINCREF(self->groupindex); |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
2524 Py_XINCREF(self->indexgroup); |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
2525 Py_XINCREF(self->pattern); |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
2526 |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
2527 memcpy((char*) copy + offset, (char*) self + offset, |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
2528 sizeof(PatternObject) + self->codesize * sizeof(SRE_CODE) - offset); |
|
32160
aec9c98a47d2
Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents:
31525
diff
changeset
|
2529 copy->weakreflist = NULL; |
|
18363
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
2530 |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
2531 return (PyObject*) copy; |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
2532 #else |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
2533 PyErr_SetString(PyExc_TypeError, "cannot copy this pattern object"); |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
2534 return NULL; |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
2535 #endif |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
2536 } |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
2537 |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
2538 static PyObject* |
|
38669
19fd6141940d
Partially merge trunk into p3yk. The removal of Mac/Tools is confusing svn
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
2539 pattern_deepcopy(PatternObject* self, PyObject* memo) |
|
18363
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
2540 { |
| 18373 | 2541 #ifdef USE_BUILTIN_COPY |
| 2542 PatternObject* copy; | |
|
36363
6fcb5405074e
_compile(): raise an exception if downcasting to SRE_CODE
Tim Peters <tim.peters@gmail.com>
parents:
36324
diff
changeset
|
2543 |
|
38669
19fd6141940d
Partially merge trunk into p3yk. The removal of Mac/Tools is confusing svn
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
2544 copy = (PatternObject*) pattern_copy(self); |
| 18373 | 2545 if (!copy) |
| 2546 return NULL; | |
| 2547 | |
| 2548 if (!deepcopy(©->groupindex, memo) || | |
| 2549 !deepcopy(©->indexgroup, memo) || | |
| 2550 !deepcopy(©->pattern, memo)) { | |
| 2551 Py_DECREF(copy); | |
| 2552 return NULL; | |
| 2553 } | |
| 2554 | |
| 2555 #else | |
|
18363
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
2556 PyErr_SetString(PyExc_TypeError, "cannot deepcopy this pattern object"); |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
2557 return NULL; |
| 18373 | 2558 #endif |
|
18363
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
2559 } |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
2560 |
|
33553
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2561 PyDoc_STRVAR(pattern_match_doc, |
|
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2562 "match(string[, pos[, endpos]]) --> match object or None.\n\ |
|
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2563 Matches zero or more characters at the beginning of the string"); |
|
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2564 |
|
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2565 PyDoc_STRVAR(pattern_search_doc, |
|
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2566 "search(string[, pos[, endpos]]) --> match object or None.\n\ |
|
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2567 Scan through string looking for a match, and return a corresponding\n\ |
|
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2568 MatchObject instance. Return None if no position in the string matches."); |
|
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2569 |
|
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2570 PyDoc_STRVAR(pattern_split_doc, |
|
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2571 "split(string[, maxsplit = 0]) --> list.\n\ |
|
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2572 Split string by the occurrences of pattern."); |
|
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2573 |
|
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2574 PyDoc_STRVAR(pattern_findall_doc, |
|
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2575 "findall(string[, pos[, endpos]]) --> list.\n\ |
|
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2576 Return a list of all non-overlapping matches of pattern in string."); |
|
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2577 |
|
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2578 PyDoc_STRVAR(pattern_finditer_doc, |
|
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2579 "finditer(string[, pos[, endpos]]) --> iterator.\n\ |
|
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2580 Return an iterator over all non-overlapping matches for the \n\ |
|
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2581 RE pattern in string. For each match, the iterator returns a\n\ |
|
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2582 match object."); |
|
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2583 |
|
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2584 PyDoc_STRVAR(pattern_sub_doc, |
|
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2585 "sub(repl, string[, count = 0]) --> newstring\n\ |
|
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2586 Return the string obtained by replacing the leftmost non-overlapping\n\ |
|
36363
6fcb5405074e
_compile(): raise an exception if downcasting to SRE_CODE
Tim Peters <tim.peters@gmail.com>
parents:
36324
diff
changeset
|
2587 occurrences of pattern in string by the replacement repl."); |
|
33553
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2588 |
|
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2589 PyDoc_STRVAR(pattern_subn_doc, |
|
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2590 "subn(repl, string[, count = 0]) --> (newstring, number of subs)\n\ |
|
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2591 Return the tuple (new_string, number_of_subs_made) found by replacing\n\ |
|
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2592 the leftmost non-overlapping occurrences of pattern with the\n\ |
|
36363
6fcb5405074e
_compile(): raise an exception if downcasting to SRE_CODE
Tim Peters <tim.peters@gmail.com>
parents:
36324
diff
changeset
|
2593 replacement repl."); |
|
33553
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2594 |
|
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2595 PyDoc_STRVAR(pattern_doc, "Compiled regular expression objects"); |
|
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2596 |
|
13121
faefff43e58a
- last patch broke parse_template; fixed by changing some
Fredrik Lundh <fredrik@pythonware.com>
parents:
13119
diff
changeset
|
2597 static PyMethodDef pattern_methods[] = { |
|
36363
6fcb5405074e
_compile(): raise an exception if downcasting to SRE_CODE
Tim Peters <tim.peters@gmail.com>
parents:
36324
diff
changeset
|
2598 {"match", (PyCFunction) pattern_match, METH_VARARGS|METH_KEYWORDS, |
|
33553
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2599 pattern_match_doc}, |
|
36363
6fcb5405074e
_compile(): raise an exception if downcasting to SRE_CODE
Tim Peters <tim.peters@gmail.com>
parents:
36324
diff
changeset
|
2600 {"search", (PyCFunction) pattern_search, METH_VARARGS|METH_KEYWORDS, |
|
33553
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2601 pattern_search_doc}, |
|
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2602 {"sub", (PyCFunction) pattern_sub, METH_VARARGS|METH_KEYWORDS, |
|
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2603 pattern_sub_doc}, |
|
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2604 {"subn", (PyCFunction) pattern_subn, METH_VARARGS|METH_KEYWORDS, |
|
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2605 pattern_subn_doc}, |
|
36363
6fcb5405074e
_compile(): raise an exception if downcasting to SRE_CODE
Tim Peters <tim.peters@gmail.com>
parents:
36324
diff
changeset
|
2606 {"split", (PyCFunction) pattern_split, METH_VARARGS|METH_KEYWORDS, |
|
33553
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2607 pattern_split_doc}, |
|
36363
6fcb5405074e
_compile(): raise an exception if downcasting to SRE_CODE
Tim Peters <tim.peters@gmail.com>
parents:
36324
diff
changeset
|
2608 {"findall", (PyCFunction) pattern_findall, METH_VARARGS|METH_KEYWORDS, |
|
33553
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2609 pattern_findall_doc}, |
|
20660
c05d4895234c
(experimental) "finditer" method/function. this works pretty much
Fredrik Lundh <fredrik@pythonware.com>
parents:
20620
diff
changeset
|
2610 #if PY_VERSION_HEX >= 0x02020000 |
|
33553
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2611 {"finditer", (PyCFunction) pattern_finditer, METH_VARARGS, |
|
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2612 pattern_finditer_doc}, |
|
20660
c05d4895234c
(experimental) "finditer" method/function. this works pretty much
Fredrik Lundh <fredrik@pythonware.com>
parents:
20620
diff
changeset
|
2613 #endif |
|
15000
0a97f5dde3a7
Accept keyword arguments for (most) pattern and match object
Fredrik Lundh <fredrik@pythonware.com>
parents:
14992
diff
changeset
|
2614 {"scanner", (PyCFunction) pattern_scanner, METH_VARARGS}, |
|
38669
19fd6141940d
Partially merge trunk into p3yk. The removal of Mac/Tools is confusing svn
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
2615 {"__copy__", (PyCFunction) pattern_copy, METH_NOARGS}, |
|
19fd6141940d
Partially merge trunk into p3yk. The removal of Mac/Tools is confusing svn
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
2616 {"__deepcopy__", (PyCFunction) pattern_deepcopy, METH_O}, |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
2617 {NULL, NULL} |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2618 }; |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2619 |
|
48413
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
2620 #define PAT_OFF(x) offsetof(PatternObject, x) |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
2621 static PyMemberDef pattern_members[] = { |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
2622 {"pattern", T_OBJECT, PAT_OFF(pattern), READONLY}, |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
2623 {"flags", T_INT, PAT_OFF(flags), READONLY}, |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
2624 {"groups", T_PYSSIZET, PAT_OFF(groups), READONLY}, |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
2625 {"groupindex", T_OBJECT, PAT_OFF(groupindex), READONLY}, |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
2626 {NULL} /* Sentinel */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
2627 }; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2628 |
|
37141
4ef99695f7bb
Remove staticforward and statichere
Neal Norwitz <nnorwitz@gmail.com>
parents:
36861
diff
changeset
|
2629 static PyTypeObject Pattern_Type = { |
|
42334
e70cdce0e8b2
Merged revisions 56467-56482 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
41587
diff
changeset
|
2630 PyVarObject_HEAD_INIT(NULL, 0) |
|
e70cdce0e8b2
Merged revisions 56467-56482 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
41587
diff
changeset
|
2631 "_" SRE_MODULE ".SRE_Pattern", |
|
13327
c155bccb7a22
- added lookbehind support (?<=pattern), (?<!pattern).
Fredrik Lundh <fredrik@pythonware.com>
parents:
13310
diff
changeset
|
2632 sizeof(PatternObject), sizeof(SRE_CODE), |
|
48413
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
2633 (destructor)pattern_dealloc, /* tp_dealloc */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
2634 0, /* tp_print */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
2635 0, /* tp_getattr */ |
|
32160
aec9c98a47d2
Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents:
31525
diff
changeset
|
2636 0, /* tp_setattr */ |
|
51271
87fbbf22adf3
Merged revisions 69214 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
49127
diff
changeset
|
2637 0, /* tp_reserved */ |
|
32160
aec9c98a47d2
Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents:
31525
diff
changeset
|
2638 0, /* tp_repr */ |
|
aec9c98a47d2
Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents:
31525
diff
changeset
|
2639 0, /* tp_as_number */ |
|
aec9c98a47d2
Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents:
31525
diff
changeset
|
2640 0, /* tp_as_sequence */ |
|
aec9c98a47d2
Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents:
31525
diff
changeset
|
2641 0, /* tp_as_mapping */ |
|
aec9c98a47d2
Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents:
31525
diff
changeset
|
2642 0, /* tp_hash */ |
|
aec9c98a47d2
Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents:
31525
diff
changeset
|
2643 0, /* tp_call */ |
|
aec9c98a47d2
Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents:
31525
diff
changeset
|
2644 0, /* tp_str */ |
|
aec9c98a47d2
Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents:
31525
diff
changeset
|
2645 0, /* tp_getattro */ |
|
aec9c98a47d2
Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents:
31525
diff
changeset
|
2646 0, /* tp_setattro */ |
|
aec9c98a47d2
Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents:
31525
diff
changeset
|
2647 0, /* tp_as_buffer */ |
|
39222
b0cdcbcc5f45
Get rid of most of the flags (in tp_flags) that keep track of various
Guido van Rossum <guido@python.org>
parents:
38669
diff
changeset
|
2648 Py_TPFLAGS_DEFAULT, /* tp_flags */ |
|
33553
a6dc176c5d12
Add docstrings for regular expression objects and methods.
Raymond Hettinger <python@rcn.com>
parents:
33398
diff
changeset
|
2649 pattern_doc, /* tp_doc */ |
|
32160
aec9c98a47d2
Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents:
31525
diff
changeset
|
2650 0, /* tp_traverse */ |
|
aec9c98a47d2
Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents:
31525
diff
changeset
|
2651 0, /* tp_clear */ |
|
aec9c98a47d2
Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents:
31525
diff
changeset
|
2652 0, /* tp_richcompare */ |
|
aec9c98a47d2
Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents:
31525
diff
changeset
|
2653 offsetof(PatternObject, weakreflist), /* tp_weaklistoffset */ |
|
48413
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
2654 0, /* tp_iter */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
2655 0, /* tp_iternext */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
2656 pattern_methods, /* tp_methods */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
2657 pattern_members, /* tp_members */ |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2658 }; |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2659 |
|
48656
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2660 static int _validate(PatternObject *self); /* Forward */ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2661 |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2662 static PyObject * |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2663 _compile(PyObject* self_, PyObject* args) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2664 { |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2665 /* "compile" pattern descriptor to pattern object */ |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2666 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2667 PatternObject* self; |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
2668 Py_ssize_t i, n; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2669 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2670 PyObject* pattern; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2671 int flags = 0; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2672 PyObject* code; |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
2673 Py_ssize_t groups = 0; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2674 PyObject* groupindex = NULL; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2675 PyObject* indexgroup = NULL; |
|
75476
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
2676 |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
2677 if (!PyArg_ParseTuple(args, "OiO!|nOO", &pattern, &flags, |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2678 &PyList_Type, &code, &groups, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2679 &groupindex, &indexgroup)) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2680 return NULL; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2681 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2682 n = PyList_GET_SIZE(code); |
|
44767
a6f9a2ba8962
Merged revisions 60053-60078 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44604
diff
changeset
|
2683 /* coverity[ampersand_in_size] */ |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2684 self = PyObject_NEW_VAR(PatternObject, &Pattern_Type, n); |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2685 if (!self) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2686 return NULL; |
|
58328
80413c182a28
Merged revisions 77501 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
2687 self->weakreflist = NULL; |
|
80413c182a28
Merged revisions 77501 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
2688 self->pattern = NULL; |
|
80413c182a28
Merged revisions 77501 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
2689 self->groupindex = NULL; |
|
80413c182a28
Merged revisions 77501 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
2690 self->indexgroup = NULL; |
|
75476
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
2691 self->view.buf = NULL; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2692 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2693 self->codesize = n; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2694 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2695 for (i = 0; i < n; i++) { |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2696 PyObject *o = PyList_GET_ITEM(code, i); |
|
40626
4aee3f672f77
Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents:
40450
diff
changeset
|
2697 unsigned long value = PyLong_AsUnsignedLong(o); |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2698 self->code[i] = (SRE_CODE) value; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2699 if ((unsigned long) self->code[i] != value) { |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2700 PyErr_SetString(PyExc_OverflowError, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2701 "regular expression code size limit exceeded"); |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2702 break; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2703 } |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2704 } |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2705 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2706 if (PyErr_Occurred()) { |
|
58328
80413c182a28
Merged revisions 77501 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
2707 Py_DECREF(self); |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2708 return NULL; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2709 } |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2710 |
|
75476
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
2711 if (pattern == Py_None) |
|
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
2712 self->charsize = -1; |
|
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
2713 else { |
|
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
2714 Py_ssize_t p_length; |
|
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
2715 if (!getstring(pattern, &p_length, &self->charsize, &self->view)) { |
|
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
2716 Py_DECREF(self); |
|
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
2717 return NULL; |
|
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
2718 } |
|
10a79a33d09b
keep the buffer object around while we're using it (closes #14212)
Benjamin Peterson <benjamin@python.org>
parents:
72995
diff
changeset
|
2719 } |
|
48769
83b2d07b475b
#2834: Change re module semantics, so that str and bytes mixing is forbidden,
Antoine Pitrou <solipsis@pitrou.net>
parents:
48683
diff
changeset
|
2720 |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2721 Py_INCREF(pattern); |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2722 self->pattern = pattern; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2723 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2724 self->flags = flags; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2725 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2726 self->groups = groups; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2727 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2728 Py_XINCREF(groupindex); |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2729 self->groupindex = groupindex; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2730 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2731 Py_XINCREF(indexgroup); |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2732 self->indexgroup = indexgroup; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2733 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2734 self->weakreflist = NULL; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2735 |
|
48656
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2736 if (!_validate(self)) { |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2737 Py_DECREF(self); |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2738 return NULL; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2739 } |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2740 |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2741 return (PyObject*) self; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2742 } |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
2743 |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2744 /* -------------------------------------------------------------------- */ |
|
48656
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2745 /* Code validation */ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2746 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2747 /* To learn more about this code, have a look at the _compile() function in |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2748 Lib/sre_compile.py. The validation functions below checks the code array |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2749 for conformance with the code patterns generated there. |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2750 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2751 The nice thing about the generated code is that it is position-independent: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2752 all jumps are relative jumps forward. Also, jumps don't cross each other: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2753 the target of a later jump is always earlier than the target of an earlier |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2754 jump. IOW, this is okay: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2755 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2756 J---------J-------T--------T |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2757 \ \_____/ / |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2758 \______________________/ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2759 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2760 but this is not: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2761 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2762 J---------J-------T--------T |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2763 \_________\_____/ / |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2764 \____________/ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2765 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2766 It also helps that SRE_CODE is always an unsigned type, either 2 bytes or 4 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2767 bytes wide (the latter if Python is compiled for "wide" unicode support). |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2768 */ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2769 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2770 /* Defining this one enables tracing of the validator */ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2771 #undef VVERBOSE |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2772 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2773 /* Trace macro for the validator */ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2774 #if defined(VVERBOSE) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2775 #define VTRACE(v) printf v |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2776 #else |
|
72995
ab028084f704
3.2 - Fix Issue 12604 - Use a proper no-op macro expansion for VTRACE macro in _sre.c
Senthil Kumaran <senthil@uthcode.com>
parents:
68257
diff
changeset
|
2777 #define VTRACE(v) do {} while(0) /* do nothing */ |
|
48656
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2778 #endif |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2779 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2780 /* Report failure */ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2781 #define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return 0; } while (0) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2782 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2783 /* Extract opcode, argument, or skip count from code array */ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2784 #define GET_OP \ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2785 do { \ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2786 VTRACE(("%p: ", code)); \ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2787 if (code >= end) FAIL; \ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2788 op = *code++; \ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2789 VTRACE(("%lu (op)\n", (unsigned long)op)); \ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2790 } while (0) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2791 #define GET_ARG \ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2792 do { \ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2793 VTRACE(("%p= ", code)); \ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2794 if (code >= end) FAIL; \ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2795 arg = *code++; \ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2796 VTRACE(("%lu (arg)\n", (unsigned long)arg)); \ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2797 } while (0) |
|
49127
77565be1b957
Merged revisions 66364 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48769
diff
changeset
|
2798 #define GET_SKIP_ADJ(adj) \ |
|
48656
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2799 do { \ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2800 VTRACE(("%p= ", code)); \ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2801 if (code >= end) FAIL; \ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2802 skip = *code; \ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2803 VTRACE(("%lu (skip to %p)\n", \ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2804 (unsigned long)skip, code+skip)); \ |
|
49127
77565be1b957
Merged revisions 66364 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48769
diff
changeset
|
2805 if (code+skip-adj < code || code+skip-adj > end)\ |
|
48656
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2806 FAIL; \ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2807 code++; \ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2808 } while (0) |
|
49127
77565be1b957
Merged revisions 66364 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48769
diff
changeset
|
2809 #define GET_SKIP GET_SKIP_ADJ(0) |
|
48656
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2810 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2811 static int |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2812 _validate_charset(SRE_CODE *code, SRE_CODE *end) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2813 { |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2814 /* Some variables are manipulated by the macros above */ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2815 SRE_CODE op; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2816 SRE_CODE arg; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2817 SRE_CODE offset; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2818 int i; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2819 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2820 while (code < end) { |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2821 GET_OP; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2822 switch (op) { |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2823 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2824 case SRE_OP_NEGATE: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2825 break; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2826 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2827 case SRE_OP_LITERAL: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2828 GET_ARG; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2829 break; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2830 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2831 case SRE_OP_RANGE: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2832 GET_ARG; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2833 GET_ARG; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2834 break; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2835 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2836 case SRE_OP_CHARSET: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2837 offset = 32/sizeof(SRE_CODE); /* 32-byte bitmap */ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2838 if (code+offset < code || code+offset > end) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2839 FAIL; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2840 code += offset; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2841 break; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2842 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2843 case SRE_OP_BIGCHARSET: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2844 GET_ARG; /* Number of blocks */ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2845 offset = 256/sizeof(SRE_CODE); /* 256-byte table */ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2846 if (code+offset < code || code+offset > end) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2847 FAIL; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2848 /* Make sure that each byte points to a valid block */ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2849 for (i = 0; i < 256; i++) { |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2850 if (((unsigned char *)code)[i] >= arg) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2851 FAIL; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2852 } |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2853 code += offset; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2854 offset = arg * 32/sizeof(SRE_CODE); /* 32-byte bitmap times arg */ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2855 if (code+offset < code || code+offset > end) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2856 FAIL; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2857 code += offset; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2858 break; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2859 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2860 case SRE_OP_CATEGORY: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2861 GET_ARG; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2862 switch (arg) { |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2863 case SRE_CATEGORY_DIGIT: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2864 case SRE_CATEGORY_NOT_DIGIT: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2865 case SRE_CATEGORY_SPACE: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2866 case SRE_CATEGORY_NOT_SPACE: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2867 case SRE_CATEGORY_WORD: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2868 case SRE_CATEGORY_NOT_WORD: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2869 case SRE_CATEGORY_LINEBREAK: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2870 case SRE_CATEGORY_NOT_LINEBREAK: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2871 case SRE_CATEGORY_LOC_WORD: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2872 case SRE_CATEGORY_LOC_NOT_WORD: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2873 case SRE_CATEGORY_UNI_DIGIT: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2874 case SRE_CATEGORY_UNI_NOT_DIGIT: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2875 case SRE_CATEGORY_UNI_SPACE: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2876 case SRE_CATEGORY_UNI_NOT_SPACE: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2877 case SRE_CATEGORY_UNI_WORD: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2878 case SRE_CATEGORY_UNI_NOT_WORD: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2879 case SRE_CATEGORY_UNI_LINEBREAK: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2880 case SRE_CATEGORY_UNI_NOT_LINEBREAK: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2881 break; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2882 default: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2883 FAIL; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2884 } |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2885 break; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2886 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2887 default: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2888 FAIL; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2889 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2890 } |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2891 } |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2892 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2893 return 1; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2894 } |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2895 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2896 static int |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2897 _validate_inner(SRE_CODE *code, SRE_CODE *end, Py_ssize_t groups) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2898 { |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2899 /* Some variables are manipulated by the macros above */ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2900 SRE_CODE op; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2901 SRE_CODE arg; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2902 SRE_CODE skip; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2903 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2904 VTRACE(("code=%p, end=%p\n", code, end)); |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2905 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2906 if (code > end) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2907 FAIL; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2908 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2909 while (code < end) { |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2910 GET_OP; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2911 switch (op) { |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2912 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2913 case SRE_OP_MARK: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2914 /* We don't check whether marks are properly nested; the |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2915 sre_match() code is robust even if they don't, and the worst |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2916 you can get is nonsensical match results. */ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2917 GET_ARG; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2918 if (arg > 2*groups+1) { |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2919 VTRACE(("arg=%d, groups=%d\n", (int)arg, (int)groups)); |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2920 FAIL; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2921 } |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2922 break; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2923 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2924 case SRE_OP_LITERAL: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2925 case SRE_OP_NOT_LITERAL: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2926 case SRE_OP_LITERAL_IGNORE: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2927 case SRE_OP_NOT_LITERAL_IGNORE: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2928 GET_ARG; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2929 /* The arg is just a character, nothing to check */ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2930 break; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2931 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2932 case SRE_OP_SUCCESS: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2933 case SRE_OP_FAILURE: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2934 /* Nothing to check; these normally end the matching process */ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2935 break; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2936 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2937 case SRE_OP_AT: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2938 GET_ARG; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2939 switch (arg) { |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2940 case SRE_AT_BEGINNING: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2941 case SRE_AT_BEGINNING_STRING: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2942 case SRE_AT_BEGINNING_LINE: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2943 case SRE_AT_END: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2944 case SRE_AT_END_LINE: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2945 case SRE_AT_END_STRING: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2946 case SRE_AT_BOUNDARY: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2947 case SRE_AT_NON_BOUNDARY: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2948 case SRE_AT_LOC_BOUNDARY: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2949 case SRE_AT_LOC_NON_BOUNDARY: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2950 case SRE_AT_UNI_BOUNDARY: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2951 case SRE_AT_UNI_NON_BOUNDARY: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2952 break; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2953 default: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2954 FAIL; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2955 } |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2956 break; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2957 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2958 case SRE_OP_ANY: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2959 case SRE_OP_ANY_ALL: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2960 /* These have no operands */ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2961 break; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2962 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2963 case SRE_OP_IN: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2964 case SRE_OP_IN_IGNORE: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2965 GET_SKIP; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2966 /* Stop 1 before the end; we check the FAILURE below */ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2967 if (!_validate_charset(code, code+skip-2)) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2968 FAIL; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2969 if (code[skip-2] != SRE_OP_FAILURE) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2970 FAIL; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2971 code += skip-1; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2972 break; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2973 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2974 case SRE_OP_INFO: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2975 { |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2976 /* A minimal info field is |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2977 <INFO> <1=skip> <2=flags> <3=min> <4=max>; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2978 If SRE_INFO_PREFIX or SRE_INFO_CHARSET is in the flags, |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2979 more follows. */ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2980 SRE_CODE flags, min, max, i; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2981 SRE_CODE *newcode; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2982 GET_SKIP; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2983 newcode = code+skip-1; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2984 GET_ARG; flags = arg; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2985 GET_ARG; min = arg; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2986 GET_ARG; max = arg; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2987 /* Check that only valid flags are present */ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2988 if ((flags & ~(SRE_INFO_PREFIX | |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2989 SRE_INFO_LITERAL | |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2990 SRE_INFO_CHARSET)) != 0) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2991 FAIL; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2992 /* PREFIX and CHARSET are mutually exclusive */ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2993 if ((flags & SRE_INFO_PREFIX) && |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2994 (flags & SRE_INFO_CHARSET)) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2995 FAIL; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2996 /* LITERAL implies PREFIX */ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2997 if ((flags & SRE_INFO_LITERAL) && |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2998 !(flags & SRE_INFO_PREFIX)) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
2999 FAIL; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3000 /* Validate the prefix */ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3001 if (flags & SRE_INFO_PREFIX) { |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3002 SRE_CODE prefix_len, prefix_skip; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3003 GET_ARG; prefix_len = arg; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3004 GET_ARG; prefix_skip = arg; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3005 /* Here comes the prefix string */ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3006 if (code+prefix_len < code || code+prefix_len > newcode) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3007 FAIL; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3008 code += prefix_len; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3009 /* And here comes the overlap table */ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3010 if (code+prefix_len < code || code+prefix_len > newcode) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3011 FAIL; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3012 /* Each overlap value should be < prefix_len */ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3013 for (i = 0; i < prefix_len; i++) { |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3014 if (code[i] >= prefix_len) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3015 FAIL; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3016 } |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3017 code += prefix_len; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3018 } |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3019 /* Validate the charset */ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3020 if (flags & SRE_INFO_CHARSET) { |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3021 if (!_validate_charset(code, newcode-1)) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3022 FAIL; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3023 if (newcode[-1] != SRE_OP_FAILURE) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3024 FAIL; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3025 code = newcode; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3026 } |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3027 else if (code != newcode) { |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3028 VTRACE(("code=%p, newcode=%p\n", code, newcode)); |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3029 FAIL; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3030 } |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3031 } |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3032 break; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3033 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3034 case SRE_OP_BRANCH: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3035 { |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3036 SRE_CODE *target = NULL; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3037 for (;;) { |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3038 GET_SKIP; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3039 if (skip == 0) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3040 break; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3041 /* Stop 2 before the end; we check the JUMP below */ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3042 if (!_validate_inner(code, code+skip-3, groups)) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3043 FAIL; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3044 code += skip-3; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3045 /* Check that it ends with a JUMP, and that each JUMP |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3046 has the same target */ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3047 GET_OP; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3048 if (op != SRE_OP_JUMP) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3049 FAIL; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3050 GET_SKIP; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3051 if (target == NULL) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3052 target = code+skip-1; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3053 else if (code+skip-1 != target) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3054 FAIL; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3055 } |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3056 } |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3057 break; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3058 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3059 case SRE_OP_REPEAT_ONE: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3060 case SRE_OP_MIN_REPEAT_ONE: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3061 { |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3062 SRE_CODE min, max; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3063 GET_SKIP; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3064 GET_ARG; min = arg; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3065 GET_ARG; max = arg; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3066 if (min > max) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3067 FAIL; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3068 #ifdef Py_UNICODE_WIDE |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3069 if (max > 65535) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3070 FAIL; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3071 #endif |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3072 if (!_validate_inner(code, code+skip-4, groups)) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3073 FAIL; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3074 code += skip-4; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3075 GET_OP; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3076 if (op != SRE_OP_SUCCESS) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3077 FAIL; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3078 } |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3079 break; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3080 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3081 case SRE_OP_REPEAT: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3082 { |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3083 SRE_CODE min, max; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3084 GET_SKIP; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3085 GET_ARG; min = arg; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3086 GET_ARG; max = arg; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3087 if (min > max) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3088 FAIL; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3089 #ifdef Py_UNICODE_WIDE |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3090 if (max > 65535) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3091 FAIL; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3092 #endif |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3093 if (!_validate_inner(code, code+skip-3, groups)) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3094 FAIL; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3095 code += skip-3; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3096 GET_OP; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3097 if (op != SRE_OP_MAX_UNTIL && op != SRE_OP_MIN_UNTIL) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3098 FAIL; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3099 } |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3100 break; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3101 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3102 case SRE_OP_GROUPREF: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3103 case SRE_OP_GROUPREF_IGNORE: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3104 GET_ARG; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3105 if (arg >= groups) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3106 FAIL; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3107 break; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3108 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3109 case SRE_OP_GROUPREF_EXISTS: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3110 /* The regex syntax for this is: '(?(group)then|else)', where |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3111 'group' is either an integer group number or a group name, |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3112 'then' and 'else' are sub-regexes, and 'else' is optional. */ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3113 GET_ARG; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3114 if (arg >= groups) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3115 FAIL; |
|
49127
77565be1b957
Merged revisions 66364 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48769
diff
changeset
|
3116 GET_SKIP_ADJ(1); |
|
48656
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3117 code--; /* The skip is relative to the first arg! */ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3118 /* There are two possibilities here: if there is both a 'then' |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3119 part and an 'else' part, the generated code looks like: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3120 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3121 GROUPREF_EXISTS |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3122 <group> |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3123 <skipyes> |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3124 ...then part... |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3125 JUMP |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3126 <skipno> |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3127 (<skipyes> jumps here) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3128 ...else part... |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3129 (<skipno> jumps here) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3130 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3131 If there is only a 'then' part, it looks like: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3132 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3133 GROUPREF_EXISTS |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3134 <group> |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3135 <skip> |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3136 ...then part... |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3137 (<skip> jumps here) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3138 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3139 There is no direct way to decide which it is, and we don't want |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3140 to allow arbitrary jumps anywhere in the code; so we just look |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3141 for a JUMP opcode preceding our skip target. |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3142 */ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3143 if (skip >= 3 && code+skip-3 >= code && |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3144 code[skip-3] == SRE_OP_JUMP) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3145 { |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3146 VTRACE(("both then and else parts present\n")); |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3147 if (!_validate_inner(code+1, code+skip-3, groups)) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3148 FAIL; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3149 code += skip-2; /* Position after JUMP, at <skipno> */ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3150 GET_SKIP; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3151 if (!_validate_inner(code, code+skip-1, groups)) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3152 FAIL; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3153 code += skip-1; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3154 } |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3155 else { |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3156 VTRACE(("only a then part present\n")); |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3157 if (!_validate_inner(code+1, code+skip-1, groups)) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3158 FAIL; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3159 code += skip-1; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3160 } |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3161 break; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3162 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3163 case SRE_OP_ASSERT: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3164 case SRE_OP_ASSERT_NOT: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3165 GET_SKIP; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3166 GET_ARG; /* 0 for lookahead, width for lookbehind */ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3167 code--; /* Back up over arg to simplify math below */ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3168 if (arg & 0x80000000) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3169 FAIL; /* Width too large */ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3170 /* Stop 1 before the end; we check the SUCCESS below */ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3171 if (!_validate_inner(code+1, code+skip-2, groups)) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3172 FAIL; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3173 code += skip-2; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3174 GET_OP; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3175 if (op != SRE_OP_SUCCESS) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3176 FAIL; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3177 break; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3178 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3179 default: |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3180 FAIL; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3181 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3182 } |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3183 } |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3184 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3185 VTRACE(("okay\n")); |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3186 return 1; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3187 } |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3188 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3189 static int |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3190 _validate_outer(SRE_CODE *code, SRE_CODE *end, Py_ssize_t groups) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3191 { |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3192 if (groups < 0 || groups > 100 || code >= end || end[-1] != SRE_OP_SUCCESS) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3193 FAIL; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3194 if (groups == 0) /* fix for simplejson */ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3195 groups = 100; /* 100 groups should always be safe */ |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3196 return _validate_inner(code, end-1, groups); |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3197 } |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3198 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3199 static int |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3200 _validate(PatternObject *self) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3201 { |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3202 if (!_validate_outer(self->code, self->code+self->codesize, self->groups)) |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3203 { |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3204 PyErr_SetString(PyExc_RuntimeError, "invalid SRE code"); |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3205 return 0; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3206 } |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3207 else |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3208 VTRACE(("Success!\n")); |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3209 return 1; |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3210 } |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3211 |
|
79ea340d1a59
Merged revisions 65544 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
48413
diff
changeset
|
3212 /* -------------------------------------------------------------------- */ |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3213 /* match methods */ |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3214 |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3215 static void |
|
13121
faefff43e58a
- last patch broke parse_template; fixed by changing some
Fredrik Lundh <fredrik@pythonware.com>
parents:
13119
diff
changeset
|
3216 match_dealloc(MatchObject* self) |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3217 { |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3218 Py_XDECREF(self->regs); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3219 Py_XDECREF(self->string); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3220 Py_DECREF(self->pattern); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3221 PyObject_DEL(self); |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3222 } |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3223 |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3224 static PyObject* |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
3225 match_getslice_by_index(MatchObject* self, Py_ssize_t index, PyObject* def) |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3226 { |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3227 if (index < 0 || index >= self->groups) { |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3228 /* raise IndexError if we were given a bad group number */ |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3229 PyErr_SetString( |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3230 PyExc_IndexError, |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3231 "no such group" |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3232 ); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3233 return NULL; |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3234 } |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3235 |
|
13327
c155bccb7a22
- added lookbehind support (?<=pattern), (?<!pattern).
Fredrik Lundh <fredrik@pythonware.com>
parents:
13310
diff
changeset
|
3236 index *= 2; |
|
c155bccb7a22
- added lookbehind support (?<=pattern), (?<!pattern).
Fredrik Lundh <fredrik@pythonware.com>
parents:
13310
diff
changeset
|
3237 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3238 if (self->string == Py_None || self->mark[index] < 0) { |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3239 /* return default value if the string or group is undefined */ |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3240 Py_INCREF(def); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3241 return def; |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3242 } |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3243 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3244 return PySequence_GetSlice( |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3245 self->string, self->mark[index], self->mark[index+1] |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3246 ); |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3247 } |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3248 |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
3249 static Py_ssize_t |
|
13121
faefff43e58a
- last patch broke parse_template; fixed by changing some
Fredrik Lundh <fredrik@pythonware.com>
parents:
13119
diff
changeset
|
3250 match_getindex(MatchObject* self, PyObject* index) |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3251 { |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
3252 Py_ssize_t i; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3253 |
|
40626
4aee3f672f77
Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents:
40450
diff
changeset
|
3254 if (index == NULL) |
|
4aee3f672f77
Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents:
40450
diff
changeset
|
3255 /* Default value */ |
|
4aee3f672f77
Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents:
40450
diff
changeset
|
3256 return 0; |
|
4aee3f672f77
Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents:
40450
diff
changeset
|
3257 |
|
44099
f324631462a2
Cleanup: Replaced most PyInt_ aliases with PyLong_ and disabled the aliases in intobject.h
Christian Heimes <christian@cheimes.de>
parents:
43560
diff
changeset
|
3258 if (PyLong_Check(index)) |
|
f324631462a2
Cleanup: Replaced most PyInt_ aliases with PyLong_ and disabled the aliases in intobject.h
Christian Heimes <christian@cheimes.de>
parents:
43560
diff
changeset
|
3259 return PyLong_AsSsize_t(index); |
| 13118 | 3260 |
|
13327
c155bccb7a22
- added lookbehind support (?<=pattern), (?<!pattern).
Fredrik Lundh <fredrik@pythonware.com>
parents:
13310
diff
changeset
|
3261 i = -1; |
|
c155bccb7a22
- added lookbehind support (?<=pattern), (?<!pattern).
Fredrik Lundh <fredrik@pythonware.com>
parents:
13310
diff
changeset
|
3262 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3263 if (self->pattern->groupindex) { |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3264 index = PyObject_GetItem(self->pattern->groupindex, index); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3265 if (index) { |
|
43124
727539865f04
Remove checking redundantly for checks of PyInt and PyLong.
Neal Norwitz <nnorwitz@gmail.com>
parents:
42850
diff
changeset
|
3266 if (PyLong_Check(index)) |
|
44099
f324631462a2
Cleanup: Replaced most PyInt_ aliases with PyLong_ and disabled the aliases in intobject.h
Christian Heimes <christian@cheimes.de>
parents:
43560
diff
changeset
|
3267 i = PyLong_AsSsize_t(index); |
|
13327
c155bccb7a22
- added lookbehind support (?<=pattern), (?<!pattern).
Fredrik Lundh <fredrik@pythonware.com>
parents:
13310
diff
changeset
|
3268 Py_DECREF(index); |
|
c155bccb7a22
- added lookbehind support (?<=pattern), (?<!pattern).
Fredrik Lundh <fredrik@pythonware.com>
parents:
13310
diff
changeset
|
3269 } else |
|
c155bccb7a22
- added lookbehind support (?<=pattern), (?<!pattern).
Fredrik Lundh <fredrik@pythonware.com>
parents:
13310
diff
changeset
|
3270 PyErr_Clear(); |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3271 } |
|
13327
c155bccb7a22
- added lookbehind support (?<=pattern), (?<!pattern).
Fredrik Lundh <fredrik@pythonware.com>
parents:
13310
diff
changeset
|
3272 |
|
c155bccb7a22
- added lookbehind support (?<=pattern), (?<!pattern).
Fredrik Lundh <fredrik@pythonware.com>
parents:
13310
diff
changeset
|
3273 return i; |
| 13118 | 3274 } |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3275 |
| 13118 | 3276 static PyObject* |
|
13185
e9c34cca0c96
- fixed default value handling in group/groupdict
Fredrik Lundh <fredrik@pythonware.com>
parents:
13166
diff
changeset
|
3277 match_getslice(MatchObject* self, PyObject* index, PyObject* def) |
| 13118 | 3278 { |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3279 return match_getslice_by_index(self, match_getindex(self, index), def); |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3280 } |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3281 |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3282 static PyObject* |
|
38669
19fd6141940d
Partially merge trunk into p3yk. The removal of Mac/Tools is confusing svn
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
3283 match_expand(MatchObject* self, PyObject* ptemplate) |
|
14726
176660ff0c95
- fixed yet another gcc -pedantic warning
Fredrik Lundh <fredrik@pythonware.com>
parents:
14381
diff
changeset
|
3284 { |
|
176660ff0c95
- fixed yet another gcc -pedantic warning
Fredrik Lundh <fredrik@pythonware.com>
parents:
14381
diff
changeset
|
3285 /* delegate to Python code */ |
|
176660ff0c95
- fixed yet another gcc -pedantic warning
Fredrik Lundh <fredrik@pythonware.com>
parents:
14381
diff
changeset
|
3286 return call( |
|
37877
6a45f26ea619
Merge trunk up to 43069, putting re.py back and hopefully making the branch
Thomas Wouters <thomas@python.org>
parents:
37141
diff
changeset
|
3287 SRE_PY_MODULE, "_expand", |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3288 PyTuple_Pack(3, self->pattern, self, ptemplate) |
|
14726
176660ff0c95
- fixed yet another gcc -pedantic warning
Fredrik Lundh <fredrik@pythonware.com>
parents:
14381
diff
changeset
|
3289 ); |
|
176660ff0c95
- fixed yet another gcc -pedantic warning
Fredrik Lundh <fredrik@pythonware.com>
parents:
14381
diff
changeset
|
3290 } |
|
176660ff0c95
- fixed yet another gcc -pedantic warning
Fredrik Lundh <fredrik@pythonware.com>
parents:
14381
diff
changeset
|
3291 |
|
176660ff0c95
- fixed yet another gcc -pedantic warning
Fredrik Lundh <fredrik@pythonware.com>
parents:
14381
diff
changeset
|
3292 static PyObject* |
|
13121
faefff43e58a
- last patch broke parse_template; fixed by changing some
Fredrik Lundh <fredrik@pythonware.com>
parents:
13119
diff
changeset
|
3293 match_group(MatchObject* self, PyObject* args) |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3294 { |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3295 PyObject* result; |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
3296 Py_ssize_t i, size; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3297 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3298 size = PyTuple_GET_SIZE(args); |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3299 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3300 switch (size) { |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3301 case 0: |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3302 result = match_getslice(self, Py_False, Py_None); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3303 break; |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3304 case 1: |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3305 result = match_getslice(self, PyTuple_GET_ITEM(args, 0), Py_None); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3306 break; |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3307 default: |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3308 /* fetch multiple items */ |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3309 result = PyTuple_New(size); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3310 if (!result) |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3311 return NULL; |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3312 for (i = 0; i < size; i++) { |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3313 PyObject* item = match_getslice( |
|
13185
e9c34cca0c96
- fixed default value handling in group/groupdict
Fredrik Lundh <fredrik@pythonware.com>
parents:
13166
diff
changeset
|
3314 self, PyTuple_GET_ITEM(args, i), Py_None |
|
e9c34cca0c96
- fixed default value handling in group/groupdict
Fredrik Lundh <fredrik@pythonware.com>
parents:
13166
diff
changeset
|
3315 ); |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3316 if (!item) { |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3317 Py_DECREF(result); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3318 return NULL; |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3319 } |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3320 PyTuple_SET_ITEM(result, i, item); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3321 } |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3322 break; |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3323 } |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3324 return result; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3325 } |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3326 |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3327 static PyObject* |
|
15000
0a97f5dde3a7
Accept keyword arguments for (most) pattern and match object
Fredrik Lundh <fredrik@pythonware.com>
parents:
14992
diff
changeset
|
3328 match_groups(MatchObject* self, PyObject* args, PyObject* kw) |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3329 { |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3330 PyObject* result; |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
3331 Py_ssize_t index; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3332 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3333 PyObject* def = Py_None; |
|
36675
dba6494735d0
Revert backwards-incompatible const changes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36363
diff
changeset
|
3334 static char* kwlist[] = { "default", NULL }; |
|
15000
0a97f5dde3a7
Accept keyword arguments for (most) pattern and match object
Fredrik Lundh <fredrik@pythonware.com>
parents:
14992
diff
changeset
|
3335 if (!PyArg_ParseTupleAndKeywords(args, kw, "|O:groups", kwlist, &def)) |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3336 return NULL; |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3337 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3338 result = PyTuple_New(self->groups-1); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3339 if (!result) |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3340 return NULL; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3341 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3342 for (index = 1; index < self->groups; index++) { |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3343 PyObject* item; |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3344 item = match_getslice_by_index(self, index, def); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3345 if (!item) { |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3346 Py_DECREF(result); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3347 return NULL; |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3348 } |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3349 PyTuple_SET_ITEM(result, index-1, item); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3350 } |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3351 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3352 return result; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3353 } |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3354 |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3355 static PyObject* |
|
15000
0a97f5dde3a7
Accept keyword arguments for (most) pattern and match object
Fredrik Lundh <fredrik@pythonware.com>
parents:
14992
diff
changeset
|
3356 match_groupdict(MatchObject* self, PyObject* args, PyObject* kw) |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3357 { |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3358 PyObject* result; |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3359 PyObject* keys; |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
3360 Py_ssize_t index; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3361 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3362 PyObject* def = Py_None; |
|
36675
dba6494735d0
Revert backwards-incompatible const changes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36363
diff
changeset
|
3363 static char* kwlist[] = { "default", NULL }; |
|
15855
152d00718006
SRE fixes for 2.1 alpha:
Fredrik Lundh <fredrik@pythonware.com>
parents:
15643
diff
changeset
|
3364 if (!PyArg_ParseTupleAndKeywords(args, kw, "|O:groupdict", kwlist, &def)) |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3365 return NULL; |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3366 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3367 result = PyDict_New(); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3368 if (!result || !self->pattern->groupindex) |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3369 return result; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3370 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3371 keys = PyMapping_Keys(self->pattern->groupindex); |
|
15855
152d00718006
SRE fixes for 2.1 alpha:
Fredrik Lundh <fredrik@pythonware.com>
parents:
15643
diff
changeset
|
3372 if (!keys) |
|
152d00718006
SRE fixes for 2.1 alpha:
Fredrik Lundh <fredrik@pythonware.com>
parents:
15643
diff
changeset
|
3373 goto failed; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3374 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3375 for (index = 0; index < PyList_GET_SIZE(keys); index++) { |
|
15855
152d00718006
SRE fixes for 2.1 alpha:
Fredrik Lundh <fredrik@pythonware.com>
parents:
15643
diff
changeset
|
3376 int status; |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3377 PyObject* key; |
|
15855
152d00718006
SRE fixes for 2.1 alpha:
Fredrik Lundh <fredrik@pythonware.com>
parents:
15643
diff
changeset
|
3378 PyObject* value; |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3379 key = PyList_GET_ITEM(keys, index); |
|
15855
152d00718006
SRE fixes for 2.1 alpha:
Fredrik Lundh <fredrik@pythonware.com>
parents:
15643
diff
changeset
|
3380 if (!key) |
|
152d00718006
SRE fixes for 2.1 alpha:
Fredrik Lundh <fredrik@pythonware.com>
parents:
15643
diff
changeset
|
3381 goto failed; |
|
152d00718006
SRE fixes for 2.1 alpha:
Fredrik Lundh <fredrik@pythonware.com>
parents:
15643
diff
changeset
|
3382 value = match_getslice(self, key, def); |
|
152d00718006
SRE fixes for 2.1 alpha:
Fredrik Lundh <fredrik@pythonware.com>
parents:
15643
diff
changeset
|
3383 if (!value) { |
|
152d00718006
SRE fixes for 2.1 alpha:
Fredrik Lundh <fredrik@pythonware.com>
parents:
15643
diff
changeset
|
3384 Py_DECREF(key); |
|
152d00718006
SRE fixes for 2.1 alpha:
Fredrik Lundh <fredrik@pythonware.com>
parents:
15643
diff
changeset
|
3385 goto failed; |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3386 } |
|
15855
152d00718006
SRE fixes for 2.1 alpha:
Fredrik Lundh <fredrik@pythonware.com>
parents:
15643
diff
changeset
|
3387 status = PyDict_SetItem(result, key, value); |
|
152d00718006
SRE fixes for 2.1 alpha:
Fredrik Lundh <fredrik@pythonware.com>
parents:
15643
diff
changeset
|
3388 Py_DECREF(value); |
|
152d00718006
SRE fixes for 2.1 alpha:
Fredrik Lundh <fredrik@pythonware.com>
parents:
15643
diff
changeset
|
3389 if (status < 0) |
|
152d00718006
SRE fixes for 2.1 alpha:
Fredrik Lundh <fredrik@pythonware.com>
parents:
15643
diff
changeset
|
3390 goto failed; |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3391 } |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3392 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3393 Py_DECREF(keys); |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3394 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3395 return result; |
|
15855
152d00718006
SRE fixes for 2.1 alpha:
Fredrik Lundh <fredrik@pythonware.com>
parents:
15643
diff
changeset
|
3396 |
|
152d00718006
SRE fixes for 2.1 alpha:
Fredrik Lundh <fredrik@pythonware.com>
parents:
15643
diff
changeset
|
3397 failed: |
|
36861
895074e5ed3a
Thanks to Coverity, these were all reported by their Prevent tool.
Neal Norwitz <nnorwitz@gmail.com>
parents:
36675
diff
changeset
|
3398 Py_XDECREF(keys); |
|
15855
152d00718006
SRE fixes for 2.1 alpha:
Fredrik Lundh <fredrik@pythonware.com>
parents:
15643
diff
changeset
|
3399 Py_DECREF(result); |
|
152d00718006
SRE fixes for 2.1 alpha:
Fredrik Lundh <fredrik@pythonware.com>
parents:
15643
diff
changeset
|
3400 return NULL; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3401 } |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3402 |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3403 static PyObject* |
|
13121
faefff43e58a
- last patch broke parse_template; fixed by changing some
Fredrik Lundh <fredrik@pythonware.com>
parents:
13119
diff
changeset
|
3404 match_start(MatchObject* self, PyObject* args) |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3405 { |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
3406 Py_ssize_t index; |
| 13118 | 3407 |
|
40626
4aee3f672f77
Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents:
40450
diff
changeset
|
3408 PyObject* index_ = NULL; |
|
38669
19fd6141940d
Partially merge trunk into p3yk. The removal of Mac/Tools is confusing svn
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
3409 if (!PyArg_UnpackTuple(args, "start", 0, 1, &index_)) |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3410 return NULL; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3411 |
|
13121
faefff43e58a
- last patch broke parse_template; fixed by changing some
Fredrik Lundh <fredrik@pythonware.com>
parents:
13119
diff
changeset
|
3412 index = match_getindex(self, index_); |
| 13118 | 3413 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3414 if (index < 0 || index >= self->groups) { |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3415 PyErr_SetString( |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3416 PyExc_IndexError, |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3417 "no such group" |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3418 ); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3419 return NULL; |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3420 } |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3421 |
|
14381
7958a88edda1
return -1 for undefined groups (as implemented in 1.5.2) instead of
Fredrik Lundh <fredrik@pythonware.com>
parents:
14235
diff
changeset
|
3422 /* mark is -1 if group is undefined */ |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3423 return Py_BuildValue("i", self->mark[index*2]); |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3424 } |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3425 |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3426 static PyObject* |
|
13121
faefff43e58a
- last patch broke parse_template; fixed by changing some
Fredrik Lundh <fredrik@pythonware.com>
parents:
13119
diff
changeset
|
3427 match_end(MatchObject* self, PyObject* args) |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3428 { |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
3429 Py_ssize_t index; |
| 13118 | 3430 |
|
40626
4aee3f672f77
Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents:
40450
diff
changeset
|
3431 PyObject* index_ = NULL; |
|
38669
19fd6141940d
Partially merge trunk into p3yk. The removal of Mac/Tools is confusing svn
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
3432 if (!PyArg_UnpackTuple(args, "end", 0, 1, &index_)) |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3433 return NULL; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3434 |
|
13121
faefff43e58a
- last patch broke parse_template; fixed by changing some
Fredrik Lundh <fredrik@pythonware.com>
parents:
13119
diff
changeset
|
3435 index = match_getindex(self, index_); |
| 13118 | 3436 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3437 if (index < 0 || index >= self->groups) { |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3438 PyErr_SetString( |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3439 PyExc_IndexError, |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3440 "no such group" |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3441 ); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3442 return NULL; |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3443 } |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3444 |
|
14381
7958a88edda1
return -1 for undefined groups (as implemented in 1.5.2) instead of
Fredrik Lundh <fredrik@pythonware.com>
parents:
14235
diff
changeset
|
3445 /* mark is -1 if group is undefined */ |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3446 return Py_BuildValue("i", self->mark[index*2+1]); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3447 } |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3448 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3449 LOCAL(PyObject*) |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
3450 _pair(Py_ssize_t i1, Py_ssize_t i2) |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3451 { |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3452 PyObject* pair; |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3453 PyObject* item; |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3454 |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3455 pair = PyTuple_New(2); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3456 if (!pair) |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3457 return NULL; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3458 |
|
44099
f324631462a2
Cleanup: Replaced most PyInt_ aliases with PyLong_ and disabled the aliases in intobject.h
Christian Heimes <christian@cheimes.de>
parents:
43560
diff
changeset
|
3459 item = PyLong_FromSsize_t(i1); |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3460 if (!item) |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3461 goto error; |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3462 PyTuple_SET_ITEM(pair, 0, item); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3463 |
|
44099
f324631462a2
Cleanup: Replaced most PyInt_ aliases with PyLong_ and disabled the aliases in intobject.h
Christian Heimes <christian@cheimes.de>
parents:
43560
diff
changeset
|
3464 item = PyLong_FromSsize_t(i2); |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3465 if (!item) |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3466 goto error; |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3467 PyTuple_SET_ITEM(pair, 1, item); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3468 |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3469 return pair; |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3470 |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3471 error: |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3472 Py_DECREF(pair); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3473 return NULL; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3474 } |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3475 |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3476 static PyObject* |
|
13121
faefff43e58a
- last patch broke parse_template; fixed by changing some
Fredrik Lundh <fredrik@pythonware.com>
parents:
13119
diff
changeset
|
3477 match_span(MatchObject* self, PyObject* args) |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3478 { |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
3479 Py_ssize_t index; |
| 13118 | 3480 |
|
40626
4aee3f672f77
Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents:
40450
diff
changeset
|
3481 PyObject* index_ = NULL; |
|
38669
19fd6141940d
Partially merge trunk into p3yk. The removal of Mac/Tools is confusing svn
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
3482 if (!PyArg_UnpackTuple(args, "span", 0, 1, &index_)) |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3483 return NULL; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3484 |
|
13121
faefff43e58a
- last patch broke parse_template; fixed by changing some
Fredrik Lundh <fredrik@pythonware.com>
parents:
13119
diff
changeset
|
3485 index = match_getindex(self, index_); |
| 13118 | 3486 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3487 if (index < 0 || index >= self->groups) { |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3488 PyErr_SetString( |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3489 PyExc_IndexError, |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3490 "no such group" |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3491 ); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3492 return NULL; |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3493 } |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3494 |
|
14381
7958a88edda1
return -1 for undefined groups (as implemented in 1.5.2) instead of
Fredrik Lundh <fredrik@pythonware.com>
parents:
14235
diff
changeset
|
3495 /* marks are -1 if group is undefined */ |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3496 return _pair(self->mark[index*2], self->mark[index*2+1]); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3497 } |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3498 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3499 static PyObject* |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3500 match_regs(MatchObject* self) |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3501 { |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3502 PyObject* regs; |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3503 PyObject* item; |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
3504 Py_ssize_t index; |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3505 |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3506 regs = PyTuple_New(self->groups); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3507 if (!regs) |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3508 return NULL; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3509 |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3510 for (index = 0; index < self->groups; index++) { |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3511 item = _pair(self->mark[index*2], self->mark[index*2+1]); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3512 if (!item) { |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3513 Py_DECREF(regs); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3514 return NULL; |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3515 } |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3516 PyTuple_SET_ITEM(regs, index, item); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3517 } |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3518 |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3519 Py_INCREF(regs); |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3520 self->regs = regs; |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3521 |
|
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3522 return regs; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3523 } |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3524 |
|
18363
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
3525 static PyObject* |
|
38669
19fd6141940d
Partially merge trunk into p3yk. The removal of Mac/Tools is confusing svn
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
3526 match_copy(MatchObject* self, PyObject *unused) |
|
18363
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
3527 { |
| 18373 | 3528 #ifdef USE_BUILTIN_COPY |
|
18363
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
3529 MatchObject* copy; |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
3530 Py_ssize_t slots, offset; |
|
36363
6fcb5405074e
_compile(): raise an exception if downcasting to SRE_CODE
Tim Peters <tim.peters@gmail.com>
parents:
36324
diff
changeset
|
3531 |
|
18363
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
3532 slots = 2 * (self->pattern->groups+1); |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
3533 |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
3534 copy = PyObject_NEW_VAR(MatchObject, &Match_Type, slots); |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
3535 if (!copy) |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
3536 return NULL; |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
3537 |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
3538 /* this value a constant, but any compiler should be able to |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
3539 figure that out all by itself */ |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
3540 offset = offsetof(MatchObject, string); |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
3541 |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
3542 Py_XINCREF(self->pattern); |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
3543 Py_XINCREF(self->string); |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
3544 Py_XINCREF(self->regs); |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
3545 |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
3546 memcpy((char*) copy + offset, (char*) self + offset, |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
3547 sizeof(MatchObject) + slots * sizeof(Py_ssize_t) - offset); |
|
18363
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
3548 |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
3549 return (PyObject*) copy; |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
3550 #else |
| 18373 | 3551 PyErr_SetString(PyExc_TypeError, "cannot copy this match object"); |
|
18363
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
3552 return NULL; |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
3553 #endif |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
3554 } |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
3555 |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
3556 static PyObject* |
|
38669
19fd6141940d
Partially merge trunk into p3yk. The removal of Mac/Tools is confusing svn
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
3557 match_deepcopy(MatchObject* self, PyObject* memo) |
|
18363
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
3558 { |
| 18373 | 3559 #ifdef USE_BUILTIN_COPY |
| 3560 MatchObject* copy; | |
|
36363
6fcb5405074e
_compile(): raise an exception if downcasting to SRE_CODE
Tim Peters <tim.peters@gmail.com>
parents:
36324
diff
changeset
|
3561 |
|
38669
19fd6141940d
Partially merge trunk into p3yk. The removal of Mac/Tools is confusing svn
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
3562 copy = (MatchObject*) match_copy(self); |
| 18373 | 3563 if (!copy) |
| 3564 return NULL; | |
| 3565 | |
| 3566 if (!deepcopy((PyObject**) ©->pattern, memo) || | |
| 3567 !deepcopy(©->string, memo) || | |
| 3568 !deepcopy(©->regs, memo)) { | |
| 3569 Py_DECREF(copy); | |
| 3570 return NULL; | |
| 3571 } | |
| 3572 | |
| 3573 #else | |
|
18363
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
3574 PyErr_SetString(PyExc_TypeError, "cannot deepcopy this match object"); |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
3575 return NULL; |
| 18373 | 3576 #endif |
|
18363
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
3577 } |
|
c0288670230e
merged with pythonware's SRE 2.1.1 codebase
Fredrik Lundh <fredrik@pythonware.com>
parents:
17532
diff
changeset
|
3578 |
|
13121
faefff43e58a
- last patch broke parse_template; fixed by changing some
Fredrik Lundh <fredrik@pythonware.com>
parents:
13119
diff
changeset
|
3579 static PyMethodDef match_methods[] = { |
|
15000
0a97f5dde3a7
Accept keyword arguments for (most) pattern and match object
Fredrik Lundh <fredrik@pythonware.com>
parents:
14992
diff
changeset
|
3580 {"group", (PyCFunction) match_group, METH_VARARGS}, |
|
0a97f5dde3a7
Accept keyword arguments for (most) pattern and match object
Fredrik Lundh <fredrik@pythonware.com>
parents:
14992
diff
changeset
|
3581 {"start", (PyCFunction) match_start, METH_VARARGS}, |
|
0a97f5dde3a7
Accept keyword arguments for (most) pattern and match object
Fredrik Lundh <fredrik@pythonware.com>
parents:
14992
diff
changeset
|
3582 {"end", (PyCFunction) match_end, METH_VARARGS}, |
|
0a97f5dde3a7
Accept keyword arguments for (most) pattern and match object
Fredrik Lundh <fredrik@pythonware.com>
parents:
14992
diff
changeset
|
3583 {"span", (PyCFunction) match_span, METH_VARARGS}, |
|
0a97f5dde3a7
Accept keyword arguments for (most) pattern and match object
Fredrik Lundh <fredrik@pythonware.com>
parents:
14992
diff
changeset
|
3584 {"groups", (PyCFunction) match_groups, METH_VARARGS|METH_KEYWORDS}, |
|
0a97f5dde3a7
Accept keyword arguments for (most) pattern and match object
Fredrik Lundh <fredrik@pythonware.com>
parents:
14992
diff
changeset
|
3585 {"groupdict", (PyCFunction) match_groupdict, METH_VARARGS|METH_KEYWORDS}, |
|
38669
19fd6141940d
Partially merge trunk into p3yk. The removal of Mac/Tools is confusing svn
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
3586 {"expand", (PyCFunction) match_expand, METH_O}, |
|
19fd6141940d
Partially merge trunk into p3yk. The removal of Mac/Tools is confusing svn
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
3587 {"__copy__", (PyCFunction) match_copy, METH_NOARGS}, |
|
19fd6141940d
Partially merge trunk into p3yk. The removal of Mac/Tools is confusing svn
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
3588 {"__deepcopy__", (PyCFunction) match_deepcopy, METH_O}, |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3589 {NULL, NULL} |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3590 }; |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3591 |
|
48413
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3592 static PyObject * |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3593 match_lastindex_get(MatchObject *self) |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3594 { |
|
48413
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3595 if (self->lastindex >= 0) |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3596 return Py_BuildValue("i", self->lastindex); |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3597 Py_INCREF(Py_None); |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3598 return Py_None; |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3599 } |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3600 |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3601 static PyObject * |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3602 match_lastgroup_get(MatchObject *self) |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3603 { |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3604 if (self->pattern->indexgroup && self->lastindex >= 0) { |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3605 PyObject* result = PySequence_GetItem( |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3606 self->pattern->indexgroup, self->lastindex |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3607 ); |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3608 if (result) |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3609 return result; |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3610 PyErr_Clear(); |
|
13310
3c35bf7b580b
- experimental: added two new attributes to the match object:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13308
diff
changeset
|
3611 } |
|
48413
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3612 Py_INCREF(Py_None); |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3613 return Py_None; |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3614 } |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3615 |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3616 static PyObject * |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3617 match_regs_get(MatchObject *self) |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3618 { |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3619 if (self->regs) { |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3620 Py_INCREF(self->regs); |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3621 return self->regs; |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3622 } else |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3623 return match_regs(self); |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3624 } |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3625 |
|
48413
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3626 static PyGetSetDef match_getset[] = { |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3627 {"lastindex", (getter)match_lastindex_get, (setter)NULL}, |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3628 {"lastgroup", (getter)match_lastgroup_get, (setter)NULL}, |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3629 {"regs", (getter)match_regs_get, (setter)NULL}, |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3630 {NULL} |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3631 }; |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3632 |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3633 #define MATCH_OFF(x) offsetof(MatchObject, x) |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3634 static PyMemberDef match_members[] = { |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3635 {"string", T_OBJECT, MATCH_OFF(string), READONLY}, |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3636 {"re", T_OBJECT, MATCH_OFF(pattern), READONLY}, |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3637 {"pos", T_PYSSIZET, MATCH_OFF(pos), READONLY}, |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3638 {"endpos", T_PYSSIZET, MATCH_OFF(endpos), READONLY}, |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3639 {NULL} |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3640 }; |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3641 |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3642 /* FIXME: implement setattr("string", None) as a special case (to |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3643 detach the associated string, if any */ |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3644 |
|
37141
4ef99695f7bb
Remove staticforward and statichere
Neal Norwitz <nnorwitz@gmail.com>
parents:
36861
diff
changeset
|
3645 static PyTypeObject Match_Type = { |
|
42334
e70cdce0e8b2
Merged revisions 56467-56482 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
41587
diff
changeset
|
3646 PyVarObject_HEAD_INIT(NULL,0) |
|
e70cdce0e8b2
Merged revisions 56467-56482 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
41587
diff
changeset
|
3647 "_" SRE_MODULE ".SRE_Match", |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
3648 sizeof(MatchObject), sizeof(Py_ssize_t), |
|
48413
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3649 (destructor)match_dealloc, /* tp_dealloc */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3650 0, /* tp_print */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3651 0, /* tp_getattr */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3652 0, /* tp_setattr */ |
|
51271
87fbbf22adf3
Merged revisions 69214 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
49127
diff
changeset
|
3653 0, /* tp_reserved */ |
|
48413
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3654 0, /* tp_repr */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3655 0, /* tp_as_number */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3656 0, /* tp_as_sequence */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3657 0, /* tp_as_mapping */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3658 0, /* tp_hash */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3659 0, /* tp_call */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3660 0, /* tp_str */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3661 0, /* tp_getattro */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3662 0, /* tp_setattro */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3663 0, /* tp_as_buffer */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3664 Py_TPFLAGS_DEFAULT, /* tp_flags */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3665 0, /* tp_doc */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3666 0, /* tp_traverse */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3667 0, /* tp_clear */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3668 0, /* tp_richcompare */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3669 0, /* tp_weaklistoffset */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3670 0, /* tp_iter */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3671 0, /* tp_iternext */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3672 match_methods, /* tp_methods */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3673 match_members, /* tp_members */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3674 match_getset, /* tp_getset */ |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3675 }; |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3676 |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3677 static PyObject* |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3678 pattern_new_match(PatternObject* pattern, SRE_STATE* state, int status) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3679 { |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3680 /* create match object (from state object) */ |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3681 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3682 MatchObject* match; |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
3683 Py_ssize_t i, j; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3684 char* base; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3685 int n; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3686 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3687 if (status > 0) { |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3688 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3689 /* create match object (with room for extra group marks) */ |
|
44767
a6f9a2ba8962
Merged revisions 60053-60078 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44604
diff
changeset
|
3690 /* coverity[ampersand_in_size] */ |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3691 match = PyObject_NEW_VAR(MatchObject, &Match_Type, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3692 2*(pattern->groups+1)); |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3693 if (!match) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3694 return NULL; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3695 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3696 Py_INCREF(pattern); |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3697 match->pattern = pattern; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3698 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3699 Py_INCREF(state->string); |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3700 match->string = state->string; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3701 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3702 match->regs = NULL; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3703 match->groups = pattern->groups+1; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3704 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3705 /* fill in group slices */ |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3706 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3707 base = (char*) state->beginning; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3708 n = state->charsize; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3709 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3710 match->mark[0] = ((char*) state->start - base) / n; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3711 match->mark[1] = ((char*) state->ptr - base) / n; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3712 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3713 for (i = j = 0; i < pattern->groups; i++, j+=2) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3714 if (j+1 <= state->lastmark && state->mark[j] && state->mark[j+1]) { |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3715 match->mark[j+2] = ((char*) state->mark[j] - base) / n; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3716 match->mark[j+3] = ((char*) state->mark[j+1] - base) / n; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3717 } else |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3718 match->mark[j+2] = match->mark[j+3] = -1; /* undefined */ |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3719 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3720 match->pos = state->pos; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3721 match->endpos = state->endpos; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3722 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3723 match->lastindex = state->lastindex; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3724 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3725 return (PyObject*) match; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3726 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3727 } else if (status == 0) { |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3728 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3729 /* no match */ |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3730 Py_INCREF(Py_None); |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3731 return Py_None; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3732 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3733 } |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3734 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3735 /* internal error */ |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3736 pattern_error(status); |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3737 return NULL; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3738 } |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3739 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3740 |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3741 /* -------------------------------------------------------------------- */ |
| 13136 | 3742 /* scanner methods (experimental) */ |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3743 |
|
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3744 static void |
| 13136 | 3745 scanner_dealloc(ScannerObject* self) |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3746 { |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3747 state_fini(&self->state); |
|
58328
80413c182a28
Merged revisions 77501 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
3748 Py_XDECREF(self->pattern); |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3749 PyObject_DEL(self); |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3750 } |
|
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3751 |
|
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3752 static PyObject* |
|
38669
19fd6141940d
Partially merge trunk into p3yk. The removal of Mac/Tools is confusing svn
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
3753 scanner_match(ScannerObject* self, PyObject *unused) |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3754 { |
|
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3755 SRE_STATE* state = &self->state; |
|
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3756 PyObject* match; |
|
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3757 int status; |
|
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3758 |
|
13789
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
3759 state_reset(state); |
|
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
3760 |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3761 state->ptr = state->start; |
|
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3762 |
|
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3763 if (state->charsize == 1) { |
|
31180
4942a0b63c8c
Cleaning up recursive pieces left in the reorganization.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30712
diff
changeset
|
3764 status = sre_match(state, PatternObject_GetCode(self->pattern)); |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3765 } else { |
| 13118 | 3766 #if defined(HAVE_UNICODE) |
|
31180
4942a0b63c8c
Cleaning up recursive pieces left in the reorganization.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
30712
diff
changeset
|
3767 status = sre_umatch(state, PatternObject_GetCode(self->pattern)); |
| 13118 | 3768 #endif |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3769 } |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39610
diff
changeset
|
3770 if (PyErr_Occurred()) |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39610
diff
changeset
|
3771 return NULL; |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3772 |
|
13121
faefff43e58a
- last patch broke parse_template; fixed by changing some
Fredrik Lundh <fredrik@pythonware.com>
parents:
13119
diff
changeset
|
3773 match = pattern_new_match((PatternObject*) self->pattern, |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3774 state, status); |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3775 |
|
33398
d1f8c632b605
Fixing bug #817234, which made SRE get into an infinite loop on
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
32695
diff
changeset
|
3776 if (status == 0 || state->ptr == state->start) |
| 13118 | 3777 state->start = (void*) ((char*) state->ptr + state->charsize); |
| 3778 else | |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3779 state->start = state->ptr; |
|
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3780 |
|
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3781 return match; |
|
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3782 } |
|
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3783 |
|
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3784 |
|
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3785 static PyObject* |
|
38669
19fd6141940d
Partially merge trunk into p3yk. The removal of Mac/Tools is confusing svn
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
3786 scanner_search(ScannerObject* self, PyObject *unused) |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3787 { |
|
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3788 SRE_STATE* state = &self->state; |
|
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3789 PyObject* match; |
|
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3790 int status; |
|
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3791 |
|
13789
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
3792 state_reset(state); |
|
4edd13eb759d
SRE 0.9.8: passes the entire test suite
Fredrik Lundh <fredrik@pythonware.com>
parents:
13677
diff
changeset
|
3793 |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3794 state->ptr = state->start; |
|
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3795 |
|
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3796 if (state->charsize == 1) { |
|
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3797 status = sre_search(state, PatternObject_GetCode(self->pattern)); |
|
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3798 } else { |
| 13118 | 3799 #if defined(HAVE_UNICODE) |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3800 status = sre_usearch(state, PatternObject_GetCode(self->pattern)); |
| 13118 | 3801 #endif |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3802 } |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39610
diff
changeset
|
3803 if (PyErr_Occurred()) |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39610
diff
changeset
|
3804 return NULL; |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3805 |
|
13121
faefff43e58a
- last patch broke parse_template; fixed by changing some
Fredrik Lundh <fredrik@pythonware.com>
parents:
13119
diff
changeset
|
3806 match = pattern_new_match((PatternObject*) self->pattern, |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3807 state, status); |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3808 |
|
33398
d1f8c632b605
Fixing bug #817234, which made SRE get into an infinite loop on
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
32695
diff
changeset
|
3809 if (status == 0 || state->ptr == state->start) |
| 13136 | 3810 state->start = (void*) ((char*) state->ptr + state->charsize); |
| 3811 else | |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3812 state->start = state->ptr; |
|
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3813 |
|
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3814 return match; |
|
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3815 } |
|
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3816 |
| 13136 | 3817 static PyMethodDef scanner_methods[] = { |
|
38669
19fd6141940d
Partially merge trunk into p3yk. The removal of Mac/Tools is confusing svn
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
3818 {"match", (PyCFunction) scanner_match, METH_NOARGS}, |
|
19fd6141940d
Partially merge trunk into p3yk. The removal of Mac/Tools is confusing svn
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
3819 {"search", (PyCFunction) scanner_search, METH_NOARGS}, |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3820 {NULL, NULL} |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3821 }; |
|
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3822 |
|
48413
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3823 #define SCAN_OFF(x) offsetof(ScannerObject, x) |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3824 static PyMemberDef scanner_members[] = { |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3825 {"pattern", T_OBJECT, SCAN_OFF(pattern), READONLY}, |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3826 {NULL} /* Sentinel */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3827 }; |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3828 |
|
37141
4ef99695f7bb
Remove staticforward and statichere
Neal Norwitz <nnorwitz@gmail.com>
parents:
36861
diff
changeset
|
3829 static PyTypeObject Scanner_Type = { |
|
42334
e70cdce0e8b2
Merged revisions 56467-56482 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
41587
diff
changeset
|
3830 PyVarObject_HEAD_INIT(NULL, 0) |
|
e70cdce0e8b2
Merged revisions 56467-56482 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
41587
diff
changeset
|
3831 "_" SRE_MODULE ".SRE_Scanner", |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3832 sizeof(ScannerObject), 0, |
|
48413
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3833 (destructor)scanner_dealloc,/* tp_dealloc */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3834 0, /* tp_print */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3835 0, /* tp_getattr */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3836 0, /* tp_setattr */ |
|
51271
87fbbf22adf3
Merged revisions 69214 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
49127
diff
changeset
|
3837 0, /* tp_reserved */ |
|
48413
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3838 0, /* tp_repr */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3839 0, /* tp_as_number */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3840 0, /* tp_as_sequence */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3841 0, /* tp_as_mapping */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3842 0, /* tp_hash */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3843 0, /* tp_call */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3844 0, /* tp_str */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3845 0, /* tp_getattro */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3846 0, /* tp_setattro */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3847 0, /* tp_as_buffer */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3848 Py_TPFLAGS_DEFAULT, /* tp_flags */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3849 0, /* tp_doc */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3850 0, /* tp_traverse */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3851 0, /* tp_clear */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3852 0, /* tp_richcompare */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3853 0, /* tp_weaklistoffset */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3854 0, /* tp_iter */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3855 0, /* tp_iternext */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3856 scanner_methods, /* tp_methods */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3857 scanner_members, /* tp_members */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3858 0, /* tp_getset */ |
|
12819
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3859 }; |
|
a24d9ad6786d
Fredrik Lundh: here's the 96.6% version of SRE
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
3860 |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3861 static PyObject* |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3862 pattern_scanner(PatternObject* pattern, PyObject* args) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3863 { |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3864 /* create search state object */ |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3865 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3866 ScannerObject* self; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3867 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3868 PyObject* string; |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
3869 Py_ssize_t start = 0; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
3870 Py_ssize_t end = PY_SSIZE_T_MAX; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
3871 if (!PyArg_ParseTuple(args, "O|nn:scanner", &string, &start, &end)) |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3872 return NULL; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3873 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3874 /* create scanner object */ |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3875 self = PyObject_NEW(ScannerObject, &Scanner_Type); |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3876 if (!self) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3877 return NULL; |
|
58328
80413c182a28
Merged revisions 77501 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
3878 self->pattern = NULL; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3879 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3880 string = state_init(&self->state, pattern, string, start, end); |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3881 if (!string) { |
|
58328
80413c182a28
Merged revisions 77501 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
3882 Py_DECREF(self); |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3883 return NULL; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3884 } |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3885 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3886 Py_INCREF(pattern); |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3887 self->pattern = (PyObject*) pattern; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3888 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3889 return (PyObject*) self; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3890 } |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37877
diff
changeset
|
3891 |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3892 static PyMethodDef _functions[] = { |
|
22706
14ebd7610902
Use symbolic METH_VARARGS/METH_OLDARGS instead of 1/0 for ml_flags
Neal Norwitz <nnorwitz@gmail.com>
parents:
21319
diff
changeset
|
3893 {"compile", _compile, METH_VARARGS}, |
|
38669
19fd6141940d
Partially merge trunk into p3yk. The removal of Mac/Tools is confusing svn
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
3894 {"getcodesize", sre_codesize, METH_NOARGS}, |
|
22706
14ebd7610902
Use symbolic METH_VARARGS/METH_OLDARGS instead of 1/0 for ml_flags
Neal Norwitz <nnorwitz@gmail.com>
parents:
21319
diff
changeset
|
3895 {"getlower", sre_getlower, METH_VARARGS}, |
|
13677
edb1a8e6b859
-- SRE 0.9.6 sync. this includes:
Fredrik Lundh <fredrik@pythonware.com>
parents:
13651
diff
changeset
|
3896 {NULL, NULL} |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3897 }; |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3898 |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
3899 static struct PyModuleDef sremodule = { |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
3900 PyModuleDef_HEAD_INIT, |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
3901 "_" SRE_MODULE, |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
3902 NULL, |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
3903 -1, |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
3904 _functions, |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
3905 NULL, |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
3906 NULL, |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
3907 NULL, |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
3908 NULL |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
3909 }; |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
3910 |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
3911 PyMODINIT_FUNC PyInit__sre(void) |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3912 { |
|
15877
93d0567c9fc9
added "magic" number to the _sre module, to avoid weird errors caused
Fredrik Lundh <fredrik@pythonware.com>
parents:
15869
diff
changeset
|
3913 PyObject* m; |
|
93d0567c9fc9
added "magic" number to the _sre module, to avoid weird errors caused
Fredrik Lundh <fredrik@pythonware.com>
parents:
15869
diff
changeset
|
3914 PyObject* d; |
|
19320
7957b3f5d462
init_sre(): Plug a little leak reported by Insure.
Barry Warsaw <barry@python.org>
parents:
18433
diff
changeset
|
3915 PyObject* x; |
|
15877
93d0567c9fc9
added "magic" number to the _sre module, to avoid weird errors caused
Fredrik Lundh <fredrik@pythonware.com>
parents:
15869
diff
changeset
|
3916 |
|
60504
a65f91bbc2fb
Merged revisions 79307,79408,79430,79533,79542,79579-79580,79585-79587,79607-79608,79622,79717,79820,79822,79828,79862,79875,79923-79924,79941-79943,79945,79947,79951-79952 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59341
diff
changeset
|
3917 /* Patch object types */ |
|
a65f91bbc2fb
Merged revisions 79307,79408,79430,79533,79542,79579-79580,79585-79587,79607-79608,79622,79717,79820,79822,79828,79862,79875,79923-79924,79941-79943,79945,79947,79951-79952 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59341
diff
changeset
|
3918 if (PyType_Ready(&Pattern_Type) || PyType_Ready(&Match_Type) || |
|
a65f91bbc2fb
Merged revisions 79307,79408,79430,79533,79542,79579-79580,79585-79587,79607-79608,79622,79717,79820,79822,79828,79862,79875,79923-79924,79941-79943,79945,79947,79951-79952 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59341
diff
changeset
|
3919 PyType_Ready(&Scanner_Type)) |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
3920 return NULL; |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
3921 |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
3922 m = PyModule_Create(&sremodule); |
|
36324
1af7f719ed28
Check return result from Py_InitModule*(). This API can fail.
Neal Norwitz <nnorwitz@gmail.com>
parents:
35999
diff
changeset
|
3923 if (m == NULL) |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
3924 return NULL; |
|
15877
93d0567c9fc9
added "magic" number to the _sre module, to avoid weird errors caused
Fredrik Lundh <fredrik@pythonware.com>
parents:
15869
diff
changeset
|
3925 d = PyModule_GetDict(m); |
|
93d0567c9fc9
added "magic" number to the _sre module, to avoid weird errors caused
Fredrik Lundh <fredrik@pythonware.com>
parents:
15869
diff
changeset
|
3926 |
|
44099
f324631462a2
Cleanup: Replaced most PyInt_ aliases with PyLong_ and disabled the aliases in intobject.h
Christian Heimes <christian@cheimes.de>
parents:
43560
diff
changeset
|
3927 x = PyLong_FromLong(SRE_MAGIC); |
|
19963
969e306b62fd
an SRE bugfix a day keeps Guido away...
Fredrik Lundh <fredrik@pythonware.com>
parents:
19603
diff
changeset
|
3928 if (x) { |
|
969e306b62fd
an SRE bugfix a day keeps Guido away...
Fredrik Lundh <fredrik@pythonware.com>
parents:
19603
diff
changeset
|
3929 PyDict_SetItemString(d, "MAGIC", x); |
|
969e306b62fd
an SRE bugfix a day keeps Guido away...
Fredrik Lundh <fredrik@pythonware.com>
parents:
19603
diff
changeset
|
3930 Py_DECREF(x); |
|
969e306b62fd
an SRE bugfix a day keeps Guido away...
Fredrik Lundh <fredrik@pythonware.com>
parents:
19603
diff
changeset
|
3931 } |
|
969e306b62fd
an SRE bugfix a day keeps Guido away...
Fredrik Lundh <fredrik@pythonware.com>
parents:
19603
diff
changeset
|
3932 |
|
44099
f324631462a2
Cleanup: Replaced most PyInt_ aliases with PyLong_ and disabled the aliases in intobject.h
Christian Heimes <christian@cheimes.de>
parents:
43560
diff
changeset
|
3933 x = PyLong_FromLong(sizeof(SRE_CODE)); |
|
28691
c9925fa29ea3
Fully support 32-bit codes. Enable BIGCHARSET in UCS-4 builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
28603
diff
changeset
|
3934 if (x) { |
|
c9925fa29ea3
Fully support 32-bit codes. Enable BIGCHARSET in UCS-4 builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
28603
diff
changeset
|
3935 PyDict_SetItemString(d, "CODESIZE", x); |
|
c9925fa29ea3
Fully support 32-bit codes. Enable BIGCHARSET in UCS-4 builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
28603
diff
changeset
|
3936 Py_DECREF(x); |
|
c9925fa29ea3
Fully support 32-bit codes. Enable BIGCHARSET in UCS-4 builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
28603
diff
changeset
|
3937 } |
|
c9925fa29ea3
Fully support 32-bit codes. Enable BIGCHARSET in UCS-4 builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
28603
diff
changeset
|
3938 |
| 42850 | 3939 x = PyUnicode_FromString(copyright); |
|
19963
969e306b62fd
an SRE bugfix a day keeps Guido away...
Fredrik Lundh <fredrik@pythonware.com>
parents:
19603
diff
changeset
|
3940 if (x) { |
|
969e306b62fd
an SRE bugfix a day keeps Guido away...
Fredrik Lundh <fredrik@pythonware.com>
parents:
19603
diff
changeset
|
3941 PyDict_SetItemString(d, "copyright", x); |
|
969e306b62fd
an SRE bugfix a day keeps Guido away...
Fredrik Lundh <fredrik@pythonware.com>
parents:
19603
diff
changeset
|
3942 Py_DECREF(x); |
|
969e306b62fd
an SRE bugfix a day keeps Guido away...
Fredrik Lundh <fredrik@pythonware.com>
parents:
19603
diff
changeset
|
3943 } |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
3944 return m; |
|
12176
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3945 } |
|
db83e63b384b
Adding Fredrik Lundh's _sre.c module and its header files.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3946 |
| 13118 | 3947 #endif /* !defined(SRE_RECURSIVE) */ |
|
28704
fa7874ec6a71
More work on bug #672491 and patch #712900.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28700
diff
changeset
|
3948 |
|
fa7874ec6a71
More work on bug #672491 and patch #712900.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28700
diff
changeset
|
3949 /* vim:ts=4:sw=4:et |
|
fa7874ec6a71
More work on bug #672491 and patch #712900.
Gustavo Niemeyer <gustavo@niemeyer.net>
parents:
28700
diff
changeset
|
3950 */ |
