diff options
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | Makefile.am | 2 | ||||
-rwxr-xr-x | RunTest | 6 | ||||
-rw-r--r-- | pcre_exec.c | 18 |
4 files changed, 19 insertions, 17 deletions
@@ -11,15 +11,15 @@ Version 7.2 01-May-07 to make them independent of the local environment's newline setting. 3. Add code to configure.ac to remove -g from the CFLAGS default settings. - + 4. Some of the "internals" tests were previously cut out when the link size was not 2, because the output contained actual offsets. The recent new - "Z" feature of pcretest means that these can be cut out, making the tests - usable with all link sizes. - + "Z" feature of pcretest means that these can be cut out, making the tests + usable with all link sizes. + 5. Implemented Stan Switzer's goto replacement for longjmp() when not using stack recursion. This gives a massive performance boost under BSD, but just - a small improvement under Linux. However, it saves one field in the frame + a small improvement under Linux. However, it saves one field in the frame in all cases. diff --git a/Makefile.am b/Makefile.am index e8cfc5e..4fe1655 100644 --- a/Makefile.am +++ b/Makefile.am @@ -268,6 +268,7 @@ EXTRA_DIST += \ testdata/testinput7 \ testdata/testinput8 \ testdata/testinput9 \ + testdata/testinput10 \ testdata/testoutput1 \ testdata/testoutput2 \ testdata/testoutput3 \ @@ -277,6 +278,7 @@ EXTRA_DIST += \ testdata/testoutput7 \ testdata/testoutput8 \ testdata/testoutput9 \ + testdata/testoutput10 \ perltest.pl CLEANFILES += \ @@ -50,7 +50,7 @@ while [ $# -gt 0 ] ; do 7) do7=yes;; 8) do8=yes;; 9) do9=yes;; - 10) do10=yes;; + 10) do10=yes;; valgrind) valgrind="valgrind -q";; *) echo "Unknown test number $1"; exit 1;; esac @@ -100,7 +100,7 @@ if [ $link_size -ne 2 ] ; then echo "Can't run test 10 because the link size ($link_size) is not 2" exit 1 fi -fi +fi # If no specific tests were requested, select all that are relevant. @@ -116,7 +116,7 @@ if [ $do1 = no -a $do2 = no -a $do3 = no -a $do4 = no -a \ do7=yes if [ $utf8 -ne 0 ] ; then do8=yes; fi if [ $utf8 -ne 0 -a $ucp -ne 0 ] ; then do9=yes; fi - if [ $link_size -eq 2 ] ; then do10=yes; fi + if [ $link_size -eq 2 ] ; then do10=yes; fi fi # Show which release diff --git a/pcre_exec.c b/pcre_exec.c index 23351bc..6862082 100644 --- a/pcre_exec.c +++ b/pcre_exec.c @@ -189,7 +189,7 @@ obtained from malloc() instead instead of on the stack. Macros are used to achieve this so that the actual code doesn't look very different to what it always used to. -The original heap-recursive code used longjmp(). However, it seems that this +The original heap-recursive code used longjmp(). However, it seems that this can be very slow on some operating systems. Following a suggestion from Stan Switzer, the use of longjmp() has been abolished, at the cost of having to provide a unique number for each call to RMATCH. There is no way of generating @@ -198,8 +198,8 @@ them stand out more clearly. Crude tests on x86 Linux show a small speedup of around 5-8%. However, on FreeBSD, avoiding longjmp() more than halves the time taken to run the standard -tests. Furthermore, not using longjmp() means that local dynamic variables -don't have indeterminate values; this has meant that the frame size can be +tests. Furthermore, not using longjmp() means that local dynamic variables +don't have indeterminate values; this has meant that the frame size can be reduced because the result can be "passed back" by straight setting of the variable instead of being passed in the frame. **************************************************************************** @@ -213,10 +213,10 @@ enum { RM1=1, RM2, RM3, RM4, RM5, RM6, RM7, RM8, RM9, RM10, RM21, RM22, RM23, RM24, RM25, RM26, RM27, RM28, RM29, RM30, RM31, RM32, RM33, RM34, RM35, RM36, RM37, RM38, RM39, RM40, RM41, RM42, RM43, RM44, RM45, RM46, RM47 }; - + /* These versions of the macros use the stack, as normal. There are debugging -versions and production versions. Note that the "rw" argument of RMATCH isn't +versions and production versions. Note that the "rw" argument of RMATCH isn't actuall used in this definition. */ #ifndef NO_RECURSE @@ -344,7 +344,7 @@ typedef struct heapframe { /* Where to jump back to */ int Xwhere; - + } heapframe; #endif @@ -3651,8 +3651,8 @@ for (;;) /* Control never reaches here */ -/* When compiling to use the heap rather than the stack for recursive calls to -match(), the RRETURN() macro jumps here. The number that is saved in +/* When compiling to use the heap rather than the stack for recursive calls to +match(), the RRETURN() macro jumps here. The number that is saved in frame->Xwhere indicates which label we actually want to return to. */ #ifdef NO_RECURSE @@ -3670,7 +3670,7 @@ switch (frame->Xwhere) DPRINTF(("jump error in pcre match: label %d non-existent\n", frame->Xwhere)); return PCRE_ERROR_INTERNAL; } -#undef LBL +#undef LBL #endif /* NO_RECURSE */ } |