diff options
author | Yves Orton <demerphq@gmail.com> | 2012-03-20 00:52:46 +0100 |
---|---|---|
committer | Yves Orton <demerphq@gmail.com> | 2012-03-20 01:24:03 +0100 |
commit | 0d32a491e92f09c1dd05dec9a1d54d07ca3d167f (patch) | |
tree | 0f2c0ebae59c4a64cfb560fbb3beb4a1ace9ba11 | |
parent | 84ca160f41c0f4e0b5653cd86f0da76d5cca6cbc (diff) | |
download | perl-smoke-me/rt_111842.tar.gz |
correct logic error that meant that "last" might not be updated properlysmoke-me/rt_111842
While checking into an unrelated issue I realized "last" might not
be reset under certain circumstances. Although I could not find a way
to make anything bad happen from perl, I decided to fix it, at worst
we waste a few CPU cycles setting "last" to NULL more often than we
should.
-rw-r--r-- | regcomp.c | 17 |
1 files changed, 10 insertions, 7 deletions
@@ -3366,13 +3366,16 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, /* handle unmergable node - * noper may either be a triable node which can not be tried * together with the current trie, or a non triable node */ - if ( last && trietype != NOTHING ) { - /* if last is set then we have found at least two triable branch - * sequences in a row of a similar trietype so we can turn them - * into a trie */ - make_trie( pRExC_state, - startbranch, first, cur, tail, count, - trietype, depth+1 ); + if ( last ) { + /* If last is set and trietype is not NOTHING then we have found + * at least two triable branch sequences in a row of a similar + * trietype so we can turn them into a trie. If/when we + * allow NOTHING to start a trie sequence this condition will be + * required, and it isn't expensive so we leave it in for now. */ + if ( trietype != NOTHING ) + make_trie( pRExC_state, + startbranch, first, cur, tail, count, + trietype, depth+1 ); last = NULL; /* note: we clear/update first, trietype etc below, so we dont do it here */ } if ( noper_trietype |