This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
svleak.t: Add test for #123198
[perl5.git] / perl.h
diff --git a/perl.h b/perl.h
index 0bd8a53..580ad6a 100644 (file)
--- a/perl.h
+++ b/perl.h
@@ -1761,11 +1761,9 @@ typedef UVTYPE UV;
 #define FPTR2DPTR(t,p) ((t)PTR2nat(p)) /* function pointer to data pointer */
 
 #ifdef USE_LONG_DOUBLE
-#  if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE == DOUBLESIZE
-#      define LONG_DOUBLE_EQUALS_DOUBLE
-#  endif
-#  if !(defined(HAS_LONG_DOUBLE) && (LONG_DOUBLESIZE > DOUBLESIZE))
-#     undef USE_LONG_DOUBLE /* Ouch! */
+#  if LONG_DOUBLESIZE == DOUBLESIZE
+#    define LONG_DOUBLE_EQUALS_DOUBLE
+#    undef USE_LONG_DOUBLE /* Ouch! */
 #  endif
 #endif
 
@@ -1872,22 +1870,7 @@ typedef NVTYPE NV;
 #   ifdef I_SUNMATH
 #       include <sunmath.h>
 #   endif
-#   if defined(USE_QUADMATH) && defined(I_QUADMATH)
-#       include <quadmath.h>
-#   endif
-#   ifdef FLT128_DIG
-#       define NV_DIG FLT128_DIG
-#       define NV_MANT_DIG FLT128_MANT_DIG
-#       define NV_MIN FLT128_MIN
-#       define NV_MAX FLT128_MAX
-#       define NV_MIN_EXP FLT128_MIN_EXP
-#       define NV_MAX_EXP FLT128_MAX_EXP
-#       define NV_EPSILON FLT128_EPSILON
-#       define NV_MIN_10_EXP FLT128_MIN_10_EXP
-#       define NV_MAX_10_EXP FLT128_MAX_10_EXP
-#       define NV_INF HUGE_VALQ
-#       define NV_NAN nanq("0")
-#   elif defined(LDBL_DIG)
+#   if defined(LDBL_DIG)
 #       define NV_DIG LDBL_DIG
 #       ifdef LDBL_MANT_DIG
 #           define NV_MANT_DIG LDBL_MANT_DIG
@@ -1922,33 +1905,7 @@ typedef NVTYPE NV;
 #           endif
 #       endif
 #   endif
-#   if defined(USE_QUADMATH) && defined(I_QUADMATH)
-#       define Perl_acos acosq
-#       define Perl_asin asinq
-#       define Perl_atan atanq
-#       define Perl_atan2 atan2q
-#       define Perl_ceil ceilq
-#       define Perl_cos cosq
-#       define Perl_cosh coshq
-#       define Perl_exp expq
-/* no Perl_fabs, but there's PERL_ABS */
-#       define Perl_floor floorq
-#       define Perl_fmod fmodq
-#       define Perl_log logq
-#       define Perl_log10 log10q
-#       define Perl_pow powq
-#       define Perl_sin sinq
-#       define Perl_sinh sinhq
-#       define Perl_sqrt sqrtq
-#       define Perl_tan tanq
-#       define Perl_tanh tanhq
-#       define Perl_modf(x,y) modfq(x,y)
-#       define Perl_frexp(x,y) frexpq(x,y)
-#       define Perl_ldexp(x, y) ldexpq(x,y)
-#       define Perl_isinf(x) isinfq(x)
-#       define Perl_isnan(x) isnanq(x)
-#       define Perl_isfinite(x) !(isnanq(x) || isinfq(x))
-#   elif defined(HAS_SQRTL)
+#   if defined(HAS_SQRTL)
 #       define Perl_acos acosl
 #       define Perl_asin asinl
 #       define Perl_atan atanl
@@ -2017,6 +1974,44 @@ extern long double Perl_my_frexpl(long double x, int *e);
 #   ifndef Perl_isfinite
 #       define Perl_isfinite(x) Perl_isfinitel(x)
 #   endif
