X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/41d7c59e80e58de2b82e3759c8de14ee8aedb564..9a375827f28249ed0c6a6c477df0ab4f89df5250:/dump.c diff --git a/dump.c b/dump.c index 0ed7962..33bd527 100644 --- a/dump.c +++ b/dump.c @@ -572,7 +572,10 @@ Perl_dump_packsubs_perl(pTHX_ const HV *stash, bool justperl) for (i = 0; i <= (I32) HvMAX(stash); i++) { const HE *entry; for (entry = HvARRAY(stash)[i]; entry; entry = HeNEXT(entry)) { - const GV * const gv = (const GV *)HeVAL(entry); + GV * gv = (GV *)HeVAL(entry); + if (SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV) + /* unfake a fake GV */ + (void)CvGV(SvRV(gv)); if (SvTYPE(gv) != SVt_PVGV || !GvGP(gv)) continue; if (GvCVu(gv)) @@ -902,7 +905,10 @@ Perl_do_op_dump(pTHX_ I32 level, PerlIO *file, const OP *o) sv_catpv(tmpsv, &PL_op_private_labels[label]); sv_catpv(tmpsv, "="); } - sv_catpv(tmpsv, &PL_op_private_labels[enum_label]); + if (enum_label == -1) + Perl_sv_catpvf(aTHX_ tmpsv, "0x%"UVxf, (UV)val); + else + sv_catpv(tmpsv, &PL_op_private_labels[enum_label]); } else { @@ -2327,11 +2333,11 @@ S_append_gv_name(pTHX_ GV *gv, SV *out) /* return a temporary SV containing a stringified representation of - * the op_aux field of a UNOP_AUX op, associated with CV cv + * the op_aux field of a MULTIDEREF op, associated with CV cv */ SV* -Perl_unop_aux_stringify(pTHX_ const OP *o, CV *cv) +Perl_multideref_stringify(pTHX_ const OP *o, CV *cv) { UNOP_AUX_item *items = cUNOP_AUXo->op_aux; UV actions = items->uv; @@ -2345,7 +2351,7 @@ Perl_unop_aux_stringify(pTHX_ const OP *o, CV *cv) PAD *comppad = PadlistARRAY(padlist)[1]; #endif - PERL_ARGS_ASSERT_UNOP_AUX_STRINGIFY; + PERL_ARGS_ASSERT_MULTIDEREF_STRINGIFY; while (!last) { switch (actions & MDEREF_ACTION_MASK) { @@ -2353,38 +2359,48 @@ Perl_unop_aux_stringify(pTHX_ const OP *o, CV *cv) case MDEREF_reload: actions = (++items)->uv; continue; + NOT_REACHED; /* NOTREACHED */ case MDEREF_HV_padhv_helem: is_hash = TRUE; + /* FALLTHROUGH */ case MDEREF_AV_padav_aelem: derefs = 1; S_append_padvar(aTHX_ (++items)->pad_offset, cv, out, 1, 0, 1); goto do_elem; + NOT_REACHED; /* NOTREACHED */ case MDEREF_HV_gvhv_helem: is_hash = TRUE; + /* FALLTHROUGH */ case MDEREF_AV_gvav_aelem: derefs = 1; sv = ITEM_SV(++items); S_append_gv_name(aTHX_ (GV*)sv, out); goto do_elem; + NOT_REACHED; /* NOTREACHED */ case MDEREF_HV_gvsv_vivify_rv2hv_helem: is_hash = TRUE; + /* FALLTHROUGH */ case MDEREF_AV_gvsv_vivify_rv2av_aelem: sv = ITEM_SV(++items); S_append_gv_name(aTHX_ (GV*)sv, out); goto do_vivify_rv2xv_elem; + NOT_REACHED; /* NOTREACHED */ case MDEREF_HV_padsv_vivify_rv2hv_helem: is_hash = TRUE; + /* FALLTHROUGH */ case MDEREF_AV_padsv_vivify_rv2av_aelem: S_append_padvar(aTHX_ (++items)->pad_offset, cv, out, 1, 0, 1); goto do_vivify_rv2xv_elem; + NOT_REACHED; /* NOTREACHED */ case MDEREF_HV_pop_rv2hv_helem: case MDEREF_HV_vivify_rv2hv_helem: is_hash = TRUE; + /* FALLTHROUGH */ do_vivify_rv2xv_elem: case MDEREF_AV_pop_rv2av_aelem: case MDEREF_AV_vivify_rv2av_aelem: @@ -2498,7 +2514,7 @@ Perl_debop(pTHX_ const OP *o) case OP_MULTIDEREF: PerlIO_printf(Perl_debug_log, "(%-p)", - unop_aux_stringify(o, deb_curcv(cxstack_ix))); + multideref_stringify(o, deb_curcv(cxstack_ix))); break; default: