summaryrefslogtreecommitdiff
path: root/regcomp.c
diff options
context:
space:
mode:
authorYves Orton <demerphq@gmail.com>2005-03-21 23:29:09 +0100
committerRafael Garcia-Suarez <rgarciasuarez@gmail.com>2005-03-21 21:33:16 +0000
commitcc601c3163078dbee18369839db37a81c9f1d02a (patch)
treed62d2ced4239e667a2b0367b266ae38575053ae9 /regcomp.c
parentefcaa95b05d30c10585967bb358126b84bd75b53 (diff)
downloadperl-cc601c3163078dbee18369839db37a81c9f1d02a.tar.gz
Re: regexp trie fails compile on VMS
Message-ID: <9b18b311050321132917a4b1c7@mail.gmail.com> p4raw-id: //depot/perl@24059
Diffstat (limited to 'regcomp.c')
-rw-r--r--regcomp.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/regcomp.c b/regcomp.c
index 1f9161a4a3..5bfcd70f8a 100644
--- a/regcomp.c
+++ b/regcomp.c
@@ -1160,8 +1160,7 @@ S_make_trie(pTHX_ RExC_state_t *pRExC_state, regnode *startbranch, regnode *firs
*/
trie->states[ state ].trans.base=base;
}
- Renew( trie->trans, tp + 1, reg_trie_trans );
-
+ trie->lasttrans = tp + 1;
}
} else {
/*
@@ -1409,7 +1408,7 @@ S_make_trie(pTHX_ RExC_state_t *pRExC_state, regnode *startbranch, regnode *firs
}
}
}
- Renew( trie->trans, pos + 1, reg_trie_trans);
+ trie->lasttrans = pos + 1;
Renew( trie->states, laststate + 1, reg_trie_state);
DEBUG_TRIE_COMPILE_MORE_r(
PerlIO_printf( Perl_debug_log, " Alloc: %d Orig: %d elements, Final:%d. Savings of %%%5.2f\n",
@@ -1419,6 +1418,8 @@ S_make_trie(pTHX_ RExC_state_t *pRExC_state, regnode *startbranch, regnode *firs
} /* end table compress */
}
+ /* resize the trans array to remove unused space */
+ Renew( trie->trans, trie->lasttrans, reg_trie_trans);
DEBUG_TRIE_COMPILE_r({
U32 state;
@@ -1436,9 +1437,11 @@ S_make_trie(pTHX_ RExC_state_t *pRExC_state, regnode *startbranch, regnode *firs
}
}
PerlIO_printf( Perl_debug_log, "\n-----:-----------------------");
+
for( state = 0 ; state < trie->uniquecharcount ; state++ )
PerlIO_printf( Perl_debug_log, "-----");
PerlIO_printf( Perl_debug_log, "\n");
+
for( state = 1 ; state < trie->laststate ; state++ ) {
U32 base = trie->states[ state ].trans.base;
@@ -1455,14 +1458,16 @@ S_make_trie(pTHX_ RExC_state_t *pRExC_state, regnode *startbranch, regnode *firs
if ( base ) {
U32 ofs = 0;
- while( ( base + ofs - trie->uniquecharcount ) >=0 &&
- trie->trans[ base + ofs - trie->uniquecharcount ].check != state )
+ while( ( base + ofs < trie->uniquecharcount ) ||
+ ( base + ofs - trie->uniquecharcount < trie->lasttrans
+ && trie->trans[ base + ofs - trie->uniquecharcount ].check != state))
ofs++;
PerlIO_printf( Perl_debug_log, "+%02X[ ", ofs);
for ( ofs = 0 ; ofs < trie->uniquecharcount ; ofs++ ) {
- if ( ( base + ofs - trie->uniquecharcount>=0) &&
+ if ( ( base + ofs >= trie->uniquecharcount ) &&
+ ( base + ofs - trie->uniquecharcount < trie->lasttrans ) &&
trie->trans[ base + ofs - trie->uniquecharcount ].check == state )
{
PerlIO_printf( Perl_debug_log, "%04X ",