Perl-Dist-Strawberry
view release on metacpan or search on metacpan
share/perl-5.26/strtoull-fix-perl.h view on Meta::CPAN
/* We think that removing this decade-old undef this will cause too much
breakage on CPAN for too little gain. (See RT #119753)
However, we do need HAS_QUAD in the core for use by the drand48 code,
but not for Win32 VC6 because it has poor __int64 support. */
# undef HAS_QUAD
#endif
# endif
#endif
#define Size_t_MAX (~(Size_t)0)
#define SSize_t_MAX (SSize_t)(~(Size_t)0 >> 1)
#define IV_DIG (BIT_DIGITS(IVSIZE * 8))
#define UV_DIG (BIT_DIGITS(UVSIZE * 8))
#ifndef NO_PERL_PRESERVE_IVUV
#define PERL_PRESERVE_IVUV /* We like our integers to stay integers. */
#endif
/*
* The macros INT2PTR and NUM2PTR are (despite their names)
* bi-directional: they will convert int/float to or from pointers.
* However the conversion to int/float are named explicitly:
* PTR2IV, PTR2UV, PTR2NV.
*
* For int conversions we do not need two casts if pointers are
* the same size as IV and UV. Otherwise we need an explicit
* cast (PTRV) to avoid compiler warnings.
*/
#if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE)
# define PTRV UV
# define INT2PTR(any,d) (any)(d)
#else
# if PTRSIZE == LONGSIZE
# define PTRV unsigned long
# define PTR2ul(p) (unsigned long)(p)
# else
# define PTRV unsigned
# endif
#endif
#ifndef INT2PTR
# define INT2PTR(any,d) (any)(PTRV)(d)
#endif
#ifndef PTR2ul
# define PTR2ul(p) INT2PTR(unsigned long,p)
#endif
#define NUM2PTR(any,d) (any)(PTRV)(d)
#define PTR2IV(p) INT2PTR(IV,p)
#define PTR2UV(p) INT2PTR(UV,p)
#define PTR2NV(p) NUM2PTR(NV,p)
#define PTR2nat(p) (PTRV)(p) /* pointer to integer of PTRSIZE */
/* According to strict ANSI C89 one cannot freely cast between
* data pointers and function (code) pointers. There are at least
* two ways around this. One (used below) is to do two casts,
* first the other pointer to an (unsigned) integer, and then
* the integer to the other pointer. The other way would be
* to use unions to "overlay" the pointers. For an example of
* the latter technique, see union dirpu in struct xpvio in sv.h.
* The only feasible use is probably temporarily storing
* function pointers in a data pointer (such as a void pointer). */
#define DPTR2FPTR(t,p) ((t)PTR2nat(p)) /* data pointer to function pointer */
#define FPTR2DPTR(t,p) ((t)PTR2nat(p)) /* function pointer to data pointer */
#ifdef USE_LONG_DOUBLE
# if LONG_DOUBLESIZE == DOUBLESIZE
# define LONG_DOUBLE_EQUALS_DOUBLE
# undef USE_LONG_DOUBLE /* Ouch! */
# endif
#endif
#ifdef OVR_DBL_DIG
/* Use an overridden DBL_DIG */
# ifdef DBL_DIG
# undef DBL_DIG
# endif
# define DBL_DIG OVR_DBL_DIG
#else
/* The following is all to get DBL_DIG, in order to pick a nice
default value for printing floating point numbers in Gconvert
(see config.h). (It also has other uses, such as figuring out if
a given precision of printing can be done with a double instead of
a long double - Allen).
*/
#ifdef I_LIMITS
#include <limits.h>
#endif
#ifdef I_FLOAT
#include <float.h>
#endif
#ifndef HAS_DBL_DIG
#define DBL_DIG 15 /* A guess that works lots of places */
#endif
#endif
#ifdef OVR_LDBL_DIG
/* Use an overridden LDBL_DIG */
# ifdef LDBL_DIG
# undef LDBL_DIG
# endif
# define LDBL_DIG OVR_LDBL_DIG
#else
/* The following is all to get LDBL_DIG, in order to pick a nice
default value for printing floating point numbers in Gconvert.
(see config.h)
*/
# ifdef I_LIMITS
# include <limits.h>
# endif
# ifdef I_FLOAT
# include <float.h>
# endif
# ifndef HAS_LDBL_DIG
# if LONG_DOUBLESIZE == 10
# define LDBL_DIG 18 /* assume IEEE */
# else
# if LONG_DOUBLESIZE == 12
( run in 0.991 second using v1.01-cache-2.11-cpan-302cb4679cc )