Minor single character iterator fixes in JIT.
This commit is contained in:
parent
07a8fdce25
commit
0638a1897e
|
@ -923,6 +923,8 @@ return TRUE;
|
||||||
|
|
||||||
static int get_class_iterator_size(PCRE2_SPTR cc)
|
static int get_class_iterator_size(PCRE2_SPTR cc)
|
||||||
{
|
{
|
||||||
|
sljit_ui min;
|
||||||
|
sljit_ui max;
|
||||||
switch(*cc)
|
switch(*cc)
|
||||||
{
|
{
|
||||||
case OP_CRSTAR:
|
case OP_CRSTAR:
|
||||||
|
@ -937,9 +939,14 @@ switch(*cc)
|
||||||
|
|
||||||
case OP_CRRANGE:
|
case OP_CRRANGE:
|
||||||
case OP_CRMINRANGE:
|
case OP_CRMINRANGE:
|
||||||
if (GET2(cc, 1) == GET2(cc, 1 + IMM2_SIZE))
|
min = GET2(cc, 1);
|
||||||
return 0;
|
max = GET2(cc, 1 + IMM2_SIZE);
|
||||||
return 2;
|
if (max == 0)
|
||||||
|
return (*cc == OP_CRRANGE) ? 2 : 1;
|
||||||
|
max -= min;
|
||||||
|
if (max > 2)
|
||||||
|
max = 2;
|
||||||
|
return max;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -954,7 +961,7 @@ PCRE2_SPTR next_end;
|
||||||
PCRE2_SPTR max_end;
|
PCRE2_SPTR max_end;
|
||||||
PCRE2_UCHAR type;
|
PCRE2_UCHAR type;
|
||||||
sljit_sw length = end - begin;
|
sljit_sw length = end - begin;
|
||||||
int min, max, i;
|
sljit_si min, max, i;
|
||||||
|
|
||||||
/* Detect fixed iterations first. */
|
/* Detect fixed iterations first. */
|
||||||
if (end[-(1 + LINK_SIZE)] != OP_KET)
|
if (end[-(1 + LINK_SIZE)] != OP_KET)
|
||||||
|
@ -1188,15 +1195,20 @@ while (cc < ccend)
|
||||||
size = 1;
|
size = 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
CASE_ITERATOR_TYPE_PRIVATE_DATA_2B
|
case OP_TYPEUPTO:
|
||||||
if (cc[1 + IMM2_SIZE] != OP_ANYNL && cc[1 + IMM2_SIZE] != OP_EXTUNI)
|
if (cc[1 + IMM2_SIZE] != OP_ANYNL && cc[1 + IMM2_SIZE] != OP_EXTUNI)
|
||||||
space = 2;
|
space = 2;
|
||||||
size = 1 + IMM2_SIZE;
|
size = 1 + IMM2_SIZE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case OP_TYPEMINUPTO:
|
||||||
|
space = 2;
|
||||||
|
size = 1 + IMM2_SIZE;
|
||||||
|
break;
|
||||||
|
|
||||||
case OP_CLASS:
|
case OP_CLASS:
|
||||||
case OP_NCLASS:
|
case OP_NCLASS:
|
||||||
size += 1 + 32 / sizeof(PCRE2_UCHAR);
|
size = 1 + 32 / sizeof(PCRE2_UCHAR);
|
||||||
space = get_class_iterator_size(cc + size);
|
space = get_class_iterator_size(cc + size);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -7868,7 +7880,7 @@ count_match(common);
|
||||||
return cc + 1 + LINK_SIZE;
|
return cc + 1 + LINK_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static SLJIT_INLINE PCRE2_SPTR get_iterator_parameters(compiler_common *common, PCRE2_SPTR cc, PCRE2_UCHAR *opcode, PCRE2_UCHAR *type, int *max, int *exact, PCRE2_SPTR *end)
|
static SLJIT_INLINE PCRE2_SPTR get_iterator_parameters(compiler_common *common, PCRE2_SPTR cc, PCRE2_UCHAR *opcode, PCRE2_UCHAR *type, sljit_ui *max, sljit_ui *exact, PCRE2_SPTR *end)
|
||||||
{
|
{
|
||||||
int class_len;
|
int class_len;
|
||||||
|
|
||||||
|
@ -8019,7 +8031,7 @@ DEFINE_COMPILER;
|
||||||
backtrack_common *backtrack;
|
backtrack_common *backtrack;
|
||||||
PCRE2_UCHAR opcode;
|
PCRE2_UCHAR opcode;
|
||||||
PCRE2_UCHAR type;
|
PCRE2_UCHAR type;
|
||||||
int max = -1, exact = -1;
|
sljit_ui max = 0, exact;
|
||||||
BOOL charpos_enabled;
|
BOOL charpos_enabled;
|
||||||
PCRE2_UCHAR charpos_char;
|
PCRE2_UCHAR charpos_char;
|
||||||
unsigned int charpos_othercasebit;
|
unsigned int charpos_othercasebit;
|
||||||
|
@ -8794,7 +8806,7 @@ DEFINE_COMPILER;
|
||||||
PCRE2_SPTR cc = current->cc;
|
PCRE2_SPTR cc = current->cc;
|
||||||
PCRE2_UCHAR opcode;
|
PCRE2_UCHAR opcode;
|
||||||
PCRE2_UCHAR type;
|
PCRE2_UCHAR type;
|
||||||
int max = -1, exact = -1;
|
sljit_ui max = 0, exact;
|
||||||
struct sljit_label *label = NULL;
|
struct sljit_label *label = NULL;
|
||||||
struct sljit_jump *jump = NULL;
|
struct sljit_jump *jump = NULL;
|
||||||
jump_list *jumplist = NULL;
|
jump_list *jumplist = NULL;
|
||||||
|
|
Loading…
Reference in New Issue