This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
update Changes; add sv_*_mg() entries in win32/GenCAPI.pl
[perl5.git] / perl.h
diff --git a/perl.h b/perl.h
index cc56c75..e2b34bc 100644 (file)
--- a/perl.h
+++ b/perl.h
@@ -75,11 +75,11 @@ pointer to the PERL_OBJECT. This pointer type is CPerlObj*. This is
 made transparent to extension developers by the following macros:
        #define var pPerl->Perl_var
        #define func pPerl->Perl_func
-       * these are done in ObjXSub.h
+       * these are done in objXSUB.h
 This requires that the extension be compiled as C++, which means
 that the code must be ANSI C and not K&R C. For K&R extensions,
 please see the C API notes located in Win32/GenCAPI.pl. This script
-creates a PerlCAPI.lib that provides a K & R compatible C interface
+creates a perlCAPI.lib that provides a K & R compatible C interface
 to the PERL_OBJECT.
 2. Local variables and functions cannot have the same name as perl's
 variables or functions since the macros will redefine these. Look for
@@ -111,9 +111,9 @@ class CPerlObj;
 #define PERL_OBJECT_THIS this
 #define _PERL_OBJECT_THIS ,this
 #define PERL_OBJECT_THIS_ this,
-#define CALLRUNOPS (this->*runops)
-#define CALLREGCOMP (this->*regcompp)
-#define CALLREGEXEC (this->*regexecp)
+#define CALLRUNOPS (this->*PL_runops)
+#define CALLREGCOMP (this->*PL_regcompp)
+#define CALLREGEXEC (this->*PL_regexecp)
 
 #else /* !PERL_OBJECT */
 
@@ -127,9 +127,9 @@ class CPerlObj;
 #define PERL_OBJECT_THIS
 #define _PERL_OBJECT_THIS
 #define PERL_OBJECT_THIS_
-#define CALLRUNOPS runops
-#define CALLREGCOMP (*regcompp)
-#define CALLREGEXEC (*regexecp)
+#define CALLRUNOPS PL_runops
+#define CALLREGCOMP (*PL_regcompp)
+#define CALLREGEXEC (*PL_regexecp)
 
 #endif /* PERL_OBJECT */
 
@@ -240,11 +240,11 @@ register struct op *op asm(stringify(OP_IN_REGISTER));
 #   define VOL
 #endif
 
-#define TAINT          (tainted = TRUE)
-#define TAINT_NOT      (tainted = FALSE)
-#define TAINT_IF(c)    if (c) { tainted = TRUE; }
-#define TAINT_ENV()    if (tainting) { taint_env(); }
-#define TAINT_PROPER(s)        if (tainting) { taint_proper(no_security, s); }
+#define TAINT          (PL_tainted = TRUE)
+#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(no_security, 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.
@@ -517,6 +517,10 @@ Free_t   Perl_free _((Malloc_t where));
 #   include <netinet/in.h>
 #endif
 
+#ifdef I_ARPA_INET
+#   include <arpa/inet.h>
+#endif
+
 #if defined(SF_APPEND) && defined(USE_SFIO) && defined(I_SFIO)
 /* <sfio.h> defines SF_APPEND and <sys/stat.h> might define SF_APPEND
  * (the neo-BSD seem to do this).  */
@@ -590,10 +594,10 @@ Free_t   Perl_free _((Malloc_t where));
 #  define DEFSV THREADSV(0)
 #  define SAVE_DEFSV save_threadsv(0)
 #else
-#  define ERRSV GvSV(errgv)
-#  define ERRHV GvHV(errgv)
-#  define DEFSV GvSV(defgv)
-#  define SAVE_DEFSV SAVESPTR(GvSV(defgv))
+#  define ERRSV GvSV(PL_errgv)
+#  define ERRHV GvHV(PL_errgv)
+#  define DEFSV GvSV(PL_defgv)
+#  define SAVE_DEFSV SAVESPTR(GvSV(PL_defgv))
 #endif /* USE_THREADS */
 
 #ifndef errno
@@ -1086,8 +1090,8 @@ typedef I32 (*filter_t) _((int, SV *, int));
 #endif
 
 #define FILTER_READ(idx, sv, len)  filter_read(idx, sv, len)
