summaryrefslogtreecommitdiff
path: root/pp_hot.c
diff options
context:
space:
mode:
authorPaul "LeoNerd" Evans <leonerd@leonerd.org.uk>2022-07-26 19:20:50 +0100
committerPaul Evans <leonerd@leonerd.org.uk>2022-08-03 09:52:06 +0100
commit4b0ceb86a69dee7c4031370d54c78b64f3c3ee06 (patch)
treea17304b470edba95ce440f594f9adb788103b18f /pp_hot.c
parentc049a0a1b50a03f5acfccd6cb14c268a8168418b (diff)
downloadperl-4b0ceb86a69dee7c4031370d54c78b64f3c3ee06.tar.gz
assert() in pp_gv and pp_gvsv that the GV really is a GV
Or, in pp_gv it's also allowed to be a reference to a CV
Diffstat (limited to 'pp_hot.c')
-rw-r--r--pp_hot.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/pp_hot.c b/pp_hot.c
index 1c3b7920c3..08ddf9d7f6 100644
--- a/pp_hot.c
+++ b/pp_hot.c
@@ -58,6 +58,7 @@ PP(pp_nextstate)
PP(pp_gvsv)
{
dSP;
+ assert(SvTYPE(cGVOP_gv) == SVt_PVGV);
EXTEND(SP,1);
if (UNLIKELY(PL_op->op_private & OPpLVAL_INTRO))
PUSHs(save_scalar(cGVOP_gv));
@@ -96,6 +97,9 @@ PP(pp_stringify)
PP(pp_gv)
{
dSP;
+ /* cGVOP_gv might be a real GV or might be an RV to a CV */
+ assert(SvTYPE(cGVOP_gv) == SVt_PVGV ||
+ (SvTYPE(cGVOP_gv) <= SVt_PVMG && SvROK(cGVOP_gv) && SvTYPE(SvRV(cGVOP_gv)) == SVt_PVCV));
XPUSHs(MUTABLE_SV(cGVOP_gv));
RETURN;
}