Attached patch adds handling of children of METHOP and UNOP_AUX ops,
Zefram [Mon, 23 Mar 2015 09:42:14 +0000 (09:42 +0000)]
which I missed out from my earlier patches.

CHANGES
Size.xs

diff --git a/CHANGES b/CHANGES
index 0c6e31a..1360c79 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -5,6 +5,8 @@ Revision history for Perl extension Devel::Size.
     (subroutines are smaller than it assumes)
   * Count the size of padlist names in CVs (for v5.18 and later - earlier TODO)
   * Handle PADNAMELIST/PADNAME introduced in v5.21.7
+    two patches from Zefram:
+  * Add handling of children of METHOP and UNOP_AUX ops [CPAN #102911]
 
 0.79_52 2015-03-20 nicholas
     two patches from Zefram:
diff --git a/Size.xs b/Size.xs
index 655f258..40404e5 100644 (file)
--- 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;