-#define FILTER_DATA(idx)          (AvARRAY(rsfp_filters)[idx])
-#define FILTER_ISREADER(idx)      (idx >= AvFILLp(rsfp_filters))
+#define FILTER_DATA(idx)          (AvARRAY(PL_rsfp_filters)[idx])
+#define FILTER_ISREADER(idx)      (idx >= AvFILLp(PL_rsfp_filters))
 
 #ifdef DOSISH
 # if defined(OS2)
@@ -1102,7 +1106,11 @@ typedef I32 (*filter_t) _((int, SV *, int));
 #   if defined(PLAN9)
 #     include "./plan9/plan9ish.h"
 #   else
-#     include "unixish.h"
+#     if defined(MPE)
+#       include "mpeix/mpeixish.h"
+#     else
+#       include "unixish.h"
+#     endif
 #   endif
 # endif
 #endif         
@@ -1145,22 +1153,22 @@ typedef pthread_key_t perl_key;
 
   
 #ifdef VMS
-#   define STATUS_NATIVE       statusvalue_vms
+#   define STATUS_NATIVE       PL_statusvalue_vms
 #   define STATUS_NATIVE_EXPORT \
-       ((I32)statusvalue_vms == -1 ? 44 : statusvalue_vms)
+       ((I32)PL_statusvalue_vms == -1 ? 44 : PL_statusvalue_vms)
 #   define STATUS_NATIVE_SET(n)                                                \
        STMT_START {                                                    \
-           statusvalue_vms = (n);                                      \
-           if ((I32)statusvalue_vms == -1)                             \
-               statusvalue = -1;                                       \
-           else if (statusvalue_vms & STS$M_SUCCESS)                   \
-               statusvalue = 0;                                        \
-           else if ((statusvalue_vms & STS$M_SEVERITY) == 0)           \
-               statusvalue = 1 << 8;                                   \
+           PL_statusvalue_vms = (n);                                   \
+           if ((I32)PL_statusvalue_vms == -1)                          \
+               PL_statusvalue = -1;                                    \
+           else if (PL_statusvalue_vms & STS$M_SUCCESS)                \
+               PL_statusvalue = 0;                                     \
+           else if ((PL_statusvalue_vms & STS$M_SEVERITY) == 0)        \
+               PL_statusvalue = 1 << 8;                                \
            else                                                        \
-               statusvalue = (statusvalue_vms & STS$M_SEVERITY) << 8;  \
+               PL_statusvalue = (PL_statusvalue_vms & STS$M_SEVERITY) << 8;    \
        } STMT_END
-#   define STATUS_POSIX        statusvalue
+#   define STATUS_POSIX        PL_statusvalue
 #   ifdef VMSISH_STATUS
 #      define STATUS_CURRENT   (VMSISH_STATUS ? STATUS_NATIVE : STATUS_POSIX)
 #   else
