X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl.h;h=53a22911b0aa6d91b44266528ff89118ecb09397;hb=33b5f13c2468a991d2b495f02a62b59163be82af;hp=f303cfb152840c3e538c04072c942807d5e3b7c3;hpb=97aff369fa5580e7a888d4fa4c86be74ab000409;p=p5sagit%2Fp5-mst-13.2.git diff --git a/perl.h b/perl.h index f303cfb..53a2291 100644 --- a/perl.h +++ b/perl.h @@ -1,7 +1,7 @@ /* perl.h * * Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, - * 2000, 2001, 2002, 2003, 2004, 2005 by Larry Wall and others + * 2000, 2001, 2002, 2003, 2004, 2005, 2006, by Larry Wall and others * * You may distribute under the terms of either the GNU General Public * License or the Artistic License, as specified in the README file. @@ -137,7 +137,7 @@ # endif #endif -#define pVAR register struct perl_vars* my_vars PERL_UNUSED_DECL +#define pVAR register struct perl_vars* const my_vars PERL_UNUSED_DECL #ifdef PERL_GLOBAL_STRUCT # define dVAR pVAR = (struct perl_vars*)PERL_GET_VARS() @@ -211,7 +211,7 @@ #endif #ifndef PERL_UNUSED_DECL -# ifdef HASATTRIBUTE_UNUSED +# if defined(HASATTRIBUTE_UNUSED) && !defined(__cplusplus) # define PERL_UNUSED_DECL __attribute__unused__ # else # define PERL_UNUSED_DECL @@ -234,6 +234,12 @@ # define PERL_UNUSED_VAR(x) ((void)x) #endif +#ifdef USE_ITHREADS +# define PERL_UNUSED_CONTEXT PERL_UNUSED_ARG(my_perl) +#else +# define PERL_UNUSED_CONTEXT +#endif + #define NOOP (void)0 #define dNOOP extern int Perl___notused PERL_UNUSED_DECL @@ -362,16 +368,6 @@ register struct op *Perl_op asm(stringify(OP_IN_REGISTER)); #define WITH_THX(s) STMT_START { dTHX; s; } STMT_END #define WITH_THR(s) WITH_THX(s) -/* - * SOFT_CAST can be used for args to prototyped functions to retain some - * type checking; it only casts if the compiler does not know prototypes. - */ -#if defined(CAN_PROTOTYPE) && defined(DEBUGGING_COMPILE) -#define SOFT_CAST(type) -#else -#define SOFT_CAST(type) (type) -#endif - #ifndef BYTEORDER /* Should never happen -- byteorder is in config.h */ # define BYTEORDER 0x1234 #endif @@ -422,7 +418,7 @@ register struct op *Perl_op asm(stringify(OP_IN_REGISTER)); #define TAINT_NOT (PL_tainted = FALSE) #define TAINT_IF(c) if (c) { PL_tainted = TRUE; } #define TAINT_ENV() if (PL_tainting) { taint_env(); } -#define TAINT_PROPER(s) if (PL_tainting) { taint_proper(Nullch, s); } +#define TAINT_PROPER(s) if (PL_tainting) { taint_proper(NULL, s); } /* XXX All process group stuff is handled in pp_sys.c. Should these defines move there? If so, I could simplify this a lot. --AD 9/96. @@ -822,7 +818,9 @@ int usleep(unsigned int); /* We no longer default to creating a new SV for GvSV. Do this before embed. */ #ifndef PERL_CREATE_GVSV -#define PERL_DONT_CREATE_GVSV +# ifndef PERL_DONT_CREATE_GVSV +# define PERL_DONT_CREATE_GVSV +# endif #endif #if !defined(HAS_WAITPID) && !defined(HAS_WAIT4) || defined(HAS_WAITPID_RUNTIME) @@ -838,6 +836,10 @@ int usleep(unsigned int); */ #if !defined(PERL_FOR_X2P) && !(defined(WIN32)||defined(VMS)) # include "embed.h" +# ifndef PERL_MAD +# undef op_getmad +# define op_getmad(arg,pegop,slot) /**/ +# endif #endif #define MEM_SIZE Size_t @@ -2143,6 +2145,11 @@ struct RExC_state_t; typedef MEM_SIZE STRLEN; +#ifdef PERL_MAD +typedef struct token TOKEN; +typedef struct madprop MADPROP; +typedef struct nexttoken NEXTTOKE; +#endif typedef struct op OP; typedef struct cop COP; typedef struct unop UNOP; @@ -2318,6 +2325,10 @@ typedef struct clone_params CLONE_PARAMS; #if defined(VMS) # include "vmsish.h" # include "embed.h" +# ifndef PERL_MAD +# undef op_getmad +# define op_getmad(arg,pegop,slot) /**/ +# endif # define ISHISH "vms" #endif @@ -2348,6 +2359,10 @@ typedef struct clone_params CLONE_PARAMS; #ifdef __SYMBIAN32__ # include "symbian/symbianish.h" # include "embed.h" +# ifndef PERL_MAD +# undef op_getmad +# define op_getmad(arg,pegop,slot) /**/ +# endif # define ISHISH "symbian" #endif @@ -2500,7 +2515,7 @@ typedef struct clone_params CLONE_PARAMS; * have HASATTRIBUTE_FORMAT). */ -#if defined __GNUC__ +#if defined __GNUC__ && !defined(__INTEL_COMPILER) # if __GNUC__ >= 3 /* 3.0 -> */ /* XXX Verify this version */ # define HASATTRIBUTE_FORMAT # endif @@ -2956,9 +2971,20 @@ typedef pthread_key_t perl_key; appropriate to call return. In either case, include the lint directive. */ #ifdef HASATTRIBUTE_NORETURN -# define NORETURN_FUNCTION_END /* NOT REACHED */ +# define NORETURN_FUNCTION_END /* NOTREACHED */ +#else +# define NORETURN_FUNCTION_END /* NOTREACHED */ return 0 +#endif + +#ifdef HAS_BUILTIN_EXPECT +# define EXPECT(expr,val) __builtin_expect(expr,val) #else -# define NORETURN_FUNCTION_END /* NOT REACHED */ return 0 +# define EXPECT(expr,val) (expr) +#endif +#define LIKELY(cond) EXPECT(cond,1) +#define UNLIKELY(cond) EXPECT(cond,0) +#ifdef HAS_BUILTIN_CHOOSE_EXPR +/* placeholder */ #endif /* Some unistd.h's give a prototype for pause() even though @@ -2977,8 +3003,8 @@ typedef pthread_key_t perl_key; # define IOCPARM_LEN(x) (((x) >> 16) & IOCPARM_MASK) # else # if defined(_IOC_SIZE) && defined(__GLIBC__) - /* on Linux systems we're safe */ -# define IOCPARM_LEN(x) _IOC_SIZE(x) + /* on Linux systems we're safe; except when we're not [perl #38223] */ +# define IOCPARM_LEN(x) (_IOC_SIZE(x) < 256 ? 256 : _IOC_SIZE(x)) # else /* otherwise guess at what's safe */ # define IOCPARM_LEN(x) 256 @@ -3053,6 +3079,23 @@ typedef struct crypt_data { /* straight from /usr/include/crypt.h */ # define USE_HASH_SEED #endif +/* Win32 defines a type 'WORD' in windef.h. This conflicts with the enumerator + * 'WORD' defined in perly.h. The yytokentype enum is only a debugging aid, so + * it's not really needed. + */ +#if defined(WIN32) +# define YYTOKENTYPE +#endif +#include "perly.h" + +#ifdef PERL_MAD +struct nexttoken { + YYSTYPE next_val; /* value of next token, if any */ + I32 next_type; /* type of next token */ + MADPROP *next_mad; /* everything else about that token */ +}; +#endif + #include "regexp.h" #include "sv.h" #include "util.h" @@ -3490,7 +3533,6 @@ Gid_t getegid (void); #define PERL_MAGIC_substr 'x' /* substr() lvalue */ #define PERL_MAGIC_defelem 'y' /* Shadow "foreach" iterator variable / smart parameter vivification */ -#define PERL_MAGIC_glob '*' /* GV (typeglob) */ #define PERL_MAGIC_arylen '#' /* Array length ($#ary) */ #define PERL_MAGIC_pos '.' /* pos() lvalue */ #define PERL_MAGIC_backref '<' /* for weak ref data */ @@ -3505,7 +3547,6 @@ Gid_t getegid (void); ((what) ? ((void) 0) : \ (Perl_croak_nocontext("Assertion %s failed: file \"" __FILE__ \ "\", line %d", STRINGIFY(what), __LINE__), \ - PerlProc_exit(1), \ (void) 0))) #endif @@ -3657,7 +3698,7 @@ char *getlogin (void); /* Also rename() is affected by this */ #ifdef UNLINK_ALL_VERSIONS /* Currently only makes sense for VMS */ #define UNLINK unlnk -I32 unlnk (const char*); +I32 unlnk (pTHX_ const char*); #else #define UNLINK PerlLIO_unlink #endif @@ -3728,15 +3769,15 @@ typedef Sighandler_t Sigsave_t; #endif #if defined(PERL_IMPLICIT_CONTEXT) + +struct perl_memory_debug_header; struct perl_memory_debug_header { tTHX interpreter; # ifdef PERL_POISON MEM_SIZE size; - U8 in_use; # endif - -#define PERL_POISON_INUSE 29 -#define PERL_POISON_FREE 159 + struct perl_memory_debug_header *prev; + struct perl_memory_debug_header *next; }; # define sTHX (sizeof(struct perl_memory_debug_header) + \ @@ -3745,6 +3786,16 @@ struct perl_memory_debug_header { #endif +#ifdef PERL_TRACK_MEMPOOL +# define INIT_TRACK_MEMPOOL(header, interp) \ + STMT_START { \ + (header).interpreter = (interp); \ + (header).prev = (header).next = &(header); \ + } STMT_END +# else +# define INIT_TRACK_MEMPOOL(header, interp) +#endif + typedef int (CPERLscope(*runops_proc_t)) (pTHX); typedef void (CPERLscope(*share_proc_t)) (pTHX_ SV *sv); @@ -4063,15 +4114,6 @@ END_EXTERN_C #endif #endif -/* Win32 defines a type 'WORD' in windef.h. This conflicts with the enumerator - * 'WORD' defined in perly.h. The yytokentype enum is only a debugging aid, so - * it's not really needed. - */ -#if defined(WIN32) -# define YYTOKENTYPE -#endif -#include "perly.h" - #define LEX_NOTPARSING 11 /* borrowed from toke.c */ typedef enum { @@ -4304,6 +4346,12 @@ struct tempsym; /* defined in pp_pack.c */ #if !defined(PERL_FOR_X2P) # include "embedvar.h" #endif +#ifndef PERL_MAD +# undef PL_madskills +# undef PL_xmlfp +# define PL_madskills 0 +# define PL_xmlfp 0 +#endif /* Now include all the 'global' variables * If we don't have threads or multiple interpreters @@ -4326,6 +4374,10 @@ END_EXTERN_C #if defined(WIN32) /* Now all the config stuff is setup we can include embed.h */ # include "embed.h" +# ifndef PERL_MAD +# undef op_getmad +# define op_getmad(arg,pegop,slot) /**/ +# endif #endif #ifndef PERL_GLOBAL_STRUCT @@ -4344,11 +4396,13 @@ END_EXTERN_C START_EXTERN_C #ifdef DOINIT -# define MGVTBL_SET(var,a,b,c,d,e,f,g) EXTCONST MGVTBL var = {a,b,c,d,e,f,g} -# define MGVTBL_SET_CONST_MAGIC_GET(var,a,b,c,d,e,f,g) EXTCONST MGVTBL var = {(int (*)(pTHX_ SV *, MAGIC *))a,b,c,d,e,f,g} /* Like MGVTBL_SET but with the get magic having a const MG* */ +# define MGVTBL_SET(var,a,b,c,d,e,f,g,h) EXT MGVTBL var = {a,b,c,d,e,f,g,h} +/* Like MGVTBL_SET but with the get magic having a const MG* */ +# define MGVTBL_SET_CONST_MAGIC_GET(var,a,b,c,d,e,f,g,h) EXT MGVTBL var \ + = {(int (*)(pTHX_ SV *, MAGIC *))a,b,c,d,e,f,g,h} #else -# define MGVTBL_SET(var,a,b,c,d,e,f,g) EXTCONST MGVTBL var -# define MGVTBL_SET_CONST_MAGIC_GET(var,a,b,c,d,e,f,g) EXTCONST MGVTBL var +# define MGVTBL_SET(var,a,b,c,d,e,f,g,h) EXT MGVTBL var +# define MGVTBL_SET_CONST_MAGIC_GET(var,a,b,c,d,e,f,g,h) EXT MGVTBL var #endif MGVTBL_SET( @@ -4359,6 +4413,7 @@ MGVTBL_SET( NULL, NULL, NULL, + NULL, NULL ); @@ -4370,6 +4425,7 @@ MGVTBL_SET( MEMBER_TO_FPTR(Perl_magic_clear_all_env), NULL, NULL, + NULL, NULL ); @@ -4381,6 +4437,7 @@ MGVTBL_SET( MEMBER_TO_FPTR(Perl_magic_clearenv), NULL, NULL, + NULL, NULL ); @@ -4392,13 +4449,21 @@ MGVTBL_SET( NULL, NULL, NULL, + NULL, NULL ); #ifdef PERL_MICRO MGVTBL_SET( PL_vtbl_sigelem, - NULL, NULL, NULL, NULL, NULL, NULL, NULL + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL ); #else @@ -4410,6 +4475,7 @@ MGVTBL_SET( MEMBER_TO_FPTR(Perl_magic_clearsig), NULL, NULL, + NULL, NULL ); #endif @@ -4422,6 +4488,7 @@ MGVTBL_SET( MEMBER_TO_FPTR(Perl_magic_wipepack), NULL, NULL, + NULL, NULL ); @@ -4433,6 +4500,7 @@ MGVTBL_SET( MEMBER_TO_FPTR(Perl_magic_clearpack), NULL, NULL, + NULL, NULL ); @@ -4444,6 +4512,7 @@ MGVTBL_SET( NULL, NULL, NULL, + NULL, NULL ); @@ -4455,6 +4524,7 @@ MGVTBL_SET( MEMBER_TO_FPTR(Perl_magic_setisa), NULL, NULL, + NULL, NULL ); @@ -4466,6 +4536,7 @@ MGVTBL_SET( NULL, NULL, NULL, + NULL, NULL ); @@ -4477,6 +4548,7 @@ MGVTBL_SET_CONST_MAGIC_GET( NULL, NULL, NULL, + NULL, NULL ); @@ -4488,16 +4560,6 @@ MGVTBL_SET( NULL, MEMBER_TO_FPTR(Perl_magic_freearylen_p), NULL, - NULL -); - -MGVTBL_SET( - PL_vtbl_glob, - MEMBER_TO_FPTR(Perl_magic_getglob), - MEMBER_TO_FPTR(Perl_magic_setglob), - NULL, - NULL, - NULL, NULL, NULL ); @@ -4510,6 +4572,7 @@ MGVTBL_SET( NULL, NULL, NULL, + NULL, NULL ); @@ -4521,6 +4584,7 @@ MGVTBL_SET( NULL, NULL, NULL, + NULL, NULL ); @@ -4532,6 +4596,7 @@ MGVTBL_SET( NULL, NULL, NULL, + NULL, NULL ); @@ -4543,6 +4608,7 @@ MGVTBL_SET( NULL, NULL, NULL, + NULL, NULL ); @@ -4554,6 +4620,7 @@ MGVTBL_SET( NULL, NULL, NULL, + NULL, NULL ); @@ -4565,6 +4632,7 @@ MGVTBL_SET( NULL, NULL, NULL, + NULL, NULL ); @@ -4576,6 +4644,7 @@ MGVTBL_SET( NULL, NULL, NULL, + NULL, NULL ); @@ -4587,6 +4656,7 @@ MGVTBL_SET( NULL, NULL, NULL, + NULL, NULL ); @@ -4598,6 +4668,7 @@ MGVTBL_SET( NULL, NULL, NULL, + NULL, NULL ); @@ -4609,6 +4680,7 @@ MGVTBL_SET( NULL, NULL, NULL, + NULL, NULL ); @@ -4620,6 +4692,7 @@ MGVTBL_SET( NULL, MEMBER_TO_FPTR(Perl_magic_freeregexp), NULL, + NULL, NULL ); @@ -4631,6 +4704,7 @@ MGVTBL_SET( NULL, NULL, NULL, + NULL, NULL ); @@ -4642,6 +4716,7 @@ MGVTBL_SET( NULL, NULL, NULL, + NULL, NULL ); @@ -4653,6 +4728,7 @@ MGVTBL_SET( NULL, MEMBER_TO_FPTR(Perl_magic_setamagic), NULL, + NULL, NULL ); @@ -4664,6 +4740,7 @@ MGVTBL_SET( NULL, MEMBER_TO_FPTR(Perl_magic_setamagic), NULL, + NULL, NULL ); @@ -4675,6 +4752,7 @@ MGVTBL_SET( NULL, MEMBER_TO_FPTR(Perl_magic_killbackrefs), NULL, + NULL, NULL ); @@ -4686,6 +4764,7 @@ MGVTBL_SET( NULL, MEMBER_TO_FPTR(Perl_magic_freeovrld), NULL, + NULL, NULL ); @@ -4697,6 +4776,7 @@ MGVTBL_SET( NULL, NULL, NULL, + NULL, NULL ); #ifdef USE_LOCALE_COLLATE @@ -4708,6 +4788,7 @@ MGVTBL_SET( NULL, NULL, NULL, + NULL, NULL ); #endif