Implement (*NO_JIT)
This commit is contained in:
parent
221cf10975
commit
ca77bdd5c4
|
@ -29,6 +29,8 @@ include the general overhead. This has been corrected.
|
||||||
4. All code units in every slot in the table of group names are now set, again
|
4. All code units in every slot in the table of group names are now set, again
|
||||||
in order to avoid accessing uninitialized data when serializing.
|
in order to avoid accessing uninitialized data when serializing.
|
||||||
|
|
||||||
|
5. The (*NO_JIT) feature is implemented.
|
||||||
|
|
||||||
|
|
||||||
Version 10.00 05-January-2015
|
Version 10.00 05-January-2015
|
||||||
-----------------------------
|
-----------------------------
|
||||||
|
|
|
@ -130,6 +130,14 @@ of arbitrary characters). For more details, see the
|
||||||
documentation.
|
documentation.
|
||||||
.
|
.
|
||||||
.
|
.
|
||||||
|
.SS "Disabling JIT compilation"
|
||||||
|
.rs
|
||||||
|
.sp
|
||||||
|
If a pattern that starts with (*NO_JIT) is successfully compiled, an attempt by
|
||||||
|
the application to apply the JIT optimization by calling
|
||||||
|
\fBpcre2_jit_compile()\fP is ignored.
|
||||||
|
.
|
||||||
|
.
|
||||||
.SS "Setting match and recursion limits"
|
.SS "Setting match and recursion limits"
|
||||||
.rs
|
.rs
|
||||||
.sp
|
.sp
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
.TH PCRE2SYNTAX 3 "02 January 2015" "PCRE2 10.00"
|
.TH PCRE2SYNTAX 3 "26 January 2015" "PCRE2 10.00"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
PCRE2 - Perl-compatible regular expressions (revised API)
|
PCRE2 - Perl-compatible regular expressions (revised API)
|
||||||
.SH "PCRE2 REGULAR EXPRESSION SYNTAX SUMMARY"
|
.SH "PCRE2 REGULAR EXPRESSION SYNTAX SUMMARY"
|
||||||
|
@ -390,6 +390,7 @@ appear.
|
||||||
(*NOTEMPTY_ATSTART) set PCRE2_NOTEMPTY_ATSTART when matching
|
(*NOTEMPTY_ATSTART) set PCRE2_NOTEMPTY_ATSTART when matching
|
||||||
(*NO_AUTO_POSSESS) no auto-possessification (PCRE2_NO_AUTO_POSSESS)
|
(*NO_AUTO_POSSESS) no auto-possessification (PCRE2_NO_AUTO_POSSESS)
|
||||||
(*NO_DOTSTAR_ANCHOR) no .* anchoring (PCRE2_NO_DOTSTAR_ANCHOR)
|
(*NO_DOTSTAR_ANCHOR) no .* anchoring (PCRE2_NO_DOTSTAR_ANCHOR)
|
||||||
|
(*NO_JIT) disable JIT optimization
|
||||||
(*NO_START_OPT) no start-match optimization (PCRE2_NO_START_OPTIMIZE)
|
(*NO_START_OPT) no start-match optimization (PCRE2_NO_START_OPTIMIZE)
|
||||||
(*UTF) set appropriate UTF mode for the library in use
|
(*UTF) set appropriate UTF mode for the library in use
|
||||||
(*UCP) set PCRE2_UCP (use Unicode properties for \ed etc)
|
(*UCP) set PCRE2_UCP (use Unicode properties for \ed etc)
|
||||||
|
@ -537,6 +538,6 @@ Cambridge, England.
|
||||||
.rs
|
.rs
|
||||||
.sp
|
.sp
|
||||||
.nf
|
.nf
|
||||||
Last updated: 02 January 2015
|
Last updated: 26 January 2015
|
||||||
Copyright (c) 1997-2015 University of Cambridge.
|
Copyright (c) 1997-2015 University of Cambridge.
|
||||||
.fi
|
.fi
|
||||||
|
|
|
@ -604,6 +604,7 @@ static pso pso_list[] = {
|
||||||
{ (uint8_t *)STRING_NOTEMPTY_ATSTART_RIGHTPAR, 17, PSO_FLG, PCRE2_NE_ATST_SET },
|
{ (uint8_t *)STRING_NOTEMPTY_ATSTART_RIGHTPAR, 17, PSO_FLG, PCRE2_NE_ATST_SET },
|
||||||
{ (uint8_t *)STRING_NO_AUTO_POSSESS_RIGHTPAR, 16, PSO_OPT, PCRE2_NO_AUTO_POSSESS },
|
{ (uint8_t *)STRING_NO_AUTO_POSSESS_RIGHTPAR, 16, PSO_OPT, PCRE2_NO_AUTO_POSSESS },
|
||||||
{ (uint8_t *)STRING_NO_DOTSTAR_ANCHOR_RIGHTPAR, 18, PSO_OPT, PCRE2_NO_DOTSTAR_ANCHOR },
|
{ (uint8_t *)STRING_NO_DOTSTAR_ANCHOR_RIGHTPAR, 18, PSO_OPT, PCRE2_NO_DOTSTAR_ANCHOR },
|
||||||
|
{ (uint8_t *)STRING_NO_JIT_RIGHTPAR, 7, PSO_FLG, PCRE2_NOJIT },
|
||||||
{ (uint8_t *)STRING_NO_START_OPT_RIGHTPAR, 13, PSO_OPT, PCRE2_NO_START_OPTIMIZE },
|
{ (uint8_t *)STRING_NO_START_OPT_RIGHTPAR, 13, PSO_OPT, PCRE2_NO_START_OPTIMIZE },
|
||||||
{ (uint8_t *)STRING_LIMIT_MATCH_EQ, 12, PSO_LIMM, 0 },
|
{ (uint8_t *)STRING_LIMIT_MATCH_EQ, 12, PSO_LIMM, 0 },
|
||||||
{ (uint8_t *)STRING_LIMIT_RECURSION_EQ, 16, PSO_LIMR, 0 },
|
{ (uint8_t *)STRING_LIMIT_RECURSION_EQ, 16, PSO_LIMR, 0 },
|
||||||
|
|
|
@ -524,6 +524,7 @@ bytes in a code unit in that mode. */
|
||||||
#define PCRE2_NOTEMPTY_SET 0x00010000 /* (*NOTEMPTY) used ) keep */
|
#define PCRE2_NOTEMPTY_SET 0x00010000 /* (*NOTEMPTY) used ) keep */
|
||||||
#define PCRE2_NE_ATST_SET 0x00020000 /* (*NOTEMPTY_ATSTART) used) together */
|
#define PCRE2_NE_ATST_SET 0x00020000 /* (*NOTEMPTY_ATSTART) used) together */
|
||||||
#define PCRE2_DEREF_TABLES 0x00040000 /* Release character tables. */
|
#define PCRE2_DEREF_TABLES 0x00040000 /* Release character tables. */
|
||||||
|
#define PCRE2_NOJIT 0x00080000 /* (*NOJIT) used */
|
||||||
|
|
||||||
#define PCRE2_MODE_MASK (PCRE2_MODE8 | PCRE2_MODE16 | PCRE2_MODE32)
|
#define PCRE2_MODE_MASK (PCRE2_MODE8 | PCRE2_MODE16 | PCRE2_MODE32)
|
||||||
|
|
||||||
|
@ -906,6 +907,7 @@ a positive value. */
|
||||||
#define STRING_UCP_RIGHTPAR "UCP)"
|
#define STRING_UCP_RIGHTPAR "UCP)"
|
||||||
#define STRING_NO_AUTO_POSSESS_RIGHTPAR "NO_AUTO_POSSESS)"
|
#define STRING_NO_AUTO_POSSESS_RIGHTPAR "NO_AUTO_POSSESS)"
|
||||||
#define STRING_NO_DOTSTAR_ANCHOR_RIGHTPAR "NO_DOTSTAR_ANCHOR)"
|
#define STRING_NO_DOTSTAR_ANCHOR_RIGHTPAR "NO_DOTSTAR_ANCHOR)"
|
||||||
|
#define STRING_NO_JIT_RIGHTPAR "NO_JIT)"
|
||||||
#define STRING_NO_START_OPT_RIGHTPAR "NO_START_OPT)"
|
#define STRING_NO_START_OPT_RIGHTPAR "NO_START_OPT)"
|
||||||
#define STRING_NOTEMPTY_RIGHTPAR "NOTEMPTY)"
|
#define STRING_NOTEMPTY_RIGHTPAR "NOTEMPTY)"
|
||||||
#define STRING_NOTEMPTY_ATSTART_RIGHTPAR "NOTEMPTY_ATSTART)"
|
#define STRING_NOTEMPTY_ATSTART_RIGHTPAR "NOTEMPTY_ATSTART)"
|
||||||
|
@ -1176,6 +1178,7 @@ only. */
|
||||||
#define STRING_UCP_RIGHTPAR STR_U STR_C STR_P STR_RIGHT_PARENTHESIS
|
#define STRING_UCP_RIGHTPAR STR_U STR_C STR_P STR_RIGHT_PARENTHESIS
|
||||||
#define STRING_NO_AUTO_POSSESS_RIGHTPAR STR_N STR_O STR_UNDERSCORE STR_A STR_U STR_T STR_O STR_UNDERSCORE STR_P STR_O STR_S STR_S STR_E STR_S STR_S STR_RIGHT_PARENTHESIS
|
#define STRING_NO_AUTO_POSSESS_RIGHTPAR STR_N STR_O STR_UNDERSCORE STR_A STR_U STR_T STR_O STR_UNDERSCORE STR_P STR_O STR_S STR_S STR_E STR_S STR_S STR_RIGHT_PARENTHESIS
|
||||||
#define STRING_NO_DOTSTAR_ANCHOR_RIGHTPAR STR_N STR_O STR_UNDERSCORE STR_D STR_O STR_T STR_S STR_T STR_A STR_R STR_UNDERSCORE STR_A STR_N STR_C STR_H STR_O STR_R STR_RIGHT_PARENTHESIS
|
#define STRING_NO_DOTSTAR_ANCHOR_RIGHTPAR STR_N STR_O STR_UNDERSCORE STR_D STR_O STR_T STR_S STR_T STR_A STR_R STR_UNDERSCORE STR_A STR_N STR_C STR_H STR_O STR_R STR_RIGHT_PARENTHESIS
|
||||||
|
#define STRING_NO_JIT_RIGHTPAR STR_N STR_O STR_UNDERSCORE STR_J STR_I STR_T STR_RIGHT_PARENTHESIS
|
||||||
#define STRING_NO_START_OPT_RIGHTPAR STR_N STR_O STR_UNDERSCORE STR_S STR_T STR_A STR_R STR_T STR_UNDERSCORE STR_O STR_P STR_T STR_RIGHT_PARENTHESIS
|
#define STRING_NO_START_OPT_RIGHTPAR STR_N STR_O STR_UNDERSCORE STR_S STR_T STR_A STR_R STR_T STR_UNDERSCORE STR_O STR_P STR_T STR_RIGHT_PARENTHESIS
|
||||||
#define STRING_NOTEMPTY_RIGHTPAR STR_N STR_O STR_T STR_E STR_M STR_P STR_T STR_Y STR_RIGHT_PARENTHESIS
|
#define STRING_NOTEMPTY_RIGHTPAR STR_N STR_O STR_T STR_E STR_M STR_P STR_T STR_Y STR_RIGHT_PARENTHESIS
|
||||||
#define STRING_NOTEMPTY_ATSTART_RIGHTPAR STR_N STR_O STR_T STR_E STR_M STR_P STR_T STR_Y STR_UNDERSCORE STR_A STR_T STR_S STR_T STR_A STR_R STR_T STR_RIGHT_PARENTHESIS
|
#define STRING_NOTEMPTY_ATSTART_RIGHTPAR STR_N STR_O STR_T STR_E STR_M STR_P STR_T STR_Y STR_UNDERSCORE STR_A STR_T STR_S STR_T STR_A STR_R STR_T STR_RIGHT_PARENTHESIS
|
||||||
|
|
|
@ -10324,7 +10324,8 @@ Arguments:
|
||||||
code a compiled pattern
|
code a compiled pattern
|
||||||
options JIT option bits
|
options JIT option bits
|
||||||
|
|
||||||
Returns: nothing
|
Returns: 0: success or (*NOJIT) was used
|
||||||
|
<0: an error code
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define PUBLIC_JIT_COMPILE_OPTIONS \
|
#define PUBLIC_JIT_COMPILE_OPTIONS \
|
||||||
|
@ -10351,6 +10352,8 @@ if (code == NULL)
|
||||||
if ((options & ~PUBLIC_JIT_COMPILE_OPTIONS) != 0)
|
if ((options & ~PUBLIC_JIT_COMPILE_OPTIONS) != 0)
|
||||||
return PCRE2_ERROR_JIT_BADOPTION;
|
return PCRE2_ERROR_JIT_BADOPTION;
|
||||||
|
|
||||||
|
if ((re->flags & PCRE2_NOJIT) != 0) return 0;
|
||||||
|
|
||||||
functions = (executable_functions *)re->executable_jit;
|
functions = (executable_functions *)re->executable_jit;
|
||||||
|
|
||||||
if ((options & PCRE2_JIT_COMPLETE) != 0 && (functions == NULL
|
if ((options & PCRE2_JIT_COMPLETE) != 0 && (functions == NULL
|
||||||
|
|
|
@ -16,6 +16,10 @@
|
||||||
abcd
|
abcd
|
||||||
xyz
|
xyz
|
||||||
|
|
||||||
|
/(*NO_JIT)abcd/I
|
||||||
|
abcd
|
||||||
|
xyz
|
||||||
|
|
||||||
/abcd/
|
/abcd/
|
||||||
abcd
|
abcd
|
||||||
ab\=ps
|
ab\=ps
|
||||||
|
|
|
@ -28,6 +28,17 @@ JIT compilation was successful
|
||||||
xyz
|
xyz
|
||||||
No match (JIT)
|
No match (JIT)
|
||||||
|
|
||||||
|
/(*NO_JIT)abcd/I
|
||||||
|
Capturing subpattern count = 0
|
||||||
|
First code unit = 'a'
|
||||||
|
Last code unit = 'd'
|
||||||
|
Subject length lower bound = 4
|
||||||
|
JIT compilation was not successful
|
||||||
|
abcd
|
||||||
|
0: abcd
|
||||||
|
xyz
|
||||||
|
No match
|
||||||
|
|
||||||
/abcd/
|
/abcd/
|
||||||
abcd
|
abcd
|
||||||
0: abcd (JIT)
|
0: abcd (JIT)
|
||||||
|
@ -326,7 +337,7 @@ No match
|
||||||
# compilation, but serializing (save/load) discards JIT data completely.
|
# compilation, but serializing (save/load) discards JIT data completely.
|
||||||
|
|
||||||
/^abc\Kdef/info,push
|
/^abc\Kdef/info,push
|
||||||
** Applied only to compile when pattern is stacked with 'push': jitverify
|
** Applies only to compile when pattern is stacked with 'push': jitverify
|
||||||
Capturing subpattern count = 0
|
Capturing subpattern count = 0
|
||||||
Compile options: <none>
|
Compile options: <none>
|
||||||
Overall options: anchored
|
Overall options: anchored
|
||||||
|
@ -337,7 +348,7 @@ JIT compilation was successful
|
||||||
0: def (JIT)
|
0: def (JIT)
|
||||||
|
|
||||||
/^abc\Kdef/info,push
|
/^abc\Kdef/info,push
|
||||||
** Applied only to compile when pattern is stacked with 'push': jitverify
|
** Applies only to compile when pattern is stacked with 'push': jitverify
|
||||||
Capturing subpattern count = 0
|
Capturing subpattern count = 0
|
||||||
Compile options: <none>
|
Compile options: <none>
|
||||||
Overall options: anchored
|
Overall options: anchored
|
||||||
|
|
Loading…
Reference in New Issue