summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pp.c8
-rw-r--r--pp.h10
2 files changed, 12 insertions, 6 deletions
diff --git a/pp.c b/pp.c
index 63bc8ed091..c3d9d2bfb5 100644
--- a/pp.c
+++ b/pp.c
@@ -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
diff --git a/pp.h b/pp.h
index 1f426e7da0..21d3c9d867 100644
--- a/pp.h
+++ b/pp.h
@@ -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) \