Re: [perl #20920] Segmentation fault ("Safe Signal" queue problem?)
[p5sagit/p5-mst-13.2.git] / perl.h
diff --git a/perl.h b/perl.h
index 4f71313..ccc82da 100644 (file)
--- a/perl.h
+++ b/perl.h
 #   include "config.h"
 #endif
 
-#if defined(USE_ITHREADS) && defined(USE_5005THREADS)
-#  include "error: USE_ITHREADS and USE_5005THREADS are incompatible"
-#endif
-
-/* XXX This next guard can disappear if the sources are revised
-   to use USE_5005THREADS throughout. -- A.D  1/6/2000
-*/
-#if defined(USE_ITHREADS) && defined(USE_5005THREADS)
-#  include "error: USE_ITHREADS and USE_5005THREADS are incompatible"
-#endif
-
 /* See L<perlguts/"The Perl API"> for detailed notes on
  * PERL_IMPLICIT_CONTEXT and PERL_IMPLICIT_SYS */
 
 #  endif
 #endif
 
-#ifdef USE_5005THREADS
-#  ifndef PERL_IMPLICIT_CONTEXT
-#    define PERL_IMPLICIT_CONTEXT
-#  endif
-#endif
-
 #if defined(MULTIPLICITY)
 #  ifndef PERL_IMPLICIT_CONTEXT
 #    define PERL_IMPLICIT_CONTEXT
 /* <--- here ends the logic shared by perl.h and makedef.pl */
 
 #ifdef PERL_IMPLICIT_CONTEXT
-#  ifdef USE_5005THREADS
-struct perl_thread;
-#    define pTHX       register struct perl_thread *thr PERL_UNUSED_DECL
-#    define aTHX       thr
-#    define dTHR       dNOOP /* only backward compatibility */
-#    define dTHXa(a)   pTHX = (struct perl_thread*)a
-#  else
-#    ifndef MULTIPLICITY
-#      define MULTIPLICITY
-#    endif
-#    define pTHX       register PerlInterpreter *my_perl PERL_UNUSED_DECL
-#    define aTHX       my_perl
-#    define dTHXa(a)   pTHX = (PerlInterpreter*)a
+#  ifndef MULTIPLICITY
+#    define MULTIPLICITY
 #  endif
+#  define pTHX register PerlInterpreter *my_perl PERL_UNUSED_DECL
+#  define aTHX my_perl
+#  define dTHXa(a)     pTHX = (PerlInterpreter*)a
 #  define dTHX         pTHX = PERL_GET_THX
 #  define pTHX_                pTHX,
 #  define aTHX_                aTHX,
@@ -361,8 +336,7 @@ register struct op *Perl_op asm(stringify(OP_IN_REGISTER));
 /* HP-UX 10.X CMA (Common Multithreaded Architecure) insists that
    pthread.h must be included before all other header files.
 */
-#if (defined(USE_5005THREADS) || defined(USE_ITHREADS)) \
-    && defined(PTHREAD_H_FIRST) && defined(I_PTHREAD)
+#if defined(USE_ITHREADS) && defined(PTHREAD_H_FIRST) && defined(I_PTHREAD)
 #  include <pthread.h>
 #endif
 
@@ -684,18 +658,7 @@ typedef struct perl_mstats perl_mstats_t;
 #       define INCLUDE_PROTOTYPES /* for <socks.h> */
 #       define PERL_SOCKS_NEED_PROTOTYPES
 #   endif
-#   ifdef USE_5005THREADS
-#       define PERL_USE_THREADS /* store our value */
-#       undef USE_5005THREADS
-#   endif
 #   include <socks.h>
-#   ifdef USE_5005THREADS
-#       undef USE_5005THREADS /* socks.h does this on its own */
-#   endif
-#   ifdef PERL_USE_THREADS
-#       define USE_5005THREADS /* restore our value */
-#       undef PERL_USE_THREADS
-#   endif
 #   ifdef PERL_SOCKS_NEED_PROTOTYPES /* keep cpp space clean */
 #       undef INCLUDE_PROTOTYPES
 #       undef PERL_SOCKS_NEED_PROTOTYPES
@@ -758,15 +721,9 @@ int sockatmark(int);
 #   define SS_NORMAL           0
 #endif
 
-#ifdef USE_5005THREADS
-#  define ERRSV (thr->errsv)
-#  define DEFSV THREADSV(0)
-#  define SAVE_DEFSV save_threadsv(0)
-#else
-#  define ERRSV GvSV(PL_errgv)
-#  define DEFSV GvSV(PL_defgv)
-#  define SAVE_DEFSV SAVESPTR(GvSV(PL_defgv))
-#endif /* USE_5005THREADS */
+#define ERRSV GvSV(PL_errgv)
+#define DEFSV GvSV(PL_defgv)
+#define SAVE_DEFSV SAVESPTR(GvSV(PL_defgv))
 
 #define ERRHV GvHV(PL_errgv)   /* XXX unused, here for compatibility */
 
@@ -1993,19 +1950,13 @@ typedef struct clone_params CLONE_PARAMS;
 #  endif
 #endif
 
-/*
- * USE_5005THREADS needs to be after unixish.h as <pthread.h> includes
+/* USE_5005THREADS needs to be after unixish.h as <pthread.h> includes
  * <sys/signal.h> which defines NSIG - which will stop inclusion of <signal.h>
  * this results in many functions being undeclared which bothers C++
  * May make sense to have threads after "*ish.h" anyway
  */
 
-#if defined(USE_5005THREADS) || defined(USE_ITHREADS)
-#  if defined(USE_5005THREADS)
-   /* pending resolution of licensing issues, we avoid the erstwhile
-    * atomic.h everywhere */
-#  define EMULATE_ATOMIC_REFCOUNTS
-#  endif
+#if defined(USE_ITHREADS)
 #  ifdef NETWARE
 #   include <nw5thread.h>
 #  else
@@ -2040,7 +1991,7 @@ typedef pthread_key_t     perl_key;
 #    endif /* WIN32 */
 #  endif /* FAKE_THREADS */
 #endif /* NETWARE */
-#endif /* USE_5005THREADS || USE_ITHREADS */
+#endif /* USE_ITHREADS */
 
 #if defined(WIN32)
 #  include "win32.h"
@@ -2144,13 +2095,9 @@ typedef pthread_key_t    perl_key;
 #endif
 
 #if defined(PERL_IMPLICIT_CONTEXT) && !defined(PERL_GET_THX)
-#  ifdef USE_5005THREADS
-#    define PERL_GET_THX               ((struct perl_thread *)PERL_GET_CONTEXT)
-#  else
 #  ifdef MULTIPLICITY
 #    define PERL_GET_THX               ((PerlInterpreter *)PERL_GET_CONTEXT)
 #  endif
-#  endif
 #  define PERL_SET_THX(t)              PERL_SET_CONTEXT(t)
 #endif
 
@@ -2226,17 +2173,12 @@ union any {
     I32                any_i32;
     IV         any_iv;
     long       any_long;
+    bool       any_bool;
     void       (*any_dptr) (void*);
     void       (*any_dxptr) (pTHX_ void*);
 };
 #endif
 
-#ifdef USE_5005THREADS
-#define ARGSproto struct perl_thread *thr
-#else
-#define ARGSproto
-#endif /* USE_5005THREADS */
-
 typedef I32 (*filter_t) (pTHX_ int, SV *, int);
 
 #define FILTER_READ(idx, sv, len)  filter_read(idx, sv, len)
@@ -2577,11 +2519,7 @@ Gid_t getegid (void);
 #  define DEBUG_Xv(a) DEBUG__(DEBUG_Xv_TEST, a)
 #  define DEBUG_D(a) DEBUG__(DEBUG_D_TEST, a)
 
-#  ifdef USE_5005THREADS
-#    define DEBUG_S(a) DEBUG__(DEBUG_S_TEST, a)
-#  else
-#    define DEBUG_S(a)
-#  endif
+#  define DEBUG_S(a)
 
 #  define DEBUG_T(a) DEBUG__(DEBUG_T_TEST, a)
 #  define DEBUG_R(a) DEBUG__(DEBUG_R_TEST, a)
@@ -2679,6 +2617,7 @@ Gid_t getegid (void);
 #define PERL_MAGIC_uvar_elem     'u' /* Reserved for use by extensions */
 #define PERL_MAGIC_vec           'v' /* vec() lvalue */
 #define PERL_MAGIC_vstring       'V' /* SV was vstring literal */
+#define PERL_MAGIC_utf8                  'w' /* Cached UTF-8 information */
 #define PERL_MAGIC_substr        'x' /* substr() lvalue */
 #define PERL_MAGIC_defelem       'y' /* Shadow "foreach" iterator variable /
                                        smart parameter vivification */
@@ -3265,28 +3204,28 @@ enum {          /* pass one of these to get_vtbl */
     want_vtbl_collxfrm,
     want_vtbl_amagic,
     want_vtbl_amagicelem,
-#ifdef USE_5005THREADS
-    want_vtbl_mutex,
-#endif
     want_vtbl_regdata,
     want_vtbl_regdatum,
-    want_vtbl_backref
+    want_vtbl_backref,
+    want_vtbl_utf8
 };
 
                                /* Note: the lowest 8 bits are reserved for
                                   stuffing into op->op_private */
 #define HINT_PRIVATE_MASK      0x000000ff
-#define HINT_INTEGER           0x00000001
-#define HINT_STRICT_REFS       0x00000002
-#define HINT_LOCALE            0x00000004
-#define HINT_BYTES             0x00000008
+#define HINT_INTEGER           0x00000001 /* integer pragma */
+#define HINT_STRICT_REFS       0x00000002 /* strict pragma */
+#define HINT_LOCALE            0x00000004 /* locale pragma */
+#define HINT_BYTES             0x00000008 /* bytes pragma */
 /* #define HINT_notused10      0x00000010 */
                                /* Note: 20,40,80 used for NATIVE_HINTS */
+                               /* currently defined by vms/vmsish.h */
 
 #define HINT_BLOCK_SCOPE       0x00000100
-#define HINT_STRICT_SUBS       0x00000200
-#define HINT_STRICT_VARS       0x00000400
+#define HINT_STRICT_SUBS       0x00000200 /* strict pragma */
+#define HINT_STRICT_VARS       0x00000400 /* strict pragma */
 
+/* The HINT_NEW_* constants are used by the overload pragma */
 #define HINT_NEW_INTEGER       0x00001000
 #define HINT_NEW_FLOAT         0x00002000
 #define HINT_NEW_BINARY                0x00004000
@@ -3294,12 +3233,15 @@ enum {          /* pass one of these to get_vtbl */
 #define HINT_NEW_RE            0x00010000
 #define HINT_LOCALIZE_HH       0x00020000 /* %^H needs to be copied */
 
-#define HINT_RE_TAINT          0x00100000
-#define HINT_RE_EVAL           0x00200000
+#define HINT_RE_TAINT          0x00100000 /* re pragma */
+#define HINT_RE_EVAL           0x00200000 /* re pragma */
 
-#define HINT_FILETEST_ACCESS   0x00400000
-#define HINT_UTF8              0x00800000
+#define HINT_FILETEST_ACCESS   0x00400000 /* filetest pragma */
+#define HINT_UTF8              0x00800000 /* utf8 pragma */
 
+#define HINT_ASSERTING          0x01000000
+
+/* The following are stored in $sort::hints, not in PL_hints */
 #define HINT_SORT_SORT_BITS    0x000000FF /* allow 256 different ones */
 #define HINT_SORT_QUICKSORT    0x00000001
 #define HINT_SORT_MERGESORT    0x00000002
@@ -3381,9 +3323,7 @@ struct perl_vars *PL_VarsPtr;
 */
 
 struct interpreter {
-#  ifndef USE_5005THREADS
-#    include "thrdvar.h"
-#  endif
+#  include "thrdvar.h"
 #  include "intrpvar.h"
 /*
  * The following is a buffer where new variables must
@@ -3398,21 +3338,7 @@ struct interpreter {
 };
 #endif /* MULTIPLICITY */
 
-#ifdef USE_5005THREADS
-/* If we have threads define a struct with all the variables
- * that have to be per-thread
- */
-
-
-struct perl_thread {
-#include "thrdvar.h"
-};
-
-typedef struct perl_thread *Thread;
-
-#else
 typedef void *Thread;
-#endif
 
 /* Done with PERLVAR macros for now ... */
 #undef PERLVAR
@@ -3465,9 +3391,7 @@ typedef void *Thread;
 #if !defined(MULTIPLICITY)
 START_EXTERN_C
 #  include "intrpvar.h"
-#  ifndef USE_5005THREADS
-#    include "thrdvar.h"
-#  endif
+#  include "thrdvar.h"
 END_EXTERN_C
 #endif
 
@@ -3557,10 +3481,6 @@ EXT MGVTBL PL_vtbl_fm =  {0,     MEMBER_TO_FPTR(Perl_magic_setfm),
 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)};
-#endif /* USE_5005THREADS */
 EXT MGVTBL PL_vtbl_defelem = {MEMBER_TO_FPTR(Perl_magic_getdefelem),
                                        MEMBER_TO_FPTR(Perl_magic_setdefelem),
                                        0,      0,      0};
@@ -3587,6 +3507,10 @@ EXT MGVTBL PL_vtbl_backref =       {0,   0,
 EXT MGVTBL PL_vtbl_ovrld   =     {0,   0,
                                        0,      0,      MEMBER_TO_FPTR(Perl_magic_freeovrld)};
 
+EXT MGVTBL PL_vtbl_utf8 = {0,
+                               MEMBER_TO_FPTR(Perl_magic_setutf8),
+                                       0,      0,      0};
+
 #else /* !DOINIT */
 
 EXT MGVTBL PL_vtbl_sv;
@@ -3612,10 +3536,6 @@ EXT MGVTBL PL_vtbl_fm;
 EXT MGVTBL PL_vtbl_uvar;
 EXT MGVTBL PL_vtbl_ovrld;
 
-#ifdef USE_5005THREADS
-EXT MGVTBL PL_vtbl_mutex;
-#endif /* USE_5005THREADS */
-
 EXT MGVTBL PL_vtbl_defelem;
 EXT MGVTBL PL_vtbl_regexp;
 EXT MGVTBL PL_vtbl_regdata;
@@ -3629,6 +3549,7 @@ EXT MGVTBL PL_vtbl_amagic;
 EXT MGVTBL PL_vtbl_amagicelem;
 
 EXT MGVTBL PL_vtbl_backref;
+EXT MGVTBL PL_vtbl_utf8;
 
 #endif /* !DOINIT */
 
@@ -3784,8 +3705,8 @@ typedef struct am_table_short AMTS;
 #define PERLDB_ALL             (PERLDBf_SUB    | PERLDBf_LINE  |       \
                                 PERLDBf_NOOPT  | PERLDBf_INTER |       \
                                 PERLDBf_SUBLINE| PERLDBf_SINGLE|       \
-                                PERLDBf_NAMEEVAL| PERLDBf_NAMEANON)
-                                       /* No _NONAME, _GOTO */
+                                PERLDBf_NAMEEVAL| PERLDBf_NAMEANON )
+                                       /* No _NONAME, _GOTO, _ASSERTION */
 #define PERLDBf_SUB            0x01    /* Debug sub enter/exit */
 #define PERLDBf_LINE           0x02    /* Keep line # */
 #define PERLDBf_NOOPT          0x04    /* Switch off optimizations */
@@ -3797,6 +3718,7 @@ typedef struct am_table_short AMTS;
 #define PERLDBf_GOTO           0x80    /* Report goto: call DB::goto */
 #define PERLDBf_NAMEEVAL       0x100   /* Informative names for evals */
 #define PERLDBf_NAMEANON       0x200   /* Informative names for anon subs */
+#define PERLDBf_ASSERTION       0x400   /* Debug assertion subs enter/exit */
 
 #define PERLDB_SUB     (PL_perldb && (PL_perldb & PERLDBf_SUB))
 #define PERLDB_LINE    (PL_perldb && (PL_perldb & PERLDBf_LINE))
@@ -3808,7 +3730,7 @@ typedef struct am_table_short AMTS;
 #define PERLDB_GOTO    (PL_perldb && (PL_perldb & PERLDBf_GOTO))
 #define PERLDB_NAMEEVAL        (PL_perldb && (PL_perldb & PERLDBf_NAMEEVAL))
 #define PERLDB_NAMEANON        (PL_perldb && (PL_perldb & PERLDBf_NAMEANON))
-
+#define PERLDB_ASSERTION (PL_perldb && (PL_perldb & PERLDBf_ASSERTION))
 
 #ifdef USE_LOCALE_NUMERIC
 
@@ -3908,17 +3830,6 @@ typedef struct am_table_short AMTS;
 #   define Atoul(s)    Strtoul(s, (char **)NULL, 10)
 #endif
 
-#if !defined(PERLIO_IS_STDIO)
-/*
- * Remap printf
- */
-#undef printf
-#if defined(__GNUC__) && !defined(__STRICT_ANSI__) && !defined(PERL_GCC_PEDANTIC)
-#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
@@ -4255,6 +4166,41 @@ extern void moncontrol(int);
 #define UNICODE_PARA_SEPA_1    0x80
 #define UNICODE_PARA_SEPA_2    0xA9
 
+#ifndef PIPESOCK_MODE
+#  define PIPESOCK_MODE
+#endif
+
+#define PERL_MAGIC_UTF8_CACHESIZE      2
+
+#define PERL_UNICODE_STDIN_FLAG                        0x0001
+#define PERL_UNICODE_STDOUT_FLAG               0x0002
+#define PERL_UNICODE_STDERR_FLAG               0x0004
+#define PERL_UNICODE_STD_FLAG                  0x0007
+#define PERL_UNICODE_IN_FLAG                   0x0008
+#define PERL_UNICODE_OUT_FLAG                  0x0010
+#define PERL_UNICODE_INOUT_FLAG                        0x0018
+#define PERL_UNICODE_ARGV_FLAG                 0x0020 /* For @ARGV? */
+#define PERL_UNICODE_LOCALE_FLAG               0x0040
+#define PERL_UNICODE_WIDESYSCALLS_FLAG         0x0080 /* for Sarathy */
+
+#define PERL_UNICODE_DEFAULT_FLAGS \
+       (PERL_UNICODE_STD_FLAG          | \
+        PERL_UNICODE_INOUT_FLAG        | \
+        PERL_UNICODE_LOCALE_FLAG)
+
+#define PERL_UNICODE_ALL_FLAGS                 0x00ff
+
+#define PERL_UNICODE_STDIN                     'I'
+#define PERL_UNICODE_STDOUT                    'O'
+#define PERL_UNICODE_STDERR                    'E'
+#define PERL_UNICODE_STD                       'S'
+#define PERL_UNICODE_IN                                'i'
+#define PERL_UNICODE_OUT                       'o'
+#define PERL_UNICODE_INOUT                     'D'
+#define PERL_UNICODE_ARGV                      'A'
+#define PERL_UNICODE_LOCALE                    'L'
+#define PERL_UNICODE_WIDESYSCALLS              'W'
+
 /* and finally... */
 #define PERL_PATCHLEVEL_H_IMPLICIT
 #include "patchlevel.h"