@@ -313,14 +313,12 @@ typedef struct char_iterator_backtrack {
313313 backtrack_common common ;
314314 /* Next iteration. */
315315 struct sljit_label * matchingpath ;
316- union {
317- jump_list * backtracks ;
318- struct {
319- unsigned int othercasebit ;
320- PCRE2_UCHAR chr ;
321- } charpos ;
322- } u ;
323- BOOL charpos_enabled ;
316+ /* Creating a range based on the next character. */
317+ struct {
318+ unsigned int othercasebit ;
319+ PCRE2_UCHAR chr ;
320+ BOOL charpos_enabled ;
321+ } charpos ;
324322} char_iterator_backtrack ;
325323
326324typedef struct ref_iterator_backtrack {
@@ -10535,10 +10533,11 @@ if (common->utf && HAS_EXTRALEN(*cc)) *end += GET_EXTRALEN(*cc);
1053510533return cc ;
1053610534}
1053710535
10538- static PCRE2_SPTR compile_iterator_matchingpath (compiler_common * common , PCRE2_SPTR cc , backtrack_common * parent )
10536+ static PCRE2_SPTR compile_iterator_matchingpath (compiler_common * common , PCRE2_SPTR cc , backtrack_common * parent , jump_list * * prev_backtracks )
1053910537{
1054010538DEFINE_COMPILER ;
10541- backtrack_common * backtrack ;
10539+ backtrack_common * backtrack = NULL ;
10540+ PCRE2_SPTR begin = cc ;
1054210541PCRE2_UCHAR opcode ;
1054310542PCRE2_UCHAR type ;
1054410543sljit_u32 max = 0 , exact ;
@@ -10558,8 +10557,6 @@ int offset0 = (private_data_ptr == 0) ? STACK(0) : private_data_ptr;
1055810557int offset1 = (private_data_ptr == 0 ) ? STACK (1 ) : private_data_ptr + SSIZE_OF (sw );
1055910558int tmp_base , tmp_offset ;
1056010559
10561- PUSH_BACKTRACK (sizeof (char_iterator_backtrack ), cc , NULL );
10562-
1056310560early_fail_type = (early_fail_ptr & 0x7 );
1056410561early_fail_ptr >>= 3 ;
1056510562
@@ -10574,7 +10571,7 @@ SLJIT_ASSERT(common->fast_forward_bc_ptr != NULL || early_fail_ptr == 0
1057410571 || (early_fail_ptr >= common -> early_fail_start_ptr && early_fail_ptr <= common -> early_fail_end_ptr ));
1057510572
1057610573if (early_fail_type == type_fail )
10577- add_jump (compiler , & backtrack -> own_backtracks , CMP (SLJIT_LESS_EQUAL , STR_PTR , 0 , SLJIT_MEM1 (SLJIT_SP ), early_fail_ptr ));
10574+ add_jump (compiler , prev_backtracks , CMP (SLJIT_LESS_EQUAL , STR_PTR , 0 , SLJIT_MEM1 (SLJIT_SP ), early_fail_ptr ));
1057810575
1057910576cc = get_iterator_parameters (common , cc , & opcode , & type , & max , & exact , & end );
1058010577
@@ -10600,7 +10597,7 @@ if (opcode == OP_EXACT)
1060010597 && type != OP_ANYNL && type != OP_EXTUNI )
1060110598 {
1060210599 OP2 (SLJIT_SUB , TMP1 , 0 , STR_END , 0 , STR_PTR , 0 );
10603- add_jump (compiler , & backtrack -> own_backtracks , CMP (SLJIT_LESS , TMP1 , 0 , SLJIT_IMM , IN_UCHARS (exact )));
10600+ add_jump (compiler , prev_backtracks , CMP (SLJIT_LESS , TMP1 , 0 , SLJIT_IMM , IN_UCHARS (exact )));
1060410601
1060510602#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH == 32
1060610603 if (type == OP_ALLANY && !common -> invalid_utf )
@@ -10612,7 +10609,7 @@ if (opcode == OP_EXACT)
1061210609 {
1061310610 OP1 (SLJIT_MOV , tmp_base , tmp_offset , SLJIT_IMM , exact );
1061410611 label = LABEL ();
10615- compile_char1_matchingpath (common , type , cc , & backtrack -> own_backtracks , FALSE);
10612+ compile_char1_matchingpath (common , type , cc , prev_backtracks , FALSE);
1061610613 OP2 (SLJIT_SUB | SLJIT_SET_Z , tmp_base , tmp_offset , tmp_base , tmp_offset , SLJIT_IMM , 1 );
1061710614 JUMPTO (SLJIT_NOT_ZERO , label );
1061810615 }
@@ -10622,7 +10619,7 @@ if (opcode == OP_EXACT)
1062210619 SLJIT_ASSERT (tmp_base == TMP3 || common -> locals_size >= 3 * SSIZE_OF (sw ));
1062310620 OP1 (SLJIT_MOV , tmp_base , tmp_offset , SLJIT_IMM , exact );
1062410621 label = LABEL ();
10625- compile_char1_matchingpath (common , type , cc , & backtrack -> own_backtracks , TRUE);
10622+ compile_char1_matchingpath (common , type , cc , prev_backtracks , TRUE);
1062610623 OP2 (SLJIT_SUB | SLJIT_SET_Z , tmp_base , tmp_offset , tmp_base , tmp_offset , SLJIT_IMM , 1 );
1062710624 JUMPTO (SLJIT_NOT_ZERO , label );
1062810625 }
@@ -10635,17 +10632,20 @@ if (early_fail_type == type_fail_range)
1063510632 OP1 (SLJIT_MOV , TMP2 , 0 , SLJIT_MEM1 (SLJIT_SP ), early_fail_ptr + SSIZE_OF (sw ));
1063610633 OP2 (SLJIT_SUB , TMP1 , 0 , TMP1 , 0 , TMP2 , 0 );
1063710634 OP2 (SLJIT_SUB , TMP2 , 0 , STR_PTR , 0 , TMP2 , 0 );
10638- add_jump (compiler , & backtrack -> own_backtracks , CMP (SLJIT_LESS_EQUAL , TMP2 , 0 , TMP1 , 0 ));
10635+ add_jump (compiler , prev_backtracks , CMP (SLJIT_LESS_EQUAL , TMP2 , 0 , TMP1 , 0 ));
1063910636
1064010637 OP1 (SLJIT_MOV , SLJIT_MEM1 (SLJIT_SP ), early_fail_ptr , STR_PTR , 0 );
1064110638 OP1 (SLJIT_MOV , SLJIT_MEM1 (SLJIT_SP ), early_fail_ptr + SSIZE_OF (sw ), STR_PTR , 0 );
1064210639 }
1064310640
10641+ if (opcode < OP_EXACT )
10642+ PUSH_BACKTRACK (sizeof (char_iterator_backtrack ), begin , NULL );
10643+
1064410644switch (opcode )
1064510645 {
1064610646 case OP_STAR :
1064710647 case OP_UPTO :
10648- SLJIT_ASSERT (early_fail_ptr == 0 || opcode == OP_STAR );
10648+ SLJIT_ASSERT (backtrack != NULL && ( early_fail_ptr == 0 || opcode == OP_STAR ) );
1064910649 max += exact ;
1065010650
1065110651 if (type == OP_EXTUNI )
@@ -10676,7 +10676,7 @@ switch(opcode)
1067610676 }
1067710677
1067810678 label = LABEL ();
10679- compile_char1_matchingpath (common , type , cc , & BACKTRACK_AS ( char_iterator_backtrack ) -> u . backtracks , TRUE);
10679+ compile_char1_matchingpath (common , type , cc , & backtrack -> own_backtracks , TRUE);
1068010680 if (opcode == OP_UPTO )
1068110681 {
1068210682 OP1 (SLJIT_MOV , TMP1 , 0 , SLJIT_MEM1 (SLJIT_SP ), LOCAL2 );
@@ -10703,7 +10703,7 @@ switch(opcode)
1070310703 if (opcode == OP_STAR )
1070410704 {
1070510705 if (exact == 1 )
10706- detect_partial_match (common , & backtrack -> own_backtracks );
10706+ detect_partial_match (common , prev_backtracks );
1070710707
1070810708 if (private_data_ptr == 0 )
1070910709 allocate_stack (common , 2 );
@@ -10789,9 +10789,9 @@ switch(opcode)
1078910789 if (charpos_othercasebit != 0 )
1079010790 charpos_char |= charpos_othercasebit ;
1079110791
10792- BACKTRACK_AS (char_iterator_backtrack )-> charpos_enabled = TRUE;
10793- BACKTRACK_AS (char_iterator_backtrack )-> u . charpos .chr = charpos_char ;
10794- BACKTRACK_AS (char_iterator_backtrack )-> u . charpos .othercasebit = charpos_othercasebit ;
10792+ BACKTRACK_AS (char_iterator_backtrack )-> charpos . charpos_enabled = TRUE;
10793+ BACKTRACK_AS (char_iterator_backtrack )-> charpos .chr = charpos_char ;
10794+ BACKTRACK_AS (char_iterator_backtrack )-> charpos .othercasebit = charpos_othercasebit ;
1079510795
1079610796 if (private_data_ptr == 0 )
1079710797 allocate_stack (common , 2 );
@@ -10988,11 +10988,11 @@ switch(opcode)
1098810988 else
1098910989 jump = CMP (SLJIT_GREATER , TMP3 , 0 , SLJIT_IMM , max - exact );
1099010990
10991- add_jump (compiler , & BACKTRACK_AS ( char_iterator_backtrack ) -> u . backtracks , jump );
10991+ add_jump (compiler , & backtrack -> own_backtracks , jump );
1099210992 }
1099310993 }
1099410994 else if (exact == 1 )
10995- add_jump (compiler , & BACKTRACK_AS ( char_iterator_backtrack ) -> u . backtracks , CMP (SLJIT_EQUAL , base , offset1 , STR_PTR , 0 ));
10995+ add_jump (compiler , & backtrack -> own_backtracks , CMP (SLJIT_EQUAL , base , offset1 , STR_PTR , 0 ));
1099610996
1099710997 if (early_fail_ptr != 0 )
1099810998 OP1 (SLJIT_MOV , SLJIT_MEM1 (SLJIT_SP ), early_fail_ptr , STR_PTR , 0 );
@@ -11001,17 +11001,17 @@ switch(opcode)
1100111001 break ;
1100211002
1100311003 case OP_QUERY :
11004- SLJIT_ASSERT (early_fail_ptr == 0 );
11004+ SLJIT_ASSERT (backtrack != NULL && early_fail_ptr == 0 );
1100511005 if (private_data_ptr == 0 )
1100611006 allocate_stack (common , 1 );
1100711007 OP1 (SLJIT_MOV , base , offset0 , STR_PTR , 0 );
11008- compile_char1_matchingpath (common , type , cc , & BACKTRACK_AS ( char_iterator_backtrack ) -> u . backtracks , TRUE);
11008+ compile_char1_matchingpath (common , type , cc , & backtrack -> own_backtracks , TRUE);
1100911009 BACKTRACK_AS (char_iterator_backtrack )-> matchingpath = LABEL ();
1101011010 break ;
1101111011
1101211012 case OP_MINSTAR :
1101311013 case OP_MINQUERY :
11014- SLJIT_ASSERT (opcode == OP_MINSTAR || early_fail_ptr == 0 );
11014+ SLJIT_ASSERT (backtrack != NULL && ( opcode == OP_MINSTAR || early_fail_ptr == 0 ) );
1101511015 if (private_data_ptr == 0 )
1101611016 allocate_stack (common , 1 );
1101711017
@@ -11030,7 +11030,7 @@ switch(opcode)
1103011030 label = LABEL ();
1103111031 BACKTRACK_AS (char_iterator_backtrack )-> matchingpath = label ;
1103211032
11033- compile_char1_matchingpath (common , type , cc , & BACKTRACK_AS ( char_iterator_backtrack ) -> u . backtracks , TRUE);
11033+ compile_char1_matchingpath (common , type , cc , & backtrack -> own_backtracks , TRUE);
1103411034
1103511035 if (exact >= 2 )
1103611036 {
@@ -11054,7 +11054,7 @@ switch(opcode)
1105411054 break ;
1105511055
1105611056 case OP_MINUPTO :
11057- SLJIT_ASSERT (early_fail_ptr == 0 );
11057+ SLJIT_ASSERT (backtrack != NULL && early_fail_ptr == 0 );
1105811058 if (private_data_ptr == 0 )
1105911059 allocate_stack (common , 2 );
1106011060
@@ -11077,7 +11077,7 @@ switch(opcode)
1107711077 label = LABEL ();
1107811078 BACKTRACK_AS (char_iterator_backtrack )-> matchingpath = label ;
1107911079
11080- compile_char1_matchingpath (common , type , cc , & BACKTRACK_AS ( char_iterator_backtrack ) -> u . backtracks , TRUE);
11080+ compile_char1_matchingpath (common , type , cc , & backtrack -> own_backtracks , TRUE);
1108111081
1108211082 if (exact >= 2 )
1108311083 {
@@ -11089,17 +11089,19 @@ switch(opcode)
1108911089 break ;
1109011090
1109111091 case OP_EXACT :
11092+ SLJIT_ASSERT (backtrack == NULL );
1109211093 break ;
1109311094
1109411095 case OP_POSSTAR :
11096+ SLJIT_ASSERT (backtrack == NULL );
1109511097#if defined SUPPORT_UNICODE
1109611098 if (type == OP_ALLANY && !common -> invalid_utf )
1109711099#else
1109811100 if (type == OP_ALLANY )
1109911101#endif
1110011102 {
1110111103 if (exact == 1 )
11102- detect_partial_match (common , & backtrack -> own_backtracks );
11104+ detect_partial_match (common , prev_backtracks );
1110311105
1110411106 OP1 (SLJIT_MOV , STR_PTR , 0 , STR_END , 0 );
1110511107 process_partial_match (common );
@@ -11133,7 +11135,7 @@ switch(opcode)
1113311135 OP1 (SLJIT_MOV , COUNT_MATCH , 0 , SLJIT_MEM1 (SLJIT_SP ), LOCAL2 );
1113411136
1113511137 if (exact == 1 )
11136- add_jump (compiler , & backtrack -> own_backtracks , CMP (SLJIT_EQUAL , STR_PTR , 0 , SLJIT_IMM , 0 ));
11138+ add_jump (compiler , prev_backtracks , CMP (SLJIT_EQUAL , STR_PTR , 0 , SLJIT_IMM , 0 ));
1113711139
1113811140 if (early_fail_ptr != 0 )
1113911141 OP1 (SLJIT_MOV , SLJIT_MEM1 (SLJIT_SP ), early_fail_ptr , STR_PTR , 0 );
@@ -11160,14 +11162,14 @@ switch(opcode)
1116011162 set_jumps (no_match , LABEL ());
1116111163
1116211164 if (exact == 1 )
11163- add_jump (compiler , & backtrack -> own_backtracks , CMP (SLJIT_EQUAL , tmp_base , tmp_offset , STR_PTR , 0 ));
11165+ add_jump (compiler , prev_backtracks , CMP (SLJIT_EQUAL , tmp_base , tmp_offset , STR_PTR , 0 ));
1116411166
1116511167 if (early_fail_ptr != 0 )
1116611168 OP1 (SLJIT_MOV , SLJIT_MEM1 (SLJIT_SP ), early_fail_ptr , STR_PTR , 0 );
1116711169 break ;
1116811170
1116911171 case OP_POSUPTO :
11170- SLJIT_ASSERT (early_fail_ptr == 0 );
11172+ SLJIT_ASSERT (backtrack == NULL && early_fail_ptr == 0 );
1117111173 max += exact ;
1117211174
1117311175#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
@@ -11212,7 +11214,7 @@ switch(opcode)
1121211214 OP1 (SLJIT_MOV , COUNT_MATCH , 0 , SLJIT_MEM1 (SLJIT_SP ), LOCAL2 );
1121311215
1121411216 if (exact > 0 )
11215- add_jump (compiler , & backtrack -> own_backtracks , JUMP (exact == max ? SLJIT_LESS : SLJIT_GREATER ));
11217+ add_jump (compiler , prev_backtracks , JUMP (exact == max ? SLJIT_LESS : SLJIT_GREATER ));
1121611218 OP1 (SLJIT_MOV , STR_PTR , 0 , TMP3 , 0 );
1121711219 break ;
1121811220 }
@@ -11246,12 +11248,12 @@ switch(opcode)
1124611248 else
1124711249 jump = CMP (SLJIT_GREATER , TMP3 , 0 , SLJIT_IMM , max - exact );
1124811250
11249- add_jump (compiler , & backtrack -> own_backtracks , jump );
11251+ add_jump (compiler , prev_backtracks , jump );
1125011252 }
1125111253 break ;
1125211254
1125311255 case OP_POSQUERY :
11254- SLJIT_ASSERT (early_fail_ptr == 0 );
11256+ SLJIT_ASSERT (backtrack == NULL && early_fail_ptr == 0 );
1125511257 SLJIT_ASSERT (tmp_base == TMP3 || common -> locals_size >= 3 * SSIZE_OF (sw ));
1125611258 OP1 (SLJIT_MOV , tmp_base , tmp_offset , STR_PTR , 0 );
1125711259 compile_char1_matchingpath (common , type , cc , & no_match , TRUE);
@@ -11551,13 +11553,13 @@ while (cc < ccend)
1155111553 case OP_TYPEPOSPLUS :
1155211554 case OP_TYPEPOSQUERY :
1155311555 case OP_TYPEPOSUPTO :
11554- cc = compile_iterator_matchingpath (common , cc , parent );
11556+ cc = compile_iterator_matchingpath (common , cc , parent , parent -> top != NULL ? & parent -> top -> simple_backtracks : & parent -> own_backtracks );
1155511557 break ;
1155611558
1155711559 case OP_CLASS :
1155811560 case OP_NCLASS :
1155911561 if (cc [1 + (32 / sizeof (PCRE2_UCHAR ))] >= OP_CRSTAR && cc [1 + (32 / sizeof (PCRE2_UCHAR ))] <= OP_CRPOSRANGE )
11560- cc = compile_iterator_matchingpath (common , cc , parent );
11562+ cc = compile_iterator_matchingpath (common , cc , parent , parent -> top != NULL ? & parent -> top -> simple_backtracks : & parent -> own_backtracks );
1156111563 else
1156211564 cc = compile_char1_matchingpath (common , * cc , cc + 1 , parent -> top != NULL ? & parent -> top -> simple_backtracks : & parent -> own_backtracks , TRUE);
1156311565 break ;
@@ -11567,7 +11569,7 @@ while (cc < ccend)
1156711569 case OP_ECLASS :
1156811570 op_len = GET (cc , 1 );
1156911571 if (cc [op_len ] >= OP_CRSTAR && cc [op_len ] <= OP_CRPOSRANGE )
11570- cc = compile_iterator_matchingpath (common , cc , parent );
11572+ cc = compile_iterator_matchingpath (common , cc , parent , parent -> top != NULL ? & parent -> top -> simple_backtracks : & parent -> own_backtracks );
1157111573 else
1157211574 cc = compile_char1_matchingpath (common , * cc , cc + 1 , parent -> top != NULL ? & parent -> top -> simple_backtracks : & parent -> own_backtracks , TRUE);
1157311575 break ;
@@ -11794,14 +11796,14 @@ switch(opcode)
1179411796 if (type == OP_EXTUNI )
1179511797 {
1179611798 SLJIT_ASSERT (private_data_ptr == 0 );
11797- set_jumps (CURRENT_AS ( char_iterator_backtrack ) -> u . backtracks , LABEL ());
11799+ set_jumps (current -> own_backtracks , LABEL ());
1179811800 OP1 (SLJIT_MOV , STR_PTR , 0 , SLJIT_MEM1 (STACK_TOP ), STACK (0 ));
1179911801 free_stack (common , 1 );
1180011802 CMPTO (SLJIT_NOT_EQUAL , STR_PTR , 0 , SLJIT_IMM , 0 , CURRENT_AS (char_iterator_backtrack )-> matchingpath );
1180111803 }
1180211804 else
1180311805 {
11804- if (CURRENT_AS (char_iterator_backtrack )-> charpos_enabled )
11806+ if (CURRENT_AS (char_iterator_backtrack )-> charpos . charpos_enabled )
1180511807 {
1180611808 OP1 (SLJIT_MOV , STR_PTR , 0 , base , offset0 );
1180711809 OP1 (SLJIT_MOV , TMP2 , 0 , base , offset1 );
@@ -11813,9 +11815,9 @@ switch(opcode)
1181311815 move_back (common , NULL , TRUE);
1181411816
1181511817 OP1 (MOV_UCHAR , TMP1 , 0 , SLJIT_MEM1 (STR_PTR ), IN_UCHARS (0 ));
11816- if (CURRENT_AS (char_iterator_backtrack )-> u . charpos .othercasebit != 0 )
11817- OP2 (SLJIT_OR , TMP1 , 0 , TMP1 , 0 , SLJIT_IMM , CURRENT_AS (char_iterator_backtrack )-> u . charpos .othercasebit );
11818- CMPTO (SLJIT_EQUAL , TMP1 , 0 , SLJIT_IMM , CURRENT_AS (char_iterator_backtrack )-> u . charpos .chr , CURRENT_AS (char_iterator_backtrack )-> matchingpath );
11818+ if (CURRENT_AS (char_iterator_backtrack )-> charpos .othercasebit != 0 )
11819+ OP2 (SLJIT_OR , TMP1 , 0 , TMP1 , 0 , SLJIT_IMM , CURRENT_AS (char_iterator_backtrack )-> charpos .othercasebit );
11820+ CMPTO (SLJIT_EQUAL , TMP1 , 0 , SLJIT_IMM , CURRENT_AS (char_iterator_backtrack )-> charpos .chr , CURRENT_AS (char_iterator_backtrack )-> matchingpath );
1181911821 /* The range beginning must match, no need to compare. */
1182011822 JUMPTO (SLJIT_JUMP , label );
1182111823
@@ -11854,7 +11856,7 @@ switch(opcode)
1185411856 OP1 (SLJIT_MOV , base , offset0 , STR_PTR , 0 );
1185511857 JUMPTO (SLJIT_JUMP , CURRENT_AS (char_iterator_backtrack )-> matchingpath );
1185611858
11857- set_jumps (CURRENT_AS ( char_iterator_backtrack ) -> u . backtracks , LABEL ());
11859+ set_jumps (current -> own_backtracks , LABEL ());
1185811860 }
1185911861
1186011862 JUMPHERE (jump );
@@ -11868,7 +11870,7 @@ switch(opcode)
1186811870 OP1 (SLJIT_MOV , base , offset0 , SLJIT_IMM , 0 );
1186911871 CMPTO (SLJIT_NOT_EQUAL , STR_PTR , 0 , SLJIT_IMM , 0 , CURRENT_AS (char_iterator_backtrack )-> matchingpath );
1187011872 jump = JUMP (SLJIT_JUMP );
11871- set_jumps (CURRENT_AS ( char_iterator_backtrack ) -> u . backtracks , LABEL ());
11873+ set_jumps (current -> own_backtracks , LABEL ());
1187211874 OP1 (SLJIT_MOV , STR_PTR , 0 , base , offset0 );
1187311875 OP1 (SLJIT_MOV , base , offset0 , SLJIT_IMM , 0 );
1187411876 JUMPTO (SLJIT_JUMP , CURRENT_AS (char_iterator_backtrack )-> matchingpath );
@@ -11888,7 +11890,7 @@ switch(opcode)
1188811890 OP1 (SLJIT_MOV , TMP3 , 0 , SLJIT_IMM , 1 );
1188911891
1189011892 JUMPTO (SLJIT_JUMP , CURRENT_AS (char_iterator_backtrack )-> matchingpath );
11891- set_jumps (exact > 0 ? CURRENT_AS ( char_iterator_backtrack ) -> u . backtracks : jumplist , LABEL ());
11893+ set_jumps (exact > 0 ? current -> own_backtracks : jumplist , LABEL ());
1189211894 if (private_data_ptr == 0 )
1189311895 free_stack (common , 1 );
1189411896 break ;
@@ -11916,7 +11918,7 @@ switch(opcode)
1191611918 OP1 (SLJIT_MOV , base , offset1 , TMP1 , 0 );
1191711919 JUMPTO (SLJIT_NOT_ZERO , CURRENT_AS (char_iterator_backtrack )-> matchingpath );
1191811920
11919- set_jumps (CURRENT_AS ( char_iterator_backtrack ) -> u . backtracks , LABEL ());
11921+ set_jumps (current -> own_backtracks , LABEL ());
1192011922 }
1192111923
1192211924 if (private_data_ptr == 0 )
@@ -11932,7 +11934,7 @@ switch(opcode)
1193211934 if (exact >= 2 )
1193311935 OP1 (SLJIT_MOV , TMP3 , 0 , SLJIT_IMM , 1 );
1193411936 CMPTO (SLJIT_NOT_EQUAL , STR_PTR , 0 , SLJIT_IMM , 0 , CURRENT_AS (char_iterator_backtrack )-> matchingpath );
11935- set_jumps (CURRENT_AS ( char_iterator_backtrack ) -> u . backtracks , LABEL ());
11937+ set_jumps (current -> own_backtracks , LABEL ());
1193611938 }
1193711939 else
1193811940 {
@@ -11947,18 +11949,10 @@ switch(opcode)
1194711949 free_stack (common , 1 );
1194811950 break ;
1194911951
11950- case OP_EXACT :
11951- case OP_POSSTAR :
11952- case OP_POSQUERY :
11953- case OP_POSUPTO :
11954- break ;
11955-
1195611952 default :
1195711953 SLJIT_UNREACHABLE ();
1195811954 break ;
1195911955 }
11960-
11961- set_jumps (current -> own_backtracks , LABEL ());
1196211956}
1196311957
1196411958static SLJIT_INLINE void compile_ref_iterator_backtrackingpath (compiler_common * common , struct backtrack_common * current )
0 commit comments