U8 **leaf_p;
U8 *leaf;
unsigned int i;
- void **tv_p;
+ void **tv_p = (void **) (st->tracking);
-
- if (NULL == p || NULL == st) return FALSE;
- tv_p = (void **) (st->tracking);
+ if (NULL == p) return FALSE;
TRY_TO_CATCH_SEGV {
const char c = *(const char *)p;
}
magic_pointer = SvMAGIC(thing);
/* Have we seen the magic pointer? */
- while (magic_pointer && check_new(st, magic_pointer)) {
+ while (check_new(st, magic_pointer)) {
st->total_size += sizeof(MAGIC);
TRY_TO_CATCH_SEGV {
/* Have we seen the magic vtable? */
- if (magic_pointer->mg_virtual &&
- check_new(st, magic_pointer->mg_virtual)) {
+ if (check_new(st, magic_pointer->mg_virtual)) {
st->total_size += sizeof(MGVTBL);
}
}
static void
+check_new_and_strlen(struct state *st, const char *const p) {
+ if(check_new(st, p))
+ st->total_size += strlen(p);
+}
+
+static void
regex_size(const REGEXP * const baseregex, struct state *st) {
if(!check_new(st, baseregex))
return;
TAG;break;
case OPc_PADOP: TAG;
st->total_size += sizeof(struct padop);
- TAG;break;
- case OPc_PVOP: TAG;
- if (check_new(st, cPVOPx(baseop)->op_pv)) {
- st->total_size += strlen(cPVOPx(baseop)->op_pv);
- }
+ TAG;break;
+ case OPc_PVOP: TAG;
+ check_new_and_strlen(st, cPVOPx(baseop)->op_pv);
case OPc_LOOP: TAG;
st->total_size += sizeof(struct loop);
op_size(aTHX_ cLOOPx(baseop)->op_first, st);
before 5.11 @33656, but later than 5.10, producing slightly too
small memory sizes on these Perls. */
#if (PERL_VERSION < 11)
- if (check_new(st, basecop->cop_label)) {
- st->total_size += strlen(basecop->cop_label);
- }
+ check_new_and_strlen(st, basecop->cop_label);
#endif
#ifdef USE_ITHREADS
- if (check_new(st, basecop->cop_file)) {
- st->total_size += strlen(basecop->cop_file);
- }
- if (check_new(st, basecop->cop_stashpv)) {
- st->total_size += strlen(basecop->cop_stashpv);
- }
+ check_new_and_strlen(st, basecop->cop_file);
+ check_new_and_strlen(st, basecop->cop_stashpv);
#else
if (check_new(st, basecop->cop_stash)) {
thing_size(aTHX_ (SV *)basecop->cop_stash, st);
st->total_size += GvNAMELEN(thing);
#ifdef GvFILE
/* Is there a file? */
- if (GvFILE(thing)) {
- if (check_new(st, GvFILE(thing))) {
- st->total_size += strlen(GvFILE(thing));
- }
- }
+ check_new_and_strlen(st, GvFILE(thing));
#endif
/* Is there something hanging off the glob? */
if (GvGP(thing)) {
st->total_size += ((XPVIO *) SvANY(thing))->xpv_cur;
}
/* Some embedded char pointers */
- if (check_new(st, ((XPVIO *) SvANY(thing))->xio_top_name)) {
- st->total_size += strlen(((XPVIO *) SvANY(thing))->xio_top_name);
- }
- if (check_new(st, ((XPVIO *) SvANY(thing))->xio_fmt_name)) {
- st->total_size += strlen(((XPVIO *) SvANY(thing))->xio_fmt_name);
- }
- if (check_new(st, ((XPVIO *) SvANY(thing))->xio_bottom_name)) {
- st->total_size += strlen(((XPVIO *) SvANY(thing))->xio_bottom_name);
- }
+ check_new_and_strlen(st, ((XPVIO *) SvANY(thing))->xio_top_name);
+ check_new_and_strlen(st, ((XPVIO *) SvANY(thing))->xio_fmt_name);
+ check_new_and_strlen(st, ((XPVIO *) SvANY(thing))->xio_bottom_name);
/* Throw the GVs on the list to be walked if they're not-null */
if (((XPVIO *) SvANY(thing))->xio_top_gv) {
thing_size(aTHX_ (SV *)((XPVIO *) SvANY(thing))->xio_top_gv, st);