From: Gurusamy Sarathy Date: Thu, 8 Jun 2000 14:54:21 +0000 (+0000) Subject: be more optimal about clearing @_ X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=8e09340b6ffe3c6ffbac698cf506650fc1e43293;p=p5sagit%2Fp5-mst-13.2.git be more optimal about clearing @_ p4raw-id: //depot/perl@6216 --- diff --git a/cop.h b/cop.h index adf3863..e0a8127 100644 --- a/cop.h +++ b/cop.h @@ -107,8 +107,13 @@ struct block_sub { #endif /* USE_THREADS */ /* junk in @_ spells trouble when cloning CVs and in pp_caller(), so don't - * leave any */ -#define CLEAR_ARGARRAY() av_clear(cx->blk_sub.argarray) + * leave any (a fast av_clear(ary), basically) */ +#define CLEAR_ARGARRAY(ary) \ + STMT_START { \ + AvMAX(ary) += AvARRAY(ary) - AvALLOC(ary); \ + SvPVX(ary) = (char*)AvALLOC(ary); \ + AvFILLp(ary) = -1; \ + } STMT_END #define POPSUB(cx,sv) \ STMT_START { \ @@ -124,7 +129,7 @@ struct block_sub { PL_curpad[0] = (SV*)cx->blk_sub.argarray; \ } \ else { \ - CLEAR_ARGARRAY(); \ + CLEAR_ARGARRAY(cx->blk_sub.argarray); \ } \ } \ sv = (SV*)cx->blk_sub.cv; \