diff options
-rw-r--r-- | pp.c | 8 | ||||
-rw-r--r-- | pp.h | 10 |
2 files changed, 12 insertions, 6 deletions
@@ -2093,7 +2093,7 @@ PP(pp_ncmp) PP(pp_slt) { - dSP; tryAMAGICbinSET(slt,0); + dSP; tryAMAGICbinSET_var(slt_amg,0); { dPOPTOPssrl; const int cmp = (IN_LOCALE_RUNTIME @@ -2106,7 +2106,7 @@ PP(pp_slt) PP(pp_sgt) { - dSP; tryAMAGICbinSET(sgt,0); + dSP; tryAMAGICbinSET_var(sgt_amg,0); { dPOPTOPssrl; const int cmp = (IN_LOCALE_RUNTIME @@ -2119,7 +2119,7 @@ PP(pp_sgt) PP(pp_sle) { - dSP; tryAMAGICbinSET(sle,0); + dSP; tryAMAGICbinSET_var(sle_amg,0); { dPOPTOPssrl; const int cmp = (IN_LOCALE_RUNTIME @@ -2132,7 +2132,7 @@ PP(pp_sle) PP(pp_sge) { - dSP; tryAMAGICbinSET(sge,0); + dSP; tryAMAGICbinSET_var(sge_amg,0); { dPOPTOPssrl; const int cmp = (IN_LOCALE_RUNTIME @@ -397,23 +397,29 @@ and C<PUSHu>. #define AMGf_assign 4 #define AMGf_unary 8 -#define tryAMAGICbinW(meth,assign,set) STMT_START { \ +#define tryAMAGICbinW_var(meth_enum,assign,set) STMT_START { \ if (PL_amagic_generation) { \ SV* tmpsv; \ SV* const right= *(sp); SV* const left= *(sp-1);\ if ((SvAMAGIC(left)||SvAMAGIC(right))&&\ (tmpsv=amagic_call(left, \ right, \ - CAT2(meth,_amg), \ + meth_enum, \ (assign)? AMGf_assign: 0))) {\ SPAGAIN; \ (void)POPs; set(tmpsv); RETURN; } \ } \ } STMT_END +#define tryAMAGICbinW(meth,assign,set) \ + tryAMAGICbinW_var(CAT2(meth,_amg),assign,set) + #define tryAMAGICbin(meth,assign) tryAMAGICbinW(meth,assign,SETsv) #define tryAMAGICbinSET(meth,assign) tryAMAGICbinW(meth,assign,SETs) +#define tryAMAGICbinSET_var(meth_enum,assign) \ + tryAMAGICbinW_var(meth_enum,assign,SETs) + #define AMG_CALLun(sv,meth) amagic_call(sv,&PL_sv_undef, \ CAT2(meth,_amg),AMGf_noright | AMGf_unary) #define AMG_CALLbinL(left,right,meth) \ |