+#elif defined(USE_QUADMATH) && defined(I_QUADMATH)
+#   include <quadmath.h>
+#   define NV_DIG FLT128_DIG
+#   define NV_MANT_DIG FLT128_MANT_DIG
+#   define NV_MIN FLT128_MIN
+#   define NV_MAX FLT128_MAX
+#   define NV_MIN_EXP FLT128_MIN_EXP
+#   define NV_MAX_EXP FLT128_MAX_EXP
+#   define NV_EPSILON FLT128_EPSILON
+#   define NV_MIN_10_EXP FLT128_MIN_10_EXP
+#   define NV_MAX_10_EXP FLT128_MAX_10_EXP
+#   define NV_INF HUGE_VALQ
+#   define NV_NAN nanq("0")
+#   define Perl_acos acosq
+#   define Perl_asin asinq
+#   define Perl_atan atanq
+#   define Perl_atan2 atan2q
+#   define Perl_ceil ceilq
+#   define Perl_cos cosq
+#   define Perl_cosh coshq
+#   define Perl_exp expq
+/* no Perl_fabs, but there's PERL_ABS */
+#   define Perl_floor floorq
+#   define Perl_fmod fmodq
+#   define Perl_log logq
+#   define Perl_log10 log10q
+#   define Perl_pow powq
+#   define Perl_sin sinq
+#   define Perl_sinh sinhq
+#   define Perl_sqrt sqrtq
+#   define Perl_tan tanq
+#   define Perl_tanh tanhq
+#   define Perl_modf(x,y) modfq(x,y)
+#   define Perl_frexp(x,y) frexpq(x,y)
+#   define Perl_ldexp(x, y) ldexpq(x,y)
+#   define Perl_isinf(x) isinfq(x)
+#   define Perl_isnan(x) isnanq(x)
+#   define Perl_isfinite(x) !(isnanq(x) || isinfq(x))
 #else
 #   define NV_DIG DBL_DIG
 #   ifdef DBL_MANT_DIG
