mirror of
https://github.com/python/cpython.git
synced 2025-11-01 18:51:43 +00:00
SRE 0.9.8: passes the entire test suite
-- reverted REPEAT operator to use "repeat context" strategy (from 0.8.X), but done right this time. -- got rid of backtracking stack; use nested SRE_MATCH calls instead (should probably put it back again in 0.9.9 ;-) -- properly reset state in scanner mode -- don't use aggressive inlining by default
This commit is contained in:
parent
19c6afb42b
commit
29c4ba9ada
7 changed files with 391 additions and 557 deletions
|
|
@ -1,5 +1,4 @@
|
|||
/*
|
||||
*
|
||||
* Secret Labs' Regular Expression Engine
|
||||
*
|
||||
* regular expression matching engine
|
||||
|
|
@ -44,18 +43,15 @@ typedef struct {
|
|||
|
||||
typedef unsigned int (*SRE_TOLOWER_HOOK)(unsigned int ch);
|
||||
|
||||
typedef struct {
|
||||
/* stack elements */
|
||||
SRE_CODE* pattern;
|
||||
void* ptr;
|
||||
int mark;
|
||||
void* mark0;
|
||||
void* mark1;
|
||||
} SRE_STACK;
|
||||
|
||||
/* FIXME: <fl> shouldn't be a constant, really... */
|
||||
#define SRE_MARK_SIZE 200
|
||||
|
||||
typedef struct SRE_REPEAT_T {
|
||||
int count;
|
||||
SRE_CODE* pattern; /* points to REPEAT operator arguments */
|
||||
struct SRE_REPEAT_T *prev; /* points to previous repeat context */
|
||||
} SRE_REPEAT;
|
||||
|
||||
typedef struct {
|
||||
/* string pointers */
|
||||
void* ptr; /* current position (also end of current slice) */
|
||||
|
|
@ -71,16 +67,16 @@ typedef struct {
|
|||
int lastindex;
|
||||
int lastmark;
|
||||
void* mark[SRE_MARK_SIZE];
|
||||
/* backtracking stack */
|
||||
SRE_STACK* stack;
|
||||
int stacksize;
|
||||
int stackbase;
|
||||
/* dynamically allocated stuff */
|
||||
void** mark_stack;
|
||||
int mark_stack_size;
|
||||
int mark_stack_base;
|
||||
SRE_REPEAT *repeat; /* current repeat context */
|
||||
/* hooks */
|
||||
SRE_TOLOWER_HOOK lower;
|
||||
} SRE_STATE;
|
||||
|
||||
typedef struct {
|
||||
/* scanner (internal helper object) */
|
||||
PyObject_HEAD
|
||||
PyObject* pattern;
|
||||
SRE_STATE state;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue