Skip to content
This repository was archived by the owner on Jun 1, 2023. It is now read-only.

Commit ea5d30c

Browse files
committed
more local scope save/restore -Dlv debugging
also print to which ptr to store and restore to. fix argument order in restore -Dlv. sv_peek used SvRV, which is too strict when debugging, failing on invalid types, which are legal within sv_peek.
1 parent 1c6d98e commit ea5d30c

File tree

2 files changed

+38
-30
lines changed

2 files changed

+38
-30
lines changed

dump.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -548,7 +548,7 @@ Perl_sv_peek(pTHX_ SV *sv)
548548
sv_catpvs(t, "...");
549549
goto finish;
550550
}
551-
sv = SvRV(sv);
551+
sv = sv->sv_u.svu_rv;
552552
goto retry;
553553
}
554554
type = SvTYPE(sv);

scope.c

+37-29
Original file line numberDiff line numberDiff line change
@@ -539,7 +539,7 @@ Perl_save_iv(pTHX_ IV *ivp)
539539
SSPUSHIV(*ivp);
540540
SSPUSHPTR(ivp);
541541
SSPUSHUV(SAVEt_IV);
542-
DEBUG_lv(Perl_deb(aTHX_ "save IV %ld\n", (long)*ivp));
542+
DEBUG_lv(Perl_deb(aTHX_ "save IV %ld at &%p\n", (long)*ivp, ivp));
543543
}
544544

545545
/* Cannot use save_sptr() to store a char* since the SV** cast will
@@ -551,7 +551,7 @@ Perl_save_pptr(pTHX_ char **pptr)
551551
PERL_ARGS_ASSERT_SAVE_PPTR;
552552

553553
save_pushptrptr(*pptr, pptr, SAVEt_PPTR);
554-
DEBUG_lv(Perl_deb(aTHX_ "save PPTR\n"));
554+
DEBUG_lv(Perl_deb(aTHX_ "save PPTR %p at &%p\n", *pptr, pptr));
555555
}
556556

557557
void
@@ -560,7 +560,7 @@ Perl_save_vptr(pTHX_ void *ptr)
560560
PERL_ARGS_ASSERT_SAVE_VPTR;
561561

562562
save_pushptrptr(*(char**)ptr, ptr, SAVEt_VPTR);
563-
DEBUG_lv(Perl_deb(aTHX_ "save VPTR %p\n", *(char**)ptr));
563+
DEBUG_lv(Perl_deb(aTHX_ "save VPTR %p at &%p\n", *(char**)ptr, ptr));
564564
}
565565

566566
void
@@ -569,7 +569,7 @@ Perl_save_sptr(pTHX_ SV **sptr)
569569
PERL_ARGS_ASSERT_SAVE_SPTR;
570570

571571
save_pushptrptr(*sptr, sptr, SAVEt_SPTR);
572-
DEBUG_lv(Perl_deb(aTHX_ "save SPTR %p\n", *sptr));
572+
DEBUG_lv(Perl_deb(aTHX_ "save SPTR %p at &%p\n", *sptr, sptr));
573573
}
574574

575575
void
@@ -593,7 +593,7 @@ Perl_save_hptr(pTHX_ HV **hptr)
593593
PERL_ARGS_ASSERT_SAVE_HPTR;
594594

595595
save_pushptrptr(*hptr, hptr, SAVEt_HPTR);
596-
DEBUG_lv(Perl_deb(aTHX_ "save HPTR\n"));
596+
DEBUG_lv(Perl_deb(aTHX_ "save HPTR %p\n", *hptr));
597597
}
598598

599599
void
@@ -602,7 +602,7 @@ Perl_save_aptr(pTHX_ AV **aptr)
602602
PERL_ARGS_ASSERT_SAVE_APTR;
603603

604604
save_pushptrptr(*aptr, aptr, SAVEt_APTR);
605-
DEBUG_lv(Perl_deb(aTHX_ "save APTR\n"));
605+
DEBUG_lv(Perl_deb(aTHX_ "save APTR %p\n", *aptr));
606606
}
607607

608608
void
@@ -1006,17 +1006,17 @@ Perl_leave_scope(pTHX_ I32 base)
10061006

10071007
case SAVEt_GVSV: /* scalar slot in GV */
10081008
a0 = ap[0]; a1 = ap[1];
1009+
DEBUG_lv(Perl_deb(aTHX_ "restore GVSV %p = %p %s %s\n",
1010+
*a0.any_svp, GvSV(a0.any_gv),
1011+
SvPEEK(*a0.any_svp), SvPEEK(GvSV(a0.any_gv))));
10091012
a0.any_svp = &GvSV(a0.any_gv);
1010-
DEBUG_lv(Perl_deb(aTHX_ "restore GVSV %p %p %s %s\n",
1011-
a1.any_sv, *a0.any_svp,
1012-
SvPEEK(a1.any_sv), SvPEEK(*a0.any_svp)));
10131013
goto restore_svp;
10141014

