X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=op.h;h=e92b1d8db4b99bae7faed270d26150ccdee4f55b;hb=68de02dd13dd306ab38a3120f53d4d0e47862ec5;hp=f3bc51593ad17c70e4afed20b296d61c421d38f5;hpb=ff335f7ac770cb076e8f41ea8bbfcf1e4984181d;p=p5sagit%2Fp5-mst-13.2.git diff --git a/op.h b/op.h index f3bc515..e92b1d8 100644 --- a/op.h +++ b/op.h @@ -184,10 +184,6 @@ Deprecated. Use C instead. /* Private for OP_EXISTS */ #define OPpEXISTS_SUB 64 /* Checking for &sub, not {} or []. */ -/* 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 */ #define OPpSORT_NUMERIC 1 /* Optimized away { $a <=> $b } */ #define OPpSORT_INTEGER 2 /* Ditto while under "use integer" */ @@ -238,7 +234,11 @@ struct pmop { OP * op_pmreplroot; OP * op_pmreplstart; PMOP * op_pmnext; /* list of all scanpats */ - REGEXP * op_pmregexp; /* compiled expression */ +#ifdef USE_ITHREADS + IV op_pmoffset; +#else + REGEXP * op_pmregexp; /* compiled expression */ +#endif U16 op_pmflags; U16 op_pmpermflags; U8 op_pmdynflags; @@ -249,6 +249,18 @@ struct pmop { #endif }; +#ifdef USE_ITHREADS +#define PM_GETRE(o) ((REGEXP*)SvIVX(PL_regex_pad[(o)->op_pmoffset])) +#define PM_SETRE(o,r) (sv_setiv(PL_regex_pad[(o)->op_pmoffset], (IV)r)) +#define PM_GETRE_SAFE(o) (PL_regex_pad ? PM_GETRE(o) : (REGEXP*)0) +#define PM_SETRE_SAFE(o,r) if (PL_regex_pad) PM_SETRE(o,r) +#else +#define PM_GETRE(o) ((o)->op_pmregexp) +#define PM_SETRE(o,r) ((o)->op_pmregexp = (r)) +#define PM_GETRE_SAFE PM_GETRE +#define PM_SETRE_SAFE PM_SETRE +#endif + #define PMdf_USED 0x01 /* pm has been used once already */ #define PMdf_TAINTED 0x02 /* pm compiled from tainted pattern */ #define PMdf_UTF8 0x04 /* pm compiled from utf8 data */ @@ -384,7 +396,7 @@ struct loop { #define Nullop Null(OP*) -/* Lowest byte of PL_opargs */ +/* Lowest byte-and-a-bit of PL_opargs */ #define OA_MARK 1 #define OA_FOLDCONST 2 #define OA_RETSCALAR 4 @@ -432,20 +444,27 @@ struct loop { # define OP_REFCNT_LOCK MUTEX_LOCK(&PL_op_mutex) # define OP_REFCNT_UNLOCK MUTEX_UNLOCK(&PL_op_mutex) # define OP_REFCNT_TERM MUTEX_DESTROY(&PL_op_mutex) -# define OpREFCNT_set(o,n) ((o)->op_targ = (n)) -# define OpREFCNT_inc(o) ((o) ? (++(o)->op_targ, (o)) : Nullop) -# define OpREFCNT_dec(o) (--(o)->op_targ) #else # define OP_REFCNT_INIT NOOP # define OP_REFCNT_LOCK NOOP # define OP_REFCNT_UNLOCK NOOP # define OP_REFCNT_TERM NOOP -# define OpREFCNT_set(o,n) NOOP -# define OpREFCNT_inc(o) (o) -# define OpREFCNT_dec(o) 0 #endif +#define OpREFCNT_set(o,n) ((o)->op_targ = (n)) +#define OpREFCNT_inc(o) ((o) ? (++(o)->op_targ, (o)) : Nullop) +#define OpREFCNT_dec(o) (--(o)->op_targ) + /* flags used by Perl_load_module() */ #define PERL_LOADMOD_DENY 0x1 #define PERL_LOADMOD_NOIMPORT 0x2 #define PERL_LOADMOD_IMPORT_OPS 0x4 + +#ifdef USE_REENTRANT_API +typedef struct { + struct tm* tmbuff; +} REBUF; +#define localtime(a) localtime_r(a,PL_reentrant_buffer->tmbuff) +#define gmtime(a) gmtime_r(a,PL_reentrant_buffer->tmbuff) +#endif +