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;
st->total_size += sizeof(REGEXP);
#if (PERL_VERSION < 11)
/* Note the size of the paren offset thing */
op_size(aTHX_ cPMOPx(baseop)->op_pmreplstart, st);
op_size(aTHX_ (OP *)cPMOPx(baseop)->op_pmnext, st);
#endif
- /* This is defined away in perl 5.8.x, but it is in there for
- 5.6.x */
+ /* This is defined away in perl 5.8.x, but it is in there for
+ 5.6.x */
#ifdef PM_GETRE
- if (check_new(st, PM_GETRE((cPMOPx(baseop))))) {
- regex_size(PM_GETRE(cPMOPx(baseop)), st);
- }
+ regex_size(PM_GETRE(cPMOPx(baseop)), st);
#else
- if (check_new(st, cPMOPx(baseop)->op_pmregexp)) {
- regex_size(cPMOPx(baseop)->op_pmregexp, st);
- }
+ regex_size(cPMOPx(baseop)->op_pmregexp, st);
#endif
- TAG;break;
+ TAG;break;
case OPc_SVOP: TAG;
st->total_size += sizeof(struct pmop);
if (check_new(st, cSVOPx(baseop)->op_sv)) {
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);