} STMT_END
#endif /* USE_THREADS */
-#ifdef USE_ITHREADS
- /* junk in @_ spells trouble when cloning CVs, so don't leave any */
-# define CLEAR_ARGARRAY() av_clear(cx->blk_sub.argarray)
-#else
-# define CLEAR_ARGARRAY() NOOP
-#endif /* USE_ITHREADS */
-
+/* junk in @_ spells trouble when cloning CVs and in pp_caller(), so don't
+ * 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 { \
PL_curpad[0] = (SV*)cx->blk_sub.argarray; \
} \
else { \
- CLEAR_ARGARRAY(); \
+ CLEAR_ARGARRAY(cx->blk_sub.argarray); \
} \
} \
sv = (SV*)cx->blk_sub.cv; \