From 8f223c566b00a3ceef6446df9cbd945907a3e5f0 Mon Sep 17 00:00:00 2001 From: David Mitchell Date: Mon, 25 Sep 2023 09:36:12 +0100 Subject: [PATCH] make RC-stack-aware: unwrap pp_undef() Remove the temporary wrapper from pp_undef() --- pp.c | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/pp.c b/pp.c index 43009cea0bbb..bb6373a7abf6 100644 --- a/pp.c +++ b/pp.c @@ -920,31 +920,34 @@ PP_wrapped(pp_chop, 0, 1) RETURN; } -PP_wrapped(pp_undef, - ((!PL_op->op_private || (PL_op->op_private & OPpTARGET_MY)) ? 0 : 1), - 0) + +PP(pp_undef) { - dSP; SV *sv; if (!PL_op->op_private) { - EXTEND(SP, 1); - RETPUSHUNDEF; + rpp_extend(1); + *++PL_stack_sp = &PL_sv_undef; + return NORMAL; } if (PL_op->op_private & OPpTARGET_MY) { SV** const padentry = &PAD_SVl(PL_op->op_targ); sv = *padentry; - EXTEND(SP,1);sp++;PUTBACK; - if ((PL_op->op_private & (OPpLVAL_INTRO|OPpPAD_STATE)) == OPpLVAL_INTRO) { + rpp_xpush_1(sv); + if ((PL_op->op_private & (OPpLVAL_INTRO|OPpPAD_STATE)) + == OPpLVAL_INTRO) + { save_clearsv(padentry); } } else { - sv = TOPs; + sv = *PL_stack_sp; - if (!sv) - { - SETs(&PL_sv_undef); + if (!sv) { + /* sv is NULL when pp_undef is invoked like this: + * *myundef = \&CORE::undef; &myundef(); + */ + *PL_stack_sp = &PL_sv_undef; return NORMAL; } } @@ -1035,10 +1038,9 @@ PP_wrapped(pp_undef, } - if (PL_op->op_private & OPpTARGET_MY) - SETs(sv); - else - SETs(&PL_sv_undef); + if (!(PL_op->op_private & OPpTARGET_MY)) + rpp_replace_1_1(&PL_sv_undef); + return NORMAL; }