X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=Size.xs;h=ada99cc34d8bf8e6c195c7f2b9f790597b259e0d;hb=a8fa215c7b5b72b98f8e6029907087b0ff176594;hp=655f2580a2d7b178be386babc8cae4585c680911;hpb=1ace51834000d74152041f4088a9dc7385cc955b;p=p5sagit%2FDevel-Size.git diff --git a/Size.xs b/Size.xs index 655f258..ada99cc 100644 --- a/Size.xs +++ b/Size.xs @@ -551,7 +551,9 @@ op_size(pTHX_ const OP * const baseop, struct state *st) #ifdef OA_METHOP case OPc_METHOP: TAG; st->total_size += sizeof(struct methop); - if (baseop->op_type != OP_METHOD) + if (baseop->op_type == OP_METHOD) + op_size(aTHX_ ((UNOP *)baseop)->op_first, st); + else sv_size(aTHX_ st, cMETHOPx_meth(baseop), SOME_RECURSION); #if PERL_VERSION*1000+PERL_SUBVERSION >= 21007 if (baseop->op_type == OP_METHOD_REDIR || baseop->op_type == OP_METHOD_REDIR_SUPER) { @@ -565,6 +567,7 @@ op_size(pTHX_ const OP * const baseop, struct state *st) #ifdef OA_UNOP_AUX case OPc_UNAUXOP: TAG; st->total_size += sizeof(struct unop_aux) + sizeof(UNOP_AUX_item) * (cUNOP_AUXx(baseop)->op_aux[-1].uv+1); + op_size(aTHX_ ((UNOP *)baseop)->op_first, st); if (baseop->op_type == OP_MULTIDEREF) { UNOP_AUX_item *items = cUNOP_AUXx(baseop)->op_aux; UV actions = items->uv; @@ -939,7 +942,8 @@ sv_size(pTHX_ struct state *const st, const SV * const orig_thing, case SVt_PVFM: TAG; - padlist_size(aTHX_ st, CvPADLIST(thing), SOME_RECURSION); + if (PERL_VERSION*1000+PERL_SUBVERSION < 21006 || !CvISXSUB(thing)) + padlist_size(aTHX_ st, CvPADLIST(thing), SOME_RECURSION); sv_size(aTHX_ st, (SV *)CvOUTSIDE(thing), recurse); if (st->go_yell && !st->fm_whine) { @@ -952,15 +956,14 @@ sv_size(pTHX_ struct state *const st, const SV * const orig_thing, sv_size(aTHX_ st, (SV *)CvSTASH(thing), SOME_RECURSION); sv_size(aTHX_ st, (SV *)SvSTASH(thing), SOME_RECURSION); sv_size(aTHX_ st, (SV *)CvGV(thing), SOME_RECURSION); + if (PERL_VERSION*1000+PERL_SUBVERSION < 21006 || !CvISXSUB(thing)) + padlist_size(aTHX_ st, CvPADLIST(thing), SOME_RECURSION); sv_size(aTHX_ st, (SV *)CvOUTSIDE(thing), recurse); if (CvISXSUB(thing)) { sv_size(aTHX_ st, cv_const_sv((CV *)thing), recurse); - } else { - padlist_size(aTHX_ st, CvPADLIST(thing), SOME_RECURSION); - if (CvROOT(thing)) { - op_size(aTHX_ CvSTART(thing), st); - op_size(aTHX_ CvROOT(thing), st); - } + } else if (CvROOT(thing)) { + op_size(aTHX_ CvSTART(thing), st); + op_size(aTHX_ CvROOT(thing), st); } goto freescalar;