X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl.h;h=9f135b109c41b4add56e04bfbdd07c4e18c2a7dc;hb=a02608dec28d4e964c218e69ee3e39c623232d8d;hp=e1c94385e70652eab7094f696a492de709e80289;hpb=89ffc314668a83ba2b452e1498a0e37c4453876e;p=p5sagit%2Fp5-mst-13.2.git diff --git a/perl.h b/perl.h index e1c9438..9f135b1 100644 --- a/perl.h +++ b/perl.h @@ -1,6 +1,6 @@ /* perl.h * - * Copyright (c) 1987-2000, Larry Wall + * Copyright (c) 1987-2001, Larry Wall * * You may distribute under the terms of either the GNU General Public * License or the Artistic License, as specified in the README file. @@ -11,9 +11,9 @@ #ifdef PERL_FOR_X2P /* - * This file is being used for x2p stuff. + * This file is being used for x2p stuff. * Above symbol is defined via -D in 'x2p/Makefile.SH' - * Decouple x2p stuff from some of perls more extreme eccentricities. + * Decouple x2p stuff from some of perls more extreme eccentricities. */ #undef MULTIPLICITY #undef USE_STDIO @@ -21,7 +21,7 @@ #endif /* PERL_FOR_X2P */ #define VOIDUSED 1 -#ifdef PERL_MICRO +#ifdef PERL_MICRO # include "uconfig.h" #else # include "config.h" @@ -266,8 +266,8 @@ struct perl_thread; # define END_EXTERN_C } # define EXTERN_C extern "C" #else -# define START_EXTERN_C -# define END_EXTERN_C +# define START_EXTERN_C +# define END_EXTERN_C # define EXTERN_C extern #endif @@ -367,7 +367,7 @@ register struct op *Perl_op asm(stringify(OP_IN_REGISTER)); #define TAINT_ENV() if (PL_tainting) { taint_env(); } #define TAINT_PROPER(s) if (PL_tainting) { taint_proper(Nullch, s); } -/* XXX All process group stuff is handled in pp_sys.c. Should these +/* 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. */ /* Process group stuff changed from traditional BSD to POSIX. @@ -407,7 +407,7 @@ register struct op *Perl_op asm(stringify(OP_IN_REGISTER)); # define HAS_GETPGRP /* Well, effectively it does . . . */ #endif -/* These are not exact synonyms, since setpgrp() and getpgrp() may +/* These are not exact synonyms, since setpgrp() and getpgrp() may have different behaviors, but perl.h used to define USE_BSDPGRP (prior to 5.003_05) so some extension might depend on it. */ @@ -718,6 +718,11 @@ typedef struct perl_mstats perl_mstats_t; # define WIN32SCK_IS_STDSCK /* don't pull in custom wsock layer */ #endif +/* In Tru64 use the 4.4BSD struct msghdr, not the 4.3 one */ +#if defined(__osf__) && defined(__alpha) && !defined(_SOCKADDR_LEN) +# define _SOCKADDR_LEN +#endif + #if defined(HAS_SOCKET) && !defined(VMS) /* VMS handles sockets via vmsish.h */ # include # if defined(USE_SOCKS) && defined(I_SOCKS) @@ -741,7 +746,7 @@ typedef struct perl_mstats perl_mstats_t; # undef INCLUDE_PROTOTYPES # undef PERL_SOCKS_NEED_PROTOTYPES # endif -# endif +# endif # ifdef I_NETDB # include # endif @@ -989,15 +994,15 @@ typedef struct perl_mstats perl_mstats_t; #ifndef S_IRWXU # define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR) -#endif +#endif #ifndef S_IRWXG # define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP) -#endif +#endif #ifndef S_IRWXO # define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH) -#endif +#endif #ifndef S_IREAD # define S_IREAD S_IRUSR @@ -1023,6 +1028,13 @@ typedef struct perl_mstats perl_mstats_t; #undef UV #endif +/* Configure gets this right but the UTS compiler gets it wrong. + -- Hal Morris */ +#ifdef UTS +# undef UVTYPE +# define UVTYPE unsigned +#endif + /* The IV type is supposed to be long enough to hold any integral value or a pointer. @@ -1081,10 +1093,33 @@ typedef UVTYPE UV; # endif #endif +/* + I've tracked down a weird bug in Perl5.6.1 to the UTS compiler's + mishandling of MY_UV_MAX in util.c. It is defined as + #ifndef MY_UV_MAX + # define MY_UV_MAX ((UV)IV_MAX * (UV)2 + (UV)1) + #endif + The compiler handles {double floating point value} >= MY_UV_MAX as if + MY_UV_MAX were the signed integer -1. In fact it will do the same + thing with (UV)(0xffffffff), in place of MY_UV_MAX, though 0xffffffff + *without* the typecast to UV works fine. + + hom00@utsglobal.com (Hal Morris) 2001-05-02 + + */ + +#ifdef UTS +# define MY_UV_MAX 0xffffffff +#endif + #define IV_DIG (BIT_DIGITS(IVSIZE * 8)) #define UV_DIG (BIT_DIGITS(UVSIZE * 8)) -/* +#ifndef NO_PERL_PRESERVE_IVUV +#define PERL_PRESERVE_IVUV /* We like our integers to stay integers. */ +#endif + +/* * The macros INT2PTR and NUM2PTR are (despite their names) * bi-directional: they will convert int/float to or from pointers. * However the conversion to int/float are named explicitly: @@ -1098,7 +1133,7 @@ typedef UVTYPE UV; # define PTRV UV # define INT2PTR(any,d) (any)(d) #else -# if PTRSIZE == LONGSIZE +# if PTRSIZE == LONGSIZE # define PTRV unsigned long # else # define PTRV unsigned @@ -1109,12 +1144,12 @@ typedef UVTYPE UV; #define PTR2IV(p) INT2PTR(IV,p) #define PTR2UV(p) INT2PTR(UV,p) #define PTR2NV(p) NUM2PTR(NV,p) -#if PTRSIZE == LONGSIZE +#if PTRSIZE == LONGSIZE # define PTR2ul(p) (unsigned long)(p) #else # define PTR2ul(p) INT2PTR(unsigned long,p) #endif - + #ifdef USE_LONG_DOUBLE # if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE == DOUBLESIZE # define LONG_DOUBLE_EQUALS_DOUBLE @@ -1277,7 +1312,7 @@ typedef NVTYPE NV; #endif #if !defined(Perl_atof) && defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) -# if !defined(Perl_atof) && defined(HAS_STRTOLD) +# if !defined(Perl_atof) && defined(HAS_STRTOLD) # define Perl_atof(s) (NV)strtold(s, (char**)NULL) # endif # if !defined(Perl_atof) && defined(HAS_ATOLF) @@ -1295,7 +1330,7 @@ typedef NVTYPE NV; # define Perl_atof2(s,f) ((f) = (NV)Perl_atof(s)) #endif -/* Previously these definitions used hardcoded figures. +/* Previously these definitions used hardcoded figures. * It is hoped these formula are more portable, although * no data one way or another is presently known to me. * The "PERL_" names are used because these calculated constants @@ -1346,7 +1381,7 @@ typedef NVTYPE NV; # define PERL_UCHAR_MAX ((unsigned char)~(unsigned)0) # endif #endif - + /* * CHAR_MIN and CHAR_MAX are not included here, as the (char) type may be * ambiguous. It may be equivalent to (signed char) or (unsigned char) @@ -1553,7 +1588,7 @@ typedef struct ptr_tbl PTR_TBL_t; # define FSEEKSIZE LSEEKSIZE # else # define FSEEKSIZE LONGSIZE -# endif +# endif #endif #if defined(USE_LARGE_FILES) && !defined(NO_64_BIT_STDIO) @@ -1688,6 +1723,13 @@ typedef struct ptr_tbl PTR_TBL_t; # define USE_ENVIRON_ARRAY #endif +#ifdef JPL + /* E.g. JPL needs to operate on a copy of the real environment. + * JDK 1.2 and 1.3 seem to get upset if the original environment + * is diddled with. */ +# define NEED_ENVIRON_DUP_FOR_MODIFY +#endif + #ifndef PERL_SYS_INIT3 # define PERL_SYS_INIT3(argvp,argcp,envp) PERL_SYS_INIT(argvp,argcp) #endif @@ -1714,7 +1756,7 @@ typedef struct ptr_tbl PTR_TBL_t; # endif #endif -/* +/* * USE_THREADS needs to be after unixish.h as includes * which defines NSIG - which will stop inclusion of * this results in many functions being undeclared which bothers C++ @@ -1826,10 +1868,12 @@ typedef pthread_key_t perl_key; #endif /* This defines a way to flush all output buffers. This may be a - * performance issue, so we allow people to disable it. + * performance issue, so we allow people to disable it. Also, if + * we are using stdio, there are broken implementations of fflush(NULL) + * out there, Solaris being the most prominent. */ #ifndef PERL_FLUSHALL_FOR_CHILD -# if defined(FFLUSH_NULL) || defined(USE_SFIO) +# if defined(USE_PERLIO) || defined(FFLUSH_NULL) || defined(USE_SFIO) # define PERL_FLUSHALL_FOR_CHILD PerlIO_flush((PerlIO*)NULL) # else # ifdef FFLUSH_ALL @@ -1873,7 +1917,7 @@ typedef pthread_key_t perl_key; # define SVf "p" # else # define SVf "_" -# endif +# endif #endif #ifndef UVf @@ -1881,7 +1925,7 @@ typedef pthread_key_t perl_key; # define UVf UVuf # else # define UVf "Vu" -# endif +# endif #endif #ifndef VDf @@ -1889,7 +1933,7 @@ typedef pthread_key_t perl_key; # define VDf "p" # else # define VDf "vd" -# endif +# endif #endif /* Some unistd.h's give a prototype for pause() even though @@ -2120,62 +2164,142 @@ Gid_t getegid (void); : PerlIO_stderr()) #endif + +#define DEBUG_p_FLAG 0x00000001 /* 1 */ +#define DEBUG_s_FLAG 0x00000002 /* 2 */ +#define DEBUG_l_FLAG 0x00000004 /* 4 */ +#define DEBUG_t_FLAG 0x00000008 /* 8 */ +#define DEBUG_o_FLAG 0x00000010 /* 16 */ +#define DEBUG_c_FLAG 0x00000020 /* 32 */ +#define DEBUG_P_FLAG 0x00000040 /* 64 */ +#define DEBUG_m_FLAG 0x00000080 /* 128 */ +#define DEBUG_f_FLAG 0x00000100 /* 256 */ +#define DEBUG_r_FLAG 0x00000200 /* 512 */ +#define DEBUG_x_FLAG 0x00000400 /* 1024 */ +#define DEBUG_u_FLAG 0x00000800 /* 2048 */ +#define DEBUG_L_FLAG 0x00001000 /* 4096 */ +#define DEBUG_H_FLAG 0x00002000 /* 8192 */ +#define DEBUG_X_FLAG 0x00004000 /* 16384 */ +#define DEBUG_D_FLAG 0x00008000 /* 32768 */ +#define DEBUG_S_FLAG 0x00010000 /* 65536 */ +#define DEBUG_T_FLAG 0x00020000 /* 131072 */ +#define DEBUG_R_FLAG 0x00040000 /* 262144 */ +#define DEBUG_MASK 0x0007FFFF /* mask of all the standard flags */ + +#define DEBUG_DB_RECURSE_FLAG 0x40000000 +#define DEBUG_TOP_FLAG 0x80000000 /* XXX what's this for ??? */ + + #ifdef DEBUGGING -#undef YYDEBUG -#define YYDEBUG 1 -#define DEB(a) a -#define DEBUG(a) if (PL_debug) a -#define DEBUG_p(a) if (PL_debug & 1) a -#define DEBUG_s(a) if (PL_debug & 2) a -#define DEBUG_l(a) if (PL_debug & 4) a -#define DEBUG_t(a) if (PL_debug & 8) a -#define DEBUG_o(a) if (PL_debug & 16) a -#define DEBUG_c(a) if (PL_debug & 32) a -#define DEBUG_P(a) if (PL_debug & 64) a + +# undef YYDEBUG +# define YYDEBUG 1 + +# define DEBUG_p_TEST (PL_debug & DEBUG_p_FLAG) +# define DEBUG_s_TEST (PL_debug & DEBUG_s_FLAG) +# define DEBUG_l_TEST (PL_debug & DEBUG_l_FLAG) +# define DEBUG_t_TEST (PL_debug & DEBUG_t_FLAG) +# define DEBUG_o_TEST (PL_debug & DEBUG_o_FLAG) +# define DEBUG_c_TEST (PL_debug & DEBUG_c_FLAG) +# define DEBUG_P_TEST (PL_debug & DEBUG_P_FLAG) +# define DEBUG_m_TEST (PL_debug & DEBUG_m_FLAG) +# define DEBUG_f_TEST (PL_debug & DEBUG_f_FLAG) +# define DEBUG_r_TEST (PL_debug & DEBUG_r_FLAG) +# define DEBUG_x_TEST (PL_debug & DEBUG_x_FLAG) +# define DEBUG_u_TEST (PL_debug & DEBUG_u_FLAG) +# define DEBUG_L_TEST (PL_debug & DEBUG_L_FLAG) +# define DEBUG_H_TEST (PL_debug & DEBUG_H_FLAG) +# define DEBUG_X_TEST (PL_debug & DEBUG_X_FLAG) +# define DEBUG_D_TEST (PL_debug & DEBUG_D_FLAG) +# define DEBUG_S_TEST (PL_debug & DEBUG_S_FLAG) +# define DEBUG_T_TEST (PL_debug & DEBUG_T_FLAG) +# define DEBUG_R_TEST (PL_debug & DEBUG_R_FLAG) + +# define DEB(a) a +# define DEBUG(a) if (PL_debug) a +# define DEBUG_p(a) if (DEBUG_p_TEST) a +# define DEBUG_s(a) if (DEBUG_s_TEST) a +# define DEBUG_l(a) if (DEBUG_l_TEST) a +# define DEBUG_t(a) if (DEBUG_t_TEST) a +# define DEBUG_o(a) if (DEBUG_o_TEST) a +# define DEBUG_c(a) if (DEBUG_c_TEST) a +# define DEBUG_P(a) if (DEBUG_P_TEST) a + # if defined(PERL_OBJECT) -# define DEBUG_m(a) if (PL_debug & 128) a +# define DEBUG_m(a) if (DEBUG_m_TEST) a # else + /* Temporarily turn off memory debugging in case the a + * does memory allocation, either directly or indirectly. */ # define DEBUG_m(a) \ STMT_START { \ - if (PERL_GET_INTERP) { dTHX; if (PL_debug & 128) { a; } } \ + if (PERL_GET_INTERP) { dTHX; if (DEBUG_m_TEST) {PL_debug&=~DEBUG_m_FLAG; a; PL_debug|=DEBUG_m_FLAG;} } \ } STMT_END # endif -#define DEBUG_f(a) if (PL_debug & 256) a -#define DEBUG_r(a) if (PL_debug & 512) a -#define DEBUG_x(a) if (PL_debug & 1024) a -#define DEBUG_u(a) if (PL_debug & 2048) a -#define DEBUG_L(a) if (PL_debug & 4096) a -#define DEBUG_H(a) if (PL_debug & 8192) a -#define DEBUG_X(a) if (PL_debug & 16384) a -#define DEBUG_D(a) if (PL_debug & 32768) a + +# define DEBUG_f(a) if (DEBUG_f_TEST) a +# define DEBUG_r(a) if (DEBUG_r_TEST) a +# define DEBUG_x(a) if (DEBUG_x_TEST) a +# define DEBUG_u(a) if (DEBUG_u_TEST) a +# define DEBUG_L(a) if (DEBUG_L_TEST) a +# define DEBUG_H(a) if (DEBUG_H_TEST) a +# define DEBUG_X(a) if (DEBUG_X_TEST) a +# define DEBUG_D(a) if (DEBUG_D_TEST) a + # ifdef USE_THREADS -# define DEBUG_S(a) if (PL_debug & (1<<16)) a +# define DEBUG_S(a) if (DEBUG_S_TEST) a # else # define DEBUG_S(a) # endif -#define DEBUG_T(a) if (PL_debug & (1<<17)) a -#else -#define DEB(a) -#define DEBUG(a) -#define DEBUG_p(a) -#define DEBUG_s(a) -#define DEBUG_l(a) -#define DEBUG_t(a) -#define DEBUG_o(a) -#define DEBUG_c(a) -#define DEBUG_P(a) -#define DEBUG_m(a) -#define DEBUG_f(a) -#define DEBUG_r(a) -#define DEBUG_x(a) -#define DEBUG_u(a) -#define DEBUG_S(a) -#define DEBUG_H(a) -#define DEBUG_X(a) -#define DEBUG_D(a) -#define DEBUG_S(a) -#define DEBUG_T(a) -#endif + +# define DEBUG_T(a) if (DEBUG_T_TEST) a +# define DEBUG_R(a) if (DEBUG_R_TEST) a + +#else /* DEBUGGING */ + +# define DEBUG_p_TEST (0) +# define DEBUG_s_TEST (0) +# define DEBUG_l_TEST (0) +# define DEBUG_t_TEST (0) +# define DEBUG_o_TEST (0) +# define DEBUG_c_TEST (0) +# define DEBUG_P_TEST (0) +# define DEBUG_m_TEST (0) +# define DEBUG_f_TEST (0) +# define DEBUG_r_TEST (0) +# define DEBUG_x_TEST (0) +# define DEBUG_u_TEST (0) +# define DEBUG_L_TEST (0) +# define DEBUG_H_TEST (0) +# define DEBUG_X_TEST (0) +# define DEBUG_D_TEST (0) +# define DEBUG_S_TEST (0) +# define DEBUG_T_TEST (0) +# define DEBUG_R_TEST (0) + +# define DEB(a) +# define DEBUG(a) +# define DEBUG_p(a) +# define DEBUG_s(a) +# define DEBUG_l(a) +# define DEBUG_t(a) +# define DEBUG_o(a) +# define DEBUG_c(a) +# define DEBUG_P(a) +# define DEBUG_m(a) +# define DEBUG_f(a) +# define DEBUG_r(a) +# define DEBUG_x(a) +# define DEBUG_u(a) +# define DEBUG_L(a) +# define DEBUG_H(a) +# define DEBUG_X(a) +# define DEBUG_D(a) +# define DEBUG_S(a) +# define DEBUG_T(a) +# define DEBUG_R(a) +#endif /* DEBUGGING */ + + #define YYMAXDEPTH 300 #ifndef assert /* might have been included somehow */ @@ -2188,11 +2312,33 @@ Gid_t getegid (void); #endif struct ufuncs { - I32 (*uf_val)(IV, SV*); - I32 (*uf_set)(IV, SV*); + I32 (*uf_val)(pTHX_ IV, SV*); + I32 (*uf_set)(pTHX_ IV, SV*); IV uf_index; }; +/* In pre-5.7-Perls the 'U' magic didn't get the thread context. + * XS code wanting to be backward compatible can do something + * like the following: + +#ifndef PERL_MG_UFUNC +#define PERL_MG_UFUNC(name,ix,sv) I32 name(IV ix, SV *sv) +#endif + +static PERL_MG_UFUNC(foo_get, index, val) +{ + sv_setsv(val, ...); + return TRUE; +} + +-- Doug MacEachern + +*/ + +#ifndef PERL_MG_UFUNC +#define PERL_MG_UFUNC(name,ix,sv) I32 name(pTHX_ IV ix, SV *sv) +#endif + /* Fix these up for __STDC__ */ #ifndef DONT_DECLARE_STD char *mktemp (char*); @@ -2237,7 +2383,7 @@ END_EXTERN_C # if defined(NeXT) || defined(__NeXT__) /* or whatever catches all NeXTs */ char *crypt (); /* Maybe more hosts will need the unprototyped version */ # else -# if !defined(WIN32) +# if !defined(WIN32) && !defined(VMS) char *crypt (const char*, const char*); # endif /* !WIN32 */ # endif /* !NeXT && !__NeXT__ */ @@ -2347,7 +2493,7 @@ EXT char *** environ_pointer; # if !defined(DONT_DECLARE_STD) || \ (defined(__svr4__) && defined(__GNUC__) && defined(sun)) || \ defined(__sgi) || \ - defined(__DGUX) + defined(__DGUX) extern char ** environ; /* environment variables supplied via exec */ # endif # endif @@ -2401,7 +2547,7 @@ EXT char *PL_sig_name[]; EXT int PL_sig_num[]; #endif -/* fast case folding tables */ +/* fast conversion and case folding tables */ #ifdef DOINIT #ifdef EBCDIC @@ -2693,6 +2839,7 @@ enum { /* pass one of these to get_vtbl */ #define HINT_FILETEST_ACCESS 0x00400000 #define HINT_UTF8 0x00800000 +#define HINT_UTF8_DISTINCT 0x01000000 /* Various states of an input record separator SV (rs, nrs) */ #define RsSNARF(sv) (! SvOK(sv)) @@ -2751,9 +2898,9 @@ struct perl_vars *PL_VarsPtr; #endif /* PERL_GLOBAL_STRUCT */ #if defined(MULTIPLICITY) || defined(PERL_OBJECT) -/* If we have multiple interpreters define a struct +/* If we have multiple interpreters define a struct holding variables which must be per-interpreter - If we don't have threads anything that would have + If we don't have threads anything that would have be per-thread is per-interpreter. */ @@ -2802,7 +2949,7 @@ typedef void *Thread; #ifndef PERL_CALLCONV # define PERL_CALLCONV -#endif +#endif #ifndef NEXT30_NO_ATTRIBUTE # ifndef HASATTRIBUTE /* disable GNU-cc attribute checking? */ @@ -2839,11 +2986,11 @@ typedef void *Thread; # include "embedvar.h" #endif -/* Now include all the 'global' variables +/* Now include all the 'global' variables * If we don't have threads or multiple interpreters - * these include variables that would have been their struct-s + * these include variables that would have been their struct-s */ - + #define PERLVAR(var,type) EXT type PL_##var; #define PERLVARA(var,n,type) EXT type PL_##var[n]; #define PERLVARI(var,type,init) EXT type PL_##var INIT(init); @@ -2978,6 +3125,9 @@ EXT MGVTBL PL_vtbl_amagicelem = {0, MEMBER_TO_FPTR(Perl_magic_setamagic), EXT MGVTBL PL_vtbl_backref = {0, 0, 0, 0, MEMBER_TO_FPTR(Perl_magic_killbackrefs)}; +EXT MGVTBL PL_vtbl_ovrld = {0, 0, + 0, 0, MEMBER_TO_FPTR(Perl_magic_freeovrld)}; + #else /* !DOINIT */ EXT MGVTBL PL_vtbl_sv; @@ -3001,6 +3151,7 @@ EXT MGVTBL PL_vtbl_pos; EXT MGVTBL PL_vtbl_bm; EXT MGVTBL PL_vtbl_fm; EXT MGVTBL PL_vtbl_uvar; +EXT MGVTBL PL_vtbl_ovrld; #ifdef USE_THREADS EXT MGVTBL PL_vtbl_mutex; @@ -3054,7 +3205,8 @@ enum { copy_amg, neg_amg, to_sv_amg, to_av_amg, to_hv_amg, to_gv_amg, - to_cv_amg, iter_amg, + to_cv_amg, iter_amg, + int_amg, DESTROY_amg, max_amg_code /* Do not leave a trailing comma here. C9X allows it, C89 doesn't. */ }; @@ -3101,6 +3253,7 @@ EXTCONST char * PL_AMG_names[NofAMmeth] = { "(${}", "(@{}", "(%{}", "(*{}", "(&{}", "(<>", + "(int", "DESTROY", }; #else EXTCONST char * PL_AMG_names[NofAMmeth]; @@ -3128,10 +3281,15 @@ typedef struct am_table_short AMTS; #define AMGfallYES 3 #define AMTf_AMAGIC 1 +#define AMTf_OVERLOADED 2 #define AMT_AMAGIC(amt) ((amt)->flags & AMTf_AMAGIC) #define AMT_AMAGIC_on(amt) ((amt)->flags |= AMTf_AMAGIC) #define AMT_AMAGIC_off(amt) ((amt)->flags &= ~AMTf_AMAGIC) +#define AMT_OVERLOADED(amt) ((amt)->flags & AMTf_OVERLOADED) +#define AMT_OVERLOADED_on(amt) ((amt)->flags |= AMTf_OVERLOADED) +#define AMT_OVERLOADED_off(amt) ((amt)->flags &= ~AMTf_OVERLOADED) +#define StashHANDLER(stash,meth) gv_handler((stash),CAT2(meth,_amg)) /* * some compilers like to redefine cos et alia as faster @@ -3201,9 +3359,9 @@ typedef struct am_table_short AMTS; #define SET_NUMERIC_LOCAL() \ set_numeric_local(); -#define IS_NUMERIC_RADIX(c) \ +#define IS_NUMERIC_RADIX(s) \ ((PL_hints & HINT_LOCALE) && \ - PL_numeric_radix && (c) == PL_numeric_radix) + PL_numeric_radix_sv && memEQ(s, SvPVX(PL_numeric_radix_sv), SvCUR(PL_numeric_radix_sv))) #define STORE_NUMERIC_LOCAL_SET_STANDARD() \ bool was_local = (PL_hints & HINT_LOCALE) && PL_numeric_local; \ @@ -3241,6 +3399,9 @@ typedef struct am_table_short AMTS; # if !defined(Strtol) && defined(HAS_STRTOLL) # define Strtol strtoll # endif +# if !defined(Strtol) && defined(HAS_STRTOQ) +# define Strtol strtoq +# endif /* is there atoq() anywhere? */ #endif #if !defined(Strtol) && defined(HAS_STRTOL) @@ -3277,13 +3438,17 @@ typedef struct am_table_short AMTS; #endif #if !defined(PERLIO_IS_STDIO) && defined(HASATTRIBUTE) -/* - * Now we have __attribute__ out of the way - * Remap printf +/* + * Now we have __attribute__ out of the way + * Remap printf */ #undef printf +#ifdef __GNUC__ +#define printf(fmt,args...) PerlIO_stdoutf(fmt,##args) +#else #define printf PerlIO_stdoutf #endif +#endif /* if these never got defined, they need defaults */ #ifndef PERL_SET_CONTEXT @@ -3320,8 +3485,15 @@ typedef struct am_table_short AMTS; * Keep this check simple, or it may slow down execution * massively. */ + +#ifndef PERL_MICRO +# ifndef PERL_OLD_SIGNALS +# define PERL_ASYNC_CHECK() if (PL_sig_pending) despatch_signals() +# endif +#endif + #ifndef PERL_ASYNC_CHECK -#define PERL_ASYNC_CHECK() NOOP +# define PERL_ASYNC_CHECK() NOOP #endif /* @@ -3338,17 +3510,21 @@ typedef struct am_table_short AMTS; * nice_chunk and nice_chunk size need to be set * and queried under the protection of sv_mutex */ -#define offer_nice_chunk(chunk, chunk_size) do { \ - LOCK_SV_MUTEX; \ - if (!PL_nice_chunk) { \ - PL_nice_chunk = (char*)(chunk); \ - PL_nice_chunk_size = (chunk_size); \ - } \ - else { \ - Safefree(chunk); \ - } \ - UNLOCK_SV_MUTEX; \ - } while (0) +#define offer_nice_chunk(chunk, chunk_size) STMT_START { \ + void *new_chunk; \ + U32 new_chunk_size; \ + LOCK_SV_MUTEX; \ + new_chunk = (void *)(chunk); \ + new_chunk_size = (chunk_size); \ + if (new_chunk_size > PL_nice_chunk_size) { \ + if (PL_nice_chunk) Safefree(PL_nice_chunk); \ + PL_nice_chunk = new_chunk; \ + PL_nice_chunk_size = new_chunk_size; \ + } else { \ + Safefree(chunk); \ + } \ + UNLOCK_SV_MUTEX; \ + } STMT_END #ifdef HAS_SEM # include @@ -3409,6 +3585,9 @@ typedef struct am_table_short AMTS; #ifdef IAMSUID #ifdef I_SYS_STATVFS +# if defined(PERL_SCO) && !defined(_SVID3) +# define _SVID3 +# endif # include /* for f?statvfs() */ #endif #ifdef I_SYS_MOUNT @@ -3462,7 +3641,7 @@ typedef struct am_table_short AMTS; #undef PERL_PATCHLEVEL_H_IMPLICIT /* Mention - + NV_PRESERVES_UV HAS_ICONV @@ -3486,6 +3665,20 @@ typedef struct am_table_short AMTS; NVff NVgf + HAS_USLEEP + HAS_UALARM + + HAS_SETITIMER + HAS_GETITIMER + + HAS_SENDMSG + HAS_RECVMSG + HAS_READV + HAS_WRITEV + I_SYSUIO + HAS_STRUCT_MSGHDR + HAS_STRUCT_CMSGHDR + so that Configure picks them up. */ #endif /* Include guard */