Added standard core header to test cases for Digest::SHA
[p5sagit/p5-mst-13.2.git] / pp.h
diff --git a/pp.h b/pp.h
index 1f426e7..7992259 100644 (file)
--- a/pp.h
+++ b/pp.h
@@ -397,30 +397,35 @@ and C<PUSHu>.
 #define AMGf_assign    4
 #define AMGf_unary     8
 
-#define tryAMAGICbinW(meth,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, \
+#define tryAMAGICbinW_var(meth_enum,assign,set) STMT_START { \
+           SV* const left = *(sp-1); \
+           SV* const right = *(sp); \
+           if ((SvAMAGIC(left)||SvAMAGIC(right))) {\
+               SV * const tmpsv = amagic_call(left, \
                                   right, \
-                                  CAT2(meth,_amg), \
-                                  (assign)? AMGf_assign: 0))) {\
-              SPAGAIN; \
-              (void)POPs; set(tmpsv); RETURN; } \
-         } \
+                                  meth_enum, \
+                                  (assign)? AMGf_assign: 0); \
+               if (tmpsv) { \
+                   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) \
             amagic_call(left,right,CAT2(meth,_amg),AMGf_noright)
 
 #define tryAMAGICunW(meth,set,shift,ret) STMT_START { \
-          if (PL_amagic_generation) { \
            SV* tmpsv; \
            SV* arg= sp[shift]; \
           if(0) goto am_again;  /* shut up unused warning */ \
@@ -429,7 +434,6 @@ and C<PUSHu>.
                (tmpsv=AMG_CALLun(arg,meth))) {\
               SPAGAIN; if (shift) sp += shift; \
               set(tmpsv); ret; } \
-         } \
        } STMT_END
 
 #define FORCE_SETs(sv) STMT_START { sv_setsv(TARG, (sv)); SETTARG; } STMT_END