Preparatory work for JIT.
This commit is contained in:
parent
b7c5d02b3d
commit
55967f9a4f
149
RunTest
149
RunTest
|
@ -64,9 +64,10 @@ title10="Test 10: Specials for the 8-bit library with UTF-8 and UCP support"
|
||||||
title11="Test 11: Specials for the basic 16-bit and 32-bit libraries"
|
title11="Test 11: Specials for the basic 16-bit and 32-bit libraries"
|
||||||
title12="Test 12: Specials for the 16-bit and 32-bit libraries UTF and UCP support"
|
title12="Test 12: Specials for the 16-bit and 32-bit libraries UTF and UCP support"
|
||||||
title13="Test 13: DFA specials for the basic 16-bit and 32-bit libraries"
|
title13="Test 13: DFA specials for the basic 16-bit and 32-bit libraries"
|
||||||
|
title14="Test 14: JIT-specific features (when JIT is not available)"
|
||||||
#title12="Test 12: JIT-specific features (when JIT is available)"
|
title15="Test 15: JIT-specific features (when JIT is available)"
|
||||||
#title13="Test 13: JIT-specific features (when JIT is not available)"
|
title16="Test 16: Tests of the POSIX interface, excluding UTF/UCP"
|
||||||
|
title17="Test 17: Tests of the POSIX interface with UTF/UCP"
|
||||||
|
|
||||||
#title21="Test 21: Reloads for the basic 16/32-bit library"
|
#title21="Test 21: Reloads for the basic 16/32-bit library"
|
||||||
#title22="Test 22: Reloads for the 16/32-bit library with UTF-16/32 support"
|
#title22="Test 22: Reloads for the 16/32-bit library with UTF-16/32 support"
|
||||||
|
@ -87,10 +88,10 @@ if [ $# -eq 1 -a "$1" = "list" ]; then
|
||||||
echo $title11
|
echo $title11
|
||||||
echo $title12
|
echo $title12
|
||||||
echo $title13
|
echo $title13
|
||||||
# echo $title14
|
echo $title14
|
||||||
# echo $title15
|
echo $title15
|
||||||
# echo $title16
|
echo $title16
|
||||||
# echo $title17
|
echo $title17
|
||||||
# echo $title18
|
# echo $title18
|
||||||
# echo $title19
|
# echo $title19
|
||||||
# echo $title20
|
# echo $title20
|
||||||
|
@ -176,10 +177,10 @@ do10=no
|
||||||
do11=no
|
do11=no
|
||||||
do12=no
|
do12=no
|
||||||
do13=no
|
do13=no
|
||||||
#do14=no
|
do14=no
|
||||||
#do15=no
|
do15=no
|
||||||
#do16=no
|
do16=no
|
||||||
#do17=no
|
do17=no
|
||||||
#do18=no
|
#do18=no
|
||||||
#do19=no
|
#do19=no
|
||||||
#do20=no
|
#do20=no
|
||||||
|
@ -201,10 +202,10 @@ while [ $# -gt 0 ] ; do
|
||||||
11) do11=yes;;
|
11) do11=yes;;
|
||||||
12) do12=yes;;
|
12) do12=yes;;
|
||||||
13) do13=yes;;
|
13) do13=yes;;
|
||||||
# 14) do14=yes;;
|
14) do14=yes;;
|
||||||
# 15) do15=yes;;
|
15) do15=yes;;
|
||||||
# 16) do16=yes;;
|
16) do16=yes;;
|
||||||
# 17) do17=yes;;
|
17) do17=yes;;
|
||||||
# 18) do18=yes;;
|
# 18) do18=yes;;
|
||||||
# 19) do19=yes;;
|
# 19) do19=yes;;
|
||||||
# 20) do20=yes;;
|
# 20) do20=yes;;
|
||||||
|
@ -332,10 +333,10 @@ fi
|
||||||
if [ $do1 = no -a $do2 = no -a $do3 = no -a $do4 = no -a \
|
if [ $do1 = no -a $do2 = no -a $do3 = no -a $do4 = no -a \
|
||||||
$do5 = no -a $do6 = no -a $do7 = no -a $do8 = no -a \
|
$do5 = no -a $do6 = no -a $do7 = no -a $do8 = no -a \
|
||||||
$do9 = no -a $do10 = no -a $do11 = no -a $do12 = no -a \
|
$do9 = no -a $do10 = no -a $do11 = no -a $do12 = no -a \
|
||||||
$do13 = no \
|
$do13 = no -a $do14 = no -a $do15 = no -a $do16 = no -a \
|
||||||
|
$do17 = no \
|
||||||
]; then
|
]; then
|
||||||
# -a $do14 = no -a $do15 = no -a $do16 = no -a \
|
# -a $do18 = no -a $do19 = no -a $do20 = no -a \
|
||||||
# $do17 = no -a $do18 = no -a $do19 = no -a $do20 = no -a \
|
|
||||||
# $do21 = no -a $do22 = no
|
# $do21 = no -a $do22 = no
|
||||||
|
|
||||||
do1=yes
|
do1=yes
|
||||||
|
@ -351,10 +352,10 @@ if [ $do1 = no -a $do2 = no -a $do3 = no -a $do4 = no -a \
|
||||||
do11=yes
|
do11=yes
|
||||||
do12=yes
|
do12=yes
|
||||||
do13=yes
|
do13=yes
|
||||||
# do14=yes
|
do14=yes
|
||||||
# do15=yes
|
do15=yes
|
||||||
# do16=yes
|
do16=yes
|
||||||
# do17=yes
|
do17=yes
|
||||||
# do18=yes
|
# do18=yes
|
||||||
# do19=yes
|
# do19=yes
|
||||||
# do20=yes
|
# do20=yes
|
||||||
|
@ -694,40 +695,76 @@ if [ $do13 = yes ] ; then
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
## Test JIT-specific features when JIT is available
|
# Test JIT-specific features when JIT is not available
|
||||||
#
|
|
||||||
#if [ $do12 = yes ] ; then
|
if [ $do14 = yes ] ; then
|
||||||
# echo $title12
|
echo $title14
|
||||||
# if [ $jit -eq 0 -o "$nojit" = "yes" ] ; then
|
if [ $jit -ne 0 ] ; then
|
||||||
# echo " Skipped because JIT is not available or not usable"
|
echo " Skipped because JIT is available"
|
||||||
# else
|
else
|
||||||
# $sim $valgrind ./pcre2test -q $bmode $testdata/testinput12 testtry
|
$sim $valgrind ./pcre2test -q $bmode $testdata/testinput14 testtry
|
||||||
# if [ $? = 0 ] ; then
|
if [ $? = 0 ] ; then
|
||||||
# $cf $testdata/testoutput12 testtry
|
$cf $testdata/testoutput14 testtry
|
||||||
# if [ $? != 0 ] ; then exit 1; fi
|
if [ $? != 0 ] ; then exit 1; fi
|
||||||
# else exit 1
|
else exit 1
|
||||||
# fi
|
fi
|
||||||
# echo " OK"
|
echo " OK"
|
||||||
# fi
|
fi
|
||||||
#fi
|
fi
|
||||||
#
|
|
||||||
## Test JIT-specific features when JIT is not available
|
# Test JIT-specific features when JIT is available
|
||||||
#
|
|
||||||
#if [ $do13 = yes ] ; then
|
if [ $do15 = yes ] ; then
|
||||||
# echo $title13
|
echo $title15
|
||||||
# if [ $jit -ne 0 ] ; then
|
if [ $jit -eq 0 -o "$nojit" = "yes" ] ; then
|
||||||
# echo " Skipped because JIT is available"
|
echo " Skipped because JIT is not available or not usable"
|
||||||
# else
|
else
|
||||||
# $sim $valgrind ./pcre2test -q $bmode $testdata/testinput13 testtry
|
$sim $valgrind ./pcre2test -q $bmode $testdata/testinput15 testtry
|
||||||
# if [ $? = 0 ] ; then
|
if [ $? = 0 ] ; then
|
||||||
# $cf $testdata/testoutput13 testtry
|
$cf $testdata/testoutput15 testtry
|
||||||
# if [ $? != 0 ] ; then exit 1; fi
|
if [ $? != 0 ] ; then exit 1; fi
|
||||||
# else exit 1
|
else exit 1
|
||||||
# fi
|
fi
|
||||||
# echo " OK"
|
echo " OK"
|
||||||
# fi
|
fi
|
||||||
#fi
|
fi
|
||||||
#
|
|
||||||
|
# Tests for the POSIX interface without UTF/UCP (8-bit only)
|
||||||
|
|
||||||
|
if [ $do16 = yes ] ; then
|
||||||
|
echo $title16
|
||||||
|
if [ "$bits" = "16" -o "$bits" = "32" ] ; then
|
||||||
|
echo " Skipped when running 16/32-bit tests"
|
||||||
|
else
|
||||||
|
$sim $valgrind ./pcre2test -q $bmode $testdata/testinput16 testtry
|
||||||
|
if [ $? = 0 ] ; then
|
||||||
|
$cf $testdata/testoutput16 testtry
|
||||||
|
if [ $? != 0 ] ; then exit 1; fi
|
||||||
|
else exit 1
|
||||||
|
fi
|
||||||
|
echo " OK"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Tests for the POSIX interface with UTF/UCP (8-bit only)
|
||||||
|
|
||||||
|
if [ $do17 = yes ] ; then
|
||||||
|
echo $title17
|
||||||
|
if [ "$bits" = "16" -o "$bits" = "32" ] ; then
|
||||||
|
echo " Skipped when running 16/32-bit tests"
|
||||||
|
elif [ $utf -eq 0 ] ; then
|
||||||
|
echo " Skipped because UTF-$bits support is not available"
|
||||||
|
else
|
||||||
|
$sim $valgrind ./pcre2test -q $bmode $testdata/testinput17 testtry
|
||||||
|
if [ $? = 0 ] ; then
|
||||||
|
$cf $testdata/testoutput17 testtry
|
||||||
|
if [ $? != 0 ] ; then exit 1; fi
|
||||||
|
else exit 1
|
||||||
|
fi
|
||||||
|
echo " OK"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
## Tests for reloads with 16/32-bit library
|
## Tests for reloads with 16/32-bit library
|
||||||
#
|
#
|
||||||
#if [ $do21 = yes ] ; then
|
#if [ $do21 = yes ] ; then
|
||||||
|
|
|
@ -80,10 +80,10 @@ sure both macros are undefined; an emulation function will then be used. */
|
||||||
#define HAVE_MEMORY_H 1
|
#define HAVE_MEMORY_H 1
|
||||||
|
|
||||||
/* Define if you have POSIX threads libraries and header files. */
|
/* Define if you have POSIX threads libraries and header files. */
|
||||||
/* #undef HAVE_PTHREAD */
|
#define HAVE_PTHREAD 1
|
||||||
|
|
||||||
/* Have PTHREAD_PRIO_INHERIT. */
|
/* Have PTHREAD_PRIO_INHERIT. */
|
||||||
/* #undef HAVE_PTHREAD_PRIO_INHERIT */
|
#define HAVE_PTHREAD_PRIO_INHERIT 1
|
||||||
|
|
||||||
/* Define to 1 if you have the <readline/history.h> header file. */
|
/* Define to 1 if you have the <readline/history.h> header file. */
|
||||||
#define HAVE_READLINE_HISTORY_H 1
|
#define HAVE_READLINE_HISTORY_H 1
|
||||||
|
@ -242,7 +242,7 @@ sure both macros are undefined; an emulation function will then be used. */
|
||||||
#define STDC_HEADERS 1
|
#define STDC_HEADERS 1
|
||||||
|
|
||||||
/* Define to any value to enable support for Just-In-Time compiling. */
|
/* Define to any value to enable support for Just-In-Time compiling. */
|
||||||
/* #undef SUPPORT_JIT */
|
#define SUPPORT_JIT /**/
|
||||||
|
|
||||||
/* Define to any value to allow pcre2grep to be linked with libbz2, so that it
|
/* Define to any value to allow pcre2grep to be linked with libbz2, so that it
|
||||||
is able to handle .bz2 files. */
|
is able to handle .bz2 files. */
|
||||||
|
@ -262,7 +262,7 @@ sure both macros are undefined; an emulation function will then be used. */
|
||||||
#define SUPPORT_PCRE16 /**/
|
#define SUPPORT_PCRE16 /**/
|
||||||
|
|
||||||
/* Define to any value to enable JIT support in pcre2grep. */
|
/* Define to any value to enable JIT support in pcre2grep. */
|
||||||
/* #undef SUPPORT_PCRE2GREP_JIT */
|
#define SUPPORT_PCRE2GREP_JIT /**/
|
||||||
|
|
||||||
/* Define to any value to enable the 32 bit PCRE2 library. */
|
/* Define to any value to enable the 32 bit PCRE2 library. */
|
||||||
#define SUPPORT_PCRE32 /**/
|
#define SUPPORT_PCRE32 /**/
|
||||||
|
|
|
@ -467,7 +467,8 @@ PCRE2_EXP_DECL int pcre2_substring_list_get(pcre2_match_data *, \
|
||||||
PCRE2_EXP_DECL void pcre2_jit_compile(pcre2_code *, uint32_t); \
|
PCRE2_EXP_DECL void pcre2_jit_compile(pcre2_code *, uint32_t); \
|
||||||
PCRE2_EXP_DECL int pcre2_jit_match(const pcre2_code *, \
|
PCRE2_EXP_DECL int pcre2_jit_match(const pcre2_code *, \
|
||||||
PCRE2_SPTR, int, PCRE2_OFFSET, uint32_t, \
|
PCRE2_SPTR, int, PCRE2_OFFSET, uint32_t, \
|
||||||
pcre2_match_data *, pcre2_jit_stack *); \
|
pcre2_match_data *, pcre2_match_context *, \
|
||||||
|
pcre2_jit_stack *); \
|
||||||
PCRE2_EXP_DECL void pcre2_jit_free_unused_memory(pcre2_general_context *);\
|
PCRE2_EXP_DECL void pcre2_jit_free_unused_memory(pcre2_general_context *);\
|
||||||
PCRE2_EXP_DECL \
|
PCRE2_EXP_DECL \
|
||||||
pcre2_jit_stack *pcre2_jit_stack_alloc(pcre2_general_context *, \
|
pcre2_jit_stack *pcre2_jit_stack_alloc(pcre2_general_context *, \
|
||||||
|
|
|
@ -467,7 +467,8 @@ PCRE2_EXP_DECL int pcre2_substring_list_get(pcre2_match_data *, \
|
||||||
PCRE2_EXP_DECL void pcre2_jit_compile(pcre2_code *, uint32_t); \
|
PCRE2_EXP_DECL void pcre2_jit_compile(pcre2_code *, uint32_t); \
|
||||||
PCRE2_EXP_DECL int pcre2_jit_match(const pcre2_code *, \
|
PCRE2_EXP_DECL int pcre2_jit_match(const pcre2_code *, \
|
||||||
PCRE2_SPTR, int, PCRE2_OFFSET, uint32_t, \
|
PCRE2_SPTR, int, PCRE2_OFFSET, uint32_t, \
|
||||||
pcre2_match_data *, pcre2_jit_stack *); \
|
pcre2_match_data *, pcre2_match_context *, \
|
||||||
|
pcre2_jit_stack *); \
|
||||||
PCRE2_EXP_DECL void pcre2_jit_free_unused_memory(pcre2_general_context *);\
|
PCRE2_EXP_DECL void pcre2_jit_free_unused_memory(pcre2_general_context *);\
|
||||||
PCRE2_EXP_DECL \
|
PCRE2_EXP_DECL \
|
||||||
pcre2_jit_stack *pcre2_jit_stack_alloc(pcre2_general_context *, \
|
pcre2_jit_stack *pcre2_jit_stack_alloc(pcre2_general_context *, \
|
||||||
|
|
|
@ -97,8 +97,11 @@ switch (what)
|
||||||
|
|
||||||
case PCRE2_CONFIG_JITTARGET:
|
case PCRE2_CONFIG_JITTARGET:
|
||||||
#ifdef SUPPORT_JIT
|
#ifdef SUPPORT_JIT
|
||||||
FIXME: This needs re-design.
|
/* FIXME: This needs re-design.
|
||||||
*((const char **)where) = PRIV(jit_get_target)();
|
*((const char **)where) = PRIV(jit_get_target)();
|
||||||
|
*/
|
||||||
|
*((const char **)where) = "<JIT target>";
|
||||||
|
|
||||||
#else
|
#else
|
||||||
*((const char **)where) = NULL;
|
*((const char **)where) = NULL;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1838,6 +1838,7 @@ is available. */
|
||||||
#define _pcre2_compile_context_init PCRE2_SUFFIX(_pcre2_compile_context_init_)
|
#define _pcre2_compile_context_init PCRE2_SUFFIX(_pcre2_compile_context_init_)
|
||||||
#define _pcre2_find_bracket PCRE2_SUFFIX(_pcre2_find_bracket_)
|
#define _pcre2_find_bracket PCRE2_SUFFIX(_pcre2_find_bracket_)
|
||||||
#define _pcre2_is_newline PCRE2_SUFFIX(_pcre2_is_newline_)
|
#define _pcre2_is_newline PCRE2_SUFFIX(_pcre2_is_newline_)
|
||||||
|
#define _pcre2_jit_get_size PCRE2_SUFFIX(_pcre2_jit_get_size_)
|
||||||
#define _pcre2_match_context_init PCRE2_SUFFIX(_pcre2_match_context_init_)
|
#define _pcre2_match_context_init PCRE2_SUFFIX(_pcre2_match_context_init_)
|
||||||
#define _pcre2_memctl_malloc PCRE2_SUFFIX(_pcre2_memctl_malloc_)
|
#define _pcre2_memctl_malloc PCRE2_SUFFIX(_pcre2_memctl_malloc_)
|
||||||
#define _pcre2_ord2utf PCRE2_SUFFIX(_pcre2_ord2utf_)
|
#define _pcre2_ord2utf PCRE2_SUFFIX(_pcre2_ord2utf_)
|
||||||
|
@ -1856,6 +1857,7 @@ extern void _pcre2_compile_context_init(pcre2_compile_context *, BOOL);
|
||||||
extern PCRE2_SPTR _pcre2_find_bracket(PCRE2_SPTR, BOOL, int);
|
extern PCRE2_SPTR _pcre2_find_bracket(PCRE2_SPTR, BOOL, int);
|
||||||
extern BOOL _pcre2_is_newline(PCRE2_SPTR, uint32_t, PCRE2_SPTR, uint32_t *,
|
extern BOOL _pcre2_is_newline(PCRE2_SPTR, uint32_t, PCRE2_SPTR, uint32_t *,
|
||||||
BOOL);
|
BOOL);
|
||||||
|
extern int _pcre2_jit_get_size(void *);
|
||||||
extern void _pcre2_match_context_init(pcre2_match_context *, BOOL);
|
extern void _pcre2_match_context_init(pcre2_match_context *, BOOL);
|
||||||
extern void *_pcre2_memctl_malloc(size_t, size_t, pcre2_memctl *);
|
extern void *_pcre2_memctl_malloc(size_t, size_t, pcre2_memctl *);
|
||||||
extern unsigned int _pcre2_ord2utf(uint32_t, PCRE2_UCHAR *);
|
extern unsigned int _pcre2_ord2utf(uint32_t, PCRE2_UCHAR *);
|
||||||
|
|
|
@ -59,6 +59,7 @@ Arguments:
|
||||||
start_offset where to start in the subject string
|
start_offset where to start in the subject string
|
||||||
options option bits
|
options option bits
|
||||||
match_data points to a match_data block
|
match_data points to a match_data block
|
||||||
|
mcontext points to a match context
|
||||||
jit_stack points to a JIT stack
|
jit_stack points to a JIT stack
|
||||||
|
|
||||||
Returns: > 0 => success; value is the number of ovector pairs filled
|
Returns: > 0 => success; value is the number of ovector pairs filled
|
||||||
|
@ -72,7 +73,7 @@ Returns: > 0 => success; value is the number of ovector pairs filled
|
||||||
PCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION
|
PCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION
|
||||||
pcre2_jit_match(const pcre2_code *code, PCRE2_SPTR subject, int length,
|
pcre2_jit_match(const pcre2_code *code, PCRE2_SPTR subject, int length,
|
||||||
PCRE2_OFFSET start_offset, uint32_t options, pcre2_match_data *match_data,
|
PCRE2_OFFSET start_offset, uint32_t options, pcre2_match_data *match_data,
|
||||||
pcre2_jit_stack *jit_stack)
|
pcre2_match_context *mcontext, pcre2_jit_stack *jit_stack)
|
||||||
{
|
{
|
||||||
#ifndef SUPPORT_JIT
|
#ifndef SUPPORT_JIT
|
||||||
(void)code;
|
(void)code;
|
||||||
|
@ -81,16 +82,18 @@ pcre2_jit_match(const pcre2_code *code, PCRE2_SPTR subject, int length,
|
||||||
(void)start_offset;
|
(void)start_offset;
|
||||||
(void)options;
|
(void)options;
|
||||||
(void)match_data;
|
(void)match_data;
|
||||||
|
(void)mcontext;
|
||||||
(void)jit_stack;
|
(void)jit_stack;
|
||||||
return PCRE2_ERROR_NOMATCH;
|
return PCRE2_ERROR_JIT_BADOPTION;
|
||||||
#else /* SUPPORT_JIT */
|
#else /* SUPPORT_JIT */
|
||||||
|
|
||||||
|
|
||||||
/* Dummy code */
|
/* Dummy code */
|
||||||
code=code;subject=subject;length=length;
|
code=code;subject=subject;length=length;
|
||||||
start_offset=start_offset; options=options; match_data=match_data;
|
start_offset=start_offset; options=options; match_data=match_data;
|
||||||
|
mcontext=mcontext;
|
||||||
jit_stack=jit_stack;
|
jit_stack=jit_stack;
|
||||||
return PCRE2_ERROR_NOMATCH;
|
return PCRE2_ERROR_JIT_BADOPTION;
|
||||||
|
|
||||||
#endif /* SUPPORT_JIT */
|
#endif /* SUPPORT_JIT */
|
||||||
}
|
}
|
||||||
|
|
|
@ -122,4 +122,22 @@ jit_stack=jit_stack;
|
||||||
#endif /* SUPPORT_JIT */
|
#endif /* SUPPORT_JIT */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************************
|
||||||
|
* Get size of JIT code *
|
||||||
|
*************************************************/
|
||||||
|
|
||||||
|
int
|
||||||
|
PRIV(jit_get_size)(void *executable_jit)
|
||||||
|
{
|
||||||
|
#ifndef SUPPORT_JIT
|
||||||
|
(void)executable_jit;
|
||||||
|
return 0;
|
||||||
|
#else /* SUPPORT_JIT */
|
||||||
|
|
||||||
|
executable_jit = executable_jit;
|
||||||
|
return 0; /* FIXME */
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/* End of pcre2_jit_misc.c */
|
/* End of pcre2_jit_misc.c */
|
||||||
|
|
|
@ -56,6 +56,10 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
(PCRE2_ANCHORED|PCRE2_NOTBOL|PCRE2_NOTEOL|PCRE2_NOTEMPTY| \
|
(PCRE2_ANCHORED|PCRE2_NOTBOL|PCRE2_NOTEOL|PCRE2_NOTEMPTY| \
|
||||||
PCRE2_NOTEMPTY_ATSTART|PCRE2_NO_UTF_CHECK|PCRE2_PARTIAL_HARD| \
|
PCRE2_NOTEMPTY_ATSTART|PCRE2_NO_UTF_CHECK|PCRE2_PARTIAL_HARD| \
|
||||||
PCRE2_PARTIAL_SOFT|PCRE2_NO_START_OPTIMIZE)
|
PCRE2_PARTIAL_SOFT|PCRE2_NO_START_OPTIMIZE)
|
||||||
|
|
||||||
|
#define PUBLIC_JIT_MATCH_OPTIONS \
|
||||||
|
(PCRE2_NO_UTF_CHECK|PCRE2_NOTBOL|PCRE2_NOTEOL|PCRE2_NOTEMPTY|\
|
||||||
|
PCRE2_NOTEMPTY_ATSTART|PCRE2_PARTIAL_SOFT|PCRE2_PARTIAL_HARD)
|
||||||
|
|
||||||
/* The mb->capture_last field uses the lower 16 bits for the last captured
|
/* The mb->capture_last field uses the lower 16 bits for the last captured
|
||||||
substring (which can never be greater than 65535) and a bit in the top half
|
substring (which can never be greater than 65535) and a bit in the top half
|
||||||
|
@ -6271,11 +6275,11 @@ an unsupported option is set or if JIT returns BADOPTION (which means that the
|
||||||
selected normal or partial matching mode was not compiled). */
|
selected normal or partial matching mode was not compiled). */
|
||||||
|
|
||||||
#ifdef SUPPORT_JIT
|
#ifdef SUPPORT_JIT
|
||||||
if (re->executable_jit != NULL && (options & ~PUBLIC_JIT_EXEC_OPTIONS) == 0 &&
|
if (re->executable_jit != NULL && (options & ~PUBLIC_JIT_MATCH_OPTIONS) == 0 &&
|
||||||
mcontext->bsr_convention == 0 && mcontext->newline_convention == 0)
|
mcontext->bsr_convention == 0 && mcontext->newline_convention == 0)
|
||||||
{
|
{
|
||||||
rc = PRIV(jit_exec)(subject, length, start_offset, options, match_data,
|
rc = pcre2_jit_match(code, subject, length, start_offset, options,
|
||||||
mcontext);
|
match_data, mcontext, NULL);
|
||||||
if (rc != PCRE2_ERROR_JIT_BADOPTION) return rc;
|
if (rc != PCRE2_ERROR_JIT_BADOPTION) return rc;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -3115,14 +3115,14 @@ for (fn = pattern_files; fn != NULL; fn = fn->next)
|
||||||
|
|
||||||
#ifdef SUPPORT_PCRE2GREP_JIT
|
#ifdef SUPPORT_PCRE2GREP_JIT
|
||||||
if (use_jit)
|
if (use_jit)
|
||||||
jit_stack = pcre_jit_stack_alloc(32*1024, 1024*1024);
|
jit_stack = pcre2_jit_stack_alloc(NULL, 32*1024, 1024*1024);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (j = 1, cp = patterns; cp != NULL; j++, cp = cp->next)
|
for (j = 1, cp = patterns; cp != NULL; j++, cp = cp->next)
|
||||||
{
|
{
|
||||||
#ifdef SUPPORT_PCRE2GREP_JIT
|
#ifdef SUPPORT_PCRE2GREP_JIT
|
||||||
if (jit_stack != NULL && cp->hint != NULL)
|
if (jit_stack != NULL && cp->compiled != NULL)
|
||||||
pcre2_assign_jit_stack(cp->hint, NULL, jit_stack);
|
pcre2_jit_stack_assign(cp->compiled, NULL, jit_stack);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3190,18 +3190,18 @@ if ((pat_patctl.control & CTL_INFO) != 0)
|
||||||
|
|
||||||
/* FIXME: tidy this up */
|
/* FIXME: tidy this up */
|
||||||
|
|
||||||
if (pat_patctl.jit != 0)
|
if (pat_patctl.jit != 0 && (pat_patctl.control & CTL_JITVERIFY) != 0)
|
||||||
{
|
{
|
||||||
size_t jitsize;
|
size_t jitsize;
|
||||||
if (pattern_info(PCRE2_INFO_JITSIZE, &jitsize) == 0)
|
if (pattern_info(PCRE2_INFO_JITSIZE, &jitsize) == 0)
|
||||||
{
|
{
|
||||||
if (jitsize > 0)
|
if (jitsize > 0)
|
||||||
fprintf(outfile, "JIT study was successful\n");
|
fprintf(outfile, "JIT compilation was successful\n");
|
||||||
else
|
else
|
||||||
#ifdef SUPPORT_JIT
|
#ifdef SUPPORT_JIT
|
||||||
fprintf(outfile, "JIT study was not successful\n");
|
fprintf(outfile, "JIT compilation was not successful\n");
|
||||||
#else
|
#else
|
||||||
fprintf(outfile, "JIT support is not available in this version of PCRE\n");
|
fprintf(outfile, "JIT support is not available in this version of PCRE2\n");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4455,10 +4455,8 @@ show_memory = (dat_datctl.control & CTL_MEMORY) != 0;
|
||||||
actually used. If jit_stack == NULL, no stack has yet been assigned. */
|
actually used. If jit_stack == NULL, no stack has yet been assigned. */
|
||||||
|
|
||||||
#ifdef FIXME
|
#ifdef FIXME
|
||||||
if ((dat_datctl.control & CTL_JITVERIFY) != 0 &&
|
if ((dat_datctl.control & CTL_JITVERIFY) != 0 && jit_stack == NULL)
|
||||||
|
{ PCRE2_JIT_STACK_ASSIGN(compiled_code, jit_callback, jit_stack); }
|
||||||
jit_stack == NULL && extra != NULL)
|
|
||||||
{ PCRE2_ASSIGN_JIT_STACK(extra, jit_callback, jit_stack); }
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -223,9 +223,6 @@
|
||||||
|
|
||||||
/\x{100}abc(xyz(?1))/IB,utf
|
/\x{100}abc(xyz(?1))/IB,utf
|
||||||
|
|
||||||
/a\x{1234}b/utf,posix
|
|
||||||
a\x{1234}b
|
|
||||||
|
|
||||||
/\777/I,utf
|
/\777/I,utf
|
||||||
\x{1ff}
|
\x{1ff}
|
||||||
\777
|
\777
|
||||||
|
@ -359,12 +356,6 @@
|
||||||
|
|
||||||
/abc/utf,never_utf
|
/abc/utf,never_utf
|
||||||
|
|
||||||
/\w/posix
|
|
||||||
+++\x{c2}
|
|
||||||
|
|
||||||
/\w/ucp,posix
|
|
||||||
+++\x{c2}
|
|
||||||
|
|
||||||
/A\x{391}\x{10427}\x{ff3a}\x{1fb0}/IBi,utf
|
/A\x{391}\x{10427}\x{ff3a}\x{1fb0}/IBi,utf
|
||||||
|
|
||||||
/A\x{391}\x{10427}\x{ff3a}\x{1fb0}/IB,utf
|
/A\x{391}\x{10427}\x{ff3a}\x{1fb0}/IB,utf
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
# This test is run only when JIT support is not available. It checks that an
|
||||||
|
# attempt to use it has the expected behaviour. It also tests things that
|
||||||
|
# are different without JIT.
|
||||||
|
|
||||||
|
/abc/I,jit
|
||||||
|
|
||||||
|
/a*/I
|
||||||
|
|
||||||
|
# End of testinput14
|
|
@ -0,0 +1,87 @@
|
||||||
|
# This test is run only when JIT support is available. It checks for a
|
||||||
|
# successful and an unsuccessful JIT compile, and a couple of things that are
|
||||||
|
# different with JIT.
|
||||||
|
|
||||||
|
/abc/I,jit
|
||||||
|
|
||||||
|
/(?(?C1)(?=a)a)/I,jit
|
||||||
|
|
||||||
|
/(?(?C1)(?=a)a)/I
|
||||||
|
|
||||||
|
/a*/I
|
||||||
|
|
||||||
|
/(?(R)a*(?1)|((?R))b)/jit
|
||||||
|
aaaabcde
|
||||||
|
|
||||||
|
# Test various compile modes
|
||||||
|
|
||||||
|
#pattern jit,jitverify
|
||||||
|
|
||||||
|
/abcd/
|
||||||
|
abcd
|
||||||
|
xyz
|
||||||
|
|
||||||
|
/abcd/
|
||||||
|
abcd
|
||||||
|
ab\=ps
|
||||||
|
ab\=ph
|
||||||
|
xyz
|
||||||
|
|
||||||
|
/abcd/
|
||||||
|
abcd
|
||||||
|
ab\=ps
|
||||||
|
ab\=ph
|
||||||
|
xyz
|
||||||
|
|
||||||
|
/abcd/jit=1
|
||||||
|
abcd
|
||||||
|
ab\=ps
|
||||||
|
ab\=ph
|
||||||
|
xyz
|
||||||
|
xyz\=ps
|
||||||
|
|
||||||
|
/abcd/jit=2
|
||||||
|
abcd
|
||||||
|
ab\=ps
|
||||||
|
ab\=ph
|
||||||
|
xyz
|
||||||
|
|
||||||
|
/abcd/jit=3
|
||||||
|
abcd
|
||||||
|
ab\=ps
|
||||||
|
ab\=ph
|
||||||
|
xyz
|
||||||
|
|
||||||
|
/abcd/jit=4
|
||||||
|
abcd
|
||||||
|
ab\=ps
|
||||||
|
ab\=ph
|
||||||
|
xyz
|
||||||
|
|
||||||
|
/abcd/jit=5
|
||||||
|
abcd
|
||||||
|
ab\=ps
|
||||||
|
ab\=ph
|
||||||
|
xyz
|
||||||
|
|
||||||
|
/abcd/jit=6
|
||||||
|
abcd
|
||||||
|
ab\=ps
|
||||||
|
ab\=ph
|
||||||
|
xyz
|
||||||
|
|
||||||
|
/abcd/jit=7
|
||||||
|
abcd
|
||||||
|
ab\=ps
|
||||||
|
ab\=ph
|
||||||
|
xyz
|
||||||
|
|
||||||
|
/abcd/I,jit=2
|
||||||
|
|
||||||
|
/(*NO_START_OPT)a(*:m)b/mark
|
||||||
|
a
|
||||||
|
|
||||||
|
/^12345678abcd/m
|
||||||
|
12345678abcd
|
||||||
|
|
||||||
|
# End of testinput15
|
|
@ -0,0 +1,81 @@
|
||||||
|
# This set of tests is run only with the 8-bit library. It tests the POSIX
|
||||||
|
# interface, which is supported only with the 8-bit library. This test should
|
||||||
|
# not be run with JIT (which is not available for the POSIX interface).
|
||||||
|
|
||||||
|
#forbid_utf
|
||||||
|
#pattern posix
|
||||||
|
|
||||||
|
/abc/
|
||||||
|
abc
|
||||||
|
*** Failers
|
||||||
|
|
||||||
|
/^abc|def/
|
||||||
|
abcdef
|
||||||
|
abcdef\=notbol
|
||||||
|
|
||||||
|
/.*((abc)$|(def))/
|
||||||
|
defabc
|
||||||
|
defabc\=noteol
|
||||||
|
|
||||||
|
/the quick brown fox/
|
||||||
|
the quick brown fox
|
||||||
|
*** Failers
|
||||||
|
The Quick Brown Fox
|
||||||
|
|
||||||
|
/the quick brown fox/i
|
||||||
|
the quick brown fox
|
||||||
|
The Quick Brown Fox
|
||||||
|
|
||||||
|
/abc.def/
|
||||||
|
*** Failers
|
||||||
|
abc\ndef
|
||||||
|
|
||||||
|
/abc$/
|
||||||
|
abc
|
||||||
|
abc\n
|
||||||
|
|
||||||
|
/(abc)\2/
|
||||||
|
|
||||||
|
/(abc\1)/
|
||||||
|
abc
|
||||||
|
|
||||||
|
/a*(b+)(z)(z)/
|
||||||
|
aaaabbbbzzzz
|
||||||
|
aaaabbbbzzzz\=ovector=0
|
||||||
|
aaaabbbbzzzz\=ovector=1
|
||||||
|
aaaabbbbzzzz\=ovector=2
|
||||||
|
|
||||||
|
/ab.cd/
|
||||||
|
ab-cd
|
||||||
|
ab=cd
|
||||||
|
** Failers
|
||||||
|
ab\ncd
|
||||||
|
|
||||||
|
/ab.cd/s
|
||||||
|
ab-cd
|
||||||
|
ab=cd
|
||||||
|
ab\ncd
|
||||||
|
|
||||||
|
/a(b)c/no_auto_capture
|
||||||
|
abc
|
||||||
|
|
||||||
|
/a(?P<name>b)c/no_auto_capture
|
||||||
|
abc
|
||||||
|
|
||||||
|
/a?|b?/
|
||||||
|
abc
|
||||||
|
** Failers
|
||||||
|
ddd\=notempty
|
||||||
|
|
||||||
|
/\w+A/
|
||||||
|
CDAAAAB
|
||||||
|
|
||||||
|
/\w+A/ungreedy
|
||||||
|
CDAAAAB
|
||||||
|
|
||||||
|
/\Biss\B/I,aftertext
|
||||||
|
Mississippi
|
||||||
|
|
||||||
|
/abc/\
|
||||||
|
|
||||||
|
# End of testdata/testinput16
|
|
@ -0,0 +1,17 @@
|
||||||
|
# This set of tests is run only with the 8-bit library. It tests the POSIX
|
||||||
|
# interface with UTF/UCP support, which is supported only with the 8-bit
|
||||||
|
# library. This test should not be run with JIT (which is not available for the
|
||||||
|
# POSIX interface).
|
||||||
|
|
||||||
|
#pattern posix
|
||||||
|
|
||||||
|
/a\x{1234}b/utf
|
||||||
|
a\x{1234}b
|
||||||
|
|
||||||
|
/\w/
|
||||||
|
+++\x{c2}
|
||||||
|
|
||||||
|
/\w/ucp
|
||||||
|
+++\x{c2}
|
||||||
|
|
||||||
|
# End of testdata/testinput17
|
|
@ -1,86 +1,7 @@
|
||||||
# This set of tests is run only with the 8-bit library. They do not require
|
# This set of tests is run only with the 8-bit library. They must not require
|
||||||
# UTF-8 or Unicode property support. The file starts with all the tests of
|
# UTF-8 or Unicode property support. */
|
||||||
# the POSIX interface, because that is supported only with the 8-bit library.
|
|
||||||
|
|
||||||
#forbid_utf
|
#forbid_utf
|
||||||
#pattern posix
|
|
||||||
|
|
||||||
/abc/
|
|
||||||
abc
|
|
||||||
*** Failers
|
|
||||||
|
|
||||||
/^abc|def/
|
|
||||||
abcdef
|
|
||||||
abcdef\=notbol
|
|
||||||
|
|
||||||
/.*((abc)$|(def))/
|
|
||||||
defabc
|
|
||||||
defabc\=noteol
|
|
||||||
|
|
||||||
/the quick brown fox/
|
|
||||||
the quick brown fox
|
|
||||||
*** Failers
|
|
||||||
The Quick Brown Fox
|
|
||||||
|
|
||||||
/the quick brown fox/i
|
|
||||||
the quick brown fox
|
|
||||||
The Quick Brown Fox
|
|
||||||
|
|
||||||
/abc.def/
|
|
||||||
*** Failers
|
|
||||||
abc\ndef
|
|
||||||
|
|
||||||
/abc$/
|
|
||||||
abc
|
|
||||||
abc\n
|
|
||||||
|
|
||||||
/(abc)\2/
|
|
||||||
|
|
||||||
/(abc\1)/
|
|
||||||
abc
|
|
||||||
|
|
||||||
/a*(b+)(z)(z)/
|
|
||||||
aaaabbbbzzzz
|
|
||||||
aaaabbbbzzzz\=ovector=0
|
|
||||||
aaaabbbbzzzz\=ovector=1
|
|
||||||
aaaabbbbzzzz\=ovector=2
|
|
||||||
|
|
||||||
/ab.cd/
|
|
||||||
ab-cd
|
|
||||||
ab=cd
|
|
||||||
** Failers
|
|
||||||
ab\ncd
|
|
||||||
|
|
||||||
/ab.cd/s
|
|
||||||
ab-cd
|
|
||||||
ab=cd
|
|
||||||
ab\ncd
|
|
||||||
|
|
||||||
/a(b)c/no_auto_capture
|
|
||||||
abc
|
|
||||||
|
|
||||||
/a(?P<name>b)c/no_auto_capture
|
|
||||||
abc
|
|
||||||
|
|
||||||
/a?|b?/
|
|
||||||
abc
|
|
||||||
** Failers
|
|
||||||
ddd\=notempty
|
|
||||||
|
|
||||||
/\w+A/
|
|
||||||
CDAAAAB
|
|
||||||
|
|
||||||
/\w+A/ungreedy
|
|
||||||
CDAAAAB
|
|
||||||
|
|
||||||
/\Biss\B/I,aftertext
|
|
||||||
Mississippi
|
|
||||||
|
|
||||||
/abc/\
|
|
||||||
|
|
||||||
#pattern -posix
|
|
||||||
|
|
||||||
# End of POSIX tests
|
|
||||||
|
|
||||||
/a\Cb/
|
/a\Cb/
|
||||||
aXb
|
aXb
|
||||||
|
|
|
@ -715,10 +715,6 @@ First code unit = \xc4
|
||||||
Last code unit = 'z'
|
Last code unit = 'z'
|
||||||
Subject length lower bound = 7
|
Subject length lower bound = 7
|
||||||
|
|
||||||
/a\x{1234}b/utf,posix
|
|
||||||
a\x{1234}b
|
|
||||||
0: a\x{1234}b
|
|
||||||
|
|
||||||
/\777/I,utf
|
/\777/I,utf
|
||||||
Capturing subpattern count = 0
|
Capturing subpattern count = 0
|
||||||
Options: utf
|
Options: utf
|
||||||
|
@ -1136,14 +1132,6 @@ Failed: error 174 at offset 7: using UTF is disabled by the application
|
||||||
/abc/utf,never_utf
|
/abc/utf,never_utf
|
||||||
Failed: error 174 at offset 0: using UTF is disabled by the application
|
Failed: error 174 at offset 0: using UTF is disabled by the application
|
||||||
|
|
||||||
/\w/posix
|
|
||||||
+++\x{c2}
|
|
||||||
No match: POSIX code 17: match failed
|
|
||||||
|
|
||||||
/\w/ucp,posix
|
|
||||||
+++\x{c2}
|
|
||||||
0: \xc2
|
|
||||||
|
|
||||||
/A\x{391}\x{10427}\x{ff3a}\x{1fb0}/IBi,utf
|
/A\x{391}\x{10427}\x{ff3a}\x{1fb0}/IBi,utf
|
||||||
------------------------------------------------------------------
|
------------------------------------------------------------------
|
||||||
Bra
|
Bra
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
# This test is run only when JIT support is not available. It checks that an
|
||||||
|
# attempt to use it has the expected behaviour. It also tests things that
|
||||||
|
# are different without JIT.
|
||||||
|
|
||||||
|
/abc/I,jit
|
||||||
|
Capturing subpattern count = 0
|
||||||
|
No options
|
||||||
|
First code unit = 'a'
|
||||||
|
Last code unit = 'c'
|
||||||
|
Subject length lower bound = 3
|
||||||
|
JIT support is not available in this version of PCRE
|
||||||
|
|
||||||
|
/a*/I
|
||||||
|
Capturing subpattern count = 0
|
||||||
|
May match empty string
|
||||||
|
No options
|
||||||
|
No first code unit
|
||||||
|
No last code unit
|
||||||
|
Subject length lower bound = 0
|
||||||
|
|
||||||
|
# End of testinput14
|
|
@ -0,0 +1,164 @@
|
||||||
|
# This test is run only when JIT support is available. It checks for a
|
||||||
|
# successful and an unsuccessful JIT compile, and a couple of things that are
|
||||||
|
# different with JIT.
|
||||||
|
|
||||||
|
/abc/I,jit
|
||||||
|
Capturing subpattern count = 0
|
||||||
|
No options
|
||||||
|
First code unit = 'a'
|
||||||
|
Need char = 'c'
|
||||||
|
Subject length lower bound = 3
|
||||||
|
No starting char list
|
||||||
|
JIT study was successful
|
||||||
|
|
||||||
|
/(?(?C1)(?=a)a)/I,jit
|
||||||
|
Capturing subpattern count = 0
|
||||||
|
May match empty string
|
||||||
|
No options
|
||||||
|
No first code unit
|
||||||
|
No last code unit
|
||||||
|
Study returned NULL
|
||||||
|
JIT study was not successful
|
||||||
|
|
||||||
|
/(?(?C1)(?=a)a)/I
|
||||||
|
Capturing subpattern count = 0
|
||||||
|
May match empty string
|
||||||
|
No options
|
||||||
|
No first code unit
|
||||||
|
No last code unit
|
||||||
|
Subject length lower bound = -1
|
||||||
|
No starting char list
|
||||||
|
JIT study was not successful
|
||||||
|
|
||||||
|
/a*/I
|
||||||
|
Capturing subpattern count = 0
|
||||||
|
May match empty string
|
||||||
|
No options
|
||||||
|
No first code unit
|
||||||
|
No last code unit
|
||||||
|
Study returned NULL
|
||||||
|
|
||||||
|
/(?(R)a*(?1)|((?R))b)/S+
|
||||||
|
aaaabcde
|
||||||
|
Error -27 (JIT stack limit reached)
|
||||||
|
|
||||||
|
# Test various compile modes
|
||||||
|
|
||||||
|
#pattern jit,jitverify
|
||||||
|
|
||||||
|
/abcd/
|
||||||
|
abcd
|
||||||
|
0: abcd (JIT)
|
||||||
|
xyz
|
||||||
|
No match (JIT)
|
||||||
|
|
||||||
|
/abcd/
|
||||||
|
abcd
|
||||||
|
0: abcd (JIT)
|
||||||
|
ab\P
|
||||||
|
Partial match: ab (JIT)
|
||||||
|
ab\P\P
|
||||||
|
Partial match: ab (JIT)
|
||||||
|
xyz
|
||||||
|
No match (JIT)
|
||||||
|
|
||||||
|
/abcd/
|
||||||
|
abcd
|
||||||
|
0: abcd (JIT)
|
||||||
|
ab\P
|
||||||
|
Partial match: ab (JIT)
|
||||||
|
ab\P\P
|
||||||
|
Partial match: ab (JIT)
|
||||||
|
xyz
|
||||||
|
No match (JIT)
|
||||||
|
|
||||||
|
/abcd/jit=1
|
||||||
|
abcd
|
||||||
|
0: abcd (JIT)
|
||||||
|
ab\P
|
||||||
|
Partial match: ab
|
||||||
|
ab\P\P
|
||||||
|
Partial match: ab
|
||||||
|
xyz
|
||||||
|
No match (JIT)
|
||||||
|
xyz\P
|
||||||
|
No match
|
||||||
|
|
||||||
|
/abcd/jit=2
|
||||||
|
abcd
|
||||||
|
0: abcd
|
||||||
|
ab\P
|
||||||
|
Partial match: ab (JIT)
|
||||||
|
ab\P\P
|
||||||
|
Partial match: ab
|
||||||
|
xyz
|
||||||
|
No match
|
||||||
|
|
||||||
|
/abcd/jit=3
|
||||||
|
abcd
|
||||||
|
0: abcd (JIT)
|
||||||
|
ab\P
|
||||||
|
Partial match: ab (JIT)
|
||||||
|
ab\P\P
|
||||||
|
Partial match: ab
|
||||||
|
xyz
|
||||||
|
No match (JIT)
|
||||||
|
|
||||||
|
/abcd/jit=4
|
||||||
|
abcd
|
||||||
|
0: abcd
|
||||||
|
ab\P
|
||||||
|
Partial match: ab
|
||||||
|
ab\P\P
|
||||||
|
Partial match: ab (JIT)
|
||||||
|
xyz
|
||||||
|
No match
|
||||||
|
|
||||||
|
/abcd/jit=5
|
||||||
|
abcd
|
||||||
|
0: abcd (JIT)
|
||||||
|
ab\P
|
||||||
|
Partial match: ab
|
||||||
|
ab\P\P
|
||||||
|
Partial match: ab (JIT)
|
||||||
|
xyz
|
||||||
|
No match (JIT)
|
||||||
|
|
||||||
|
/abcd/jit=6
|
||||||
|
abcd
|
||||||
|
0: abcd
|
||||||
|
ab\P
|
||||||
|
Partial match: ab (JIT)
|
||||||
|
ab\P\P
|
||||||
|
Partial match: ab (JIT)
|
||||||
|
xyz
|
||||||
|
No match
|
||||||
|
|
||||||
|
/abcd/jit=7
|
||||||
|
abcd
|
||||||
|
0: abcd (JIT)
|
||||||
|
ab\P
|
||||||
|
Partial match: ab (JIT)
|
||||||
|
ab\P\P
|
||||||
|
Partial match: ab (JIT)
|
||||||
|
xyz
|
||||||
|
No match (JIT)
|
||||||
|
|
||||||
|
/abcd/I,jit=2
|
||||||
|
Capturing subpattern count = 0
|
||||||
|
No options
|
||||||
|
First code unit = 'a'
|
||||||
|
Last code unit = 'd'
|
||||||
|
Subject length lower bound = 4
|
||||||
|
No starting char list
|
||||||
|
JIT study was successful
|
||||||
|
|
||||||
|
/(*NO_START_OPT)a(*:m)b/mark
|
||||||
|
a
|
||||||
|
No match, mark = m (JIT)
|
||||||
|
|
||||||
|
/^12345678abcd/m
|
||||||
|
12345678abcd
|
||||||
|
0: 12345678abcd (JIT)
|
||||||
|
|
||||||
|
# End of testinput15
|
|
@ -0,0 +1,128 @@
|
||||||
|
# This set of tests is run only with the 8-bit library. It tests the POSIX
|
||||||
|
# interface, which is supported only with the 8-bit library. This test should
|
||||||
|
# not be run with JIT (which is not available for the POSIX interface).
|
||||||
|
|
||||||
|
#forbid_utf
|
||||||
|
#pattern posix
|
||||||
|
|
||||||
|
/abc/
|
||||||
|
abc
|
||||||
|
0: abc
|
||||||
|
*** Failers
|
||||||
|
No match: POSIX code 17: match failed
|
||||||
|
|
||||||
|
/^abc|def/
|
||||||
|
abcdef
|
||||||
|
0: abc
|
||||||
|
abcdef\=notbol
|
||||||
|
0: def
|
||||||
|
|
||||||
|
/.*((abc)$|(def))/
|
||||||
|
defabc
|
||||||
|
0: defabc
|
||||||
|
1: abc
|
||||||
|
2: abc
|
||||||
|
defabc\=noteol
|
||||||
|
0: def
|
||||||
|
1: def
|
||||||
|
3: def
|
||||||
|
|
||||||
|
/the quick brown fox/
|
||||||
|
the quick brown fox
|
||||||
|
0: the quick brown fox
|
||||||
|
*** Failers
|
||||||
|
No match: POSIX code 17: match failed
|
||||||
|
The Quick Brown Fox
|
||||||
|
No match: POSIX code 17: match failed
|
||||||
|
|
||||||
|
/the quick brown fox/i
|
||||||
|
the quick brown fox
|
||||||
|
0: the quick brown fox
|
||||||
|
The Quick Brown Fox
|
||||||
|
0: The Quick Brown Fox
|
||||||
|
|
||||||
|
/abc.def/
|
||||||
|
*** Failers
|
||||||
|
No match: POSIX code 17: match failed
|
||||||
|
abc\ndef
|
||||||
|
No match: POSIX code 17: match failed
|
||||||
|
|
||||||
|
/abc$/
|
||||||
|
abc
|
||||||
|
0: abc
|
||||||
|
abc\n
|
||||||
|
0: abc
|
||||||
|
|
||||||
|
/(abc)\2/
|
||||||
|
Failed: POSIX code 15: bad back reference at offset 7
|
||||||
|
|
||||||
|
/(abc\1)/
|
||||||
|
abc
|
||||||
|
No match: POSIX code 17: match failed
|
||||||
|
|
||||||
|
/a*(b+)(z)(z)/
|
||||||
|
aaaabbbbzzzz
|
||||||
|
0: aaaabbbbzz
|
||||||
|
1: bbbb
|
||||||
|
2: z
|
||||||
|
3: z
|
||||||
|
aaaabbbbzzzz\=ovector=0
|
||||||
|
Matched without capture
|
||||||
|
aaaabbbbzzzz\=ovector=1
|
||||||
|
0: aaaabbbbzz
|
||||||
|
aaaabbbbzzzz\=ovector=2
|
||||||
|
0: aaaabbbbzz
|
||||||
|
1: bbbb
|
||||||
|
|
||||||
|
/ab.cd/
|
||||||
|
ab-cd
|
||||||
|
0: ab-cd
|
||||||
|
ab=cd
|
||||||
|
0: ab=cd
|
||||||
|
** Failers
|
||||||
|
No match: POSIX code 17: match failed
|
||||||
|
ab\ncd
|
||||||
|
No match: POSIX code 17: match failed
|
||||||
|
|
||||||
|
/ab.cd/s
|
||||||
|
ab-cd
|
||||||
|
0: ab-cd
|
||||||
|
ab=cd
|
||||||
|
0: ab=cd
|
||||||
|
ab\ncd
|
||||||
|
0: ab\x0acd
|
||||||
|
|
||||||
|
/a(b)c/no_auto_capture
|
||||||
|
abc
|
||||||
|
Matched with REG_NOSUB
|
||||||
|
|
||||||
|
/a(?P<name>b)c/no_auto_capture
|
||||||
|
abc
|
||||||
|
Matched with REG_NOSUB
|
||||||
|
|
||||||
|
/a?|b?/
|
||||||
|
abc
|
||||||
|
0: a
|
||||||
|
** Failers
|
||||||
|
0:
|
||||||
|
ddd\=notempty
|
||||||
|
No match: POSIX code 17: match failed
|
||||||
|
|
||||||
|
/\w+A/
|
||||||
|
CDAAAAB
|
||||||
|
0: CDAAAA
|
||||||
|
|
||||||
|
/\w+A/ungreedy
|
||||||
|
CDAAAAB
|
||||||
|
0: CDA
|
||||||
|
|
||||||
|
/\Biss\B/I,aftertext
|
||||||
|
** Ignored with POSIX interface: info
|
||||||
|
Mississippi
|
||||||
|
0: iss
|
||||||
|
0+ issippi
|
||||||
|
|
||||||
|
/abc/\
|
||||||
|
Failed: POSIX code 9: bad escape sequence at offset 4
|
||||||
|
|
||||||
|
# End of testdata/testinput16
|
|
@ -0,0 +1,20 @@
|
||||||
|
# This set of tests is run only with the 8-bit library. It tests the POSIX
|
||||||
|
# interface with UTF/UCP support, which is supported only with the 8-bit
|
||||||
|
# library. This test should not be run with JIT (which is not available for the
|
||||||
|
# POSIX interface).
|
||||||
|
|
||||||
|
#pattern posix
|
||||||
|
|
||||||
|
/a\x{1234}b/utf
|
||||||
|
a\x{1234}b
|
||||||
|
0: a\x{1234}b
|
||||||
|
|
||||||
|
/\w/
|
||||||
|
+++\x{c2}
|
||||||
|
No match: POSIX code 17: match failed
|
||||||
|
|
||||||
|
/\w/ucp
|
||||||
|
+++\x{c2}
|
||||||
|
0: \xc2
|
||||||
|
|
||||||
|
# End of testdata/testinput17
|
|
@ -1,133 +1,7 @@
|
||||||
# This set of tests is run only with the 8-bit library. They do not require
|
# This set of tests is run only with the 8-bit library. They must not require
|
||||||
# UTF-8 or Unicode property support. The file starts with all the tests of
|
# UTF-8 or Unicode property support. */
|
||||||
# the POSIX interface, because that is supported only with the 8-bit library.
|
|
||||||
|
|
||||||
#forbid_utf
|
#forbid_utf
|
||||||
#pattern posix
|
|
||||||
|
|
||||||
/abc/
|
|
||||||
abc
|
|
||||||
0: abc
|
|
||||||
*** Failers
|
|
||||||
No match: POSIX code 17: match failed
|
|
||||||
|
|
||||||
/^abc|def/
|
|
||||||
abcdef
|
|
||||||
0: abc
|
|
||||||
abcdef\=notbol
|
|
||||||
0: def
|
|
||||||
|
|
||||||
/.*((abc)$|(def))/
|
|
||||||
defabc
|
|
||||||
0: defabc
|
|
||||||
1: abc
|
|
||||||
2: abc
|
|
||||||
defabc\=noteol
|
|
||||||
0: def
|
|
||||||
1: def
|
|
||||||
3: def
|
|
||||||
|
|
||||||
/the quick brown fox/
|
|
||||||
the quick brown fox
|
|
||||||
0: the quick brown fox
|
|
||||||
*** Failers
|
|
||||||
No match: POSIX code 17: match failed
|
|
||||||
The Quick Brown Fox
|
|
||||||
No match: POSIX code 17: match failed
|
|
||||||
|
|
||||||
/the quick brown fox/i
|
|
||||||
the quick brown fox
|
|
||||||
0: the quick brown fox
|
|
||||||
The Quick Brown Fox
|
|
||||||
0: The Quick Brown Fox
|
|
||||||
|
|
||||||
/abc.def/
|
|
||||||
*** Failers
|
|
||||||
No match: POSIX code 17: match failed
|
|
||||||
abc\ndef
|
|
||||||
No match: POSIX code 17: match failed
|
|
||||||
|
|
||||||
/abc$/
|
|
||||||
abc
|
|
||||||
0: abc
|
|
||||||
abc\n
|
|
||||||
0: abc
|
|
||||||
|
|
||||||
/(abc)\2/
|
|
||||||
Failed: POSIX code 15: bad back reference at offset 7
|
|
||||||
|
|
||||||
/(abc\1)/
|
|
||||||
abc
|
|
||||||
No match: POSIX code 17: match failed
|
|
||||||
|
|
||||||
/a*(b+)(z)(z)/
|
|
||||||
aaaabbbbzzzz
|
|
||||||
0: aaaabbbbzz
|
|
||||||
1: bbbb
|
|
||||||
2: z
|
|
||||||
3: z
|
|
||||||
aaaabbbbzzzz\=ovector=0
|
|
||||||
Matched without capture
|
|
||||||
aaaabbbbzzzz\=ovector=1
|
|
||||||
0: aaaabbbbzz
|
|
||||||
aaaabbbbzzzz\=ovector=2
|
|
||||||
0: aaaabbbbzz
|
|
||||||
1: bbbb
|
|
||||||
|
|
||||||
/ab.cd/
|
|
||||||
ab-cd
|
|
||||||
0: ab-cd
|
|
||||||
ab=cd
|
|
||||||
0: ab=cd
|
|
||||||
** Failers
|
|
||||||
No match: POSIX code 17: match failed
|
|
||||||
ab\ncd
|
|
||||||
No match: POSIX code 17: match failed
|
|
||||||
|
|
||||||
/ab.cd/s
|
|
||||||
ab-cd
|
|
||||||
0: ab-cd
|
|
||||||
ab=cd
|
|
||||||
0: ab=cd
|
|
||||||
ab\ncd
|
|
||||||
0: ab\x0acd
|
|
||||||
|
|
||||||
/a(b)c/no_auto_capture
|
|
||||||
abc
|
|
||||||
Matched with REG_NOSUB
|
|
||||||
|
|
||||||
/a(?P<name>b)c/no_auto_capture
|
|
||||||
abc
|
|
||||||
Matched with REG_NOSUB
|
|
||||||
|
|
||||||
/a?|b?/
|
|
||||||
abc
|
|
||||||
0: a
|
|
||||||
** Failers
|
|
||||||
0:
|
|
||||||
ddd\=notempty
|
|
||||||
No match: POSIX code 17: match failed
|
|
||||||
|
|
||||||
/\w+A/
|
|
||||||
CDAAAAB
|
|
||||||
0: CDAAAA
|
|
||||||
|
|
||||||
/\w+A/ungreedy
|
|
||||||
CDAAAAB
|
|
||||||
0: CDA
|
|
||||||
|
|
||||||
/\Biss\B/I,aftertext
|
|
||||||
** Ignored with POSIX interface: info
|
|
||||||
Mississippi
|
|
||||||
0: iss
|
|
||||||
0+ issippi
|
|
||||||
|
|
||||||
/abc/\
|
|
||||||
Failed: POSIX code 9: bad escape sequence at offset 4
|
|
||||||
|
|
||||||
#pattern -posix
|
|
||||||
|
|
||||||
# End of POSIX tests
|
|
||||||
|
|
||||||
/a\Cb/
|
/a\Cb/
|
||||||
aXb
|
aXb
|
||||||
|
|
Loading…
Reference in New Issue