From: Daniel Dragan Date: Tue, 27 May 2014 21:14:20 +0000 (-0400) Subject: refactor pp_tied X-Git-Tag: v5.21.1~233 X-Git-Url: https://perl5.git.perl.org/perl5.git/commitdiff_plain/b3cf48215cfee8e6a067db4592c0d9e4a4759613?ds=sidebyside refactor pp_tied remove some redundant code regarding stack handling -removed: -4/-8 pop on SP +4/+8 push on SP PUTBACK function's machine code size dropped from 0xC5 to 0xBD bytes on VC2003 --- diff --git a/pp_sys.c b/pp_sys.c index b445ee2..41a315d 100644 --- a/pp_sys.c +++ b/pp_sys.c @@ -1005,21 +1005,23 @@ PP(pp_tied) dVAR; dSP; const MAGIC *mg; - SV *sv = POPs; + dTOPss; const char how = (SvTYPE(sv) == SVt_PVHV || SvTYPE(sv) == SVt_PVAV) ? PERL_MAGIC_tied : PERL_MAGIC_tiedscalar; if (isGV_with_GP(sv) && !SvFAKE(sv) && !(sv = MUTABLE_SV(GvIOp(sv)))) - RETPUSHUNDEF; + goto ret_undef; if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y' && - !(sv = defelem_target(sv, NULL))) RETPUSHUNDEF; + !(sv = defelem_target(sv, NULL))) goto ret_undef; if ((mg = SvTIED_mg(sv, how))) { - PUSHs(SvTIED_obj(sv, mg)); - RETURN; + SETs(SvTIED_obj(sv, mg)); + return NORMAL; /* PUTBACK not needed, pp_tied never moves SP */ } - RETPUSHUNDEF; + ret_undef: + SETs(&PL_sv_undef); + return NORMAL; } PP(pp_dbmopen)