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
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 */
}
static void
-op_size(pTHX_ const OP * const baseop, struct state *st) {
- TRY_TO_CATCH_SEGV {
- TAG;
- if (check_new(st, baseop->op_next)) {
- op_size(aTHX_ baseop->op_next, st);
- }
- TAG;
- switch (cc_opclass(baseop)) {
- case OPc_BASEOP: TAG;
- st->total_size += sizeof(struct op);
- TAG;break;
- case OPc_UNOP: TAG;
- st->total_size += sizeof(struct unop);
- if (check_new(st, cUNOPx(baseop)->op_first)) {
- op_size(aTHX_ cUNOPx(baseop)->op_first, st);
- }
- TAG;break;
- case OPc_BINOP: TAG;
- st->total_size += sizeof(struct binop);
- if (check_new(st, cBINOPx(baseop)->op_first)) {
- op_size(aTHX_ cBINOPx(baseop)->op_first, st);
- }
- if (check_new(st, cBINOPx(baseop)->op_last)) {
- op_size(aTHX_ cBINOPx(baseop)->op_last, st);
- }
- TAG;break;
- case OPc_LOGOP: TAG;
- st->total_size += sizeof(struct logop);
- if (check_new(st, cLOGOPx(baseop)->op_first)) {
- op_size(aTHX_ cBINOPx(baseop)->op_first, st);
- }
- if (check_new(st, cLOGOPx(baseop)->op_other)) {
- op_size(aTHX_ cLOGOPx(baseop)->op_other, st);
- }
- TAG;break;
- case OPc_LISTOP: TAG;
- st->total_size += sizeof(struct listop);
- if (check_new(st, cLISTOPx(baseop)->op_first)) {
- op_size(aTHX_ cLISTOPx(baseop)->op_first, st);
- }
- if (check_new(st, cLISTOPx(baseop)->op_last)) {
- op_size(aTHX_ cLISTOPx(baseop)->op_last, st);
- }
- TAG;break;
- case OPc_PMOP: TAG;
- st->total_size += sizeof(struct pmop);
- if (check_new(st, cPMOPx(baseop)->op_first)) {
- op_size(aTHX_ cPMOPx(baseop)->op_first, st);
- }
- if (check_new(st, cPMOPx(baseop)->op_last)) {
- op_size(aTHX_ cPMOPx(baseop)->op_last, st);
- }
+op_size(pTHX_ const OP * const baseop, struct state *st)
+{
+ TRY_TO_CATCH_SEGV {
+ TAG;
+ if(!check_new(st, baseop))
+ return;
+ TAG;
+ op_size(aTHX_ baseop->op_next, st);
+ TAG;
+ switch (cc_opclass(baseop)) {
+ case OPc_BASEOP: TAG;
+ st->total_size += sizeof(struct op);
+ TAG;break;
+ case OPc_UNOP: TAG;
+ st->total_size += sizeof(struct unop);
+ op_size(aTHX_ cUNOPx(baseop)->op_first, st);
+ TAG;break;
+ case OPc_BINOP: TAG;
+ st->total_size += sizeof(struct binop);
+ op_size(aTHX_ cBINOPx(baseop)->op_first, st);
+ op_size(aTHX_ cBINOPx(baseop)->op_last, st);
+ TAG;break;
+ case OPc_LOGOP: TAG;
+ st->total_size += sizeof(struct logop);
+ op_size(aTHX_ cBINOPx(baseop)->op_first, st);
+ op_size(aTHX_ cLOGOPx(baseop)->op_other, st);
+ TAG;break;
+ case OPc_LISTOP: TAG;
+ st->total_size += sizeof(struct listop);
+ op_size(aTHX_ cLISTOPx(baseop)->op_first, st);
+ op_size(aTHX_ cLISTOPx(baseop)->op_last, st);
+ TAG;break;
+ case OPc_PMOP: TAG;
+ st->total_size += sizeof(struct pmop);
+ op_size(aTHX_ cPMOPx(baseop)->op_first, st);
+ op_size(aTHX_ cPMOPx(baseop)->op_last, st);
#if PERL_VERSION < 9 || (PERL_VERSION == 9 && PERL_SUBVERSION < 5)
- if (check_new(st, cPMOPx(baseop)->op_pmreplroot)) {
- op_size(aTHX_ cPMOPx(baseop)->op_pmreplroot, st);
- }
- if (check_new(st, cPMOPx(baseop)->op_pmreplstart)) {
- op_size(aTHX_ cPMOPx(baseop)->op_pmreplstart, st);
- }
- if (check_new(st, cPMOPx(baseop)->op_pmnext)) {
- op_size(aTHX_ (OP *)cPMOPx(baseop)->op_pmnext, st);
- }
+ op_size(aTHX_ cPMOPx(baseop)->op_pmreplroot, st);
+ 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)) {
if (check_new(st, cPVOPx(baseop)->op_pv)) {
st->total_size += strlen(cPVOPx(baseop)->op_pv);
}
- case OPc_LOOP: TAG;
- st->total_size += sizeof(struct loop);
- if (check_new(st, cLOOPx(baseop)->op_first)) {
- op_size(aTHX_ cLOOPx(baseop)->op_first, st);
- }
- if (check_new(st, cLOOPx(baseop)->op_last)) {
- op_size(aTHX_ cLOOPx(baseop)->op_last, st);
- }
- if (check_new(st, cLOOPx(baseop)->op_redoop)) {
- op_size(aTHX_ cLOOPx(baseop)->op_redoop, st);
- }
- if (check_new(st, cLOOPx(baseop)->op_nextop)) {
- op_size(aTHX_ cLOOPx(baseop)->op_nextop, st);
- }
- if (check_new(st, cLOOPx(baseop)->op_lastop)) {
- op_size(aTHX_ cLOOPx(baseop)->op_lastop, st);
- }
-
- TAG;break;
- case OPc_COP: TAG;
+ case OPc_LOOP: TAG;
+ st->total_size += sizeof(struct loop);
+ op_size(aTHX_ cLOOPx(baseop)->op_first, st);
+ op_size(aTHX_ cLOOPx(baseop)->op_last, st);
+ op_size(aTHX_ cLOOPx(baseop)->op_redoop, st);
+ op_size(aTHX_ cLOOPx(baseop)->op_nextop, st);
+ op_size(aTHX_ cLOOPx(baseop)->op_lastop, st);
+ TAG;break;
+ case OPc_COP: TAG;
{
COP *basecop;
basecop = (COP *)baseop;
thing_size(aTHX_ sv, st);
}
} else {
- if (check_new(st, CvSTART(thing))) {
- op_size(aTHX_ CvSTART(thing), st);
- }
- if (check_new(st, CvROOT(thing))) {
- op_size(aTHX_ CvROOT(thing), st);
- }
+ op_size(aTHX_ CvSTART(thing), st);
+ op_size(aTHX_ CvROOT(thing), st);
}
TAG;break;
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));
- }
+ if (check_new(st, GvFILE(thing))) {
+ st->total_size += strlen(GvFILE(thing));
}
#endif
/* Is there something hanging off the glob? */