In pp_study eliminate the variable pos, which duplicates len. ch should be U8,
not I32.
In Perl_screaminstr(), move the declarations of s and x to their point of use,
convert a for loop to a while loop, and avoid incrementing and decrementing s.
found is a boolean.
{
dVAR; dSP; dPOPss;
register unsigned char *s;
- register I32 pos;
register I32 ch;
register I32 *sfirst;
register I32 *snext;
*/
RETPUSHNO;
}
- pos = len;
- Newx(sfirst, 256 + pos, I32);
+ Newx(sfirst, 256 + len, I32);
if (!sfirst)
DIE(aTHX_ "do_study: out of memory");
for (ch = 256; ch; --ch)
*snext++ = -1;
- while (--pos >= 0) {
- register const I32 ch = s[pos];
+ while (len-- > 0) {
+ const U8 ch = s[len];
if (sfirst[ch] >= 0)
- snext[pos] = sfirst[ch];
+ snext[len] = sfirst[ch];
else
- snext[pos] = -1;
- sfirst[ch] = pos;
+ snext[len] = -1;
+ sfirst[ch] = (I32)len;
}
RETPUSHYES;
register const unsigned char *little;
register I32 stop_pos;
register const unsigned char *littleend;
- I32 found = 0;
+ bool found = FALSE;
const MAGIC * mg;
I32 *screamfirst;
I32 *screamnext;
}
big -= previous;
do {
- register const unsigned char *s, *x;
if (pos >= stop_pos) break;
if (big[pos] == first) {
- for (x=big+pos+1,s=little; s < littleend; /**/ ) {
- if (*s++ != *x++) {
- s--;
+ const unsigned char *s = little;
+ const unsigned char *x = big + pos + 1;
+ while (s < littleend) {
+ if (*s != *x++)
break;
- }
+ ++s;
}
if (s == littleend) {
*old_posp = pos;
if (!last) return (char *)(big+pos);
- found = 1;
+ found = TRUE;
}
}
pos = screamnext[pos];