10151015
case SAVEt_GENERIC_SVREF: /* generic sv */
10161016
a0 = ap[0]; a1 = ap[1];
1017-
DEBUG_lv(Perl_deb(aTHX_ "restore GENERIC_SVREF %p %p %s %s\n",
1018-
a1.any_sv, *a0.any_svp,
1019-
SvPEEK(a1.any_sv), SvPEEK(*a0.any_svp)));
1017+
DEBUG_lv(Perl_deb(aTHX_ "restore GENERIC_SVREF %p = %p %s %s\n",
1018+
*a0.any_svp, a1.any_sv,
1019+
SvPEEK(*a0.any_svp), SvPEEK(a1.any_sv)));
10201020
restore_svp:
10211021
{
10221022
/* do *a0.any_svp = a1 */
@@ -1033,7 +1033,7 @@ Perl_leave_scope(pTHX_ I32 base)
10331033
a0 = ap[0]; a1 = ap[1]; a2 = ap[2];
10341034
hv = GvSTASH(a0.any_gv);
10351035
DEBUG_lv(Perl_deb(aTHX_ "restore GVSLOT %p %p %p\n",
1036-
a2.any_sv, *a1.any_svp, a0.any_gv));
1036+
a0.any_gv, *a1.any_svp, a2.any_sv));
10371037
if (hv && HvENAME(hv) && (
10381038
(a2.any_sv && SvTYPE(a2.any_sv) == SVt_PVCV)
10391039
|| (*a1.any_svp && SvTYPE(*a1.any_svp) == SVt_PVCV)
@@ -1052,7 +1052,7 @@ Perl_leave_scope(pTHX_ I32 base)
10521052

10531053
case SAVEt_AV: /* array reference */
10541054
a0 = ap[0]; a1 = ap[1];
1055-
DEBUG_lv(Perl_deb(aTHX_ "restore AV %p %p\n", a1.any_av, a0.any_gv));
1055+
DEBUG_lv(Perl_deb(aTHX_ "restore AV %p = %p\n", GvAV(a0.any_gv), a1.any_gv));
10561056
SvREFCNT_dec(GvAV(a0.any_gv));
10571057
GvAV(a0.any_gv) = a1.any_av;
10581058
avhv_common:
@@ -1072,28 +1072,31 @@ Perl_leave_scope(pTHX_ I32 base)
10721072

10731073
case SAVEt_HV: /* hash reference */
10741074
a0 = ap[0]; a1 = ap[1];
1075-
DEBUG_lv(Perl_deb(aTHX_ "restore HV %p %p %s %s\n",
1076-
a1.any_hv, a0.any_gv,
1077-
SvPEEK(a1.any_hv), SvPEEK(GvHV(a0.any_gv))));
1075+
DEBUG_lv(Perl_deb(aTHX_ "restore HV %p = %p: %s = %s\n",
1076+
a0.any_hv, a1.any_gv,
1077+
SvPEEK(GvHV(a0.any_gv)), SvPEEK(a1.any_hv)));
10781078
SvREFCNT_dec(GvHV(a0.any_gv));
10791079
GvHV(a0.any_gv) = a1.any_hv;
10801080
goto avhv_common;
10811081

10821082
case SAVEt_INT_SMALL:
10831083
a0 = ap[0];
1084-
DEBUG_lv(Perl_deb(aTHX_ "restore INT_SMALL %d\n", (int)(uv>>SAVE_TIGHT_SHIFT)));
1084+
DEBUG_lv(Perl_deb(aTHX_ "restore INT_SMALL %p = %d\n", a0.any_ptr,
1085+
(int)(uv>>SAVE_TIGHT_SHIFT)));
10851086
*(int*)a0.any_ptr = (int)(uv >> SAVE_TIGHT_SHIFT);
10861087
break;
10871088

10881089
case SAVEt_INT: /* int reference */
10891090
a0 = ap[0]; a1 = ap[1];
1090-
DEBUG_lv(Perl_deb(aTHX_ "restore INT %d\n", (int)a0.any_i32));
1091+
DEBUG_lv(Perl_deb(aTHX_ "restore INT %p = %d\n", a1.any_ptr,
1092+
(int)a0.any_i32));
10911093
*(int*)a1.any_ptr = (int)a0.any_i32;
10921094
break;
10931095

10941096
case SAVEt_STRLEN: /* STRLEN/size_t ref */
10951097
a0 = ap[0]; a1 = ap[1];
1096-
DEBUG_lv(Perl_deb(aTHX_ "restore STRLEN %ld\n", (long)a0.any_iv));
1098+
DEBUG_lv(Perl_deb(aTHX_ "restore STRLEN %p = %ld\n", a1.any_ptr,
1099+
(long)a0.any_iv));
10971100
*(STRLEN*)a1.any_ptr = (STRLEN)a0.any_iv;
10981101
break;
10991102

@@ -1106,7 +1109,8 @@ Perl_leave_scope(pTHX_ I32 base)
11061109

11071110
case SAVEt_BOOL: /* bool reference */
11081111
a0 = ap[0];
1109-
DEBUG_lv(Perl_deb(aTHX_ "restore BOOL %d\n", (int)(uv>>8)));
1112+
DEBUG_lv(Perl_deb(aTHX_ "restore BOOL %p = %d\n",
1113+
a0.any_ptr, (int)(uv>>8)));
11101114
*(bool*)a0.any_ptr = cBOOL(uv >> 8);
11111115
#ifdef NO_TAINT_SUPPORT
11121116
PERL_UNUSED_VAR(was);
@@ -1124,14 +1128,14 @@ Perl_leave_scope(pTHX_ I32 base)
11241128

11251129
case SAVEt_I32_SMALL:
11261130
a0 = ap[0];
1127-
DEBUG_lv(Perl_deb(aTHX_ "restore I32_SMALL %d %d\n",
1131+
DEBUG_lv(Perl_deb(aTHX_ "restore I32_SMALL %d = %d\n",
11281132
(int)*(I32*)a0.any_ptr, (int)(uv >> SAVE_TIGHT_SHIFT)));
11291133
*(I32*)a0.any_ptr = (I32)(uv >> SAVE_TIGHT_SHIFT);
11301134
break;
11311135

11321136
case SAVEt_I32: /* I32 reference */
11331137
a0 = ap[0]; a1 = ap[1];
1134-
DEBUG_lv(Perl_deb(aTHX_ "restore I32 %d %d\n",
1138+
DEBUG_lv(Perl_deb(aTHX_ "restore I32 %d = %d\n",
11351139
(int)*(I32*)a1.any_ptr, (int)a0.any_i32));
11361140
#ifdef PERL_DEBUG_READONLY_OPS
11371141
if (*(I32*)a1.any_ptr != a0.any_i32)
@@ -1141,29 +1145,33 @@ Perl_leave_scope(pTHX_ I32 base)
11411145

11421146
case SAVEt_SPTR: /* SV* reference */
11431147
a0 = ap[0]; a1 = ap[1];
1144-
DEBUG_lv(Perl_deb(aTHX_ "restore SPTR %p %p\n",
1148+
DEBUG_lv(Perl_deb(aTHX_ "restore SPTR %p = %p\n",
11451149
*a1.any_svp, a0.any_sv));
1146-
*a1.any_svp= a0.any_sv;
1150+
#if 0
1151+
DEBUG_lv(Perl_deb(aTHX_ " (%s = %s)\n",
1152+
SvPEEK(*a1.any_svp), SvPEEK(a0.any_sv)));
1153+
#endif
1154+
*a1.any_svp = a0.any_sv;
11471155
break;
11481156

11491157
case SAVEt_VPTR: /* random* reference */
11501158
case SAVEt_PPTR: /* char* reference */
11511159
a0 = ap[0]; a1 = ap[1];
1152-
DEBUG_lv(Perl_deb(aTHX_ "restore %sPTR %p %p\n",
1160+
DEBUG_lv(Perl_deb(aTHX_ "restore %sPTR %p = %p\n",
11531161
type == SAVEt_VPTR ? "V" : "P",
11541162
*a1.any_pvp, a0.any_pv));
11551163
*a1.any_pvp = a0.any_pv;
11561164
break;
11571165

11581166
case SAVEt_HPTR: /* HV* reference */
11591167
a0 = ap[0]; a1 = ap[1];
1160-
DEBUG_lv(Perl_deb(aTHX_ "restore HPTR %p %p\n", *a1.any_svp, a0.any_hv));
1168+
DEBUG_lv(Perl_deb(aTHX_ "restore HPTR %p = %p\n", *a1.any_svp, a0.any_hv));
11611169
*(HV**)a1.any_ptr = a0.any_hv;
11621170
break;
11631171

11641172
case SAVEt_APTR: /* AV* reference */
11651173
a0 = ap[0]; a1 = ap[1];
1166-
DEBUG_lv(Perl_deb(aTHX_ "restore APTR %p %p\n", *a1.any_svp, a0.any_av));
1174+
DEBUG_lv(Perl_deb(aTHX_ "restore APTR %p = %p\n", *a1.any_svp, a0.any_av));
11671175
*(AV**)a1.any_ptr = a0.any_av;
11681176
break;
11691177

@@ -1175,7 +1183,7 @@ Perl_leave_scope(pTHX_ I32 base)
11751183
a0 = ap[0]; a1 = ap[1];
11761184
/* possibly taking a method out of circulation */
11771185
had_method = !!GvCVu(a0.any_gv);
1178-
DEBUG_lv(Perl_deb(aTHX_ "restore GP %p %p\n", a1.any_ptr, a0.any_gv));
1186+
DEBUG_lv(Perl_deb(aTHX_ "restore GP %p = %p\n", a1.any_ptr, a0.any_gv));
11791187
gp_free(a0.any_gv);
11801188
GvGP_set(a0.any_gv, (GP*)a1.any_ptr);
11811189
if ((hv=GvSTASH(a0.any_gv)) && HvENAME_get(hv)) {

0 commit comments

Comments
 (0)