From: Nicholas Clark Date: Fri, 9 Dec 2005 18:46:17 +0000 (+0000) Subject: A more efficient way to loop in ptr_table_clear X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=ab1e7f954de0531c104e9628076d0ac3e768f895;p=p5sagit%2Fp5-mst-13.2.git A more efficient way to loop in ptr_table_clear p4raw-id: //depot/perl@26312 --- diff --git a/sv.c b/sv.c index f367654..d4baffc 100644 --- a/sv.c +++ b/sv.c @@ -9128,31 +9128,24 @@ void Perl_ptr_table_clear(pTHX_ PTR_TBL_t *tbl) { register PTR_TBL_ENT_t **array; - register PTR_TBL_ENT_t *entry; UV riter = 0; - UV max; if (!tbl || !tbl->tbl_items) { return; } array = tbl->tbl_ary; - entry = array[0]; - max = tbl->tbl_max; + riter = tbl->tbl_max; - for (;;) { - if (entry) { + do { + PTR_TBL_ENT_t *entry = array[riter]; + + while (entry) { PTR_TBL_ENT_t *oentry = entry; entry = entry->next; del_pte(oentry); } - if (!entry) { - if (++riter > max) { - break; - } - entry = array[riter]; - } - } + } while (riter--); tbl->tbl_items = 0; }