X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl.h;h=5b7af5490f28ed6e2c53489d74f4cef3ec237244;hb=edc2eac33c792d54399e570820645265bcb07080;hp=4d3bfab553a4930c7b6a5e5a428342bb83b0424e;hpb=1261cc665d8da384eea849e859a193f6cac04920;p=p5sagit%2Fp5-mst-13.2.git diff --git a/perl.h b/perl.h index 4d3bfab..5b7af54 100644 --- a/perl.h +++ b/perl.h @@ -1,11 +1,12 @@ /* perl.h * - * Copyright (c) 1987-2001, Larry Wall + * Copyright (c) 1987-2002, 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. * */ + #ifndef H_PERL #define H_PERL 1 @@ -20,6 +21,10 @@ #define USE_STDIO #endif /* PERL_FOR_X2P */ +#if defined(DGUX) +#include +#endif + #define VOIDUSED 1 #ifdef PERL_MICRO # include "uconfig.h" @@ -41,6 +46,19 @@ /* See L for detailed notes on * PERL_IMPLICIT_CONTEXT and PERL_IMPLICIT_SYS */ +/* Note that from here --> to <-- the same logic is + * repeated in makedef.pl, so be certain to update + * both places when editing. */ + +#ifdef PERL_IMPLICIT_SYS +/* PERL_IMPLICIT_SYS implies PerlMemShared != PerlMem + so use slab allocator to avoid lots of MUTEX overhead + */ +# ifndef PL_OP_SLAB_ALLOC +# define PL_OP_SLAB_ALLOC +# endif +#endif + #ifdef USE_ITHREADS # if !defined(MULTIPLICITY) # define MULTIPLICITY @@ -59,6 +77,14 @@ # endif #endif +/* Use the reentrant APIs like localtime_r and getpwent_r */ +/* Win32 has naturally threadsafe libraries, no need to use any _r variants. */ +#if defined(USE_ITHREADS) && !defined(USE_REENTRANT_API) && !defined(NETWARE) && !defined(WIN32) && !defined(__APPLE__) +# define USE_REENTRANT_API +#endif + +/* <--- here ends the logic shared by perl.h and makedef.pl */ + #ifdef PERL_IMPLICIT_CONTEXT # ifdef USE_5005THREADS struct perl_thread; @@ -105,7 +131,11 @@ struct perl_thread; #endif #ifdef HASATTRIBUTE -# define PERL_UNUSED_DECL __attribute__((unused)) +# if defined(__GNUC__) && defined(__cplusplus) +# define PERL_UNUSED_DECL +# else +# define PERL_UNUSED_DECL __attribute__((unused)) +# endif #else # define PERL_UNUSED_DECL #endif @@ -318,12 +348,6 @@ register struct op *Perl_op asm(stringify(OP_IN_REGISTER)); # endif #endif -/* Use the reentrant APIs like localtime_r and getpwent_r */ -/* Win32 has naturally threadsafe libraries, no need to use any _r variants. */ -#if defined(USE_ITHREADS) && !defined(USE_REENTRANT_API) && !defined(WIN32) -# define USE_REENTRANT_API -#endif - /* HP-UX 10.X CMA (Common Multithreaded Architecure) insists that pthread.h must be included before all other header files. */ @@ -1213,7 +1237,7 @@ typedef NVTYPE NV; # else # define Perl_frexp(x,y) ((long double)frexp((double)(x),y)) # endif -# ifndef Perl_isinf +# ifndef Perl_isnan # ifdef HAS_ISNANL # define Perl_isnan(x) isnanl(x) # endif @@ -1321,7 +1345,7 @@ typedef NVTYPE NV; #if !defined(Perl_fp_class) && defined(HAS_FPCLASSIFY) # include # define Perl_fp_class(x) fpclassify(x) -# define Perl_fp_class_nan(x) (fp_classify(x)==FP_SNAN|FP|_fp_classify(x)==QNAN) +# define Perl_fp_class_nan(x) (fp_classify(x)==FP_SNAN||fp_classify(x)==FP_QNAN) # define Perl_fp_class_inf(x) (fp_classify(x)==FP_INFINITE) # define Perl_fp_class_norm(x) (fp_classify(x)==FP_NORMAL) # define Perl_fp_class_denorm(x) (fp_classify(x)==FP_SUBNORMAL) @@ -1789,7 +1813,11 @@ typedef struct clone_params CLONE_PARAMS; #endif #if defined(__VOS__) -# include "vos/vosish.h" +# ifdef __GNUC__ +# include "./vos/vosish.h" +# else +# include "vos/vosish.h" +# endif # define ISHISH "vos" #endif @@ -2118,6 +2146,22 @@ typedef I32 (*filter_t) (pTHX_ int, SV *, int); #define FILTER_DATA(idx) (AvARRAY(PL_rsfp_filters)[idx]) #define FILTER_ISREADER(idx) (idx >= AvFILLp(PL_rsfp_filters)) +#if defined(_AIX) && !defined(_AIX43) +#if defined(USE_REENTRANT) || defined(_REENTRANT) || defined(_THREAD_SAFE) +/* We cannot include to get the struct crypt_data + * because of setkey prototype problems when threading */ +typedef struct crypt_data { /* straight from /usr/include/crypt.h */ + /* From OSF, Not needed in AIX + char C[28], D[28]; + */ + char E[48]; + char KS[16][48]; + char block[66]; + char iobuf[16]; +} CRYPTD; +#endif /* threading */ +#endif /* AIX */ + #if !defined(OS2) && !defined(MACOS_TRADITIONAL) # include "iperlsys.h" #endif @@ -2136,7 +2180,6 @@ typedef I32 (*filter_t) (pTHX_ int, SV *, int); #include "scope.h" #include "warnings.h" #include "utf8.h" -#include "sharedsv.h" /* Current curly descriptor */ typedef struct curcur CURCUR; @@ -2236,6 +2279,12 @@ struct ptr_tbl { # define htovs(x) vtohs(x) # endif /* otherwise default to functions in util.c */ +#ifndef htovs +short htovs(short n); +short vtohs(short n); +long htovl(long n); +long vtohl(long n); +#endif #endif /* *MAX Plus 1. A floating point value. @@ -2339,11 +2388,12 @@ Gid_t getegid (void); #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_J_FLAG 0x00080000 /* 524288 */ +#define DEBUG_MASK 0x000FFFFF /* mask of all the standard flags */ #define DEBUG_DB_RECURSE_FLAG 0x40000000 -#define DEBUG_TOP_FLAG 0x80000000 /* XXX what's this for ??? */ - +#define DEBUG_TOP_FLAG 0x80000000 /* XXX what's this for ??? Signal + that something was done? */ # define DEBUG_p_TEST_ (PL_debug & DEBUG_p_FLAG) # define DEBUG_s_TEST_ (PL_debug & DEBUG_s_FLAG) @@ -2364,6 +2414,7 @@ Gid_t getegid (void); # 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 DEBUG_J_TEST_ (PL_debug & DEBUG_J_FLAG) #ifdef DEBUGGING @@ -2389,6 +2440,7 @@ Gid_t getegid (void); # define DEBUG_S_TEST DEBUG_S_TEST_ # define DEBUG_T_TEST DEBUG_T_TEST_ # define DEBUG_R_TEST DEBUG_R_TEST_ +# define DEBUG_J_TEST DEBUG_J_TEST_ # define DEB(a) a # define DEBUG(a) if (PL_debug) a @@ -2451,6 +2503,7 @@ Gid_t getegid (void); # define DEBUG_S_TEST (0) # define DEBUG_T_TEST (0) # define DEBUG_R_TEST (0) +# define DEBUG_J_TEST (0) # define DEB(a) # define DEBUG(a) @@ -2501,7 +2554,9 @@ Gid_t getegid (void); #define PERL_MAGIC_nkeys 'k' /* scalar(keys()) lvalue */ #define PERL_MAGIC_dbfile 'L' /* Debugger %_ might have been included somehow */ +#ifdef DEBUGGING +#define assert(what) DEB( { \ + if (!(what)) { \ + Perl_croak(aTHX_ "Assertion " STRINGIFY(what) " failed: file \"%s\", line %d", \ + __FILE__, __LINE__); \ + PerlProc_exit(1); \ + }}) +#else #define assert(what) DEB( { \ if (!(what)) { \ Perl_croak(aTHX_ "Assertion failed: file \"%s\", line %d", \ @@ -2532,6 +2596,7 @@ Gid_t getegid (void); PerlProc_exit(1); \ }}) #endif +#endif struct ufuncs { I32 (*uf_val)(pTHX_ IV, SV*); @@ -2655,7 +2720,9 @@ END_EXTERN_C char *crypt (); /* Maybe more hosts will need the unprototyped version */ # else # if !defined(WIN32) && !defined(VMS) +#ifndef crypt char *crypt (const char*, const char*); +#endif # endif /* !WIN32 */ # endif /* !NeXT && !__NeXT__ */ # ifndef DONT_DECLARE_STD @@ -2670,7 +2737,9 @@ Off_t lseek (int,Off_t,int); # endif # endif # endif /* !DONT_DECLARE_STD */ +#ifndef getlogin char *getlogin (void); +#endif #endif /* !__cplusplus */ #ifdef UNLINK_ALL_VERSIONS /* Currently only makes sense for VMS */ @@ -2749,6 +2818,8 @@ typedef Sighandler_t Sigsave_t; typedef int (CPERLscope(*runops_proc_t)) (pTHX); +typedef void (CPERLscope(*share_proc_t)) (pTHX_ SV *sv); +typedef int (CPERLscope(*thrhook_proc_t)) (pTHX); typedef OP* (CPERLscope(*PPADDR_t)[]) (pTHX); /* _ (for $_) must be first in the following list (DEFSV requires it) */ @@ -3139,7 +3210,7 @@ struct perl_debug_pad { }; #define PERL_DEBUG_PAD(i) &(PL_debug_pad.pad[i]) -#define PERL_DEBUG_PAD_ZERO(i) (sv_setpvn(PERL_DEBUG_PAD(i), "", 0), PERL_DEBUG_PAD(i)) +#define PERL_DEBUG_PAD_ZERO(i) (SvPVX(PERL_DEBUG_PAD(i))[0] = 0, SvCUR(PERL_DEBUG_PAD(i)) = 0, PERL_DEBUG_PAD(i)) /* Enable variables which are pointers to functions */ typedef void (CPERLscope(*peep_t))(pTHX_ OP* o); @@ -3312,7 +3383,7 @@ START_EXTERN_C #ifdef DOINIT -EXT MGVTBL PL_vtbl_sv = {MEMBER_TO_FPTR(Perl_magic_get), +EXT MGVTBL PL_vtbl_sv = {MEMBER_TO_FPTR(Perl_magic_get), MEMBER_TO_FPTR(Perl_magic_set), MEMBER_TO_FPTR(Perl_magic_len), 0, 0}; @@ -3331,10 +3402,12 @@ EXT MGVTBL PL_vtbl_sigelem = {MEMBER_TO_FPTR(Perl_magic_getsig), 0, MEMBER_TO_FPTR(Perl_magic_clearsig), 0}; #endif -EXT MGVTBL PL_vtbl_pack = {0, 0, MEMBER_TO_FPTR(Perl_magic_sizepack), MEMBER_TO_FPTR(Perl_magic_wipepack), +EXT MGVTBL PL_vtbl_pack = {0, 0, + MEMBER_TO_FPTR(Perl_magic_sizepack), + MEMBER_TO_FPTR(Perl_magic_wipepack), 0}; EXT MGVTBL PL_vtbl_packelem = {MEMBER_TO_FPTR(Perl_magic_getpack), - MEMBER_TO_FPTR(Perl_magic_setpack), + MEMBER_TO_FPTR(Perl_magic_setpack), 0, MEMBER_TO_FPTR(Perl_magic_clearpack), 0}; EXT MGVTBL PL_vtbl_dbline = {0, MEMBER_TO_FPTR(Perl_magic_setdbline), @@ -3355,12 +3428,14 @@ EXT MGVTBL PL_vtbl_mglob = {0, MEMBER_TO_FPTR(Perl_magic_setmglob), EXT MGVTBL PL_vtbl_nkeys = {MEMBER_TO_FPTR(Perl_magic_getnkeys), MEMBER_TO_FPTR(Perl_magic_setnkeys), 0, 0, 0}; -EXT MGVTBL PL_vtbl_taint = {MEMBER_TO_FPTR(Perl_magic_gettaint),MEMBER_TO_FPTR(Perl_magic_settaint), +EXT MGVTBL PL_vtbl_taint = {MEMBER_TO_FPTR(Perl_magic_gettaint), + MEMBER_TO_FPTR(Perl_magic_settaint), 0, 0, 0}; -EXT MGVTBL PL_vtbl_substr = {MEMBER_TO_FPTR(Perl_magic_getsubstr), MEMBER_TO_FPTR(Perl_magic_setsubstr), +EXT MGVTBL PL_vtbl_substr = {MEMBER_TO_FPTR(Perl_magic_getsubstr), + MEMBER_TO_FPTR(Perl_magic_setsubstr), 0, 0, 0}; EXT MGVTBL PL_vtbl_vec = {MEMBER_TO_FPTR(Perl_magic_getvec), - MEMBER_TO_FPTR(Perl_magic_setvec), + MEMBER_TO_FPTR(Perl_magic_setvec), 0, 0, 0}; EXT MGVTBL PL_vtbl_pos = {MEMBER_TO_FPTR(Perl_magic_getpos), MEMBER_TO_FPTR(Perl_magic_setpos), @@ -3373,9 +3448,11 @@ EXT MGVTBL PL_vtbl_uvar = {MEMBER_TO_FPTR(Perl_magic_getuvar), MEMBER_TO_FPTR(Perl_magic_setuvar), 0, 0, 0}; #ifdef USE_5005THREADS -EXT MGVTBL PL_vtbl_mutex = {0, 0, 0, 0, MEMBER_TO_FPTR(Perl_magic_mutexfree)}; +EXT MGVTBL PL_vtbl_mutex = {0, 0, 0, 0, + MEMBER_TO_FPTR(Perl_magic_mutexfree)}; #endif /* USE_5005THREADS */ -EXT MGVTBL PL_vtbl_defelem = {MEMBER_TO_FPTR(Perl_magic_getdefelem),MEMBER_TO_FPTR(Perl_magic_setdefelem), +EXT MGVTBL PL_vtbl_defelem = {MEMBER_TO_FPTR(Perl_magic_getdefelem), + MEMBER_TO_FPTR(Perl_magic_setdefelem), 0, 0, 0}; EXT MGVTBL PL_vtbl_regexp = {0,0,0,0, MEMBER_TO_FPTR(Perl_magic_freeregexp)}; @@ -3534,14 +3611,14 @@ EXTCONST char * PL_AMG_names[NofAMmeth]; END_EXTERN_C struct am_table { - long was_ok_sub; + U32 was_ok_sub; long was_ok_am; U32 flags; CV* table[NofAMmeth]; long fallback; }; struct am_table_short { - long was_ok_sub; + U32 was_ok_sub; long was_ok_am; U32 flags; }; @@ -3662,7 +3739,7 @@ typedef struct am_table_short AMTS; #define STORE_NUMERIC_STANDARD_SET_LOCAL() /**/ #define RESTORE_NUMERIC_LOCAL() /**/ #define RESTORE_NUMERIC_STANDARD() /**/ -#define Atof Perl_atof +#define Atof my_atof #define IN_LOCALE_RUNTIME 0 #endif /* !USE_LOCALE_NUMERIC */ @@ -3671,6 +3748,9 @@ typedef struct am_table_short AMTS; # ifdef __hpux # define strtoll __strtoll /* secret handshake */ # endif +# ifdef WIN64 +# define strtoll _strtoi64 /* secret handshake */ +# endif # if !defined(Strtol) && defined(HAS_STRTOLL) # define Strtol strtoll # endif @@ -3687,6 +3767,9 @@ typedef struct am_table_short AMTS; * (as is done for Atoul(), see below) but for backward compatibility * we just assume atol(). */ # if defined(USE_64_BIT_INT) && defined(IV_IS_QUAD) && QUADKIND == QUAD_IS_LONG_LONG && defined(HAS_ATOLL) +# ifdef WIN64 +# define atoll _atoi64 /* secret handshake */ +# endif # define Atol atoll # else # define Atol atol @@ -3697,6 +3780,9 @@ typedef struct am_table_short AMTS; # ifdef __hpux # define strtoull __strtoull /* secret handshake */ # endif +# ifdef WIN64 +# define strtoull _strtoui64 /* secret handshake */ +# endif # if !defined(Strtoul) && defined(HAS_STRTOULL) # define Strtoul strtoull # endif