X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=op.h;h=2bfdced2738eded75c6d5e21538a70092bf35aff;hb=16ea2a2ed2d9686d5ae4f019e26bf0333aac36a1;hp=33afa0a5282068896fddea5e273a4f7a109a6965;hpb=fd1bc7ebd07df539346875ee9afb9361449a1176;p=p5sagit%2Fp5-mst-13.2.git diff --git a/op.h b/op.h index 33afa0a..2bfdced 100644 --- a/op.h +++ b/op.h @@ -23,7 +23,13 @@ * which may or may not check number of children). */ -typedef U32 PADOFFSET; +#if PTRSIZE == 4 +typedef U32TYPE PADOFFSET; +#else +# if PTRSIZE == 8 +typedef U64TYPE PADOFFSET; +# endif +#endif #define NOT_IN_PAD ((PADOFFSET) -1) #ifdef DEBUGGING_OPS @@ -53,6 +59,8 @@ typedef U32 PADOFFSET; dfl) /* +=head1 "Gimme" Values + =for apidoc Amn|U32|GIMME_V The XSUB-writer's equivalent to Perl's C. Returns C, C or C for void, scalar or list context, @@ -147,6 +155,7 @@ Deprecated. Use C instead. /* OP_ENTERSUB only */ #define OPpENTERSUB_DB 16 /* Debug subroutine. */ #define OPpENTERSUB_HASTARG 32 /* Called from OP tree. */ +#define OPpENTERSUB_NOMOD 64 /* Immune to mod() for :attrlist. */ /* OP_RV2CV only */ #define OPpENTERSUB_AMPER 8 /* Used & form to call. */ #define OPpENTERSUB_NOPAREN 128 /* bare sub call (without parens) */ @@ -166,7 +175,6 @@ Deprecated. Use C instead. #define OPpTARGET_MY 16 /* Target is PADMY. */ /* Private for OP_CONST */ -#define OPpCONST_OCTAL 4 /* Octal constant. */ #define OPpCONST_STRICT 8 /* bearword subject to strict 'subs' */ #define OPpCONST_ENTERED 16 /* Has been entered as symbol. */ #define OPpCONST_ARYBASE 32 /* Was a $[ translated to constant. */ @@ -198,7 +206,8 @@ Deprecated. Use C instead. #define OPpOPEN_OUT_RAW 64 /* binmode(F,":raw") on output fh */ #define OPpOPEN_OUT_CRLF 128 /* binmode(F,":crlf") on output fh */ -/* Private for OP_EXIT */ +/* Private for OP_EXIT, HUSH also for OP_DIE */ +#define OPpHUSH_VMSISH 64 /* hush DCL exit msg vmsish mode*/ #define OPpEXIT_VMSISH 128 /* exit(0) vs. exit(1) vmsish mode*/ struct op { @@ -251,11 +260,15 @@ struct pmop { }; #ifdef USE_ITHREADS -#define PM_GETRE(o) ((REGEXP*)SvIV(PL_regex_pad[(o)->op_pmoffset])) -#define PM_SETRE(o,r) (sv_setiv(PL_regex_pad[(o)->op_pmoffset], (IV)r)) +#define PM_GETRE(o) (INT2PTR(REGEXP*,SvIVX(PL_regex_pad[(o)->op_pmoffset]))) +#define PM_SETRE(o,r) (sv_setiv(PL_regex_pad[(o)->op_pmoffset], PTR2IV(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 */ @@ -456,3 +469,27 @@ struct loop { #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) ? PL_reentrant_buffer->tmbuff : NULL) +#define gmtime(a) (gmtime_r((a),PL_reentrant_buffer->tmbuff) ? PL_reentrant_buffer->tmbuff : NULL) + +#ifdef OLD_PTHREADS_API + +/* HP-UX 10.20 returns 0 on success, what it returns on failure is hidden + in the fog somewhere, possibly -1 which means the following should do + the right thing - 20010816 sky */ + +#undef localtime +#undef gmtime +#define localtime(a) ((localtime_r((a),PL_reentrant_buffer->tmbuff) == 0) ? PL_reentrant_buffer->tmbuff : NULL) +#define gmtime(a) ((gmtime_r((a),PL_reentrant_buffer->tmbuff) == 0) ? PL_reentrant_buffer->tmbuff : NULL) +#endif /* HP-UX 10.20 */ + +#endif +