@@ -7688,6 +7688,8 @@ while (*cc != XCL_END)
76887688 /* Any either accepts everything or ignored. */
76897689 if (cc [-1 ] == XCL_PROP )
76907690 items = UCPCAT_ALL ;
7691+ else
7692+ compares -- ;
76917693 break ;
76927694
76937695 case PT_LAMP :
@@ -7764,7 +7766,6 @@ while (*cc != XCL_END)
77647766 }
77657767#endif /* SUPPORT_UNICODE */
77667768 }
7767- SLJIT_ASSERT (compares > 0 || category_list > 0 );
77687769
77697770#ifdef SUPPORT_UNICODE
77707771if (category_list == UCPCAT_ALL )
@@ -7775,6 +7776,17 @@ if (category_list == UCPCAT_ALL)
77757776 add_jump (compiler , backtracks , JUMP (SLJIT_JUMP ));
77767777 return ;
77777778 }
7779+
7780+ if (compares == 0 && category_list == 0 )
7781+ {
7782+ /* No characters are accepted, same as (*F) or dotall. */
7783+ compile_char1_matchingpath (common , OP_ALLANY , cc , backtracks , FALSE);
7784+ if (list != backtracks )
7785+ add_jump (compiler , backtracks , JUMP (SLJIT_JUMP ));
7786+ return ;
7787+ }
7788+ #else /* !SUPPORT_UNICODE */
7789+ SLJIT_ASSERT (compares > 0 );
77787790#endif /* SUPPORT_UNICODE */
77797791
77807792/* We are not necessary in utf mode even in 8 bit mode. */
@@ -8167,10 +8179,6 @@ while (*cc != XCL_END)
81678179 switch (* cc )
81688180 {
81698181 case PT_ANY :
8170- if (!invertcmp )
8171- jump = JUMP (SLJIT_JUMP );
8172- break ;
8173-
81748182 case PT_LAMP :
81758183 case PT_GC :
81768184 case PT_PC :
@@ -8334,16 +8342,13 @@ while (*cc != XCL_END)
83348342 break ;
83358343
83368344 case PT_PXXDIGIT :
8337- SET_CHAR_OFFSET (CHAR_0 );
8338- OP2U (SLJIT_SUB | SLJIT_SET_LESS_EQUAL , TMP1 , 0 , SLJIT_IMM , CHAR_9 - CHAR_0 );
8339- OP_FLAGS (SLJIT_MOV , TMP2 , 0 , SLJIT_LESS_EQUAL );
8340-
83418345 SET_CHAR_OFFSET (CHAR_A );
8342- OP2U (SLJIT_SUB | SLJIT_SET_LESS_EQUAL , TMP1 , 0 , SLJIT_IMM , CHAR_F - CHAR_A );
8343- OP_FLAGS (SLJIT_OR , TMP2 , 0 , SLJIT_LESS_EQUAL );
8346+ OP2 (SLJIT_AND , TMP2 , 0 , TMP1 , 0 , SLJIT_IMM , ~0x20 );
8347+ OP2U (SLJIT_SUB | SLJIT_SET_LESS_EQUAL , TMP2 , 0 , SLJIT_IMM , CHAR_F - CHAR_A );
8348+ OP_FLAGS (SLJIT_MOV , TMP2 , 0 , SLJIT_LESS_EQUAL );
83448349
8345- SET_CHAR_OFFSET (CHAR_a );
8346- OP2U (SLJIT_SUB | SLJIT_SET_LESS_EQUAL , TMP1 , 0 , SLJIT_IMM , CHAR_f - CHAR_a );
8350+ SET_CHAR_OFFSET (CHAR_0 );
8351+ OP2U (SLJIT_SUB | SLJIT_SET_LESS_EQUAL , TMP1 , 0 , SLJIT_IMM , CHAR_9 - CHAR_0 );
83478352 OP_FLAGS (SLJIT_OR , TMP2 , 0 , SLJIT_LESS_EQUAL );
83488353
83498354 SET_CHAR_OFFSET (0xff10 );
@@ -8379,6 +8384,7 @@ while (*cc != XCL_END)
83798384 add_jump (compiler , compares > 0 ? list : backtracks , jump );
83808385 }
83818386
8387+ SLJIT_ASSERT (compares == 0 );
83828388if (found != NULL )
83838389 set_jumps (found , LABEL ());
83848390}
0 commit comments