X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pp.h;h=5c2fbc8080e9ea23805e804726b0c7d681a0fc8f;hb=1242dfaee525d4d0ab20ac8ae62b3f0de03fa88e;hp=1dfd66526a93b2113f88b9537aa38a00b465e38e;hpb=fabdb6c0879db76333e970b6c67260c877fc17b3;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pp.h b/pp.h index 1dfd665..5c2fbc8 100644 --- a/pp.h +++ b/pp.h @@ -118,9 +118,9 @@ Pops a long off the stack. */ #define PUTBACK PL_stack_sp = sp -#define RETURN return PUTBACK, NORMAL -#define RETURNOP(o) return PUTBACK, o -#define RETURNX(x) return x, PUTBACK, NORMAL +#define RETURN return (PUTBACK, NORMAL) +#define RETURNOP(o) return (PUTBACK, o) +#define RETURNX(x) return (x, PUTBACK, NORMAL) #define POPs (*sp--) #define POPp (SvPVx(POPs, PL_na)) /* deprecated */ @@ -398,7 +398,6 @@ and C. #define AMGf_unary 8 #define tryAMAGICbinW_var(meth_enum,assign,set) STMT_START { \ - if (PL_amagic_generation) { \ SV* const left = *(sp-1); \ SV* const right = *(sp); \ if ((SvAMAGIC(left)||SvAMAGIC(right))) {\ @@ -410,39 +409,45 @@ and C. 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 tryAMAGICbin_var(meth_enum,assign) \ + tryAMAGICbinW_var(meth_enum,assign,SETsv) +#define tryAMAGICbin(meth,assign) \ + tryAMAGICbin_var(CAT2(meth,_amg),assign) + #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_CALLun_var(sv,meth_enum) amagic_call(sv,&PL_sv_undef, \ + meth_enum,AMGf_noright | AMGf_unary) +#define AMG_CALLun(sv,meth) AMG_CALLun_var(sv,CAT2(meth,_amg)) + #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) { \ +#define tryAMAGICunW_var(meth_enum,set,shift,ret) STMT_START { \ SV* tmpsv; \ SV* arg= sp[shift]; \ if(0) goto am_again; /* shut up unused warning */ \ am_again: \ if ((SvAMAGIC(arg))&&\ - (tmpsv=AMG_CALLun(arg,meth))) {\ + (tmpsv=AMG_CALLun_var(arg,meth_enum))) {\ SPAGAIN; if (shift) sp += shift; \ set(tmpsv); ret; } \ - } \ } STMT_END +#define tryAMAGICunW(meth,set,shift,ret) \ + tryAMAGICunW_var(CAT2(meth,_amg),set,shift,ret) #define FORCE_SETs(sv) STMT_START { sv_setsv(TARG, (sv)); SETTARG; } STMT_END -#define tryAMAGICun(meth) tryAMAGICunW(meth,SETsvUN,0,RETURN) +#define tryAMAGICun_var(meth_enum) tryAMAGICunW_var(meth_enum,SETsvUN,0,RETURN) +#define tryAMAGICun(meth) tryAMAGICun_var(CAT2(meth,_amg)) #define tryAMAGICunSET(meth) tryAMAGICunW(meth,SETs,0,RETURN) #define tryAMAGICunTARGET(meth, shift) \ STMT_START { dSP; sp--; /* get TARGET from below PL_stack_sp */ \