X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl.h;h=9b521b9d3c0bd913cb336bfd78072a376c48b541;hb=43a861f1c4418d63c6d99fbecb816d11ccf25793;hp=4381e2d9296007fa30b94effc56ee4e854ceaa61;hpb=3fe35a814d0a98f430bf0a538c953f3564df33ca;p=p5sagit%2Fp5-mst-13.2.git diff --git a/perl.h b/perl.h index 4381e2d..9b521b9 100644 --- a/perl.h +++ b/perl.h @@ -75,7 +75,7 @@ register struct op *op asm(stringify(OP_IN_REGISTER)); #define NOOP (void)0 -#define WITH_THR(s) do { dTHR; s; } while (0) +#define WITH_THR(s) STMT_START { dTHR; s; } STMT_END /* * SOFT_CAST can be used for args to prototyped functions to retain some @@ -113,7 +113,8 @@ register struct op *op asm(stringify(OP_IN_REGISTER)); # define STANDARD_C 1 #endif -#if defined(__cplusplus) || defined(WIN32) || defined(__sgi) +#if defined(__cplusplus) || defined(WIN32) || defined(__sgi) || defined(OS2) \ + || defined(__DGUX) # define DONT_DECLARE_STD 1 #endif @@ -204,6 +205,11 @@ register struct op *op asm(stringify(OP_IN_REGISTER)); #endif #include "perlio.h" +#include "perllio.h" +#include "perlsock.h" +#include "perlproc.h" +#include "perlenv.h" +#include "perldir.h" #ifdef USE_NEXT_CTYPE @@ -470,8 +476,8 @@ Free_t Perl_free _((Malloc_t where)); #ifdef USE_THREADS # define ERRSV (thr->errsv) # define ERRHV (thr->errhv) -# define DEFSV *av_fetch(thr->threadsv, find_threadsv("_"), FALSE) -# define SAVE_DEFSV save_threadsv(find_threadsv("_")) +# define DEFSV THREADSV(0) +# define SAVE_DEFSV save_threadsv(0) #else # define ERRSV GvSV(errgv) # define ERRHV GvHV(errgv) @@ -944,7 +950,7 @@ typedef union any ANY; typedef I32 (*filter_t) _((int, SV *, int)); #define FILTER_READ(idx, sv, len) filter_read(idx, sv, len) #define FILTER_DATA(idx) (AvARRAY(rsfp_filters)[idx]) -#define FILTER_ISREADER(idx) (idx >= AvFILL(rsfp_filters)) +#define FILTER_ISREADER(idx) (idx >= AvFILLp(rsfp_filters)) #ifdef DOSISH # if defined(OS2) @@ -965,8 +971,8 @@ typedef I32 (*filter_t) _((int, SV *, int)); #endif /* - * USE_THREADS needs to be after unixish.h as includes - * which defines NSIG - which will stop inclusion of + * 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++ * May make sense to have threads after "*ish.h" anyway */ @@ -978,10 +984,15 @@ typedef I32 (*filter_t) _((int, SV *, int)); # ifdef WIN32 # include # else -# include +# ifdef OS2 +# include "os2thread.h" +# else +# include +typedef pthread_t perl_os_thread; typedef pthread_mutex_t perl_mutex; typedef pthread_cond_t perl_cond; typedef pthread_key_t perl_key; +# endif /* OS2 */ # endif /* WIN32 */ # endif /* FAKE_THREADS */ #endif /* USE_THREADS */ @@ -1250,7 +1261,7 @@ Gid_t getegid _((void)); if (!(what)) { \ croak("Assertion failed: file \"%s\", line %d", \ __FILE__, __LINE__); \ - exit(1); \ + PerlProc_exit(1); \ }}) #endif @@ -1294,19 +1305,21 @@ END_EXTERN_C #endif #ifndef __cplusplus -#ifdef __NeXT__ /* or whatever catches all NeXTs */ +# ifdef __NeXT__ /* or whatever catches all NeXTs */ char *crypt (); /* Maybe more hosts will need the unprototyped version */ -#else +# else +# if !defined(WIN32) || !defined(HAVE_DES_FCRYPT) char *crypt _((const char*, const char*)); -#endif -#ifndef DONT_DECLARE_STD -#ifndef getenv +# endif /* !WIN32 && !HAVE_CRYPT_SOURCE */ +# endif /* !__NeXT__ */ +# ifndef DONT_DECLARE_STD +# ifndef getenv char *getenv _((const char*)); -#endif +# endif /* !getenv */ Off_t lseek _((int,Off_t,int)); -#endif +# endif /* !DONT_DECLARE_STD */ char *getlogin _((void)); -#endif +#endif /* !__cplusplus */ #ifdef UNLINK_ALL_VERSIONS /* Currently only makes sense for VMS */ #define UNLINK unlnk @@ -1371,11 +1384,14 @@ int runops_standard _((void)); int runops_debug _((void)); #endif +/* _ (for $_) must be first in the following list (DEFSV requires it) */ #define THREADSV_NAMES "_123456789&`'+/.,\\\";^-%=|~:\001\005!@" /* VMS doesn't use environ array and NeXT has problems with crt0.o globals */ #if !defined(VMS) && !(defined(NeXT) && defined(__DYNAMIC__)) -#if !defined(DONT_DECLARE_STD) || (defined(__svr4__) && defined(__GNUC__) && defined(sun)) || defined(__sgi) +#if !defined(DONT_DECLARE_STD) \ + || (defined(__svr4__) && defined(__GNUC__) && defined(sun)) \ + || defined(__sgi) || defined(__DGUX) extern char ** environ; /* environment variables supplied via exec */ #endif #else @@ -1659,6 +1675,10 @@ struct perl_thread { #include "thrdvar.h" }; +typedef struct perl_thread *Thread; + +#else +typedef void *Thread; #endif /* Done with PERLVAR macros for now ... */ @@ -1666,8 +1686,6 @@ struct perl_thread { #undef PERLVARI #undef PERLVARIC -typedef struct perl_thread *Thread; - #include "thread.h" #include "pp.h" #include "proto.h" @@ -1709,6 +1727,7 @@ typedef struct perl_thread *Thread; #undef PERLVAR #undef PERLVARI +#undef PERLVARIC #if defined(HASATTRIBUTE) && defined(WIN32) /* @@ -1737,7 +1756,7 @@ EXT MGVTBL vtbl_sigelem = {magic_getsig, magic_setsig, 0, magic_clearsig, 0}; -EXT MGVTBL vtbl_pack = {0, 0, 0, magic_wipepack, +EXT MGVTBL vtbl_pack = {0, 0, magic_sizepack, magic_wipepack, 0}; EXT MGVTBL vtbl_packelem = {magic_getpack, magic_setpack, @@ -2022,12 +2041,12 @@ enum { * and queried under the protection of sv_mutex */ #define offer_nice_chunk(chunk, chunk_size) do { \ - MUTEX_LOCK(&sv_mutex); \ + LOCK_SV_MUTEX; \ if (!nice_chunk) { \ nice_chunk = (char*)(chunk); \ nice_chunk_size = (chunk_size); \ } \ - MUTEX_UNLOCK(&sv_mutex); \ + UNLOCK_SV_MUTEX; \ } while (0)