X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=op.h;h=5231a4131c012634e0a0aa4ee22ef835f3a721d9;hb=af36542000fc547506d8dc9b952c200b8499830d;hp=2129572a3c8c3a21a998589470f2f4ce259fe67d;hpb=350de78d9c02710bb008e9ca922c78ba251ec366;p=p5sagit%2Fp5-mst-13.2.git diff --git a/op.h b/op.h index 2129572..5231a41 100644 --- a/op.h +++ b/op.h @@ -158,7 +158,8 @@ typedef U32 PADOFFSET; /* Private for OP_DELETE */ #define OPpSLICE 64 /* Operating on a list of keys */ -/* Private for OP_SORT, OP_PRTF, OP_SPRINTF, string cmp'n, and case changers */ +/* Private for OP_SORT, OP_PRTF, OP_SPRINTF, OP_FTTEXT, OP_FTBINARY, */ +/* string comparisons, and case changers. */ #define OPpLOCALE 64 /* Use locale */ /* Private for OP_SORT */ @@ -304,23 +305,28 @@ struct loop { #ifdef USE_ITHREADS -# define cGVOPx(o) ((GV*)PAD_SV(cPADOPx(o)->op_padix)) -# define cGVOP ((GV*)PAD_SV(cPADOP->op_padix)) -# define cGVOPo ((GV*)PAD_SV(cPADOPo->op_padix)) -# define kGVOP ((GV*)PAD_SV(kPADOP->op_padix)) -# define cGVOP_set(v) (PL_curpad[cPADOP->op_padix] = (SV*)(v)) -# define cGVOPo_set(v) (PL_curpad[cPADOPo->op_padix] = (SV*)(v)) -# define kGVOP_set(v) (PL_curpad[kPADOP->op_padix] = (SV*)(v)) +# define cGVOPx_gv(o) ((GV*)PL_curpad[cPADOPx(o)->op_padix]) +# define IS_PADGV(v) (v && SvTYPE(v) == SVt_PVGV && GvIN_PAD(v)) +# define IS_PADCONST(v) (v && SvREADONLY(v)) +# define cSVOPx_sv(v) (cSVOPx(v)->op_sv \ + ? cSVOPx(v)->op_sv : PL_curpad[(v)->op_targ]) +# define cSVOPx_svp(v) (cSVOPx(v)->op_sv \ + ? &cSVOPx(v)->op_sv : &PL_curpad[(v)->op_targ]) #else -# define cGVOPx(o) ((GV*)cSVOPx(o)->op_sv) -# define cGVOP ((GV*)cSVOP->op_sv) -# define cGVOPo ((GV*)cSVOPo->op_sv) -# define kGVOP ((GV*)kSVOP->op_sv) -# define cGVOP_set(v) (cPADOP->op_sv = (SV*)(v)) -# define cGVOPo_set(v) (cPADOPo->op_sv = (SV*)(v)) -# define kGVOP_set(v) (kPADOP->op_sv = (SV*)(v)) +# define cGVOPx_gv(o) ((GV*)cSVOPx(o)->op_sv) +# define IS_PADGV(v) FALSE +# define IS_PADCONST(v) FALSE +# define cSVOPx_sv(v) (cSVOPx(v)->op_sv) +# define cSVOPx_svp(v) (&cSVOPx(v)->op_sv) #endif +#define cGVOP_gv cGVOPx_gv(PL_op) +#define cGVOPo_gv cGVOPx_gv(o) +#define kGVOP_gv cGVOPx_gv(kid) +#define cSVOP_sv cSVOPx_sv(PL_op) +#define cSVOPo_sv cSVOPx_sv(o) +#define kSVOP_sv cSVOPx_sv(kid) + #define Nullop Null(OP*) /* Lowest byte of PL_opargs */