diff options
author | Fredrik Lundh <fredrik@pythonware.com> | 2001-07-02 16:58:38 (GMT) |
---|---|---|
committer | Fredrik Lundh <fredrik@pythonware.com> | 2001-07-02 16:58:38 (GMT) |
commit | 19af43d78a8bd85dc39ea62cc4bc130778cfc643 (patch) | |
tree | 4fbc04abf1aad5dc594182739535acfbeb40ca63 /Modules | |
parent | 1fb5ce0323926406e6b3db6879152e0dcc40f5ec (diff) | |
download | cpython-19af43d78a8bd85dc39ea62cc4bc130778cfc643.zip cpython-19af43d78a8bd85dc39ea62cc4bc130778cfc643.tar.gz cpython-19af43d78a8bd85dc39ea62cc4bc130778cfc643.tar.bz2 |
added martin's BIGCHARSET patch to SRE 2.1.1. martin reports 2x
speedups for certain unicode character ranges.
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/_sre.c | 13 | ||||
-rw-r--r-- | Modules/sre_constants.h | 39 |
2 files changed, 33 insertions, 19 deletions
diff --git a/Modules/_sre.c b/Modules/_sre.c index 3e2d907..51a747a 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -506,6 +506,19 @@ SRE_CHARSET(SRE_CODE* set, SRE_CODE ch) set += 16; break; + case SRE_OP_BIGCHARSET: + /* <BIGCHARSET> <blockcount> <256 blockindices> <blocks> */ + { + int count, block; + count = *(set++); + block = ((unsigned char*)set)[ch >> 8]; + set += 128; + if (set[block*16 + ((ch & 255)>>4)] & (1 << (ch & 15))) + return ok; + set += count*16; + break; + } + case SRE_OP_CATEGORY: /* <CATEGORY> <code> */ if (sre_category(set[0], (int) ch)) diff --git a/Modules/sre_constants.h b/Modules/sre_constants.h index 73bcb34..ebb9fd0 100644 --- a/Modules/sre_constants.h +++ b/Modules/sre_constants.h @@ -11,7 +11,7 @@ * See the _sre.c file for information on usage and redistribution. */ -#define SRE_MAGIC 20010320 +#define SRE_MAGIC 20010701 #define SRE_OP_FAILURE 0 #define SRE_OP_SUCCESS 1 #define SRE_OP_ANY 2 @@ -23,24 +23,25 @@ #define SRE_OP_CALL 8 #define SRE_OP_CATEGORY 9 #define SRE_OP_CHARSET 10 -#define SRE_OP_GROUPREF 11 -#define SRE_OP_GROUPREF_IGNORE 12 -#define SRE_OP_IN 13 -#define SRE_OP_IN_IGNORE 14 -#define SRE_OP_INFO 15 -#define SRE_OP_JUMP 16 -#define SRE_OP_LITERAL 17 -#define SRE_OP_LITERAL_IGNORE 18 -#define SRE_OP_MARK 19 -#define SRE_OP_MAX_UNTIL 20 -#define SRE_OP_MIN_UNTIL 21 -#define SRE_OP_NOT_LITERAL 22 -#define SRE_OP_NOT_LITERAL_IGNORE 23 -#define SRE_OP_NEGATE 24 -#define SRE_OP_RANGE 25 -#define SRE_OP_REPEAT 26 -#define SRE_OP_REPEAT_ONE 27 -#define SRE_OP_SUBPATTERN 28 +#define SRE_OP_BIGCHARSET 11 +#define SRE_OP_GROUPREF 12 +#define SRE_OP_GROUPREF_IGNORE 13 +#define SRE_OP_IN 14 +#define SRE_OP_IN_IGNORE 15 +#define SRE_OP_INFO 16 +#define SRE_OP_JUMP 17 +#define SRE_OP_LITERAL 18 +#define SRE_OP_LITERAL_IGNORE 19 +#define SRE_OP_MARK 20 +#define SRE_OP_MAX_UNTIL 21 +#define SRE_OP_MIN_UNTIL 22 +#define SRE_OP_NOT_LITERAL 23 +#define SRE_OP_NOT_LITERAL_IGNORE 24 +#define SRE_OP_NEGATE 25 +#define SRE_OP_RANGE 26 +#define SRE_OP_REPEAT 27 +#define SRE_OP_REPEAT_ONE 28 +#define SRE_OP_SUBPATTERN 29 #define SRE_AT_BEGINNING 0 #define SRE_AT_BEGINNING_LINE 1 #define SRE_AT_BEGINNING_STRING 2 |