From d2817bd771b5f4a948f1a5395803b7d795453c07 Mon Sep 17 00:00:00 2001 From: "Paul \"LeoNerd\" Evans" Date: Fri, 3 Dec 2021 21:23:00 +0000 Subject: Add builtin::blessed, refaddr and reftype --- pp.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) (limited to 'pp.c') diff --git a/pp.c b/pp.c index 202cac6c1c..79b73e45a1 100644 --- a/pp.c +++ b/pp.c @@ -7253,6 +7253,60 @@ PP(pp_unweaken) RETURN; } +PP(pp_blessed) +{ + dSP; + dTARGET; + SV *arg = POPs; + SV *rv; + + SvGETMAGIC(arg); + + if(SvROK(arg) && SvOBJECT((rv = SvRV(arg)))) { + sv_ref(TARG, rv, TRUE); + SvSETMAGIC(TARG); + } + else + sv_setsv(TARG, &PL_sv_undef); + + PUSHs(TARG); + RETURN; +} + +PP(pp_refaddr) +{ + dSP; + dTARGET; + SV *arg = POPs; + + SvGETMAGIC(arg); + + if(SvROK(arg)) + sv_setuv_mg(TARG, PTR2UV(SvRV(arg))); + else + sv_setsv(TARG, &PL_sv_undef); + + PUSHs(TARG); + RETURN; +} + +PP(pp_reftype) +{ + dSP; + dTARGET; + SV *arg = POPs; + + SvGETMAGIC(arg); + + if(SvROK(arg)) + sv_setpv_mg(TARG, sv_reftype(SvRV(arg), FALSE)); + else + sv_setsv(TARG, &PL_sv_undef); + + PUSHs(TARG); + RETURN; +} + /* * ex: set ts=8 sts=4 sw=4 et: */ -- cgit v1.2.1