@@ -5226,8 +5221,8 @@ typedef enum {
 
 #define HINT_FEATURE_MASK      0x1c000000 /* 3 bits for feature bundles */
 
-                               /* Note: Used for NATIVE_HINTS, currently
-                                  defined by vms/vmsish.h:
+                               /* Note: Used for HINT_M_VMSISH_*,
+                                  currently defined by vms/vmsish.h:
                                0x40000000
                                0x80000000
                                 */
@@ -5498,6 +5493,26 @@ END_EXTERN_C
 #undef PERLVARI
 #undef PERLVARIC
 
+#if !defined(MULTIPLICITY)
+/* Set up PERLVAR macros for populating structs */
+#  define PERLVAR(prefix,var,type) type prefix##var;
+/* 'var' is an array of length 'n' */
+#  define PERLVARA(prefix,var,n,type) type prefix##var[n];
+/* initialize 'var' to init' */
+#  define PERLVARI(prefix,var,type,init) type prefix##var;
+/* like PERLVARI, but make 'var' a const */
+#  define PERLVARIC(prefix,var,type,init) type prefix##var;
+
+/* this is never instantiated, is it just used for sizeof(struct PerlHandShakeInterpreter) */
+struct PerlHandShakeInterpreter {
+#  include "intrpvar.h"
+};
+#  undef PERLVAR
+#  undef PERLVARA
+#  undef PERLVARI
+#  undef PERLVARIC
+#endif
+
 START_EXTERN_C
 
 /* dummy variables that hold pointers to both runops functions, thus forcing
@@ -5683,19 +5698,19 @@ typedef struct am_table_short AMTS;
 #define PERLDBf_SAVESRC_NOSUBS 0x800   /* Including evals that generate no subroutines */
 #define PERLDBf_SAVESRC_INVALID        0x1000  /* Save source that did not compile */
 
-#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))
-#define PERLDB_NAMEEVAL        (PL_perldb && (PL_perldb & PERLDBf_NAMEEVAL))
-#define PERLDB_NAMEANON        (PL_perldb && (PL_perldb & PERLDBf_NAMEANON))
-#define PERLDB_SAVESRC         (PL_perldb && (PL_perldb & PERLDBf_SAVESRC))
-#define PERLDB_SAVESRC_NOSUBS  (PL_perldb && (PL_perldb & PERLDBf_SAVESRC_NOSUBS))
-#define PERLDB_SAVESRC_INVALID (PL_perldb && (PL_perldb & PERLDBf_SAVESRC_INVALID))
+#define PERLDB_SUB             (PL_perldb & PERLDBf_SUB)
+#define PERLDB_LINE            (PL_perldb & PERLDBf_LINE)
+#define PERLDB_NOOPT           (PL_perldb & PERLDBf_NOOPT)
+#define PERLDB_INTER           (PL_perldb & PERLDBf_INTER)
+#define PERLDB_SUBLINE         (PL_perldb & PERLDBf_SUBLINE)
+#define PERLDB_SINGLE          (PL_perldb & PERLDBf_SINGLE)
+#define PERLDB_SUB_NN          (PL_perldb & PERLDBf_NONAME)
+#define PERLDB_GOTO            (PL_perldb & PERLDBf_GOTO)
+#define PERLDB_NAMEEVAL        (PL_perldb & PERLDBf_NAMEEVAL)
+#define PERLDB_NAMEANON        (PL_perldb & PERLDBf_NAMEANON)
+#define PERLDB_SAVESRC         (PL_perldb & PERLDBf_SAVESRC)
+#define PERLDB_SAVESRC_NOSUBS  (PL_perldb & PERLDBf_SAVESRC_NOSUBS)
+#define PERLDB_SAVESRC_INVALID (PL_perldb & PERLDBf_SAVESRC_INVALID)
 
 #ifdef USE_LOCALE
 /* These locale things are all subject to change */
@@ -6295,26 +6310,26 @@ extern void moncontrol(int);
  * passed straight through to _escape.
  */
 
-#define PERL_PV_ESCAPE_QUOTE        0x0001
+#define PERL_PV_ESCAPE_QUOTE        0x000001
 #define PERL_PV_PRETTY_QUOTE        PERL_PV_ESCAPE_QUOTE
 
-#define PERL_PV_PRETTY_ELLIPSES     0x0002
-#define PERL_PV_PRETTY_LTGT         0x0004
+#define PERL_PV_PRETTY_ELLIPSES     0x000002
+#define PERL_PV_PRETTY_LTGT         0x000004
+#define PERL_PV_PRETTY_EXACTSIZE    0x000008
 
-#define PERL_PV_ESCAPE_FIRSTCHAR    0x0008
+#define PERL_PV_ESCAPE_UNI          0x000100
+#define PERL_PV_ESCAPE_UNI_DETECT   0x000200
+#define PERL_PV_ESCAPE_NONASCII     0x000400
+#define PERL_PV_ESCAPE_FIRSTCHAR    0x000800
 
-#define PERL_PV_ESCAPE_UNI          0x0100
-#define PERL_PV_ESCAPE_UNI_DETECT   0x0200
-#define PERL_PV_ESCAPE_NONASCII     0x0400
-
-#define PERL_PV_ESCAPE_ALL         0x1000
-#define PERL_PV_ESCAPE_NOBACKSLASH  0x2000
-#define PERL_PV_ESCAPE_NOCLEAR      0x4000
-#define PERL_PV_ESCAPE_RE           0x8000
+#define PERL_PV_ESCAPE_ALL            0x001000
+#define PERL_PV_ESCAPE_NOBACKSLASH  0x002000
+#define PERL_PV_ESCAPE_NOCLEAR      0x004000
+#define PERL_PV_PRETTY_NOCLEAR      PERL_PV_ESCAPE_NOCLEAR
+#define PERL_PV_ESCAPE_RE           0x008000
 
-#define PERL_PV_ESCAPE_DWIM         0x10000
+#define PERL_PV_ESCAPE_DWIM         0x010000
 
-#define PERL_PV_PRETTY_NOCLEAR      PERL_PV_ESCAPE_NOCLEAR
 
 /* used by pv_display in dump.c*/
 #define PERL_PV_PRETTY_DUMP  PERL_PV_PRETTY_ELLIPSES|PERL_PV_PRETTY_QUOTE