@@ -1168,29 +1176,29 @@ typedef pthread_key_t perl_key;
 #   endif
 #   define STATUS_POSIX_SET(n)                         \
        STMT_START {                                    \
-           statusvalue = (n);                          \
-           if (statusvalue != -1) {                    \
-               statusvalue &= 0xFFFF;                  \
-               statusvalue_vms = statusvalue ? 44 : 1; \
+           PL_statusvalue = (n);                               \
+           if (PL_statusvalue != -1) {                 \
+               PL_statusvalue &= 0xFFFF;                       \
+               PL_statusvalue_vms = PL_statusvalue ? 44 : 1;   \
            }                                           \
-           else statusvalue_vms = -1;                  \
+           else PL_statusvalue_vms = -1;                       \
        } STMT_END
-#   define STATUS_ALL_SUCCESS  (statusvalue = 0, statusvalue_vms = 1)
-#   define STATUS_ALL_FAILURE  (statusvalue = 1, statusvalue_vms = 44)
+#   define STATUS_ALL_SUCCESS  (PL_statusvalue = 0, PL_statusvalue_vms = 1)
+#   define STATUS_ALL_FAILURE  (PL_statusvalue = 1, PL_statusvalue_vms = 44)
 #else
 #   define STATUS_NATIVE       STATUS_POSIX
 #   define STATUS_NATIVE_EXPORT        STATUS_POSIX
 #   define STATUS_NATIVE_SET   STATUS_POSIX_SET
-#   define STATUS_POSIX                statusvalue
+#   define STATUS_POSIX                PL_statusvalue
 #   define STATUS_POSIX_SET(n)         \
        STMT_START {                    \
-           statusvalue = (n);          \
-           if (statusvalue != -1)      \
-               statusvalue &= 0xFFFF;  \
+           PL_statusvalue = (n);               \
+           if (PL_statusvalue != -1)   \
+               PL_statusvalue &= 0xFFFF;       \
        } STMT_END
 #   define STATUS_CURRENT STATUS_POSIX
-#   define STATUS_ALL_SUCCESS  (statusvalue = 0)
-#   define STATUS_ALL_FAILURE  (statusvalue = 1)
+#   define STATUS_ALL_SUCCESS  (PL_statusvalue = 0)
+#   define STATUS_ALL_FAILURE  (PL_statusvalue = 1)
 #endif
 
 /* Some unistd.h's give a prototype for pause() even though
@@ -1417,23 +1425,23 @@ Gid_t getegid _((void));
 #endif
 #define YYDEBUG 1
 #define DEB(a)                         a
-#define DEBUG(a)   if (debug)          a
-#define DEBUG_p(a) if (debug & 1)      a
-#define DEBUG_s(a) if (debug & 2)      a
-#define DEBUG_l(a) if (debug & 4)      a
-#define DEBUG_t(a) if (debug & 8)      a
-#define DEBUG_o(a) if (debug & 16)     a
-#define DEBUG_c(a) if (debug & 32)     a
-#define DEBUG_P(a) if (debug & 64)     a
-#define DEBUG_m(a) if (curinterp && debug & 128)       a
-#define DEBUG_f(a) if (debug & 256)    a
-#define DEBUG_r(a) if (debug & 512)    a
-#define DEBUG_x(a) if (debug & 1024)   a
-#define DEBUG_u(a) if (debug & 2048)   a
-#define DEBUG_L(a) if (debug & 4096)   a
-#define DEBUG_H(a) if (debug & 8192)   a
-#define DEBUG_X(a) if (debug & 16384)  a
-#define DEBUG_D(a) if (debug & 32768)  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
+#define DEBUG_m(a) if (PL_curinterp && PL_debug & 128) a
+#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
 #else
 #define DEB(a)
 #define DEBUG(a)
@@ -1560,13 +1568,13 @@ typedef Sighandler_t Sigsave_t;
 # define PAD_SV(po) pad_sv(po)
 # define RUNOPS_DEFAULT runops_debug
 #else
-# define PAD_SV(po) curpad[po]
+# define PAD_SV(po) PL_curpad[po]
 # define RUNOPS_DEFAULT runops_standard
 #endif
 
 #ifdef MYMALLOC
-#  define MALLOC_INIT MUTEX_INIT(&malloc_mutex)
-#  define MALLOC_TERM MUTEX_DESTROY(&malloc_mutex)
+#  define MALLOC_INIT MUTEX_INIT(&PL_malloc_mutex)
+#  define MALLOC_TERM MUTEX_DESTROY(&PL_malloc_mutex)
 #else
 #  define MALLOC_INIT
 #  define MALLOC_TERM
@@ -1849,10 +1857,6 @@ typedef I32 (*regexec_t) _((regexp* prog, char* stringarg, char* strend, char*
                            strbeg, I32 minend, SV* screamer, void* data, 
                            U32 flags));
 
-EXT regexp*    pregcomp _((char* exp, char* xend, PMOP* pm));
-EXT I32                regexec_flags _((regexp* prog, char* stringarg, char* strend,
-                        char* strbeg, I32 minend, SV* screamer,
-                        void* data, U32 flags));
 #endif
 
 /* Set up PERLVAR macros for populating structs */
@@ -1894,15 +1898,15 @@ struct perl_vars {
 };
 
 #ifdef PERL_CORE
-EXT struct perl_vars Perl_Vars;
-EXT struct perl_vars *Perl_VarsPtr INIT(&Perl_Vars);
-#else
+EXT struct perl_vars PL_Vars;
+EXT struct perl_vars *PL_VarsPtr INIT(&PL_Vars);
+#else /* PERL_CORE */
 #if !defined(__GNUC__) || !defined(WIN32)
 EXT
-#endif
-struct perl_vars *Perl_VarsPtr;
-#define Perl_Vars (*((Perl_VarsPtr) ? Perl_VarsPtr : (Perl_VarsPtr =  Perl_GetVars())))
-#endif
+#endif /* WIN32 */
+struct perl_vars *PL_VarsPtr;
+#define PL_Vars (*((PL_VarsPtr) ? PL_VarsPtr : (PL_VarsPtr =  Perl_GetVars())))
+#endif /* PERL_CORE */
 #endif /* PERL_GLOBAL_STRUCT */
 
 #ifdef MULTIPLICITY
@@ -1966,10 +1970,10 @@ typedef void *Thread;
  * If we don't have threads or multiple interpreters
  * these include variables that would have been their struct-s 
  */
-
-#define PERLVAR(var,type) EXT type var;
-#define PERLVARI(var,type,init) EXT type var INIT(init);
-#define PERLVARIC(var,type,init) EXTCONST type var INIT(init);
+                         
+#define PERLVAR(var,type) EXT type PL_##var;
+#define PERLVARI(var,type,init) EXT type  PL_##var INIT(init);
+#define PERLVARIC(var,type,init) EXTCONST type PL_##var INIT(init);
 
 #ifndef PERL_GLOBAL_STRUCT
 #include "perlvars.h"
@@ -2074,7 +2078,7 @@ EXT MGVTBL vtbl_uvar =    {magic_getuvar,
 EXT MGVTBL vtbl_mutex =        {0,     0,      0,      0,      magic_mutexfree};
 #endif /* USE_THREADS */
 EXT MGVTBL vtbl_defelem = {magic_getdefelem,magic_setdefelem,
-                                       0,      0,      magic_freedefelem};
+                                       0,      0,      0};
 
 EXT MGVTBL vtbl_regexp = {0,0,0,0, magic_freeregexp};
 
@@ -2272,27 +2276,27 @@ enum {
 #define PERLDBf_NONAME 0x40            /* For _SUB: no name of the subr. */
 #define PERLDBf_GOTO   0x80            /* Report goto: call DB::goto. */
 
-#define PERLDB_SUB     (perldb && (perldb & PERLDBf_SUB))
-#define PERLDB_LINE    (perldb && (perldb & PERLDBf_LINE))
-#define PERLDB_NOOPT   (perldb && (perldb & PERLDBf_NOOPT))
-#define PERLDB_INTER   (perldb && (perldb & PERLDBf_INTER))
-#define PERLDB_SUBLINE (perldb && (perldb & PERLDBf_SUBLINE))
-#define PERLDB_SINGLE  (perldb && (perldb & PERLDBf_SINGLE))
-#define PERLDB_SUB_NN  (perldb && (perldb & (PERLDBf_NONAME)))
-#define PERLDB_GOTO    (perldb && (perldb & PERLDBf_GOTO))
+#define PERLDB_SUB     (PL_perldb && (PL_perldb & PERLDBf_SUB))
+#define PERLDB_LINE    (PL_perldb && (PL_perldb & PERLDBf_LINE))
+#define PERLDB_NOOPT   (PL_perldb && (PL_perldb & PERLDBf_NOOPT))
+#define PERLDB_INTER   (PL_perldb && (PL_perldb & PERLDBf_INTER))
+#define PERLDB_SUBLINE (PL_perldb && (PL_perldb & PERLDBf_SUBLINE))
+#define PERLDB_SINGLE  (PL_perldb && (PL_perldb & PERLDBf_SINGLE))
+#define PERLDB_SUB_NN  (PL_perldb && (PL_perldb & (PERLDBf_NONAME)))
+#define PERLDB_GOTO    (PL_perldb && (PL_perldb & PERLDBf_GOTO))
 
 
 #ifdef USE_LOCALE_NUMERIC
 
 #define SET_NUMERIC_STANDARD() \
     STMT_START {                               \
-       if (! numeric_standard)                 \
+       if (! PL_numeric_standard)                      \
            perl_set_numeric_standard();        \
     } STMT_END
 
 #define SET_NUMERIC_LOCAL() \
     STMT_START {                               \
-       if (! numeric_local)                    \
+       if (! PL_numeric_local)                 \
            perl_set_numeric_local();           \
     } STMT_END
 
@@ -2321,9 +2325,9 @@ enum {
  */
 #define offer_nice_chunk(chunk, chunk_size) do {       \
        LOCK_SV_MUTEX;                                  \
-       if (!nice_chunk) {                              \
-           nice_chunk = (char*)(chunk);                \
-           nice_chunk_size = (chunk_size);             \
+       if (!PL_nice_chunk) {                           \
+           PL_nice_chunk = (char*)(chunk);             \
+           PL_nice_chunk_size = (chunk_size);          \
        }                                               \
        else {                                          \
            Safefree(chunk);                            \