#ifndef H_PERL
#define H_PERL 1
#if defined(__HP_cc) || defined(__HP_aCC)
#pragma diag_suppress 4276
#pragma diag_suppress 4232
#endif /* end HPUX warning disablement */
#ifdef PERL_FOR_X2P
#undef MULTIPLICITY
#undef USE_STDIO
#define USE_STDIO
#endif /* PERL_FOR_X2P */
#include "config.h"
#ifdef WIN32_USE_FAKE_OLD_MINGW_LOCALES
# define UINT unsigned int
# undef USE_THREAD_SAFE_LOCALE
# define NO_POSIX_2008_LOCALE
# undef HAS_NL_LANGINFO
# undef HAS_NL_LANGINFO_L
# undef _UCRT
# ifdef USE_LOCALE
# define TS_W32_BROKEN_LOCALECONV
# ifdef USE_THREADS
# define EMULATE_THREAD_SAFE_LOCALES
# endif
# endif
#endif
#ifdef DEBUGGING
# define debug_pDEPTH U32 depth
# define comma_pDEPTH ,debug_pDEPTH
# define debug_aDEPTH depth
# define comma_aDEPTH ,debug_aDEPTH
#else
# define debug_aDEPTH
# define comma_aDEPTH
# define debug_pDEPTH
# define comma_pDEPTH
#endif
#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \
defined(_STDC_C99) || defined(__c99)
# define HAS_C99 1
#endif
#ifdef USE_THREADS
# if !defined(MULTIPLICITY)
# define MULTIPLICITY
# endif
#endif
#if defined(MULTIPLICITY) \
&& ! defined(PERL_CORE) \
&& ! defined(PERL_IMPLICIT_CONTEXT)
# define PERL_IMPLICIT_CONTEXT
#endif
#if defined(PERL_IMPLICIT_CONTEXT) && !defined(MULTIPLICITY)
# define MULTIPLICITY
#endif
#if defined(PERL_CORE) && defined(PERL_IMPLICIT_CONTEXT)
# pragma message("PERL_IMPLICIT_CONTEXT was removed from core perl. It does not do anything. Undeffing it for compilation")
# undef PERL_IMPLICIT_CONTEXT
#endif
#ifdef __CYGWIN__
# undef WIN32
# undef _WIN32
#endif
#if defined(MULTIPLICITY) && !defined(USE_REENTRANT_API) && !defined(WIN32)
# define USE_REENTRANT_API
#endif
#undef START_EXTERN_C
#undef END_EXTERN_C
#undef EXTERN_C
#ifdef __cplusplus
# define EXTERN_C extern "C"
# define START_EXTERN_C EXTERN_C {
# define END_EXTERN_C }
#else
# define START_EXTERN_C
# define END_EXTERN_C
# define EXTERN_C extern
#endif
#if !defined(PERL_STATIC_INLINE)
# ifdef HAS_STATIC_INLINE
# define PERL_STATIC_INLINE static inline
# else
# define PERL_STATIC_INLINE static
# endif
#endif
#ifdef MULTIPLICITY
# define tTHX PerlInterpreter*
# define pTHX tTHX my_perl PERL_UNUSED_DECL
# define aTHX my_perl
# define aTHXa(a) aTHX = (tTHX)a
# define dTHXa(a) pTHX = (tTHX)a
# define dTHX pTHX = PERL_GET_THX
# define pTHX_ pTHX,
# define aTHX_ aTHX,
# define pTHX_1 2
# define pTHX_2 3
# define pTHX_3 4
# define pTHX_4 5
# define pTHX_5 6
# define pTHX_6 7
# define pTHX_7 8
# define pTHX_8 9
# define pTHX_9 10
# define pTHX_12 13
# if defined(DEBUGGING) && !defined(PERL_TRACK_MEMPOOL)
# define PERL_TRACK_MEMPOOL
# endif
#else
# undef PERL_TRACK_MEMPOOL
#endif
#ifdef DEBUGGING
# define dTHX_DEBUGGING dTHX
#else
# define dTHX_DEBUGGING dNOOP
#endif
#define STATIC static
#ifndef PERL_CORE
# define CPERLscope(x) x
# define CPERLarg void
# define CPERLarg_
# define _CPERLarg
# define PERL_OBJECT_THIS
# define _PERL_OBJECT_THIS
# define PERL_OBJECT_THIS_
# define CALL_FPTR(fptr) (*fptr)
# define MEMBER_TO_FPTR(name) name
#endif /* !PERL_CORE */
#ifdef PERL_RC_STACK
# define CALLRUNOPS Perl_runops_wrap
#else
# define CALLRUNOPS PL_runops
#endif
#define CALLREGCOMP(sv, flags) Perl_pregcomp(aTHX_ (sv),(flags))
#define CALLREGCOMP_ENG(prog, sv, flags) (prog)->comp(aTHX_ sv, flags)
#define CALLREGEXEC(prog,stringarg,strend,strbeg,minend,sv,data,flags) \
RX_ENGINE(prog)->exec(aTHX_ (prog),(stringarg),(strend), \
(strbeg),(minend),(sv),(data),(flags))
#define CALLREG_INTUIT_START(prog,sv,strbeg,strpos,strend,flags,data) \
RX_ENGINE(prog)->intuit(aTHX_ (prog), (sv), (strbeg), (strpos), \
(strend),(flags),(data))
#define CALLREG_INTUIT_STRING(prog) \
RX_ENGINE(prog)->checkstr(aTHX_ (prog))
#define CALLREGFREE(prog) \
Perl_pregfree(aTHX_ (prog))
#define CALLREGFREE_PVT(prog) \
if
(prog && RX_ENGINE(prog)) RX_ENGINE(prog)->rxfree(aTHX_ (prog))
#define CALLREG_NUMBUF_FETCH(rx,paren,usesv) \
RX_ENGINE(rx)->numbered_buff_FETCH(aTHX_ (rx),(paren),(usesv))
#define CALLREG_NUMBUF_STORE(rx,paren,value) \
RX_ENGINE(rx)->numbered_buff_STORE(aTHX_ (rx),(paren),(value))
#define CALLREG_NUMBUF_LENGTH(rx,sv,paren) \
RX_ENGINE(rx)->numbered_buff_LENGTH(aTHX_ (rx),(sv),(paren))
#define CALLREG_NAMED_BUFF_FETCH(rx, key, flags) \
RX_ENGINE(rx)->named_buff(aTHX_ (rx), (key), NULL, ((flags) | RXapif_FETCH))
#define CALLREG_NAMED_BUFF_STORE(rx, key, value, flags) \
RX_ENGINE(rx)->named_buff(aTHX_ (rx), (key), (value), ((flags) | RXapif_STORE))
#define CALLREG_NAMED_BUFF_DELETE(rx, key, flags) \
RX_ENGINE(rx)->named_buff(aTHX_ (rx),(key), NULL, ((flags) | RXapif_DELETE))
#define CALLREG_NAMED_BUFF_CLEAR(rx, flags) \
RX_ENGINE(rx)->named_buff(aTHX_ (rx), NULL, NULL, ((flags) | RXapif_CLEAR))
#define CALLREG_NAMED_BUFF_EXISTS(rx, key, flags) \
RX_ENGINE(rx)->named_buff(aTHX_ (rx), (key), NULL, ((flags) | RXapif_EXISTS))
#define CALLREG_NAMED_BUFF_FIRSTKEY(rx, flags) \
RX_ENGINE(rx)->named_buff_iter(aTHX_ (rx), NULL, ((flags) | RXapif_FIRSTKEY))
#define CALLREG_NAMED_BUFF_NEXTKEY(rx, lastkey, flags) \
RX_ENGINE(rx)->named_buff_iter(aTHX_ (rx), (lastkey), ((flags) | RXapif_NEXTKEY))
#define CALLREG_NAMED_BUFF_SCALAR(rx, flags) \
RX_ENGINE(rx)->named_buff(aTHX_ (rx), NULL, NULL, ((flags) | RXapif_SCALAR))
#define CALLREG_NAMED_BUFF_COUNT(rx) \
RX_ENGINE(rx)->named_buff(aTHX_ (rx), NULL, NULL, RXapif_REGNAMES_COUNT)
#define CALLREG_NAMED_BUFF_ALL(rx, flags) \
RX_ENGINE(rx)->named_buff(aTHX_ (rx), NULL, NULL, flags)
#define CALLREG_PACKAGE(rx) \
RX_ENGINE(rx)->qr_package(aTHX_ (rx))
#if defined(USE_ITHREADS)
# define CALLREGDUPE(prog,param) \
Perl_re_dup(aTHX_ (prog),(param))
# define CALLREGDUPE_PVT(prog,param) \
(prog ? RX_ENGINE(prog)->dupe(aTHX_ (prog),(param)) \
: (REGEXP *)NULL)
#endif
#if defined(__GNUC__) && !defined(__clang__) && !defined(__INTEL_COMPILER)
# define PERL_IS_GCC 1
#endif
#define PERL_GCC_VERSION_GE(major,minor,patch) \
(((100000 * __GNUC__) + (1000 * __GNUC_MINOR__) + __GNUC_PATCHLEVEL__) \
>= ((100000 * (major)) + (1000 * (minor)) + (patch)))
#define PERL_GCC_VERSION_GT(major,minor,patch) \
(((100000 * __GNUC__) + (1000 * __GNUC_MINOR__) + __GNUC_PATCHLEVEL__) \
> ((100000 * (major)) + (1000 * (minor)) + (patch)))
#define PERL_GCC_VERSION_LE(major,minor,patch) \
(((100000 * __GNUC__) + (1000 * __GNUC_MINOR__) + __GNUC_PATCHLEVEL__) \
<= ((100000 * (major)) + (1000 * (minor)) + (patch)))
#define PERL_GCC_VERSION_LT(major,minor,patch) \
(((100000 * __GNUC__) + (1000 * __GNUC_MINOR__) + __GNUC_PATCHLEVEL__) \
< ((100000 * (major)) + (1000 * (minor)) + (patch)))
#if defined __GNUC__ && !defined(__INTEL_COMPILER)
# if PERL_GCC_VERSION_GE(3,1,0)
# define HASATTRIBUTE_DEPRECATED
# endif
# if PERL_GCC_VERSION_GE(3,0,0) /* XXX Verify this version */
# define HASATTRIBUTE_FORMAT
# if defined __MINGW32__
# define PRINTF_FORMAT_NULL_OK
# endif
# endif
# if PERL_GCC_VERSION_GE(3,0,0)
# define HASATTRIBUTE_MALLOC
# endif
# if PERL_GCC_VERSION_GE(3,3,0)
# define HASATTRIBUTE_NONNULL
# endif
# if PERL_GCC_VERSION_GE(2,5,0)
# define HASATTRIBUTE_NORETURN
# endif
# if PERL_GCC_VERSION_GE(3,0,0)
# define HASATTRIBUTE_PURE
# endif
# if PERL_GCC_VERSION_GE(3,4,0)
# define HASATTRIBUTE_UNUSED
# endif
# if __GNUC__ == 3 && __GNUC_MINOR__ == 3 && !defined(__cplusplus)
# define HASATTRIBUTE_UNUSED /* gcc-3.3, but not g++-3.3. */
# endif
# if PERL_GCC_VERSION_GE(3,4,0)
# define HASATTRIBUTE_WARN_UNUSED_RESULT
# endif
# if PERL_GCC_VERSION_GE(4,7,0)
# define HASATTRIBUTE_ALWAYS_INLINE
# endif
# if PERL_GCC_VERSION_GE(3,3,0)
# define HASATTRIBUTE_VISIBILITY
# endif
#endif
#ifdef HASATTRIBUTE_DEPRECATED
# define __attribute__deprecated__ __attribute__((deprecated))
#endif
#ifdef HASATTRIBUTE_FORMAT
# define __attribute__format__(x,y,z) __attribute__((format(x,y,z)))
#endif
#ifdef HASATTRIBUTE_MALLOC
# define __attribute__malloc__ __attribute__((__malloc__))
#endif
#ifdef HASATTRIBUTE_NONNULL
# define __attribute__nonnull__(a) __attribute__((nonnull(a)))
#endif
#ifdef HASATTRIBUTE_NORETURN
# define __attribute__noreturn__ __attribute__((noreturn))
#endif
#ifdef HASATTRIBUTE_PURE
# define __attribute__pure__ __attribute__((pure))
#endif
#ifdef HASATTRIBUTE_UNUSED
# define __attribute__unused__ __attribute__((unused))
#endif
#ifdef HASATTRIBUTE_WARN_UNUSED_RESULT
# define __attribute__warn_unused_result__ __attribute__((warn_unused_result))
#endif
#ifdef HASATTRIBUTE_ALWAYS_INLINE
# if !defined(PERL_IS_GCC) || PERL_GCC_VERSION_GE(4,7,0)
# define __attribute__always_inline__ __attribute__((always_inline))
# endif
#endif
#if defined(HASATTRIBUTE_VISIBILITY) && !defined(_WIN32) && !defined(__CYGWIN__)
# define __attribute__visibility__(x) __attribute__((visibility(x)))
#endif
#ifndef __attribute__deprecated__
# define __attribute__deprecated__
#endif
#ifndef __attribute__format__
# define __attribute__format__(x,y,z)
#endif
#ifndef __attribute__malloc__
# define __attribute__malloc__
#endif
#ifndef __attribute__nonnull__
# define __attribute__nonnull__(a)
#endif
#ifndef __attribute__noreturn__
# define __attribute__noreturn__
#endif
#ifndef __attribute__pure__
# define __attribute__pure__
#endif
#ifndef __attribute__unused__
# define __attribute__unused__
#endif
#ifndef __attribute__warn_unused_result__
# define __attribute__warn_unused_result__
#endif
#ifndef __attribute__always_inline__
# define __attribute__always_inline__
#endif
#ifndef __attribute__visibility__
# define __attribute__visibility__(x)
#endif
#ifdef PRINTF_FORMAT_NULL_OK
# define __attribute__format__null_ok__(x,y,z) __attribute__format__(x,y,z)
#else
# define __attribute__format__null_ok__(x,y,z)
#endif
#ifndef PERL_UNUSED_DECL
# define PERL_UNUSED_DECL __attribute__unused__
#endif
#ifndef PERL_UNUSED_ARG
# define PERL_UNUSED_ARG(x) ((void)sizeof(x))
#endif
#ifndef PERL_UNUSED_VAR
# define PERL_UNUSED_VAR(x) ((void)sizeof(x))
#endif
#if defined(MULTIPLICITY)
# define PERL_UNUSED_CONTEXT PERL_UNUSED_ARG(my_perl)
#else
# define PERL_UNUSED_CONTEXT
#endif
#if defined(PERL_GCC_PEDANTIC) || \
(defined(__GNUC__) && defined(__cplusplus) && \
(PERL_GCC_VERSION_LT(4,2,0)))
# ifndef PERL_GCC_BRACE_GROUPS_FORBIDDEN
# define PERL_GCC_BRACE_GROUPS_FORBIDDEN
# endif
#endif
#ifndef PERL_UNUSED_RESULT
# if defined(__GNUC__) && defined(HASATTRIBUTE_WARN_UNUSED_RESULT)
# define PERL_UNUSED_RESULT(v) STMT_START { __typeof__(v) z = (v); (void)sizeof(z); } STMT_END
# else
# define PERL_UNUSED_RESULT(v) ((void)(v))
# endif
#endif
#if defined(__clang__) || defined(__clang) || PERL_GCC_VERSION_GE(4,6,0)
# define GCC_DIAG_PRAGMA(x) _Pragma (#x)
# define GCC_DIAG_IGNORE(x) _Pragma("GCC diagnostic push") \
GCC_DIAG_PRAGMA(GCC diagnostic ignored #x)
# define GCC_DIAG_RESTORE _Pragma("GCC diagnostic pop")
#else
# define GCC_DIAG_IGNORE(w)
# define GCC_DIAG_RESTORE
#endif
#define GCC_DIAG_IGNORE_DECL(x) GCC_DIAG_IGNORE(x) dNOOP
#define GCC_DIAG_RESTORE_DECL GCC_DIAG_RESTORE dNOOP
#define GCC_DIAG_IGNORE_STMT(x) GCC_DIAG_IGNORE(x) NOOP
#define GCC_DIAG_RESTORE_STMT GCC_DIAG_RESTORE NOOP
#if defined(__clang__) || defined(__clang)
# define CLANG_DIAG_PRAGMA(x) _Pragma (#x)
# define CLANG_DIAG_IGNORE(x) _Pragma("clang diagnostic push") \
CLANG_DIAG_PRAGMA(clang diagnostic ignored #x)
# define CLANG_DIAG_RESTORE _Pragma("clang diagnostic pop")
#else
# define CLANG_DIAG_IGNORE(w)
# define CLANG_DIAG_RESTORE
#endif
#define CLANG_DIAG_IGNORE_DECL(x) CLANG_DIAG_IGNORE(x) dNOOP
#define CLANG_DIAG_RESTORE_DECL CLANG_DIAG_RESTORE dNOOP
#define CLANG_DIAG_IGNORE_STMT(x) CLANG_DIAG_IGNORE(x) NOOP
#define CLANG_DIAG_RESTORE_STMT CLANG_DIAG_RESTORE NOOP
#if defined(_MSC_VER)
# define MSVC_DIAG_IGNORE(x) __pragma(warning(push)) \
__pragma(warning(disable : x))
# define MSVC_DIAG_RESTORE __pragma(warning(pop))
#else
# define MSVC_DIAG_IGNORE(x)
# define MSVC_DIAG_RESTORE
#endif
#define MSVC_DIAG_IGNORE_DECL(x) MSVC_DIAG_IGNORE(x) dNOOP
#define MSVC_DIAG_RESTORE_DECL MSVC_DIAG_RESTORE dNOOP
#define MSVC_DIAG_IGNORE_STMT(x) MSVC_DIAG_IGNORE(x) NOOP
#define MSVC_DIAG_RESTORE_STMT MSVC_DIAG_RESTORE NOOP
#define NOOP ((void)0)
#define dNOOP struct Perl___notused_struct
#ifndef pTHX
# define pTHX void
# define pTHX_
# define aTHX
# define aTHX_
# define aTHXa(a) NOOP
# define dTHXa(a) dNOOP
# define dTHX dNOOP
# define pTHX_1 1
# define pTHX_2 2
# define pTHX_3 3
# define pTHX_4 4
# define pTHX_5 5
# define pTHX_6 6
# define pTHX_7 7
# define pTHX_8 8
# define pTHX_9 9
# define pTHX_12 12
#endif
#ifndef PERL_CORE
# define dVAR dNOOP
# define dMY_CXT_SV dNOOP
# ifndef pTHXo
# define pTHXo pTHX
# define pTHXo_ pTHX_
# define aTHXo aTHX
# define aTHXo_ aTHX_
# define dTHXo dTHX
# define dTHXoa(x) dTHXa(x)
# endif
#endif
#ifndef pTHXx
# define pTHXx PerlInterpreter *my_perl
# define pTHXx_ pTHXx,
# define aTHXx my_perl
# define aTHXx_ aTHXx,
# define dTHXx dTHX
#endif
#ifdef PERL_IMPLICIT_SYS
# define dTHXs dTHX
#else
# define dTHXs dNOOP
#endif
#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) && !defined(__cplusplus)
# ifndef PERL_USE_GCC_BRACE_GROUPS
# define PERL_USE_GCC_BRACE_GROUPS
# endif
#endif
#if !(defined(STMT_START) && defined(STMT_END))
# define STMT_START do
# define STMT_END while (0)
#endif
#ifndef BYTEORDER /* Should never happen -- byteorder is in config.h */
# define BYTEORDER 0x1234
#endif
#if 'A' == 65 && 'I' == 73 && 'J' == 74 && 'Z' == 90
# define ASCIIish
#else
# undef ASCIIish
#endif
#if defined(WIN32)
#define DOSISH 1
#endif
#ifndef PERL_CORE
#define VOL volatile
#define CAN_PROTOTYPE
#define _(args) args
#define I_LIMITS
#define I_STDARG
#define STANDARD_C
#endif
#ifndef PERL_MEM_LOG
# define UNLESS_PERL_MEM_LOG(code) code
#else
# define UNLESS_PERL_MEM_LOG(code)
#endif
#if defined(SILENT_NO_TAINT_SUPPORT) && !defined(NO_TAINT_SUPPORT)
# define NO_TAINT_SUPPORT 1
#endif
#ifdef NO_TAINT_SUPPORT
# define TAINT NOOP
# define TAINT_NOT NOOP
# define TAINT_IF(c) NOOP
# define TAINT_ENV() NOOP
# define TAINT_PROPER(s) NOOP
# define TAINT_set(s) NOOP
# define TAINT_get 0
# define TAINTING_get 0
# define TAINTING_set(s) NOOP
# define TAINT_WARN_get 0
# define TAINT_WARN_set(s) NOOP
#else
# define TAINT (PL_tainted = PL_tainting)
# define TAINT_NOT (PL_tainted = FALSE) /* Untaint */
# define TAINT_IF(c) if (UNLIKELY(c)) { TAINT; } /* Conditionally taint */
# define TAINT_ENV() if (UNLIKELY(PL_tainting)) { taint_env(); }
# define TAINT_PROPER(s) if (UNLIKELY(PL_tainting)) { \
taint_proper(NULL, s); \
}
# define TAINT_set(s) (PL_tainted = cBOOL(s))
# define TAINT_get (cBOOL(UNLIKELY(PL_tainted))) /* Is something tainted? */
# define TAINTING_get (cBOOL(UNLIKELY(PL_tainting)))
# define TAINTING_set(s) (PL_tainting = cBOOL(s))
# define TAINT_WARN_get (PL_taint_warn)
# define TAINT_WARN_set(s) (PL_taint_warn = cBOOL(s))
#endif
#ifdef PERL_CORE
# define SUBST_TAINT_STR 1 /* string tainted */
# define SUBST_TAINT_PAT 2 /* pattern tainted */
# define SUBST_TAINT_REPL 4 /* replacement tainted */
# define SUBST_TAINT_RETAINT 8 /* use re'taint' in scope */
# define SUBST_TAINT_BOOLRET 16 /* return is boolean (don't taint) */
#endif
#ifdef HAS_SETPGID
# define BSD_SETPGRP(pid, pgrp) setpgid((pid), (pgrp))
#elif defined(HAS_SETPGRP) && defined(USE_BSD_SETPGRP)
# define BSD_SETPGRP(pid, pgrp) setpgrp((pid), (pgrp))
#elif defined(HAS_SETPGRP2)
# define BSD_SETPGRP(pid, pgrp) setpgrp2((pid), (pgrp))
#endif
#if defined(BSD_SETPGRP) && !defined(HAS_SETPGRP)
# define HAS_SETPGRP /* Well, effectively it does . . . */
#endif
#ifdef HAS_GETPGID
# define BSD_GETPGRP(pid) getpgid((pid))
#elif defined(HAS_GETPGRP) && defined(USE_BSD_GETPGRP)
# define BSD_GETPGRP(pid) getpgrp((pid))
#elif defined(HAS_GETPGRP2)
# define BSD_GETPGRP(pid) getpgrp2((pid))
#endif
#if defined(BSD_GETPGRP) && !defined(HAS_GETPGRP)
# define HAS_GETPGRP /* Well, effectively it does . . . */
#endif
#if defined(USE_BSD_SETPGRP) || defined(USE_BSD_GETPGRP)
# ifndef USE_BSDPGRP
# define USE_BSDPGRP
# endif
#endif
#define PERL_USE_SAFE_PUTENV
#if defined PERL_NO_HWM
# undef PERL_USE_HWM
#elif defined PERL_USE_HWM
#elif defined DEBUGGING && !defined DEBUGGING_RE_ONLY
# define PERL_USE_HWM
#endif
#if defined(USE_ITHREADS) && defined(PTHREAD_H_FIRST) && defined(I_PTHREAD)
# include <pthread.h>
#endif
#include <sys/types.h>
# ifdef I_WCHAR
# include <wchar.h>
# endif
# include <stdarg.h>
#ifdef I_STDINT
# include <stdint.h>
#endif
#include <ctype.h>
#include <float.h>
#include <limits.h>
#ifdef METHOD /* Defined by OSF/1 v3.0 by ctype.h */
#undef METHOD
#endif
#ifdef I_LOCALE
# include <locale.h>
#endif
#ifdef NEED_XLOCALE_H
# include <xlocale.h>
#endif
#undef PERL_LOCALE_TABLE_ENTRY
#define PERL_LOCALE_TABLE_ENTRY(name, call_back)
#include "locale_table.h"
#include "perl_langinfo.h" /* Needed for _NL_LOCALE_NAME */
#if ! defined(NO_LOCALE)
# if ! defined(NO_POSIX_2008_LOCALE) \
&& defined(HAS_NEWLOCALE) \
&& defined(HAS_USELOCALE) \
&& defined(HAS_DUPLOCALE) \
&& defined(HAS_FREELOCALE) \
&& defined(LC_ALL_MASK)
# define HAS_POSIX_2008_LOCALE
# define USE_LOCALE
# elif defined(HAS_SETLOCALE)
# define USE_LOCALE
# endif
#endif
#ifdef USE_LOCALE
# define HAS_SKIP_LOCALE_INIT /* Solely for XS code to test for this
#define */
#endif
typedef
enum
{
#ifdef USE_LOCALE
# undef PERL_LOCALE_TABLE_ENTRY
# define PERL_LOCALE_TABLE_ENTRY(name, call_back) LC_ ## name ## _INDEX_,
# include "locale_table.h"
#endif /* USE_LOCALE */
LC_ALL_INDEX_
} locale_category_index;
#ifdef USE_LOCALE
# define LOCALE_CATEGORIES_COUNT_ (LC_ALL_INDEX_ + 1)
# if defined(USE_FAKE_LC_ALL_POSITIONAL_NOTATION) \
&& defined(PERL_LC_ALL_USES_NAME_VALUE_PAIRS)
# undef PERL_LC_ALL_USES_NAME_VALUE_PAIRS
# define PERL_LC_ALL_CATEGORY_POSITIONS_INIT /* Assumes glibc cateories */\
{ 12, 11, 10, 9, 8, 7, 5, 4, 3, 2, 1, 0 }
# define PERL_LC_ALL_SEPARATOR "/ = /"
# endif
# if defined(USE_THREADS) && ! defined(NO_LOCALE_THREADS)
# define USE_LOCALE_THREADS
# endif
# if ( defined(HAS_POSIX_2008_LOCALE) \
&& ( ! defined(HAS_SETLOCALE) \
|| ( defined(USE_LOCALE_THREADS) \
&& ! defined(NO_POSIX_2008_LOCALE))) \
&& ! defined(NO_THREAD_SAFE_LOCALE))
# define USE_POSIX_2008_LOCALE
# endif
# if defined(USE_LOCALE_THREADS) && ! defined(NO_THREAD_SAFE_LOCALE)
# if defined(USE_POSIX_2008_LOCALE) \
|| (defined(WIN32) && (defined(_MSC_VER) || (defined(_UCRT))))
# define USE_THREAD_SAFE_LOCALE
# endif
# endif
# ifdef USE_POSIX_2008_LOCALE
# if defined(HAS_QUERYLOCALE) \
\
|| ( defined(_NL_LOCALE_NAME) \
&& ! defined(NO_USE_NL_LOCALE_NAME) \
\
&& defined(HAS_NL_LANGINFO_L) \
\
&& ! defined(SETLOCALE_ACCEPTS_ANY_LOCALE_NAME))
# define USE_QUERYLOCALE
# endif
# endif
# if (defined(USE_POSIX_2008_LOCALE) && ! defined(USE_QUERYLOCALE))
# define USE_PL_CURLOCALES
# endif
# if defined(WIN32)
# if defined(USE_THREAD_SAFE_LOCALE)
# define USE_PL_CUR_LC_ALL
# endif
# if ! defined(_MSC_VER) && ! defined(_UCRT)
# define TS_W32_BROKEN_LOCALECONV
# endif
# endif
# if defined(MULTIPLICITY) && ( defined(USE_POSIX_2008_LOCALE) \
|| ( defined(WIN32) \
&& defined(USE_THREAD_SAFE_LOCALE)))
# define USE_PERL_SWITCH_LOCALE_CONTEXT
# endif
#endif /* End of USE_LOCALE */
#ifdef PERL_CORE
typedef
enum
{
LOCALE_NOT_UTF8,
LOCALE_IS_UTF8,
LOCALE_UTF8NESS_UNKNOWN
} locale_utf8ness_t;
typedef
struct
{
const
char
*name;
size_t
offset;
} lconv_offset_t;
typedef
enum
{
INTERNAL_FORMAT,
EXTERNAL_FORMAT_FOR_SET,
EXTERNAL_FORMAT_FOR_QUERY
} calc_LC_ALL_format;
typedef
enum
{
WANT_VOID,
WANT_TEMP_PV,
WANT_PL_setlocale_buf,
} calc_LC_ALL_return;
typedef
enum
{
no_override,
override_if_ignored,
check_that_overridden
} parse_LC_ALL_STRING_action;
typedef
enum
{
invalid,
no_array,
only_element_0,
full_array
} parse_LC_ALL_string_return;
#endif
#include <setjmp.h>
#ifdef I_SYS_PARAM
# ifdef PARAM_NEEDS_TYPES
# include <sys/types.h>
# endif
# include <sys/param.h>
#endif
#if defined(BSD)
# ifndef BSDish
# define BSDish
# endif
#endif
#include <stdlib.h>
#ifdef I_UNISTD
# if defined(__amigaos4__)
# ifdef I_NETINET_IN
# include <netinet/in.h>
# endif
# endif
# include <unistd.h>
# if defined(__amigaos4__)
extern
char
**myenviron;
# undef environ
# define environ myenviron
# endif
#endif
#ifdef I_SYS_WAIT
# include <sys/wait.h>
#endif
#if defined(HAS_SYSCALL) && !defined(HAS_SYSCALL_PROTO)
EXTERN_C
int
syscall(
int
, ...);
#endif
#if defined(HAS_USLEEP) && !defined(HAS_USLEEP_PROTO)
EXTERN_C
int
usleep(unsigned
int
);
#endif
#ifndef UINT16_C
# if INTSIZE >= 2
# define UINT16_C(x) ((U16_TYPE)x##U)
# else
# define UINT16_C(x) ((U16_TYPE)x##UL)
# endif
#endif
#ifndef UINT32_C
# if INTSIZE >= 4
# define UINT32_C(x) ((U32_TYPE)x##U)
# else
# define UINT32_C(x) ((U32_TYPE)x##UL)
# endif
#endif
#ifdef I_STDINT
typedef
intmax_t PERL_INTMAX_T;
typedef
uintmax_t PERL_UINTMAX_T;
#endif
#if defined(QUADKIND)
# undef PeRl_INT64_C
# undef PeRl_UINT64_C
# if QUADKIND == QUAD_IS_INT && INTSIZE == 8
# define PeRl_INT64_C(c) (c)
# define PeRl_UINT64_C(c) CAT2(c,U)
# endif
# if QUADKIND == QUAD_IS_LONG && LONGSIZE == 8
# define PeRl_INT64_C(c) CAT2(c,L)
# define PeRl_UINT64_C(c) CAT2(c,UL)
# endif
# if QUADKIND == QUAD_IS_LONG_LONG && defined(HAS_LONG_LONG)
# define PeRl_INT64_C(c) CAT2(c,LL)
# define PeRl_UINT64_C(c) CAT2(c,ULL)
# endif
# if QUADKIND == QUAD_IS___INT64
# define PeRl_INT64_C(c) CAT2(c,I64)
# define PeRl_UINT64_C(c) CAT2(c,UI64)
# endif
# ifndef PeRl_INT64_C
# define PeRl_INT64_C(c) ((I64)(c)) /* last resort */
# define PeRl_UINT64_C(c) ((U64TYPE)(c))
# endif
# if defined(PERL_DARWIN) && defined(PERL_GCC_PEDANTIC)
# undef INT64_C
# undef UINT64_C
# endif
# ifndef INT64_C
# define INT64_C(c) PeRl_INT64_C(c)
# endif
# ifndef UINT64_C
# define UINT64_C(c) PeRl_UINT64_C(c)
# endif
# ifndef I_STDINT
typedef
I64TYPE PERL_INTMAX_T;
typedef
U64TYPE PERL_UINTMAX_T;
# endif
# ifndef INTMAX_C
# define INTMAX_C(c) INT64_C(c)
# endif
# ifndef UINTMAX_C
# define UINTMAX_C(c) UINT64_C(c)
# endif
#else /* below QUADKIND is undefined */
# ifndef I_STDINT
typedef
I32TYPE PERL_INTMAX_T;
typedef
U32TYPE PERL_UINTMAX_T;
# endif
# ifndef INTMAX_C
# define INTMAX_C(c) INT32_C(c)
# endif
# ifndef UINTMAX_C
# define UINTMAX_C(c) UINT32_C(c)
# endif
#endif /* no QUADKIND */
#ifdef PERL_CORE
# define _swab_16_(x) ((U16)( \
(((U16)(x) & UINT16_C(0x00ff)) << 8) | \
(((U16)(x) & UINT16_C(0xff00)) >> 8) ))
# define _swab_32_(x) ((U32)( \
(((U32)(x) & UINT32_C(0x000000ff)) << 24) | \
(((U32)(x) & UINT32_C(0x0000ff00)) << 8) | \
(((U32)(x) & UINT32_C(0x00ff0000)) >> 8) | \
(((U32)(x) & UINT32_C(0xff000000)) >> 24) ))
# ifdef HAS_QUAD
# define _swab_64_(x) ((U64)( \
(((U64)(x) & UINT64_C(0x00000000000000ff)) << 56) | \
(((U64)(x) & UINT64_C(0x000000000000ff00)) << 40) | \
(((U64)(x) & UINT64_C(0x0000000000ff0000)) << 24) | \
(((U64)(x) & UINT64_C(0x00000000ff000000)) << 8) | \
(((U64)(x) & UINT64_C(0x000000ff00000000)) >> 8) | \
(((U64)(x) & UINT64_C(0x0000ff0000000000)) >> 24) | \
(((U64)(x) & UINT64_C(0x00ff000000000000)) >> 40) | \
(((U64)(x) & UINT64_C(0xff00000000000000)) >> 56) ))
# endif
#ifndef PERL_SUB_DEPTH_WARN
#define PERL_SUB_DEPTH_WARN 100
#endif
#endif /* PERL_CORE */
#define PERL_MULTICONCAT_MAXARG 64
#define PERL_MULTICONCAT_IX_NARGS 0 /* number of arguments */
#define PERL_MULTICONCAT_IX_PLAIN_PV 1 /* non-utf8 constant string */
#define PERL_MULTICONCAT_IX_PLAIN_LEN 2 /* non-utf8 constant string length */
#define PERL_MULTICONCAT_IX_UTF8_PV 3 /* utf8 constant string */
#define PERL_MULTICONCAT_IX_UTF8_LEN 4 /* utf8 constant string length */
#define PERL_MULTICONCAT_IX_PADTMP0 5 /* up to 3 pad indexes for PADTMPs */
#define PERL_MULTICONCAT_IX_PADTMP1 6
#define PERL_MULTICONCAT_IX_PADTMP2 7
#define PERL_MULTICONCAT_IX_LENGTHS 8 /* first of nargs+1 const segment lens */
#define PERL_MULTICONCAT_HEADER_SIZE 8 /* The number of fields of a
multiconcat header */
#ifndef PERL_CREATE_GVSV
# ifndef PERL_DONT_CREATE_GVSV
# define PERL_DONT_CREATE_GVSV
# endif
#endif
#if !defined(HAS_WAITPID) && !defined(HAS_WAIT4) || defined(HAS_WAITPID_RUNTIME)
#define PERL_USES_PL_PIDSTATUS
#endif
#if !defined(OS2) && !defined(WIN32)
#define PERL_DEFAULT_DO_EXEC3_IMPLEMENTATION
#endif
#define MEM_SIZE Size_t
#ifndef PERL_ARRAY_NEW_MIN_KEY
#define PERL_ARRAY_NEW_MIN_KEY 3
#endif
#ifndef PERL_STRLEN_NEW_MIN
#define PERL_STRLEN_NEW_MIN ((PTRSIZE == 4) ? 12 : 16)
#endif
#ifndef PERL_STRLEN_ROUNDUP_QUANTUM
#define PERL_STRLEN_ROUNDUP_QUANTUM Size_t_size
#endif
#ifndef PERL_STRLEN_EXPAND_SHIFT
# define PERL_STRLEN_EXPAND_SHIFT 2
#endif
#if defined(WIN32) && defined(_MSC_VER) && _MSC_VER >= 1910
# define STRUCT_OFFSET(s,m) (Size_t)(&(((s *)0)->m))
#else
# include <stddef.h>
# define STRUCT_OFFSET(s,m) offsetof(s,m)
#endif
#ifdef PERL_GCC_PEDANTIC
# undef HAS_PTRDIFF_T
#endif
#ifdef HAS_PTRDIFF_T
# define Ptrdiff_t ptrdiff_t
#else
# define Ptrdiff_t SSize_t
#endif
# include <string.h>
#ifdef MYMALLOC
# ifdef PERL_POLLUTE_MALLOC
# ifndef PERL_EXTMALLOC_DEF
# define Perl_malloc malloc
# define Perl_calloc calloc
# define Perl_realloc realloc
# define Perl_mfree free
# endif
# else
# define EMBEDMYMALLOC /* for compatibility */
# endif
# define safemalloc Perl_malloc
# define safecalloc Perl_calloc
# define saferealloc Perl_realloc
# define safefree Perl_mfree
# define CHECK_MALLOC_TOO_LATE_FOR_(code) STMT_START { \
if
(!TAINTING_get && MallocCfg_ptr[MallocCfg_cfg_env_read]) \
code; \
} STMT_END
# define CHECK_MALLOC_TOO_LATE_FOR(ch) \
CHECK_MALLOC_TOO_LATE_FOR_(MALLOC_TOO_LATE_FOR(ch))
# define panic_write2(s) write(2, s, strlen(s))
# define CHECK_MALLOC_TAINT(newval) \
CHECK_MALLOC_TOO_LATE_FOR_( \
if
(newval) { \
PERL_UNUSED_RESULT(panic_write2(
"panic: tainting with $ENV{PERL_MALLOC_OPT}\n"
));\
exit
(1); })
# define MALLOC_CHECK_TAINT(argc,argv,env) \
STMT_START { \
if
(doing_taint(argc,argv,env)) { \
MallocCfg_ptr[MallocCfg_skip_cfg_env] = 1; \
} \
} STMT_END;
#else /* MYMALLOC */
# define safemalloc safesysmalloc
# define safecalloc safesyscalloc
# define saferealloc safesysrealloc
# define safefree safesysfree
# define CHECK_MALLOC_TOO_LATE_FOR(ch) ((void)0)
# define CHECK_MALLOC_TAINT(newval) ((void)0)
# define MALLOC_CHECK_TAINT(argc,argv,env)
#endif /* MYMALLOC */
#define TOO_LATE_FOR_(ch,what) Perl_croak(aTHX_ "\"-%c\" is on the #! line, it must also be used on the command line%s", (char)(ch), what)
#define TOO_LATE_FOR(ch) TOO_LATE_FOR_(ch, "")
#define MALLOC_TOO_LATE_FOR(ch) TOO_LATE_FOR_(ch, " with $ENV{PERL_MALLOC_OPT}")
#define MALLOC_CHECK_TAINT2(argc,argv) MALLOC_CHECK_TAINT(argc,argv,NULL)
#ifndef memzero
# define memzero(d,l) memset(d,0,l)
#endif
#ifdef I_NETINET_IN
# include <netinet/in.h>
#endif
#ifdef I_ARPA_INET
# include <arpa/inet.h>
#endif
#ifdef I_SYS_STAT
# include <sys/stat.h>
#endif
#if !defined(S_IFIFO) && defined(_S_IFIFO)
# define S_IFIFO _S_IFIFO
#endif
#if defined(m88k) && defined(ghs)
# undef S_ISDIR
# undef S_ISCHR
# undef S_ISBLK
# undef S_ISREG
# undef S_ISFIFO
# undef S_ISLNK
#endif
#include <time.h>
#ifdef I_SYS_TIME
# ifdef I_SYS_TIME_KERNEL
# define KERNEL
# endif
# include <sys/time.h>
# ifdef I_SYS_TIME_KERNEL
# undef KERNEL
# endif
#endif
#if defined(HAS_TIMES) && defined(I_SYS_TIMES)
# include <sys/times.h>
#endif
#include <errno.h>
#if defined(WIN32) && defined(PERL_IMPLICIT_SYS)
# define WIN32SCK_IS_STDSCK /* don't pull in custom wsock layer */
#endif
#if defined(HAS_SOCKET) && !defined(WIN32) /* WIN32 handles sockets via win32.h */
# include <sys/socket.h>
# if defined(USE_SOCKS) && defined(I_SOCKS)
# if !defined(INCLUDE_PROTOTYPES)
# define INCLUDE_PROTOTYPES /* for <socks.h> */
# define PERL_SOCKS_NEED_PROTOTYPES
# endif
# include <socks.h>
# ifdef PERL_SOCKS_NEED_PROTOTYPES /* keep cpp space clean */
# undef INCLUDE_PROTOTYPES
# undef PERL_SOCKS_NEED_PROTOTYPES
# endif
# endif
# ifdef I_NETDB
# include <netdb.h>
# endif
# ifndef ENOTSOCK
# ifdef I_NET_ERRNO
# include <net/errno.h>
# endif
# endif
#endif
#if defined(HAS_SOCKATMARK) && !defined(HAS_SOCKATMARK_PROTO)
# if defined(__THROW) && defined(__GLIBC__)
int
sockatmark(
int
) __THROW;
# else
int
sockatmark(
int
);
# endif
#endif
#if defined(__osf__) && defined(__cplusplus) && !defined(_XOPEN_SOURCE_EXTENDED) /* Tru64 "cxx" (C++), see hints/dec_osf.sh for why the _XOPEN_SOURCE_EXTENDED cannot be defined. */
EXTERN_C
int
fchdir(
int
);
EXTERN_C
int
flock(
int
,
int
);
EXTERN_C
int
fseeko(
FILE
*, off_t,
int
);
EXTERN_C off_t ftello(
FILE
*);
#endif
#if defined(__SUNPRO_CC) /* SUNWspro CC (C++) */
EXTERN_C
char
*crypt(
const
char
*,
const
char
*);
#endif
#if defined(__cplusplus) && defined(__CYGWIN__)
EXTERN_C
char
*crypt(
const
char
*,
const
char
*);
#endif
#ifdef SETERRNO
# undef SETERRNO /* SOCKS might have defined this */
#endif
#if defined(VMS) || defined(WIN32) || defined(OS2)
# define HAS_EXTENDED_OS_ERRNO
# define get_extended_os_errno() Perl_get_extended_os_errno()
# else
# define get_extended_os_errno() errno
# endif
#ifdef VMS
# define SETERRNO(errcode,vmserrcode) \
STMT_START { \
set_errno(errcode); \
set_vaxc_errno(vmserrcode); \
} STMT_END
# define dSAVEDERRNO int saved_errno; unsigned saved_vms_errno
# define dSAVE_ERRNO int saved_errno = errno; unsigned saved_vms_errno = vaxc$errno
# define SAVE_ERRNO ( saved_errno = errno, saved_vms_errno = vaxc$errno )
# define RESTORE_ERRNO SETERRNO(saved_errno, saved_vms_errno)
# define LIB_INVARG LIB$_INVARG
# define RMS_DIR RMS$_DIR
# define RMS_FAC RMS$_FAC
# define RMS_FEX RMS$_FEX
# define RMS_FNF RMS$_FNF
# define RMS_IFI RMS$_IFI
# define RMS_ISI RMS$_ISI
# define RMS_PRV RMS$_PRV
# define SS_ACCVIO SS$_ACCVIO
# define SS_DEVOFFLINE SS$_DEVOFFLINE
# define SS_IVCHAN SS$_IVCHAN
# define SS_NORMAL SS$_NORMAL
# define SS_NOPRIV SS$_NOPRIV
# define SS_BUFFEROVF SS$_BUFFEROVF
#else
# define LIB_INVARG 0
# define RMS_DIR 0
# define RMS_FAC 0
# define RMS_FEX 0
# define RMS_FNF 0
# define RMS_IFI 0
# define RMS_ISI 0
# define RMS_PRV 0
# define SS_ACCVIO 0
# define SS_DEVOFFLINE 0
# define SS_IVCHAN 0
# define SS_NORMAL 0
# define SS_NOPRIV 0
# define SS_BUFFEROVF 0
#endif
#ifdef WIN32
# define dSAVEDERRNO int saved_errno; DWORD saved_win32_errno
# define dSAVE_ERRNO int saved_errno = errno; DWORD saved_win32_errno = GetLastError()
# define SAVE_ERRNO ( saved_errno = errno, saved_win32_errno = GetLastError() )
# define RESTORE_ERRNO ( errno = saved_errno, SetLastError(saved_win32_errno) )
#endif
#ifdef OS2
# define dSAVEDERRNO int saved_errno; unsigned long saved_os2_errno
# define dSAVE_ERRNO int saved_errno = errno; unsigned long saved_os2_errno = Perl_rc
# define SAVE_ERRNO ( saved_errno = errno, saved_os2_errno = Perl_rc )
# define RESTORE_ERRNO ( errno = saved_errno, Perl_rc = saved_os2_errno )
#endif
#ifndef SETERRNO
# define SETERRNO(errcode,vmserrcode) (errno = (errcode))
#endif
#ifndef dSAVEDERRNO
# define dSAVEDERRNO int saved_errno
# define dSAVE_ERRNO int saved_errno = errno
# define SAVE_ERRNO (saved_errno = errno)
# define RESTORE_ERRNO (errno = saved_errno)
#endif
#define ERRSV GvSVn(PL_errgv)
#define CLEAR_ERRSV() STMT_START { \
SV **
const
svp = &GvSV(PL_errgv); \
if
(!*svp) { \
*svp = newSVpvs(
""
); \
}
else
if
(SvREADONLY(*svp)) { \
SvREFCNT_dec_NN(*svp); \
*svp = newSVpvs(
""
); \
}
else
{ \
SV *
const
errsv = *svp; \
SvPVCLEAR(errsv); \
SvPOK_only(errsv); \
if
(SvMAGICAL(errsv)) { \
mg_free(errsv); \
} \
} \
} STMT_END
#define SANE_ERRSV() STMT_START { \
SV **
const
svp = &GvSV(PL_errgv); \
if
(!*svp) { \
*svp = newSVpvs(
""
); \
}
else
if
(SvREADONLY(*svp)) { \
SV *dupsv = newSVsv(*svp); \
SvREFCNT_dec_NN(*svp); \
*svp = dupsv; \
}
else
{ \
SV *
const
errsv = *svp; \
if
(SvMAGICAL(errsv)) { \
mg_free(errsv); \
} \
} \
} STMT_END
#ifdef PERL_CORE
# define DEFSV (0 + GvSVn(PL_defgv))
# define DEFSV_set(sv) \
(SvREFCNT_dec(GvSV(PL_defgv)), GvSV(PL_defgv) = SvREFCNT_inc(sv))
# define SAVE_DEFSV \
( \
save_gp(PL_defgv, 0), \
GvINTRO_off(PL_defgv), \
SAVEGENERICSV(GvSV(PL_defgv)), \
GvSV(PL_defgv) = NULL \
)
#else
# define DEFSV GvSVn(PL_defgv)
# define DEFSV_set(sv) (GvSV(PL_defgv) = (sv))
# define SAVE_DEFSV SAVESPTR(GvSV(PL_defgv))
#endif
#ifndef errno
extern
int
errno
;
#endif
#define UNKNOWN_ERRNO_MSG "(unknown)"
#ifdef VMS
#define Strerror(e) strerror((e), vaxc$errno)
#else
#define Strerror(e) strerror(e)
#endif
#ifdef I_SYS_IOCTL
# ifndef _IOCTL_
# include <sys/ioctl.h>
# endif
#endif
#if defined(mc300) || defined(mc500) || defined(mc700) || defined(mc6000)
# ifdef HAS_SOCKETPAIR
# undef HAS_SOCKETPAIR
# endif
# ifdef I_NDBM
# undef I_NDBM
# endif
#endif
#ifndef HAS_SOCKETPAIR
# ifdef HAS_SOCKET
# define socketpair Perl_my_socketpair
# endif
#endif
#if INTSIZE == 2
# define htoni htons
# define ntohi ntohs
#else
# define htoni htonl
# define ntohi ntohl
#endif
#if defined(I_DIRENT)
# include <dirent.h>
#elif defined(I_SYS_NDIR)
# include <sys/ndir.h>
#elif defined(I_SYS_DIR)
# include <sys/dir.h>
#endif
#if defined(I_SYSMODE)
#include <sys/mode.h>
#endif
#ifndef S_IFMT
# ifdef _S_IFMT
# define S_IFMT _S_IFMT
# else
# define S_IFMT 0170000
# endif
#endif
#ifndef S_ISDIR
# define S_ISDIR(m) ((m & S_IFMT) == S_IFDIR)
#endif
#ifndef S_ISCHR
# define S_ISCHR(m) ((m & S_IFMT) == S_IFCHR)
#endif
#ifndef S_ISBLK
# ifdef S_IFBLK
# define S_ISBLK(m) ((m & S_IFMT) == S_IFBLK)
# else
# define S_ISBLK(m) (0)
# endif
#endif
#ifndef S_ISREG
# define S_ISREG(m) ((m & S_IFMT) == S_IFREG)
#endif
#ifndef S_ISFIFO
# ifdef S_IFIFO
# define S_ISFIFO(m) ((m & S_IFMT) == S_IFIFO)
# else
# define S_ISFIFO(m) (0)
# endif
#endif
#ifndef S_ISLNK
# ifdef _S_ISLNK
# define S_ISLNK(m) _S_ISLNK(m)
# elif defined(_S_IFLNK)
# define S_ISLNK(m) ((m & S_IFMT) == _S_IFLNK)
# elif defined(S_IFLNK)
# define S_ISLNK(m) ((m & S_IFMT) == S_IFLNK)
# else
# define S_ISLNK(m) (0)
# endif
#endif
#ifndef S_ISSOCK
# ifdef _S_ISSOCK
# define S_ISSOCK(m) _S_ISSOCK(m)
# elif defined(_S_IFSOCK)
# define S_ISSOCK(m) ((m & S_IFMT) == _S_IFSOCK)
# elif defined(S_IFSOCK)
# define S_ISSOCK(m) ((m & S_IFMT) == S_IFSOCK)
# else
# define S_ISSOCK(m) (0)
# endif
#endif
#ifndef S_IRUSR
# ifdef S_IREAD
# define S_IRUSR S_IREAD
# define S_IWUSR S_IWRITE
# define S_IXUSR S_IEXEC
# else
# define S_IRUSR 0400
# define S_IWUSR 0200
# define S_IXUSR 0100
# endif
#endif
#ifndef S_IRGRP
# ifdef S_IRUSR
# define S_IRGRP (S_IRUSR>>3)
# define S_IWGRP (S_IWUSR>>3)
# define S_IXGRP (S_IXUSR>>3)
# else
# define S_IRGRP 0040
# define S_IWGRP 0020
# define S_IXGRP 0010
# endif
#endif
#ifndef S_IROTH
# ifdef S_IRUSR
# define S_IROTH (S_IRUSR>>6)
# define S_IWOTH (S_IWUSR>>6)
# define S_IXOTH (S_IXUSR>>6)
# else
# define S_IROTH 0040
# define S_IWOTH 0020
# define S_IXOTH 0010
# endif
#endif
#ifndef S_ISUID
# define S_ISUID 04000
#endif
#ifndef S_ISGID
# define S_ISGID 02000
#endif
#ifndef S_IRWXU
# define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
#endif
#ifndef S_IRWXG
# define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
#endif
#ifndef S_IRWXO
# define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
#endif
#if !defined(S_IREAD) && !defined(__HAIKU__)
# define S_IREAD S_IRUSR
#endif
#if !defined(S_IWRITE) && !defined(__HAIKU__)
# define S_IWRITE S_IWUSR
#endif
#ifndef S_IEXEC
# define S_IEXEC S_IXUSR
#endif
#if defined(cray) || defined(gould) || defined(i860) || defined(pyr)
# define SLOPPYDIVIDE
#endif
#ifdef UV
#undef UV
#endif
#define my_sprintf sprintf
#define PERL_SNPRINTF_CHECK(len, max, api) STMT_START { if ((max) > 0 && (Size_t)len > (max)) Perl_croak_nocontext("panic: %s buffer overflow", STRINGIFY(api)); } STMT_END
#if defined(USE_LOCALE_NUMERIC) || defined(USE_QUADMATH)
# define my_snprintf Perl_my_snprintf
# define PERL_MY_SNPRINTF_GUARDED
#elif defined(HAS_SNPRINTF) && defined(HAS_C99_VARIADIC_MACROS) && !(defined(DEBUGGING) && !defined(PERL_USE_GCC_BRACE_GROUPS)) && !defined(PERL_GCC_PEDANTIC)
# ifdef PERL_USE_GCC_BRACE_GROUPS
# define my_snprintf(buffer, max, ...) ({ int len = snprintf(buffer, max, __VA_ARGS__); PERL_SNPRINTF_CHECK(len, max, snprintf); len; })
# define PERL_MY_SNPRINTF_GUARDED
# else
# define my_snprintf(buffer, max, ...) snprintf(buffer, max, __VA_ARGS__)
# endif
#else
# define my_snprintf Perl_my_snprintf
# define PERL_MY_SNPRINTF_GUARDED
#endif
#if ! defined(USE_LOCALE_NUMERIC) \
&& defined(HAS_VSNPRINTF) \
&& defined(HAS_C99_VARIADIC_MACROS) \
&& ! (defined(DEBUGGING) && ! defined(PERL_USE_GCC_BRACE_GROUPS)) \
&& ! defined(PERL_GCC_PEDANTIC)
# ifdef PERL_USE_GCC_BRACE_GROUPS
# define my_vsnprintf(buffer, max, ...) \
({
int
len = vsnprintf(buffer, max, __VA_ARGS__); \
PERL_SNPRINTF_CHECK(len, max, vsnprintf); \
len; })
# define PERL_MY_VSNPRINTF_GUARDED
# else
# define my_vsnprintf(buffer, max, ...) vsnprintf(buffer, max, __VA_ARGS__)
# endif
#else
# define my_vsnprintf Perl_my_vsnprintf
# define PERL_MY_VSNPRINTF_GUARDED
#endif
#ifndef PERL_MY_SNPRINTF_GUARDED
# define PERL_MY_SNPRINTF_POST_GUARD(len, max) PERL_SNPRINTF_CHECK(len, max, snprintf)
#else
# define PERL_MY_SNPRINTF_POST_GUARD(len, max) PERL_UNUSED_VAR(len)
#endif
#ifndef PERL_MY_VSNPRINTF_GUARDED
# define PERL_MY_VSNPRINTF_POST_GUARD(len, max) PERL_SNPRINTF_CHECK(len, max, vsnprintf)
#else
# define PERL_MY_VSNPRINTF_POST_GUARD(len, max) PERL_UNUSED_VAR(len)
#endif
#ifdef HAS_STRLCAT
# define my_strlcat strlcat
#endif
#if defined(PERL_CORE) || defined(PERL_EXT)
# ifdef HAS_MEMRCHR
# define my_memrchr memrchr
# else
# define my_memrchr S_my_memrchr
# endif
#endif
#ifdef HAS_STRLCPY
# define my_strlcpy strlcpy
#endif
#ifdef HAS_STRNLEN
# define my_strnlen strnlen
#endif
typedef
IVTYPE IV;
typedef
UVTYPE UV;
#if defined(USE_64_BIT_INT) && defined(HAS_QUAD)
# if QUADKIND == QUAD_IS_INT64_T && defined(INT64_MAX)
# define IV_MAX ((IV)INT64_MAX)
# define IV_MIN ((IV)INT64_MIN)
# define UV_MAX ((UV)UINT64_MAX)
# ifndef UINT64_MIN
# define UINT64_MIN 0
# endif
# define UV_MIN ((UV)UINT64_MIN)
# else
# define IV_MAX PERL_QUAD_MAX
# define IV_MIN PERL_QUAD_MIN
# define UV_MAX PERL_UQUAD_MAX
# define UV_MIN PERL_UQUAD_MIN
# endif
# define IV_IS_QUAD
# define UV_IS_QUAD
#else
# if defined(INT32_MAX) && IVSIZE == 4
# define IV_MAX ((IV)INT32_MAX)
# define IV_MIN ((IV)INT32_MIN)
# ifndef UINT32_MAX_BROKEN /* e.g. HP-UX with gcc messes this up */
# define UV_MAX ((UV)UINT32_MAX)
# else
# define UV_MAX ((UV)4294967295U)
# endif
# ifndef UINT32_MIN
# define UINT32_MIN 0
# endif
# define UV_MIN ((UV)UINT32_MIN)
# else
# define IV_MAX PERL_LONG_MAX
# define IV_MIN PERL_LONG_MIN
# define UV_MAX PERL_ULONG_MAX
# define UV_MIN PERL_ULONG_MIN
# endif
# if IVSIZE == 8
# define IV_IS_QUAD
# define UV_IS_QUAD
# ifndef HAS_QUAD
# define HAS_QUAD
# endif
# else
# undef IV_IS_QUAD
# undef UV_IS_QUAD
#if !defined(PERL_CORE)
# 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
#if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE)
# define PTRV UV
# define INT2PTR(any,d) (any)(d)
#elif PTRSIZE == LONGSIZE
# define PTRV unsigned long
# define PTR2ul(p) (unsigned long)(p)
#else
# define PTRV unsigned
#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 */
#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
#ifndef HAS_LDBL_DIG
# if LONG_DOUBLESIZE == 10
# define LDBL_DIG 18 /* assume IEEE */
# elif LONG_DOUBLESIZE == 12
# define LDBL_DIG 18 /* gcc? */
# elif LONG_DOUBLESIZE == 16
# define LDBL_DIG 33 /* assume IEEE */
# elif LONG_DOUBLESIZE == DOUBLESIZE
# define LDBL_DIG DBL_DIG /* bummer */
# endif
#endif
#if (defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)) && defined(__MINGW64__)
typedef
NVTYPE NV __attribute__ ((aligned(8)));
#else
typedef
NVTYPE NV;
#endif
#ifdef I_IEEEFP
# include <ieeefp.h>
#endif
#if defined(__DECC) && defined(__osf__)
# define NAN_COMPARE_BROKEN
#endif
#if defined(__sgi)
# define NAN_COMPARE_BROKEN
#endif
#ifdef USE_LONG_DOUBLE
# ifdef I_SUNMATH
# include <sunmath.h>
# endif
# if defined(LDBL_DIG)
# define NV_DIG LDBL_DIG
# ifdef LDBL_MANT_DIG
# define NV_MANT_DIG LDBL_MANT_DIG
# endif
# ifdef LDBL_MIN
# define NV_MIN LDBL_MIN
# endif
# ifdef LDBL_MAX
# define NV_MAX LDBL_MAX
# endif
# ifdef LDBL_MIN_EXP
# define NV_MIN_EXP LDBL_MIN_EXP
# endif
# ifdef LDBL_MAX_EXP
# define NV_MAX_EXP LDBL_MAX_EXP
# endif
# ifdef LDBL_MIN_10_EXP
# define NV_MIN_10_EXP LDBL_MIN_10_EXP
# endif
# ifdef LDBL_MAX_10_EXP
# define NV_MAX_10_EXP LDBL_MAX_10_EXP
# endif
# ifdef LDBL_EPSILON
# define NV_EPSILON LDBL_EPSILON
# endif
# ifdef LDBL_MAX
# define NV_MAX LDBL_MAX
# elif defined(HUGE_VALL)
# define NV_MAX HUGE_VALL
# endif
# endif
# if defined(HAS_SQRTL)
# define Perl_acos acosl
# define Perl_asin asinl
# define Perl_atan atanl
# define Perl_atan2 atan2l
# define Perl_ceil ceill
# define Perl_cos cosl
# define Perl_cosh coshl
# define Perl_exp expl
# define Perl_fabs fabsl
# define Perl_floor floorl
# define Perl_fmod fmodl
# define Perl_log logl
# define Perl_log10 log10l
# define Perl_pow powl
# define Perl_sin sinl
# define Perl_sinh sinhl
# define Perl_sqrt sqrtl
# define Perl_tan tanl
# define Perl_tanh tanhl
# endif
# ifndef Perl_modf
# ifdef HAS_MODFL
# define Perl_modf(x,y) modfl(x,y)
# ifndef HAS_MODFL_PROTO
EXTERN_C
long
double
modfl(
long
double
,
long
double
*);
# endif
# elif (defined(HAS_TRUNCL) || defined(HAS_AINTL)) && defined(HAS_COPYSIGNL)
extern
long
double
Perl_my_modfl(
long
double
x,
long
double
*ip);
# define Perl_modf(x,y) Perl_my_modfl(x,y)
# endif
# endif
# ifndef Perl_frexp
# ifdef HAS_FREXPL
# define Perl_frexp(x,y) frexpl(x,y)
# elif defined(HAS_ILOGBL) && defined(HAS_SCALBNL)
extern
long
double
Perl_my_frexpl(
long
double
x,
int
*e);
# define Perl_frexp(x,y) Perl_my_frexpl(x,y)
# endif
# endif
# ifndef Perl_ldexp
# ifdef HAS_LDEXPL
# define Perl_ldexp(x, y) ldexpl(x,y)
# elif defined(HAS_SCALBNL) && FLT_RADIX == 2
# define Perl_ldexp(x,y) scalbnl(x,y)
# endif
# endif
# ifndef Perl_isnan
# if defined(HAS_ISNANL) && !(defined(isnan) && defined(HAS_C99))
# define Perl_isnan(x) isnanl(x)
# elif defined(__sgi) && defined(__c99) /* XXX Configure test needed */
# define Perl_isnan(x) isnan(x)
# endif
# endif
# ifndef Perl_isinf
# if defined(HAS_ISINFL) && !(defined(isinf) && defined(HAS_C99))
# define Perl_isinf(x) isinfl(x)
# elif defined(__sgi) && defined(__c99) /* XXX Configure test needed */
# define Perl_isinf(x) isinf(x)
# elif defined(LDBL_MAX) && !defined(NAN_COMPARE_BROKEN)
# define Perl_isinf(x) ((x) > LDBL_MAX || (x) < -LDBL_MAX)
# endif
# endif
# 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 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
# define Perl_fabs fabsq
# define Perl_floor floorq
# define Perl_fmod fmodq
# define Perl_log logq
# define Perl_log10 log10q
# define Perl_signbit signbitq
# 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)))
# define Perl_fp_class(x) ((x) == 0.0Q ? 0 : isinfq(x) ? 3 : isnanq(x) ? 4 : PERL_ABS(x) < FLT128_MIN ? 2 : 1)
# define Perl_fp_class_inf(x) (Perl_fp_class(x) == 3)
# define Perl_fp_class_nan(x) (Perl_fp_class(x) == 4)
# define Perl_fp_class_norm(x) (Perl_fp_class(x) == 1)
# define Perl_fp_class_denorm(x) (Perl_fp_class(x) == 2)
# define Perl_fp_class_zero(x) (Perl_fp_class(x) == 0)
#else
# define NV_DIG DBL_DIG
# define NV_MANT_DIG DBL_MANT_DIG
# define NV_MIN DBL_MIN
# define NV_MAX DBL_MAX
# define NV_MIN_EXP DBL_MIN_EXP
# define NV_MAX_EXP DBL_MAX_EXP
# define NV_MIN_10_EXP DBL_MIN_10_EXP
# define NV_MAX_10_EXP DBL_MAX_10_EXP
# define NV_EPSILON DBL_EPSILON
# define NV_MAX DBL_MAX
# define NV_MIN DBL_MIN
# define Perl_acos acos
# define Perl_asin asin
# define Perl_atan atan
# define Perl_atan2 atan2
# define Perl_ceil ceil
# define Perl_cos cos
# define Perl_cosh cosh
# define Perl_exp exp
# define Perl_fabs fabs
# define Perl_floor floor
# define Perl_fmod fmod
# define Perl_log log
# define Perl_log10 log10
# define Perl_pow pow
# define Perl_sin sin
# define Perl_sinh sinh
# define Perl_sqrt sqrt
# define Perl_tan tan
# define Perl_tanh tanh
# define Perl_modf(x,y) modf(x,y)
# define Perl_frexp(x,y) frexp(x,y)
# define Perl_ldexp(x,y) ldexp(x,y)
# ifndef Perl_isnan
# ifdef HAS_ISNAN
# define Perl_isnan(x) isnan(x)
# endif
# endif
# ifndef Perl_isinf
# if defined(HAS_ISINF)
# define Perl_isinf(x) isinf(x)
# elif defined(DBL_MAX) && !defined(NAN_COMPARE_BROKEN)
# define Perl_isinf(x) ((x) > DBL_MAX || (x) < -DBL_MAX)
# endif
# endif
# ifndef Perl_isfinite
# ifdef HAS_ISFINITE
# define Perl_isfinite(x) isfinite(x)
# elif defined(HAS_FINITE)
# define Perl_isfinite(x) finite(x)
# endif
# endif
#endif
#if !defined(Perl_fp_class) && defined(HAS_FPCLASSIFY)
# include <math.h>
# if defined(FP_INFINITE) && defined(FP_NAN)
# define Perl_fp_class(x) fpclassify(x)
# define Perl_fp_class_inf(x) (Perl_fp_class(x)==FP_INFINITE)
# define Perl_fp_class_nan(x) (Perl_fp_class(x)==FP_NAN)
# define Perl_fp_class_norm(x) (Perl_fp_class(x)==FP_NORMAL)
# define Perl_fp_class_denorm(x) (Perl_fp_class(x)==FP_SUBNORMAL)
# define Perl_fp_class_zero(x) (Perl_fp_class(x)==FP_ZERO)
# elif defined(FP_PLUS_INF) && defined(FP_QNAN)
# define Perl_fp_class(x) fpclassify(x)
# define Perl_fp_class_pinf(x) (Perl_fp_class(x)==FP_PLUS_INF)
# define Perl_fp_class_ninf(x) (Perl_fp_class(x)==FP_MINUS_INF)
# define Perl_fp_class_snan(x) (Perl_fp_class(x)==FP_SNAN)
# define Perl_fp_class_qnan(x) (Perl_fp_class(x)==FP_QNAN)
# define Perl_fp_class_pnorm(x) (Perl_fp_class(x)==FP_PLUS_NORM)
# define Perl_fp_class_nnorm(x) (Perl_fp_class(x)==FP_MINUS_NORM)
# define Perl_fp_class_pdenorm(x) (Perl_fp_class(x)==FP_PLUS_DENORM)
# define Perl_fp_class_ndenorm(x) (Perl_fp_class(x)==FP_MINUS_DENORM)
# define Perl_fp_class_pzero(x) (Perl_fp_class(x)==FP_PLUS_ZERO)
# define Perl_fp_class_nzero(x) (Perl_fp_class(x)==FP_MINUS_ZERO)
# else
# undef Perl_fp_class /* Unknown set of defines */
# endif
#endif
#if !defined(Perl_fp_class) && defined(HAS_FP_CLASSIFY)
# include <math.h>
# ifdef __VMS
# include <fp.h>
# undef isnormal
# define isnormal(x) Perl_fp_class_norm(x)
# endif
# if defined(FP_INFINITE) && defined(FP_NAN)
# define Perl_fp_class(x) fp_classify(x)
# define Perl_fp_class_inf(x) (Perl_fp_class(x)==FP_INFINITE)
# define Perl_fp_class_nan(x) (Perl_fp_class(x)==FP_NAN)
# define Perl_fp_class_norm(x) (Perl_fp_class(x)==FP_NORMAL)
# define Perl_fp_class_denorm(x) (Perl_fp_class(x)==FP_SUBNORMAL)
# define Perl_fp_class_zero(x) (Perl_fp_class(x)==FP_ZERO)
# else
# undef Perl_fp_class /* Unknown set of defines */
# endif
#endif
#if !defined(Perl_fp_class) && (defined(HAS_FPCLASS)||defined(HAS_FPCLASSL))
# if defined(__sun) || defined(__sgi) /* XXX Configure test instead */
# define FP_PINF FP_PINF
# define FP_QNAN FP_QNAN
# endif
# include <math.h>
# ifdef I_IEEEFP
# include <ieeefp.h>
# endif
# ifdef I_FP
# include <fp.h>
# endif
# if defined(USE_LONG_DOUBLE) && defined(HAS_FPCLASSL)
# define Perl_fp_class(x) fpclassl(x)
# else
# define Perl_fp_class(x) fpclass(x)
# endif
# if defined(FP_CLASS_PINF) && defined(FP_CLASS_SNAN)
# define Perl_fp_class_snan(x) (Perl_fp_class(x)==FP_CLASS_SNAN)
# define Perl_fp_class_qnan(x) (Perl_fp_class(x)==FP_CLASS_QNAN)
# define Perl_fp_class_ninf(x) (Perl_fp_class(x)==FP_CLASS_NINF)
# define Perl_fp_class_pinf(x) (Perl_fp_class(x)==FP_CLASS_PINF)
# define Perl_fp_class_nnorm(x) (Perl_fp_class(x)==FP_CLASS_NNORM)
# define Perl_fp_class_pnorm(x) (Perl_fp_class(x)==FP_CLASS_PNORM)
# define Perl_fp_class_ndenorm(x) (Perl_fp_class(x)==FP_CLASS_NDENORM)
# define Perl_fp_class_pdenorm(x) (Perl_fp_class(x)==FP_CLASS_PDENORM)
# define Perl_fp_class_nzero(x) (Perl_fp_class(x)==FP_CLASS_NZERO)
# define Perl_fp_class_pzero(x) (Perl_fp_class(x)==FP_CLASS_PZERO)
# elif defined(FP_PINF) && defined(FP_QNAN)
# define Perl_fp_class_snan(x) (Perl_fp_class(x)==FP_SNAN)
# define Perl_fp_class_qnan(x) (Perl_fp_class(x)==FP_QNAN)
# define Perl_fp_class_ninf(x) (Perl_fp_class(x)==FP_NINF)
# define Perl_fp_class_pinf(x) (Perl_fp_class(x)==FP_PINF)
# define Perl_fp_class_nnorm(x) (Perl_fp_class(x)==FP_NNORM)
# define Perl_fp_class_pnorm(x) (Perl_fp_class(x)==FP_PNORM)
# define Perl_fp_class_ndenorm(x) (Perl_fp_class(x)==FP_NDENORM)
# define Perl_fp_class_pdenorm(x) (Perl_fp_class(x)==FP_PDENORM)
# define Perl_fp_class_nzero(x) (Perl_fp_class(x)==FP_NZERO)
# define Perl_fp_class_pzero(x) (Perl_fp_class(x)==FP_PZERO)
# else
# undef Perl_fp_class /* Unknown set of defines */
# endif
#endif
#if !defined(Perl_fp_class) && (defined(HAS_FP_CLASS)||defined(HAS_FP_CLASSL))
# include <math.h>
# if !defined(FP_SNAN) && defined(I_FP_CLASS)
# include <fp_class.h>
# endif
# if defined(FP_POS_INF) && defined(FP_QNAN)
# ifdef __sgi /* XXX Configure test instead */
# ifdef USE_LONG_DOUBLE
# define Perl_fp_class(x) fp_class_l(x)
# else
# define Perl_fp_class(x) fp_class_d(x)
# endif
# else
# if defined(USE_LONG_DOUBLE) && defined(HAS_FP_CLASSL)
# define Perl_fp_class(x) fp_classl(x)
# else
# define Perl_fp_class(x) fp_class(x)
# endif
# endif
# if defined(FP_POS_INF) && defined(FP_QNAN)
# define Perl_fp_class_snan(x) (Perl_fp_class(x)==FP_SNAN)
# define Perl_fp_class_qnan(x) (Perl_fp_class(x)==FP_QNAN)
# define Perl_fp_class_ninf(x) (Perl_fp_class(x)==FP_NEG_INF)
# define Perl_fp_class_pinf(x) (Perl_fp_class(x)==FP_POS_INF)
# define Perl_fp_class_nnorm(x) (Perl_fp_class(x)==FP_NEG_NORM)
# define Perl_fp_class_pnorm(x) (Perl_fp_class(x)==FP_POS_NORM)
# define Perl_fp_class_ndenorm(x) (Perl_fp_class(x)==FP_NEG_DENORM)
# define Perl_fp_class_pdenorm(x) (Perl_fp_class(x)==FP_POS_DENORM)
# define Perl_fp_class_nzero(x) (Perl_fp_class(x)==FP_NEG_ZERO)
# define Perl_fp_class_pzero(x) (Perl_fp_class(x)==FP_POS_ZERO)
# else
# undef Perl_fp_class /* Unknown set of defines */
# endif
# endif
#endif
#if !defined(Perl_fp_class) && defined(HAS_CLASS)
# include <math.h>
# if defined(FP_PLUS_NORM) && defined(FP_PLUS_INF)
# ifndef _cplusplus
# define Perl_fp_class(x) class(x)
# else
# define Perl_fp_class(x) _class(x)
# endif
# if defined(FP_PLUS_INF) && defined(FP_NANQ)
# define Perl_fp_class_snan(x) (Perl_fp_class(x)==FP_NANS)
# define Perl_fp_class_qnan(x) (Perl_fp_class(x)==FP_NANQ)
# define Perl_fp_class_ninf(x) (Perl_fp_class(x)==FP_MINUS_INF)
# define Perl_fp_class_pinf(x) (Perl_fp_class(x)==FP_PLUS_INF)
# define Perl_fp_class_nnorm(x) (Perl_fp_class(x)==FP_MINUS_NORM)
# define Perl_fp_class_pnorm(x) (Perl_fp_class(x)==FP_PLUS_NORM)
# define Perl_fp_class_ndenorm(x) (Perl_fp_class(x)==FP_MINUS_DENORM)
# define Perl_fp_class_pdenorm(x) (Perl_fp_class(x)==FP_PLUS_DENORM)
# define Perl_fp_class_nzero(x) (Perl_fp_class(x)==FP_MINUS_ZERO)
# define Perl_fp_class_pzero(x) (Perl_fp_class(x)==FP_PLUS_ZERO)
# else
# undef Perl_fp_class /* Unknown set of defines */
# endif
# endif
#endif
#ifdef _MSC_VER
# ifndef Perl_isnan
# define Perl_isnan(x) _isnan(x)
# endif
# ifndef Perl_isfinite
# define Perl_isfinite(x) _finite(x)
# endif
# ifndef Perl_fp_class_snan
# define Perl_fp_class_snan(x) (_fpclass(x) & _FPCLASS_SNAN)
# define Perl_fp_class_qnan(x) (_fpclass(x) & _FPCLASS_QNAN)
# define Perl_fp_class_nan(x) (_fpclass(x) & (_FPCLASS_SNAN|_FPCLASS_QNAN))
# define Perl_fp_class_ninf(x) (_fpclass(x) & _FPCLASS_NINF)
# define Perl_fp_class_pinf(x) (_fpclass(x) & _FPCLASS_PINF)
# define Perl_fp_class_inf(x) (_fpclass(x) & (_FPCLASS_NINF|_FPCLASS_PINF))
# define Perl_fp_class_nnorm(x) (_fpclass(x) & _FPCLASS_NN)
# define Perl_fp_class_pnorm(x) (_fpclass(x) & _FPCLASS_PN)
# define Perl_fp_class_norm(x) (_fpclass(x) & (_FPCLASS_NN|_FPCLASS_PN))
# define Perl_fp_class_ndenorm(x) (_fpclass(x) & _FPCLASS_ND)
# define Perl_fp_class_pdenorm(x) (_fpclass(x) & _FPCLASS_PD)
# define Perl_fp_class_denorm(x) (_fpclass(x) & (_FPCLASS_ND|_FPCLASS_PD))
# define Perl_fp_class_nzero(x) (_fpclass(x) & _FPCLASS_NZ)
# define Perl_fp_class_pzero(x) (_fpclass(x) & _FPCLASS_PZ)
# define Perl_fp_class_zero(x) (_fpclass(x) & (_FPCLASS_NZ|_FPCLASS_PZ))
# endif
#endif
#if !defined(Perl_fp_class_inf) && \
defined(Perl_fp_class_pinf) && defined(Perl_fp_class_ninf)
# define Perl_fp_class_inf(x) \
(Perl_fp_class_pinf(x) || Perl_fp_class_ninf(x))
#endif
#if !defined(Perl_fp_class_nan) && \
defined(Perl_fp_class_snan) && defined(Perl_fp_class_qnan)
# define Perl_fp_class_nan(x) \
(Perl_fp_class_snan(x) || Perl_fp_class_qnan(x))
#endif
#if !defined(Perl_fp_class_zero) && \
defined(Perl_fp_class_pzero) && defined(Perl_fp_class_nzero)
# define Perl_fp_class_zero(x) \
(Perl_fp_class_pzero(x) || Perl_fp_class_nzero(x))
#endif
#if !defined(Perl_fp_class_norm) && \
defined(Perl_fp_class_pnorm) && defined(Perl_fp_class_nnorm)
# define Perl_fp_class_norm(x) \
(Perl_fp_class_pnorm(x) || Perl_fp_class_nnorm(x))
#endif
#if !defined(Perl_fp_class_denorm) && \
defined(Perl_fp_class_pdenorm) && defined(Perl_fp_class_ndenorm)
# define Perl_fp_class_denorm(x) \
(Perl_fp_class_pdenorm(x) || Perl_fp_class_ndenorm(x))
#endif
#ifndef Perl_isnan
# ifdef Perl_fp_class_nan
# define Perl_isnan(x) Perl_fp_class_nan(x)
# elif defined(HAS_UNORDERED)
# define Perl_isnan(x) unordered((x), 0.0)
# else
# define Perl_isnan(x) ((x)!=(x))
# endif
#endif
#ifndef Perl_isinf
# ifdef Perl_fp_class_inf
# define Perl_isinf(x) Perl_fp_class_inf(x)
# endif
#endif
#ifndef Perl_isfinite
# if defined(HAS_ISFINITE) && !defined(isfinite)
# define Perl_isfinite(x) isfinite((double)(x))
# elif defined(HAS_FINITE)
# define Perl_isfinite(x) finite((double)(x))
# elif defined(Perl_fp_class_finite)
# define Perl_isfinite(x) Perl_fp_class_finite(x)
# else
# define Perl_isfinite(x) (((x) * 0) == 0)
# endif
#endif
#ifndef Perl_isinf
# if defined(Perl_isfinite) && defined(Perl_isnan)
# define Perl_isinf(x) (!(Perl_isfinite(x)||Perl_isnan(x)))
# endif
#endif
#if defined(HAS_LONG_DOUBLE) && !defined(Perl_isfinitel)
# if defined(HAS_ISFINITE) && defined(isfinite) && defined(HAS_C99)
# define Perl_isfinitel(x) isfinite(x)
# elif defined(HAS_ISFINITEL)
# define Perl_isfinitel(x) isfinitel(x)
# elif defined(HAS_FINITEL)
# define Perl_isfinitel(x) finitel(x)
# elif defined(HAS_ISINFL) && defined(HAS_ISNANL)
# define Perl_isfinitel(x) (!(isinfl(x)||isnanl(x)))
# else
# define Perl_isfinitel(x) ((x) * 0 == 0) /* See Perl_isfinite. */
# endif
#endif
#ifndef USE_PERL_ATOF
# ifndef _UNICOS
# define USE_PERL_ATOF
# endif
#else
# if USE_PERL_ATOF == 0
# undef USE_PERL_ATOF
# endif
#endif
#ifdef USE_PERL_ATOF
# define Perl_atof(s) Perl_my_atof(aTHX_ s)
# define Perl_atof2(s, n) Perl_my_atof3(aTHX_ (s), &(n), 0)
#else
# define Perl_atof(s) (NV)atof(s)
# define Perl_atof2(s, n) ((n) = atof(s))
#endif
#define my_atof2(a,b) my_atof3(a,b,0)
#define Atof my_atof
#define PERL_UCHAR_MIN ((unsigned char)0)
#define PERL_UCHAR_MAX ((unsigned char)UCHAR_MAX)
#define PERL_USHORT_MIN ((unsigned short)0)
#define PERL_USHORT_MAX ((unsigned short)USHRT_MAX)
#define PERL_SHORT_MAX ((short)SHRT_MAX)
#define PERL_SHORT_MIN ((short)SHRT_MIN)
#define PERL_UINT_MAX ((unsigned int)UINT_MAX)
#define PERL_UINT_MIN ((unsigned int)0)
#define PERL_INT_MAX ((int)INT_MAX)
#define PERL_INT_MIN ((int)INT_MIN)
#define PERL_ULONG_MAX ((unsigned long)ULONG_MAX)
#define PERL_ULONG_MIN ((unsigned long)0L)
#define PERL_LONG_MAX ((long)LONG_MAX)
#define PERL_LONG_MIN ((long)LONG_MIN)
#ifdef UV_IS_QUAD
# define PERL_UQUAD_MAX (~(UV)0)
# define PERL_UQUAD_MIN ((UV)0)
# define PERL_QUAD_MAX ((IV) (PERL_UQUAD_MAX >> 1))
# define PERL_QUAD_MIN (-PERL_QUAD_MAX - ((3 & -1) == 3))
#endif
typedef
MEM_SIZE STRLEN;
typedef
struct
op OP;
typedef
struct
cop COP;
typedef
struct
unop UNOP;
typedef
struct
unop_aux UNOP_AUX;
typedef
struct
binop BINOP;
typedef
struct
listop LISTOP;
typedef
struct
logop LOGOP;
typedef
struct
pmop PMOP;
typedef
struct
svop SVOP;
typedef
struct
padop PADOP;
typedef
struct
pvop PVOP;
typedef
struct
loop LOOP;
typedef
struct
methop METHOP;
#ifdef PERL_CORE
typedef
struct
opslab OPSLAB;
typedef
struct
opslot OPSLOT;
#endif
typedef
struct
block_hooks BHK;
typedef
struct
custom_op XOP;
typedef
struct
interpreter PerlInterpreter;
#if defined(__sgi)
# define STRUCT_SV perl_sv
#else
# define STRUCT_SV sv
#endif
typedef
struct
STRUCT_SV SV;
typedef
struct
av AV;
typedef
struct
hv HV;
typedef
struct
cv CV;
typedef
struct
p5rx REGEXP;
typedef
struct
gp GP;
typedef
struct
gv GV;
typedef
struct
io IO;
typedef
struct
context PERL_CONTEXT;
typedef
struct
block BLOCK;
typedef
struct
invlist INVLIST;
typedef
struct
magic MAGIC;
typedef
struct
xpv XPV;
typedef
struct
xpviv XPVIV;
typedef
struct
xpvuv XPVUV;
typedef
struct
xpvnv XPVNV;
typedef
struct
xpvmg XPVMG;
typedef
struct
xpvlv XPVLV;
typedef
struct
xpvinvlist XINVLIST;
typedef
struct
xpvav XPVAV;
typedef
struct
xpvhv XPVHV;
typedef
struct
xpvgv XPVGV;
typedef
struct
xpvcv XPVCV;
typedef
struct
xpvbm XPVBM;
typedef
struct
xpvfm XPVFM;
typedef
struct
xpvio XPVIO;
typedef
struct
xobject XPVOBJ;
typedef
struct
mgvtbl MGVTBL;
typedef
union
any ANY;
typedef
struct
ptr_tbl_ent PTR_TBL_ENT_t;
typedef
struct
ptr_tbl PTR_TBL_t;
typedef
struct
clone_params CLONE_PARAMS;
typedef
struct
padlist PADLIST;
typedef
AV PAD;
typedef
struct
padnamelist PADNAMELIST;
typedef
struct
padname PADNAME;
#if !defined(PERL_OP_PARENT)
# define PERL_OP_PARENT
#endif
#if !defined(PERL_COPY_ON_WRITE) && !defined(PERL_NO_COW)
# define PERL_COPY_ON_WRITE
#endif
#ifdef PERL_COPY_ON_WRITE
# define PERL_ANY_COW
#else
# define PERL_SAWAMPERSAND
#endif
#if defined(PERL_DEBUG_READONLY_OPS) && !defined(USE_ITHREADS)
# error PERL_DEBUG_READONLY_OPS only works with ithreads
#endif
#include "handy.h"
#include "charclass_invlists.h"
#if defined(USE_LARGE_FILES) && !defined(NO_64_BIT_RAWIO)
# if LSEEKSIZE == 8 && !defined(USE_64_BIT_RAWIO)
# define USE_64_BIT_RAWIO /* implicit */
# endif
#endif
#ifndef FSEEKSIZE
# ifdef HAS_FSEEKO
# define FSEEKSIZE LSEEKSIZE
# else
# define FSEEKSIZE LONGSIZE
# endif
#endif
#if defined(USE_LARGE_FILES) && !defined(NO_64_BIT_STDIO)
# if FSEEKSIZE == 8 && !defined(USE_64_BIT_STDIO)
# define USE_64_BIT_STDIO /* implicit */
# endif
#endif
#ifdef USE_64_BIT_RAWIO
# ifdef HAS_OFF64_T
# undef Off_t
# define Off_t off64_t
# undef LSEEKSIZE
# define LSEEKSIZE 8
# endif
# if defined(USE_OPEN64)
# define open open64
# endif
# if defined(USE_LSEEK64)
# define lseek lseek64
# else
# if defined(USE_LLSEEK)
# define lseek llseek
# endif
# endif
# if defined(USE_STAT64)
# define stat stat64
# endif
# if defined(USE_FSTAT64)
# define fstat fstat64
# endif
# if defined(USE_LSTAT64)
# define lstat lstat64
# endif
# if defined(USE_FLOCK64)
# define flock flock64
# endif
# if defined(USE_LOCKF64)
# define lockf lockf64
# endif
# if defined(USE_FCNTL64)
# define fcntl fcntl64
# endif
# if defined(USE_TRUNCATE64)
# define truncate truncate64
# endif
# if defined(USE_FTRUNCATE64)
# define ftruncate ftruncate64
# endif
#endif
#ifdef USE_64_BIT_STDIO
# ifdef HAS_FPOS64_T
# undef Fpos_t
# define Fpos_t fpos64_t
# endif
# if defined(USE_FOPEN64)
# define fopen fopen64
# endif
# if defined(USE_FSEEK64)
# define fseek fseek64 /* don't do fseeko here, see perlio.c */
# endif
# if defined(USE_FTELL64)
# define ftell ftell64 /* don't do ftello here, see perlio.c */
# endif
# if defined(USE_FSETPOS64)
# define fsetpos fsetpos64
# endif
# if defined(USE_FGETPOS64)
# define fgetpos fgetpos64
# endif
# if defined(USE_TMPFILE64)
# define tmpfile tmpfile64
# endif
# if defined(USE_FREOPEN64)
# define freopen freopen64
# endif
#endif
#if defined(OS2)
# include "iperlsys.h"
#endif
#ifdef DOSISH
# if defined(OS2)
# include "os2ish.h"
# else
# include "dosish.h"
# endif
#elif defined(VMS)
# include "vmsish.h"
#elif defined(PLAN9)
# include "./plan9/plan9ish.h"
#elif defined(__VOS__)
# ifdef __GNUC__
# include "./vos/vosish.h"
# else
# include "vos/vosish.h"
# endif
#elif defined(__HAIKU__)
# include "haiku/haikuish.h"
#else
# include "unixish.h"
#endif
#ifdef __amigaos4__
# include "amigaos.h"
# undef FD_CLOEXEC /* a lie in AmigaOS */
#endif
#ifndef NSIG
# ifdef _NSIG
# define NSIG (_NSIG)
# elif defined(SIGMAX)
# define NSIG (SIGMAX+1)
# elif defined(SIG_MAX)
# define NSIG (SIG_MAX+1)
# elif defined(_SIG_MAX)
# define NSIG (_SIG_MAX+1)
# elif defined(MAXSIG)
# define NSIG (MAXSIG+1)
# elif defined(MAX_SIG)
# define NSIG (MAX_SIG+1)
# elif defined(SIGARRAYSIZE)
# define NSIG SIGARRAYSIZE /* Assume ary[SIGARRAYSIZE] */
# elif defined(_sys_nsig)
# define NSIG (_sys_nsig) /* Solaris 2.5 */
# else
# define NSIG 50
# endif
#endif
#ifndef NO_ENVIRON_ARRAY
# define USE_ENVIRON_ARRAY
#endif
#if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
#endif
#if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
typedef
siginfo_t Siginfo_t;
#else
#ifdef si_signo /* minix */
#undef si_signo
#endif
typedef
struct
{
int
si_signo;
} Siginfo_t;
#endif
#ifndef PERL_FPU_INIT
# ifdef HAS_FPSETMASK
# if HAS_FLOATINGPOINT_H
# include <floatingpoint.h>
# endif
# define PERL_FPU_INIT (void)fpsetmask(0)
# elif defined(SIGFPE) && defined(SIG_IGN)
# define PERL_FPU_INIT PL_sigfpe_saved = (Sighandler_t) signal(SIGFPE, SIG_IGN)
# define PERL_FPU_PRE_EXEC { Sigsave_t xfpe; rsignal_save(SIGFPE, PL_sigfpe_saved, &xfpe);
# define PERL_FPU_POST_EXEC rsignal_restore(SIGFPE, &xfpe); }
# else
# define PERL_FPU_INIT
# endif
#endif
#ifndef PERL_FPU_PRE_EXEC
# define PERL_FPU_PRE_EXEC {
# define PERL_FPU_POST_EXEC }
#endif
#ifdef __osf__
# include <machine/fpu.h>
# define PERL_SYS_FPU_INIT \
STMT_START { \
ieee_set_fp_control(IEEE_TRAP_ENABLE_INV); \
signal
(SIGFPE, SIG_IGN); \
} STMT_END
#endif
#ifdef __sgi
# include <sys/fpu.h>
# define PERL_SYS_FPU_INIT \
STMT_START { \
union
fpc_csr csr; \
csr.fc_word = get_fpc_csr(); \
csr.fc_struct.flush = 0; \
set_fpc_csr(csr.fc_word); \
} STMT_END
#endif
#ifndef PERL_SYS_FPU_INIT
# define PERL_SYS_FPU_INIT NOOP
#endif
#ifndef PERL_SYS_INIT3_BODY
# define PERL_SYS_INIT3_BODY(argvp,argcp,envp) PERL_SYS_INIT_BODY(argvp,argcp)
#endif
#define PERL_SYS_INIT(argc, argv) Perl_sys_init(argc, argv)
#define PERL_SYS_INIT3(argc, argv, env) Perl_sys_init3(argc, argv, env)
#define PERL_SYS_TERM() Perl_sys_term()
#ifndef PERL_WRITE_MSG_TO_CONSOLE
# define PERL_WRITE_MSG_TO_CONSOLE(io, msg, len) PerlIO_write(io, msg, len)
#endif
#ifndef MAXPATHLEN
# ifdef PATH_MAX
# ifdef _POSIX_PATH_MAX
# if PATH_MAX > _POSIX_PATH_MAX
# define MAXPATHLEN PATH_MAX
# else
# define MAXPATHLEN _POSIX_PATH_MAX
# endif
# else
# define MAXPATHLEN (PATH_MAX+1)
# endif
# else
# define MAXPATHLEN 1024 /* Err on the large side. */
# endif
#endif
#if defined(USE_ITHREADS) && defined(I_PTHREAD) && \
defined(__clang__) && \
!defined(SWIG) && \
((!defined(__apple_build_version__) && \
((__clang_major__ == 3 && __clang_minor__ >= 6) || \
(__clang_major__ >= 4))) || \
(defined(__apple_build_version__) && \
((__clang_major__ == 6 && __clang_minor__ >= 1) || \
(__clang_major__ >= 7))))
# define PERL_TSA__(x) __attribute__((x))
# define PERL_TSA_ACTIVE
#else
# define PERL_TSA__(x) /* No TSA, make TSA attributes no-ops. */
# undef PERL_TSA_ACTIVE
#endif
#define PERL_TSA_CAPABILITY(x) \
PERL_TSA__(capability(x))
#define PERL_TSA_GUARDED_BY(x) \
PERL_TSA__(guarded_by(x))
#define PERL_TSA_PT_GUARDED_BY(x) \
PERL_TSA__(pt_guarded_by(x))
#define PERL_TSA_REQUIRES(x) \
PERL_TSA__(requires_capability(x))
#define PERL_TSA_EXCLUDES(x) \
PERL_TSA__(locks_excluded(x))
#define PERL_TSA_ACQUIRE(x) \
PERL_TSA__(acquire_capability(x))
#define PERL_TSA_RELEASE(x) \
PERL_TSA__(release_capability(x))
#define PERL_TSA_NO_TSA \
PERL_TSA__(no_thread_safety_analysis)
#if defined(USE_ITHREADS)
# if defined(WIN32)
# include <win32thread.h>
# elif defined(OS2)
# include "os2thread.h"
# elif defined(I_MACH_CTHREADS)
# include <mach/cthreads.h>
typedef
cthread_t perl_os_thread;
typedef
mutex_t perl_mutex;
typedef
condition_t perl_cond;
typedef
void
* perl_key;
# elif defined(I_PTHREAD) /* Posix threads */
# include <pthread.h>
typedef
pthread_t perl_os_thread;
typedef
pthread_mutex_t PERL_TSA_CAPABILITY(
"mutex"
) perl_mutex;
typedef
pthread_cond_t perl_cond;
typedef
pthread_key_t perl_key;
# endif
typedef
struct
{
perl_mutex lock;
perl_cond wakeup;
SSize_t readers_count;
} perl_RnW1_mutex_t;
#endif /* USE_ITHREADS */
#ifdef PERL_TSA_ACTIVE
EXTERN_C
int
perl_tsa_mutex_lock(perl_mutex* mutex)
PERL_TSA_ACQUIRE(*mutex)
PERL_TSA_NO_TSA;
EXTERN_C
int
perl_tsa_mutex_unlock(perl_mutex* mutex)
PERL_TSA_RELEASE(*mutex)
PERL_TSA_NO_TSA;
#endif
#if defined(WIN32)
# include "win32.h"
#endif
#define STATUS_UNIX PL_statusvalue
#ifdef VMS
# define STATUS_NATIVE PL_statusvalue_vms
# include <stsdef.h>
# include <ssdef.h>
# define child_offset_bits (8)
# ifndef C_FAC_POSIX
# define C_FAC_POSIX 0x35A000
# endif
# define STATUS_EXIT \
(((I32)PL_statusvalue_vms == -1 ? SS$_ABORT : PL_statusvalue_vms) | \
(VMSISH_HUSHED ? STS$M_INHIB_MSG : 0))
# define STATUS_NATIVE_CHILD_SET(n) \
STMT_START { \
I32 evalue = (I32)n; \
if
(evalue == EVMSERR) { \
PL_statusvalue_vms = vaxc$
errno
; \
PL_statusvalue = evalue; \
}
else
{ \
PL_statusvalue_vms = evalue; \
if
(evalue == -1) { \
PL_statusvalue = -1; \
PL_statusvalue_vms = SS$_ABORT;
\
}
else
\
PL_statusvalue = Perl_vms_status_to_unix(evalue, 1); \
set_vaxc_errno(evalue); \
if
((PL_statusvalue_vms & C_FAC_POSIX) == C_FAC_POSIX) \
set_errno(EVMSERR); \
else
set_errno(Perl_vms_status_to_unix(evalue, 0)); \
PL_statusvalue = PL_statusvalue << child_offset_bits; \
} \
} STMT_END
# ifdef VMSISH_STATUS
# define STATUS_CURRENT (VMSISH_STATUS ? STATUS_NATIVE : STATUS_UNIX)
# else
# define STATUS_CURRENT STATUS_UNIX
# endif
# define STATUS_UNIX_SET(n) \
STMT_START { \
I32 evalue = (I32)n; \
PL_statusvalue = evalue; \
if
(PL_statusvalue != -1) { \
if
(PL_statusvalue != EVMSERR) { \
PL_statusvalue &= 0xFFFF; \
if
(MY_POSIX_EXIT) \
PL_statusvalue_vms=PL_statusvalue ? SS$_ABORT : SS$_NORMAL;\
else
PL_statusvalue_vms = Perl_unix_status_to_vms(evalue); \
} \
else
{ \
PL_statusvalue_vms = vaxc$
errno
; \
} \
} \
else
PL_statusvalue_vms = SS$_ABORT; \
set_vaxc_errno(PL_statusvalue_vms); \
} STMT_END
# define STATUS_UNIX_EXIT_SET(n) \
STMT_START { \
I32 evalue = (I32)n; \
PL_statusvalue = evalue; \
if
(MY_POSIX_EXIT) { \
if
(evalue <= 0xFF00) { \
if
(evalue > 0xFF) \
evalue = ((U8) (evalue >> child_offset_bits)); \
PL_statusvalue_vms = \
(C_FAC_POSIX | (evalue << 3 ) | \
((evalue == 1) ? (STS$K_ERROR | STS$M_INHIB_MSG) : 1)); \
}
else
\
PL_statusvalue_vms = evalue; \
}
else
{ \
if
(evalue == 0) \
PL_statusvalue_vms = SS$_NORMAL; \
else
if
(evalue <= 0xFF00) \
PL_statusvalue_vms = SS$_ABORT; \
else
{
\
if
(evalue != EVMSERR) PL_statusvalue_vms = evalue; \
else
PL_statusvalue_vms = vaxc$
errno
; \
\
PL_statusvalue = EVMSERR; \
} \
set_vaxc_errno(PL_statusvalue_vms); \
} \
} STMT_END
# define STATUS_EXIT_SET(n) \
STMT_START { \
I32 evalue = (I32)n; \
PL_statusvalue = evalue; \
if
(MY_POSIX_EXIT) \
if
(evalue > 255) PL_statusvalue_vms = evalue;
else
{ \
PL_statusvalue_vms = \
(C_FAC_POSIX | (evalue << 3 ) | \
((evalue == 1) ? (STS$K_ERROR | STS$M_INHIB_MSG) : 1));} \
else
\
PL_statusvalue_vms = evalue ? evalue : SS$_NORMAL; \
set_vaxc_errno(PL_statusvalue_vms); \
} STMT_END
# define STATUS_ALL_SUCCESS \
(PL_statusvalue = 0, PL_statusvalue_vms = SS$_NORMAL)
# define STATUS_ALL_FAILURE (PL_statusvalue = 1, \
vaxc$
errno
= PL_statusvalue_vms = MY_POSIX_EXIT ? \
(C_FAC_POSIX | (1 << 3) | STS$K_ERROR | STS$M_INHIB_MSG) : SS$_ABORT)
#elif defined(__amigaos4__)
# define STATUS_NATIVE PL_statusvalue_posix
# define STATUS_NATIVE_CHILD_SET(n) \
STMT_START { \
PL_statusvalue_posix = (n); \
if
(PL_statusvalue_posix < 0) { \
PL_statusvalue = -1; \
} \
else
{ \
PL_statusvalue = n << 8; \
} \
} STMT_END
# define STATUS_UNIX_SET(n) \
STMT_START { \
PL_statusvalue = (n); \
if
(PL_statusvalue != -1) \
PL_statusvalue &= 0xFFFF; \
} STMT_END
# define STATUS_UNIX_EXIT_SET(n) STATUS_UNIX_SET(n)
# define STATUS_EXIT_SET(n) STATUS_UNIX_SET(n)
# define STATUS_CURRENT STATUS_UNIX
# define STATUS_EXIT STATUS_UNIX
# define STATUS_ALL_SUCCESS (PL_statusvalue = 0, PL_statusvalue_posix = 0)
# define STATUS_ALL_FAILURE (PL_statusvalue = 1, PL_statusvalue_posix = 1)
#else
# define STATUS_NATIVE PL_statusvalue_posix
# if defined(WCOREDUMP)
# define STATUS_NATIVE_CHILD_SET(n) \
STMT_START { \
PL_statusvalue_posix = (n); \
if
(PL_statusvalue_posix == -1) \
PL_statusvalue = -1; \
else
{ \
PL_statusvalue = \
(WIFEXITED(PL_statusvalue_posix) ? (WEXITSTATUS(PL_statusvalue_posix) << 8) : 0) | \
(WIFSIGNALED(PL_statusvalue_posix) ? (WTERMSIG(PL_statusvalue_posix) & 0x7F) : 0) | \
(WIFSIGNALED(PL_statusvalue_posix) && WCOREDUMP(PL_statusvalue_posix) ? 0x80 : 0); \
} \
} STMT_END
# elif defined(WIFEXITED)
# define STATUS_NATIVE_CHILD_SET(n) \
STMT_START { \
PL_statusvalue_posix = (n); \
if
(PL_statusvalue_posix == -1) \
PL_statusvalue = -1; \
else
{ \
PL_statusvalue = \
(WIFEXITED(PL_statusvalue_posix) ? (WEXITSTATUS(PL_statusvalue_posix) << 8) : 0) | \
(WIFSIGNALED(PL_statusvalue_posix) ? (WTERMSIG(PL_statusvalue_posix) & 0x7F) : 0); \
} \
} STMT_END
# else
# define STATUS_NATIVE_CHILD_SET(n) \
STMT_START { \
PL_statusvalue_posix = (n); \
if
(PL_statusvalue_posix == -1) \
PL_statusvalue = -1; \
else
{ \
PL_statusvalue = \
PL_statusvalue_posix & 0xFFFF; \
} \
} STMT_END
# endif
# define STATUS_UNIX_SET(n) \
STMT_START { \
PL_statusvalue = (n); \
if
(PL_statusvalue != -1) \
PL_statusvalue &= 0xFFFF; \
} STMT_END
# define STATUS_UNIX_EXIT_SET(n) STATUS_UNIX_SET(n)
# define STATUS_EXIT_SET(n) STATUS_UNIX_SET(n)
# define STATUS_CURRENT STATUS_UNIX
# define STATUS_EXIT STATUS_UNIX
# define STATUS_ALL_SUCCESS (PL_statusvalue = 0, PL_statusvalue_posix = 0)
# define STATUS_ALL_FAILURE (PL_statusvalue = 1, PL_statusvalue_posix = 1)
#endif
#define PERL_EXIT_EXPECTED 0x01
#define PERL_EXIT_DESTRUCT_END 0x02 /* Run END in perl_destruct */
#define PERL_EXIT_WARN 0x04 /* Warn if Perl_my_exit() or Perl_my_failure_exit() called */
#define PERL_EXIT_ABORT 0x08 /* Call abort() if Perl_my_exit() or Perl_my_failure_exit() called */
#ifndef PERL_CORE
# ifndef PERL_FS_VER_FMT
# define PERL_FS_VER_FMT "%d.%d.%d"
# endif
#endif
#ifndef PERL_FS_VERSION
# define PERL_FS_VERSION PERL_VERSION_STRING
#endif
#ifndef PERL_FLUSHALL_FOR_CHILD
# if defined(USE_PERLIO) || defined(FFLUSH_NULL)
# define PERL_FLUSHALL_FOR_CHILD PerlIO_flush((PerlIO*)NULL)
# elif defined(FFLUSH_ALL)
# define PERL_FLUSHALL_FOR_CHILD my_fflush_all()
# else
# define PERL_FLUSHALL_FOR_CHILD NOOP
# endif
#endif
#ifndef PERL_WAIT_FOR_CHILDREN
# define PERL_WAIT_FOR_CHILDREN NOOP
#endif
#ifndef PERL_SET_INTERP
# define PERL_SET_INTERP(i) \
STMT_START { PL_curinterp = (PerlInterpreter*)(i); \
PERL_SET_NON_tTHX_CONTEXT(i); \
} STMT_END
#endif
#ifndef PERL_GET_INTERP
# define PERL_GET_INTERP (PL_curinterp)
#endif
#if defined(MULTIPLICITY) && !defined(PERL_GET_THX)
# define PERL_GET_THX ((PerlInterpreter *)PERL_GET_CONTEXT)
# define PERL_SET_THX(t) PERL_SET_CONTEXT(t)
#endif
#ifndef SVf_
# define SVf_(n) "-" STRINGIFY(n) "p"
#endif
#ifndef SVf
# define SVf "-p"
#endif
#ifndef SVf32
# define SVf32 SVf_(32)
#endif
#ifndef SVf256
# define SVf256 SVf_(256)
#endif
#define SVfARG(p) ((void*)(p))
#ifndef PERL_QUOTEDPREFIX_LEN
# define PERL_QUOTEDPREFIX_LEN 256
#endif
#ifndef SVf_QUOTEDPREFIX
# define SVf_QUOTEDPREFIX "5p"
#endif
#ifndef PVf_QUOTEDPREFIX
# define PVf_QUOTEDPREFIX "1p"
#endif
#ifndef HEKf
# define HEKf "2p"
#endif
#ifndef HEKf_QUOTEDPREFIX
# define HEKf_QUOTEDPREFIX "7p"
#endif
#ifndef HEKf256
# define HEKf256 "3p"
#endif
#ifndef HEKf256_QUOTEDPREFIX
# define HEKf256_QUOTEDPREFIX "8p"
#endif
#define HEKfARG(p) ((void*)(p))
#ifndef UTF8f
# define UTF8f "d%" UVuf "%4p"
#endif
#ifndef UTF8f_QUOTEDPREFIX
# define UTF8f_QUOTEDPREFIX "d%" UVuf "%9p"
#endif
#define UTF8fARG(u,l,p) (int)cBOOL(u), (UV)(l), (void*)(p)
#define PNf UTF8f
#define PNfARG(pn) (int)1, (UV)PadnameLEN(pn), (void *)PadnamePV(pn)
#define HvNAMEf "6p"
#define HvNAMEf_QUOTEDPREFIX "10p"
#define HvNAMEfARG(hv) ((void*)(hv))
#ifdef PERL_CORE
# undef UVf
#elif !defined(UVf)
# define UVf UVuf
#endif
#if !defined(DEBUGGING) && !defined(NDEBUG)
# define NDEBUG 1
#endif
#include <assert.h>
#ifdef HASATTRIBUTE_NORETURN
# define NORETURN_FUNCTION_END NOT_REACHED;
#else
# define NORETURN_FUNCTION_END NOT_REACHED; return 0
#endif
#ifdef HAS_BUILTIN_EXPECT
# define EXPECT(expr,val) __builtin_expect(expr,val)
#else
# define EXPECT(expr,val) (expr)
#endif
#define LIKELY(cond) EXPECT(cBOOL(cond),TRUE)
#define UNLIKELY(cond) EXPECT(cBOOL(cond),FALSE)
#ifdef HAS_BUILTIN_CHOOSE_EXPR
#endif
#if (! defined(__IBMC__) || __IBMC__ >= 1210) \
&& (( defined(
static_assert
) && ( defined(_ISOC11_SOURCE) \
|| (__STDC_VERSION__ - 0) >= 201101L)) \
|| (defined(__cplusplus) && __cplusplus >= 201103L))
# define STATIC_ASSERT_DECL(COND) static_assert(COND, #COND)
#else
# define STATIC_ASSERT_2(COND, SUFFIX) \
typedef
struct
{ \
unsigned
int
_static_assertion_failed_##SUFFIX : (COND) ? 1 : -1; \
} _static_assertion_failed_##SUFFIX PERL_UNUSED_DECL
# define STATIC_ASSERT_1(COND, SUFFIX) STATIC_ASSERT_2(COND, SUFFIX)
# define STATIC_ASSERT_DECL(COND) STATIC_ASSERT_1(COND, __LINE__)
#endif
#define STATIC_ASSERT_STMT(COND) STMT_START { STATIC_ASSERT_DECL(COND); } STMT_END
#ifndef __has_builtin
# define __has_builtin(x) 0 /* not a clang style compiler */
#endif
#ifdef PERL_STACK_OFFSET_SSIZET
typedef
SSize_t Stack_off_t;
# define Stack_off_t_MAX SSize_t_MAX
#else
typedef
I32 Stack_off_t;
# define Stack_off_t_MAX I32_MAX
#endif
#define PERL_STACK_OFFSET_DEFINED
#if __has_builtin(__builtin_unreachable)
# define HAS_BUILTIN_UNREACHABLE
#elif PERL_GCC_VERSION_GE(4,5,0)
# define HAS_BUILTIN_UNREACHABLE
#endif
#ifdef DEBUGGING
# define ASSUME(x) assert(x)
#elif __has_builtin(__builtin_assume)
# if defined(__clang__) || defined(__clang)
# define ASSUME(x) CLANG_DIAG_IGNORE(-Wassume) \
__builtin_assume (x) \
CLANG_DIAG_RESTORE
# else
# define ASSUME(x) __builtin_assume(x)
# endif
#elif defined(_MSC_VER)
# define ASSUME(x) __assume(x)
#elif defined(__ARMCC_VERSION) /* untested */
# define ASSUME(x) __promise(x)
#elif defined(HAS_BUILTIN_UNREACHABLE)
# define ASSUME(x) ((x) ? (void) 0 : __builtin_unreachable())
#else
# define ASSUME(x) assert(x)
#endif
#ifdef HAS_BUILTIN_UNREACHABLE
# define NOT_REACHED \
STMT_START { \
ASSUME(!
"UNREACHABLE"
); __builtin_unreachable(); \
} STMT_END
# undef HAS_BUILTIN_UNREACHABLE /* Don't leak out this internal symbol */
#elif ! defined(__GNUC__) && (defined(__sun) || defined(__hpux))
# define NOT_REACHED
#else
# define NOT_REACHED ASSUME(!"UNREACHABLE")
#endif
#ifdef HAS_PAUSE
#define Pause pause
#else
#define Pause() sleep((32767<<16)+32767)
#endif
#ifndef IOCPARM_LEN
# ifdef IOCPARM_MASK
# define IOCPARM_LEN(x) (((x) >> 16) & IOCPARM_MASK)
# elif defined(_IOC_SIZE) && defined(__GLIBC__)
# define IOCPARM_LEN(x) (_IOC_SIZE(x) < 256 ? 256 : _IOC_SIZE(x))
# else
# define IOCPARM_LEN(x) 256
# endif
#endif
#if defined(__CYGWIN__)
# define USEMYBINMODE /**/
# include <io.h> /* for setmode() prototype */
# define my_binmode(fp, iotype, mode) \
cBOOL(PerlLIO_setmode(fileno(fp), mode) != -1)
#endif
#ifdef __CYGWIN__
void
init_os_extras(
void
);
#endif
#ifdef UNION_ANY_DEFINITION
UNION_ANY_DEFINITION;
#else
union
any {
void
* any_ptr;
SV* any_sv;
SV** any_svp;
GV* any_gv;
AV* any_av;
HV* any_hv;
OP* any_op;
char
* any_pv;
char
** any_pvp;
I32 any_i32;
U32 any_u32;
IV any_iv;
UV any_uv;
long
any_long;
bool
any_bool;
Size_t any_size;
SSize_t any_ssize;
STRLEN any_strlen;
void
(*any_dptr) (
void
*);
void
(*any_dxptr) (pTHX_
void
*);
};
#endif
typedef
I32 (*filter_t) (pTHX_
int
, SV *,
int
);
#define FILTER_READ(idx, sv, len) filter_read(idx, sv, len)
#define FILTER_DATA(idx) \
(PL_parser ? AvARRAY(PL_parser->rsfp_filters)[idx] : NULL)
#define FILTER_ISREADER(idx) \
(PL_parser && PL_parser->rsfp_filters \
&& idx >= AvFILLp(PL_parser->rsfp_filters))
#define PERL_FILTER_EXISTS(i) \
(PL_parser && PL_parser->rsfp_filters \
&& (Size_t) (i) < av_count(PL_parser->rsfp_filters))
#if defined(_AIX) && !defined(_AIX43)
#if defined(USE_REENTRANT) || defined(_REENTRANT) || defined(_THREAD_SAFE)
typedef
struct
crypt_data {
char
E[48];
char
KS[16][48];
char
block[66];
char
iobuf[16];
} CRYPTD;
#endif /* threading */
#endif /* AIX */
#ifndef PERL_CALLCONV
# ifdef __cplusplus
# define PERL_CALLCONV EXTERN_C
# else
# define PERL_CALLCONV
# endif
#endif
#ifndef PERL_CALLCONV_NO_RET
# define PERL_CALLCONV_NO_RET PERL_CALLCONV
#endif
#ifndef PERL_STATIC_NO_RET
# define PERL_STATIC_NO_RET STATIC
#endif
#ifndef PERL_STATIC_INLINE_NO_RET
# define PERL_STATIC_INLINE_NO_RET PERL_STATIC_INLINE
#endif
#ifndef PERL_STATIC_FORCE_INLINE
# define PERL_STATIC_FORCE_INLINE PERL_STATIC_INLINE
#endif
#ifndef PERL_STATIC_FORCE_INLINE_NO_RET
# define PERL_STATIC_FORCE_INLINE_NO_RET PERL_STATIC_INLINE
#endif
#if !defined(OS2)
# include "iperlsys.h"
#endif
#ifdef __LIBCATAMOUNT__
#undef HAS_PASSWD /* unixish.h but not unixish enough. */
#undef HAS_GROUP
#define FAKE_BIT_BUCKET
#endif
#if !defined(NO_HASH_SEED) && !defined(USE_HASH_SEED)
# define USE_HASH_SEED
#endif
#include "perly.h"
#ifndef PERL_BITFIELD8
# ifdef HAS_NON_INT_BITFIELDS
# define PERL_BITFIELD8 U8
# else
# define PERL_BITFIELD8 unsigned
# endif
#endif
#ifndef PERL_BITFIELD16
# ifdef HAS_NON_INT_BITFIELDS
# define PERL_BITFIELD16 U16
# else
# define PERL_BITFIELD16 unsigned
# endif
#endif
#ifndef PERL_BITFIELD32
# ifdef HAS_NON_INT_BITFIELDS
# define PERL_BITFIELD32 U32
# else
# define PERL_BITFIELD32 unsigned
# endif
#endif
#include "sv.h"
#include "regexp.h"
#include "util.h"
#include "form.h"
#include "gv.h"
#include "pad.h"
#include "cv.h"
#include "opnames.h"
#include "op.h"
#include "hv.h"
#include "cop.h"
#include "av.h"
#include "mg.h"
#include "scope.h"
#include "warnings.h"
#include "utf8.h"
#define my_stat() my_stat_flags(SV_GMAGIC)
#define my_lstat() my_lstat_flags(SV_GMAGIC)
#undef _XPV_HEAD
#undef _XPVMG_HEAD
#undef _XPVCV_COMMON
#include "parser.h"
typedef
struct
magic_state MGS;
#if defined(PERL_IN_REGEX_ENGINE) || defined(PERL_EXT_RE_BUILD)
struct
scan_data_t;
typedef
struct
regnode_charclass regnode_charclass;
typedef
struct
regnode_charclass_posixl regnode_charclass_class;
typedef
struct
regnode_charclass_posixl regnode_charclass_posixl;
typedef
struct
regnode_ssc regnode_ssc;
typedef
struct
RExC_state_t RExC_state_t;
struct
_reg_trie_data;
typedef
struct
scan_data_t scan_data_t;
#endif
struct
ptr_tbl_ent {
struct
ptr_tbl_ent* next;
const
void
* oldval;
void
* newval;
};
struct
ptr_tbl {
struct
ptr_tbl_ent** tbl_ary;
UV tbl_max;
UV tbl_items;
struct
ptr_tbl_arena *tbl_arena;
struct
ptr_tbl_ent *tbl_arena_next;
struct
ptr_tbl_ent *tbl_arena_end;
};
#if defined(htonl) && !defined(HAS_HTONL)
#define HAS_HTONL
#endif
#if defined(htons) && !defined(HAS_HTONS)
#define HAS_HTONS
#endif
#if defined(ntohl) && !defined(HAS_NTOHL)
#define HAS_NTOHL
#endif
#if defined(ntohs) && !defined(HAS_NTOHS)
#define HAS_NTOHS
#endif
#ifndef HAS_HTONL
#define HAS_HTONS
#define HAS_HTONL
#define HAS_NTOHS
#define HAS_NTOHL
# if (BYTEORDER & 0xffff) == 0x4321
# define ntohl(x) ((x)&0xFFFFFFFF)
# define htonl(x) ntohl(x)
# define ntohs(x) ((x)&0xFFFF)
# define htons(x) ntohs(x)
# elif BYTEORDER == 0x1234 || BYTEORDER == 0x12345678
PERL_STATIC_INLINE U32
my_swap32(
const
U32 x) {
return
((x & 0xFF) << 24) | ((x >> 24) & 0xFF)
| ((x & 0x0000FF00) << 8) | ((x & 0x00FF0000) >> 8);
}
PERL_STATIC_INLINE U16
my_swap16(
const
U16 x) {
return
((x & 0xFF) << 8) | ((x >> 8) & 0xFF);
}
# define htonl(x) my_swap32(x)
# define ntohl(x) my_swap32(x)
# define ntohs(x) my_swap16(x)
# define htons(x) my_swap16(x)
# else
# error "Unsupported byteorder"
# endif
#endif
#if BYTEORDER == 0x1234 || BYTEORDER == 0x12345678
# define vtohl(x) ((x)&0xFFFFFFFF)
# define vtohs(x) ((x)&0xFFFF)
# define htovl(x) vtohl(x)
# define htovs(x) vtohs(x)
#elif BYTEORDER == 0x4321 || BYTEORDER == 0x87654321
# define vtohl(x) ((((x)&0xFF)<<24) \
+(((x)>>24)&0xFF) \
+(((x)&0x0000FF00)<<8) \
+(((x)&0x00FF0000)>>8) )
# define vtohs(x) ((((x)&0xFF)<<8) + (((x)>>8)&0xFF))
# define htovl(x) vtohl(x)
# define htovs(x) vtohs(x)
#else
# error "Unsupported byteorder"
#endif
#define I32_MAX_P1 (2.0 * (1 + (((U32)I32_MAX) >> 1)))
#define U32_MAX_P1 (4.0 * (1 + ((U32_MAX) >> 2)))
#define U32_MAX_P1_HALF (2.0 * (1 + ((U32_MAX) >> 2)))
#define UV_MAX_P1 (4.0 * (1 + ((UV_MAX) >> 2)))
#define IV_MAX_P1 (2.0 * (1 + (((UV)IV_MAX) >> 1)))
#define UV_MAX_P1_HALF (2.0 * (1 + ((UV_MAX) >> 2)))
#ifndef CAST_INLINE
#define I_32(what) (cast_i32((NV)(what)))
#define U_32(what) (cast_ulong((NV)(what)))
#define I_V(what) (cast_iv((NV)(what)))
#define U_V(what) (cast_uv((NV)(what)))
#else
#define I_32(n) ((n) < I32_MAX_P1 ? ((n) < I32_MIN ? I32_MIN : (I32) (n)) \
: ((n) < U32_MAX_P1 ? (I32)(U32) (n) \
: ((n) > 0 ? (I32) U32_MAX : 0
)))
#define U_32(n) ((n) < 0.0 ? ((n) < I32_MIN ? (UV) I32_MIN : (U32)(I32) (n)) \
: ((n) < U32_MAX_P1 ? (U32) (n) \
: ((n) > 0 ? U32_MAX : 0
)))
#define I_V(n) (LIKELY((n) < IV_MAX_P1) ? (UNLIKELY((n) < IV_MIN) ? IV_MIN : (IV) (n)) \
: (LIKELY((n) < UV_MAX_P1) ? (IV)(UV) (n) \
: ((n) > 0 ? (IV)UV_MAX : 0
)))
#define U_V(n) ((n) < 0.0 ? (UNLIKELY((n) < IV_MIN) ? (UV) IV_MIN : (UV)(IV) (n)) \
: (LIKELY((n) < UV_MAX_P1) ? (UV) (n) \
: ((n) > 0 ? UV_MAX : 0
)))
#endif
#define U_S(what) ((U16)U_32(what))
#define U_I(what) ((unsigned int)U_32(what))
#define U_L(what) U_32(what)
#ifdef HAS_SIGNBIT
# ifndef Perl_signbit
# define Perl_signbit signbit
# endif
#endif
#define NV_WITHIN_IV(nv) (I_V(nv) >= IV_MIN && I_V(nv) <= IV_MAX)
#define NV_WITHIN_UV(nv) ((nv)>=0.0 && U_V(nv) >= UV_MIN && U_V(nv) <= UV_MAX)
#define CLUMP_2UV(iv) ((iv) < 0 ? 0 : (UV)(iv))
#define CLUMP_2IV(uv) ((uv) > (UV)IV_MAX ? IV_MAX : (IV)(uv))
#ifndef MAXSYSFD
# define MAXSYSFD 2
#endif
#ifndef __cplusplus
#if !defined(WIN32)
Uid_t getuid (
void
);
Uid_t geteuid (
void
);
Gid_t getgid (
void
);
Gid_t getegid (
void
);
#endif
#endif
#ifndef Perl_debug_log
# define Perl_debug_log PerlIO_stderr()
#endif
#ifndef Perl_error_log
# define Perl_error_log (PL_stderrgv \
&& isGV(PL_stderrgv) \
&& GvIOp(PL_stderrgv) \
&& IoOFP(GvIOp(PL_stderrgv)) \
? IoOFP(GvIOp(PL_stderrgv)) \
: PerlIO_stderr())
#endif
#define DEBUG_p_FLAG 0x00000001 /* 1 */
#define DEBUG_s_FLAG 0x00000002 /* 2 */
#define DEBUG_l_FLAG 0x00000004 /* 4 */
#define DEBUG_t_FLAG 0x00000008 /* 8 */
#define DEBUG_o_FLAG 0x00000010 /* 16 */
#define DEBUG_c_FLAG 0x00000020 /* 32 */
#define DEBUG_P_FLAG 0x00000040 /* 64 */
#define DEBUG_m_FLAG 0x00000080 /* 128 */
#define DEBUG_f_FLAG 0x00000100 /* 256 */
#define DEBUG_r_FLAG 0x00000200 /* 512 */
#define DEBUG_x_FLAG 0x00000400 /* 1024 */
#define DEBUG_u_FLAG 0x00000800 /* 2048 */
#define DEBUG_U_FLAG 0x00001000 /* 4096 */
#define DEBUG_h_FLAG 0x00002000 /* 8192 */
#define DEBUG_X_FLAG 0x00004000 /* 16384 */
#define DEBUG_D_FLAG 0x00008000 /* 32768 */
#define DEBUG_S_FLAG 0x00010000 /* 65536 */
#define DEBUG_T_FLAG 0x00020000 /* 131072 */
#define DEBUG_R_FLAG 0x00040000 /* 262144 */
#define DEBUG_J_FLAG 0x00080000 /* 524288 */
#define DEBUG_v_FLAG 0x00100000 /*1048576 */
#define DEBUG_C_FLAG 0x00200000 /*2097152 */
#define DEBUG_A_FLAG 0x00400000 /*4194304 */
#define DEBUG_q_FLAG 0x00800000 /*8388608 */
#define DEBUG_M_FLAG 0x01000000 /*16777216*/
#define DEBUG_B_FLAG 0x02000000 /*33554432*/
#define DEBUG_L_FLAG 0x04000000 /*67108864*/
#define DEBUG_i_FLAG 0x08000000 /*134217728*/
#define DEBUG_y_FLAG 0x10000000 /*268435456*/
#define DEBUG_MASK 0x1FFFEFFF /* mask of all the standard flags */
#define DEBUG_DB_RECURSE_FLAG 0x40000000
#define DEBUG_TOP_FLAG 0x80000000 /* -D was given --> PL_debug |= FLAG */
# define DEBUG_BOTH_FLAGS_TEST_(flag1, flag2) \
UNLIKELY((PL_debug & ((flag1)|(flag2))) \
== ((flag1)|(flag2)))
# define DEBUG_p_TEST_ UNLIKELY(PL_debug & DEBUG_p_FLAG)
# define DEBUG_s_TEST_ UNLIKELY(PL_debug & DEBUG_s_FLAG)
# define DEBUG_l_TEST_ UNLIKELY(PL_debug & DEBUG_l_FLAG)
# define DEBUG_t_TEST_ UNLIKELY(PL_debug & DEBUG_t_FLAG)
# define DEBUG_o_TEST_ UNLIKELY(PL_debug & DEBUG_o_FLAG)
# define DEBUG_c_TEST_ UNLIKELY(PL_debug & DEBUG_c_FLAG)
# define DEBUG_P_TEST_ UNLIKELY(PL_debug & DEBUG_P_FLAG)
# define DEBUG_m_TEST_ UNLIKELY(PL_debug & DEBUG_m_FLAG)
# define DEBUG_f_TEST_ UNLIKELY(PL_debug & DEBUG_f_FLAG)
# define DEBUG_r_TEST_ UNLIKELY(PL_debug & DEBUG_r_FLAG)
# define DEBUG_x_TEST_ UNLIKELY(PL_debug & DEBUG_x_FLAG)
# define DEBUG_u_TEST_ UNLIKELY(PL_debug & DEBUG_u_FLAG)
# define DEBUG_U_TEST_ UNLIKELY(PL_debug & DEBUG_U_FLAG)
# define DEBUG_h_TEST_ UNLIKELY(PL_debug & DEBUG_h_FLAG)
# define DEBUG_X_TEST_ UNLIKELY(PL_debug & DEBUG_X_FLAG)
# define DEBUG_D_TEST_ UNLIKELY(PL_debug & DEBUG_D_FLAG)
# define DEBUG_S_TEST_ UNLIKELY(PL_debug & DEBUG_S_FLAG)
# define DEBUG_T_TEST_ UNLIKELY(PL_debug & DEBUG_T_FLAG)
# define DEBUG_R_TEST_ UNLIKELY(PL_debug & DEBUG_R_FLAG)
# define DEBUG_J_TEST_ UNLIKELY(PL_debug & DEBUG_J_FLAG)
# define DEBUG_v_TEST_ UNLIKELY(PL_debug & DEBUG_v_FLAG)
# define DEBUG_C_TEST_ UNLIKELY(PL_debug & DEBUG_C_FLAG)
# define DEBUG_A_TEST_ UNLIKELY(PL_debug & DEBUG_A_FLAG)
# define DEBUG_q_TEST_ UNLIKELY(PL_debug & DEBUG_q_FLAG)
# define DEBUG_M_TEST_ UNLIKELY(PL_debug & DEBUG_M_FLAG)
# define DEBUG_B_TEST_ UNLIKELY(PL_debug & DEBUG_B_FLAG)
# ifndef DEBUG_LOCALE_INITIALIZATION_
# define DEBUG_LOCALE_INITIALIZATION_ 0
# endif
# define DEBUG_L_TEST_ \
( UNLIKELY(DEBUG_LOCALE_INITIALIZATION_) \
|| UNLIKELY(PL_debug & DEBUG_L_FLAG))
# define DEBUG_Lv_TEST_ \
( UNLIKELY(DEBUG_LOCALE_INITIALIZATION_) \
|| UNLIKELY(DEBUG_BOTH_FLAGS_TEST_(DEBUG_L_FLAG, DEBUG_v_FLAG)))
# define DEBUG_i_TEST_ UNLIKELY(PL_debug & DEBUG_i_FLAG)
# define DEBUG_y_TEST_ UNLIKELY(PL_debug & DEBUG_y_FLAG)
# define DEBUG_Xv_TEST_ DEBUG_BOTH_FLAGS_TEST_(DEBUG_X_FLAG, DEBUG_v_FLAG)
# define DEBUG_Uv_TEST_ DEBUG_BOTH_FLAGS_TEST_(DEBUG_U_FLAG, DEBUG_v_FLAG)
# define DEBUG_Pv_TEST_ DEBUG_BOTH_FLAGS_TEST_(DEBUG_P_FLAG, DEBUG_v_FLAG)
# define DEBUG_yv_TEST_ DEBUG_BOTH_FLAGS_TEST_(DEBUG_y_FLAG, DEBUG_v_FLAG)
#ifdef DEBUGGING
# define DEBUG_p_TEST DEBUG_p_TEST_
# define DEBUG_s_TEST DEBUG_s_TEST_
# define DEBUG_l_TEST DEBUG_l_TEST_
# define DEBUG_t_TEST DEBUG_t_TEST_
# define DEBUG_o_TEST DEBUG_o_TEST_
# define DEBUG_c_TEST DEBUG_c_TEST_
# define DEBUG_P_TEST DEBUG_P_TEST_
# define DEBUG_m_TEST DEBUG_m_TEST_
# define DEBUG_f_TEST DEBUG_f_TEST_
# define DEBUG_r_TEST DEBUG_r_TEST_
# define DEBUG_x_TEST DEBUG_x_TEST_
# define DEBUG_u_TEST DEBUG_u_TEST_
# define DEBUG_U_TEST DEBUG_U_TEST_
# define DEBUG_h_TEST DEBUG_h_TEST_
# define DEBUG_X_TEST DEBUG_X_TEST_
# define DEBUG_D_TEST DEBUG_D_TEST_
# define DEBUG_S_TEST DEBUG_S_TEST_
# define DEBUG_T_TEST DEBUG_T_TEST_
# define DEBUG_R_TEST DEBUG_R_TEST_
# define DEBUG_J_TEST DEBUG_J_TEST_
# define DEBUG_v_TEST DEBUG_v_TEST_
# define DEBUG_C_TEST DEBUG_C_TEST_
# define DEBUG_A_TEST DEBUG_A_TEST_
# define DEBUG_q_TEST DEBUG_q_TEST_
# define DEBUG_M_TEST DEBUG_M_TEST_
# define DEBUG_B_TEST DEBUG_B_TEST_
# define DEBUG_L_TEST DEBUG_L_TEST_
# define DEBUG_i_TEST DEBUG_i_TEST_
# define DEBUG_y_TEST DEBUG_y_TEST_
# define DEBUG_Xv_TEST DEBUG_Xv_TEST_
# define DEBUG_Uv_TEST DEBUG_Uv_TEST_
# define DEBUG_Pv_TEST DEBUG_Pv_TEST_
# define DEBUG_Lv_TEST DEBUG_Lv_TEST_
# define DEBUG_yv_TEST DEBUG_yv_TEST_
# define PERL_DEB(a) a
# define PERL_DEB2(a,b) a
# define PERL_DEBUG(a) if (PL_debug) a
# define DEBUG_p(a) if (DEBUG_p_TEST) a
# define DEBUG_s(a) if (DEBUG_s_TEST) a
# define DEBUG_l(a) if (DEBUG_l_TEST) a
# define DEBUG_t(a) if (DEBUG_t_TEST) a
# define DEBUG_o(a) if (DEBUG_o_TEST) a
# define DEBUG_c(a) if (DEBUG_c_TEST) a
# define DEBUG_P(a) if (DEBUG_P_TEST) a
# define DEBUG_m(a) \
STMT_START { \
if
(PERL_GET_INTERP) { \
dTHX; \
if
(DEBUG_m_TEST) { \
PL_debug &= ~DEBUG_m_FLAG; \
a; \
PL_debug |= DEBUG_m_FLAG; \
} \
} \
} STMT_END
#ifndef DEBUG_PRE_STMTS
# define DEBUG_PRE_STMTS
#endif
#ifndef DEBUG_POST_STMTS
# define DEBUG_POST_STMTS
#endif
# define DEBUG__(t, a) \
STMT_START { \
if
(t) { \
DEBUG_PRE_STMTS a; DEBUG_POST_STMTS \
} \
} STMT_END
# define DEBUG_f(a) DEBUG__(DEBUG_f_TEST, a)
# ifdef PERL_EXT_RE_BUILD
# define DEBUG_r(a) STMT_START { \
DEBUG_PRE_STMTS a; DEBUG_POST_STMTS \
} STMT_END;
# else
# define DEBUG_r(a) DEBUG__(DEBUG_r_TEST, a)
# endif /* PERL_EXT_RE_BUILD */
# define DEBUG_x(a) DEBUG__(DEBUG_x_TEST, a)
# define DEBUG_u(a) DEBUG__(DEBUG_u_TEST, a)
# define DEBUG_U(a) DEBUG__(DEBUG_U_TEST, a)
# define DEBUG_X(a) DEBUG__(DEBUG_X_TEST, a)
# define DEBUG_D(a) DEBUG__(DEBUG_D_TEST, a)
# define DEBUG_Xv(a) DEBUG__(DEBUG_Xv_TEST, a)
# define DEBUG_Uv(a) DEBUG__(DEBUG_Uv_TEST, a)
# define DEBUG_Pv(a) DEBUG__(DEBUG_Pv_TEST, a)
# define DEBUG_Lv(a) DEBUG__(DEBUG_Lv_TEST, a)
# define DEBUG_yv(a) DEBUG__(DEBUG_yv_TEST, a)
# define DEBUG_S(a) DEBUG__(DEBUG_S_TEST, a)
# define DEBUG_T(a) DEBUG__(DEBUG_T_TEST, a)
# define DEBUG_R(a) DEBUG__(DEBUG_R_TEST, a)
# define DEBUG_v(a) DEBUG__(DEBUG_v_TEST, a)
# define DEBUG_C(a) DEBUG__(DEBUG_C_TEST, a)
# define DEBUG_A(a) DEBUG__(DEBUG_A_TEST, a)
# define DEBUG_q(a) DEBUG__(DEBUG_q_TEST, a)
# define DEBUG_M(a) DEBUG__(DEBUG_M_TEST, a)
# define DEBUG_B(a) DEBUG__(DEBUG_B_TEST, a)
# define DEBUG_L(a) DEBUG__(DEBUG_L_TEST, a)
# define DEBUG_i(a) DEBUG__(DEBUG_i_TEST, a)
# define DEBUG_y(a) DEBUG__(DEBUG_y_TEST, a)
#else /* ! DEBUGGING below */
# define DEBUG_p_TEST (0)
# define DEBUG_s_TEST (0)
# define DEBUG_l_TEST (0)
# define DEBUG_t_TEST (0)
# define DEBUG_o_TEST (0)
# define DEBUG_c_TEST (0)
# define DEBUG_P_TEST (0)
# define DEBUG_m_TEST (0)
# define DEBUG_f_TEST (0)
# define DEBUG_r_TEST (0)
# define DEBUG_x_TEST (0)
# define DEBUG_u_TEST (0)
# define DEBUG_U_TEST (0)
# define DEBUG_h_TEST (0)
# define DEBUG_X_TEST (0)
# define DEBUG_D_TEST (0)
# define DEBUG_S_TEST (0)
# define DEBUG_T_TEST (0)
# define DEBUG_R_TEST (0)
# define DEBUG_J_TEST (0)
# define DEBUG_v_TEST (0)
# define DEBUG_C_TEST (0)
# define DEBUG_A_TEST (0)
# define DEBUG_q_TEST (0)
# define DEBUG_M_TEST (0)
# define DEBUG_B_TEST (0)
# define DEBUG_L_TEST (0)
# define DEBUG_i_TEST (0)
# define DEBUG_y_TEST (0)
# define DEBUG_Xv_TEST (0)
# define DEBUG_Uv_TEST (0)
# define DEBUG_Pv_TEST (0)
# define DEBUG_Lv_TEST (0)
# define DEBUG_yv_TEST (0)
# define PERL_DEB(a)
# define PERL_DEB2(a,b) b
# define PERL_DEBUG(a)
# define DEBUG_p(a)
# define DEBUG_s(a)
# define DEBUG_l(a)
# define DEBUG_t(a)
# define DEBUG_o(a)
# define DEBUG_c(a)
# define DEBUG_P(a)
# define DEBUG_m(a)
# define DEBUG_f(a)
# define DEBUG_r(a)
# define DEBUG_x(a)
# define DEBUG_u(a)
# define DEBUG_U(a)
# define DEBUG_X(a)
# define DEBUG_D(a)
# define DEBUG_S(a)
# define DEBUG_T(a)
# define DEBUG_R(a)
# define DEBUG_v(a)
# define DEBUG_C(a)
# define DEBUG_A(a)
# define DEBUG_q(a)
# define DEBUG_M(a)
# define DEBUG_B(a)
# define DEBUG_L(a)
# define DEBUG_i(a)
# define DEBUG_y(a)
# define DEBUG_Xv(a)
# define DEBUG_Uv(a)
# define DEBUG_Pv(a)
# define DEBUG_Lv(a)
# define DEBUG_yv(a)
#endif /* DEBUGGING */
#define DEBUG_SCOPE(where) \
DEBUG_l( \
Perl_deb(aTHX_
"%s scope %ld (savestack=%ld) at %s:%d\n"
, \
where, (
long
)PL_scopestack_ix, (
long
)PL_savestack_ix, \
__FILE__, __LINE__));
#define Perl_assert(what) PERL_DEB2( \
((what) ? ((
void
) 0) : \
(Perl_croak_nocontext(
"Assertion %s failed: file \""
__FILE__ \
"\", line %d"
, STRINGIFY(what), __LINE__), \
(
void
) 0)), ((
void
)0))
#ifndef assert
# define assert(what) Perl_assert(what)
#endif
#ifdef DEBUGGING
# define assert_(what) assert(what),
#else
# define assert_(what)
#endif
struct
ufuncs {
I32 (*uf_val)(pTHX_ IV, SV*);
I32 (*uf_set)(pTHX_ IV, SV*);
IV uf_index;
};
#ifndef PERL_MG_UFUNC
#define PERL_MG_UFUNC(name,ix,sv) I32 name(pTHX_ IV ix, SV *sv)
#endif
#include <math.h>
#ifdef __VMS
# include <fp.h>
#endif
#ifndef __cplusplus
# if !defined(WIN32) && !defined(VMS)
#ifndef crypt
char
*crypt (
const
char
*,
const
char
*);
#endif
# endif /* !WIN32 */
# ifndef WIN32
# ifndef getlogin
char
*getlogin (
void
);
# endif
# endif /* !WIN32 */
#endif /* !__cplusplus */
#ifdef UNLINK_ALL_VERSIONS /* Currently only makes sense for VMS */
#define UNLINK unlnk
I32 unlnk (pTHX_
const
char
*);
#else
#define UNLINK PerlLIO_unlink
#endif
#if defined(HAS_SETRESUID) && !defined(HAS_SETRESUID_PROTO)
int
setresuid(uid_t ruid, uid_t euid, uid_t suid);
#endif
#if defined(HAS_SETRESGID) && !defined(HAS_SETRESGID_PROTO)
int
setresgid(gid_t rgid, gid_t egid, gid_t sgid);
#endif
#ifndef HAS_SETREUID
# ifdef HAS_SETRESUID
# define setreuid(r,e) setresuid(r,e,(Uid_t)-1)
# define HAS_SETREUID
# endif
#endif
#ifndef HAS_SETREGID
# ifdef HAS_SETRESGID
# define setregid(r,e) setresgid(r,e,(Gid_t)-1)
# define HAS_SETREGID
# endif
#endif
#ifdef HAS_SIGACTION
typedef
struct
sigaction Sigsave_t;
#else
typedef
Sighandler_t Sigsave_t;
#endif
#define SCAN_DEF 0
#define SCAN_TR 1
#define SCAN_REPL 2
#if defined DEBUGGING || defined PERL_USE_HWM
# ifndef register
# define register
# endif
# define RUNOPS_DEFAULT Perl_runops_debug
#else
# define RUNOPS_DEFAULT Perl_runops_standard
#endif
#if defined(USE_PERLIO)
EXTERN_C
void
PerlIO_teardown(
void
);
# ifdef USE_THREADS
# define PERLIO_INIT MUTEX_INIT(&PL_perlio_mutex)
# define PERLIO_TERM \
STMT_START { \
PerlIO_teardown(); \
MUTEX_DESTROY(&PL_perlio_mutex);\
} STMT_END
# else
# define PERLIO_INIT
# define PERLIO_TERM PerlIO_teardown()
# endif
#else
# define PERLIO_INIT
# define PERLIO_TERM
#endif
#ifdef MYMALLOC
# ifdef MUTEX_INIT_CALLS_MALLOC
# define MALLOC_INIT \
STMT_START { \
PL_malloc_mutex = NULL; \
MUTEX_INIT(&PL_malloc_mutex); \
} STMT_END
# define MALLOC_TERM \
STMT_START { \
perl_mutex tmp = PL_malloc_mutex; \
PL_malloc_mutex = NULL; \
MUTEX_DESTROY(&tmp); \
} STMT_END
# else
# define MALLOC_INIT MUTEX_INIT(&PL_malloc_mutex)
# define MALLOC_TERM MUTEX_DESTROY(&PL_malloc_mutex)
# endif
#else
# define MALLOC_INIT
# define MALLOC_TERM
#endif
#if defined(MULTIPLICITY)
struct
perl_memory_debug_header;
struct
perl_memory_debug_header {
tTHX interpreter;
# if defined(PERL_POISON) || defined(PERL_DEBUG_READONLY_COW)
MEM_SIZE size;
# endif
struct
perl_memory_debug_header *prev;
struct
perl_memory_debug_header *next;
# ifdef PERL_DEBUG_READONLY_COW
bool
readonly;
# endif
};
#elif defined(PERL_DEBUG_READONLY_COW)
struct
perl_memory_debug_header;
struct
perl_memory_debug_header {
MEM_SIZE size;
};
#endif
#if defined (PERL_TRACK_MEMPOOL) || defined (PERL_DEBUG_READONLY_COW)
# define PERL_MEMORY_DEBUG_HEADER_SIZE \
(
sizeof
(
struct
perl_memory_debug_header) + \
(MEM_ALIGNBYTES -
sizeof
(
struct
perl_memory_debug_header) \
%MEM_ALIGNBYTES) % MEM_ALIGNBYTES)
#else
# define PERL_MEMORY_DEBUG_HEADER_SIZE 0
#endif
#ifdef PERL_TRACK_MEMPOOL
# ifdef PERL_DEBUG_READONLY_COW
# define INIT_TRACK_MEMPOOL(header, interp) \
STMT_START { \
(header).interpreter = (interp); \
(header).prev = (header).next = &(header); \
(header).readonly = 0; \
} STMT_END
# else
# define INIT_TRACK_MEMPOOL(header, interp) \
STMT_START { \
(header).interpreter = (interp); \
(header).prev = (header).next = &(header); \
} STMT_END
# endif
# else
# define INIT_TRACK_MEMPOOL(header, interp)
#endif
#ifdef I_MALLOCMALLOC
# include <malloc/malloc.h>
#endif
#ifdef MYMALLOC
# define Perl_safesysmalloc_size(where) Perl_malloced_size(where)
#else
# if defined(HAS_MALLOC_SIZE) && !defined(PERL_DEBUG_READONLY_COW)
# ifdef PERL_TRACK_MEMPOOL
# define Perl_safesysmalloc_size(where) \
(malloc_size(((
char
*)(where)) - PERL_MEMORY_DEBUG_HEADER_SIZE) - PERL_MEMORY_DEBUG_HEADER_SIZE)
# else
# define Perl_safesysmalloc_size(where) malloc_size(where)
# endif
# endif
# ifdef HAS_MALLOC_GOOD_SIZE
# ifdef PERL_TRACK_MEMPOOL
# define Perl_malloc_good_size(how_much) \
(malloc_good_size((how_much) + PERL_MEMORY_DEBUG_HEADER_SIZE) - PERL_MEMORY_DEBUG_HEADER_SIZE)
# else
# define Perl_malloc_good_size(how_much) malloc_good_size(how_much)
# endif
# else
# define Perl_malloc_good_size(how_much) (how_much)
# endif
#endif
typedef
int
(*runops_proc_t)(pTHX);
typedef
void
(*share_proc_t) (pTHX_ SV *sv);
typedef
int
(*thrhook_proc_t) (pTHX);
typedef
OP* (*PPADDR_t[]) (pTHX);
typedef
bool
(*destroyable_proc_t) (pTHX_ SV *sv);
typedef
void
(*despatch_signals_proc_t) (pTHX);
#if defined(__DYNAMIC__) && defined(PERL_DARWIN) && defined(PERL_CORE)
# include <crt_externs.h> /* for the env array */
# define environ (*_NSGetEnviron())
#elif defined(USE_ENVIRON_ARRAY) && !defined(environ)
EXTERN_C
char
**environ;
#endif
#define PERL_PATCHLEVEL_H_IMPLICIT
#include "patchlevel.h"
#undef PERL_PATCHLEVEL_H_IMPLICIT
#define PERL_VERSION_STRING STRINGIFY(PERL_REVISION) "." \
STRINGIFY(PERL_VERSION)
"."
\
STRINGIFY(PERL_SUBVERSION)
#define PERL_API_VERSION_STRING STRINGIFY(PERL_API_REVISION) "." \
STRINGIFY(PERL_API_VERSION)
"."
\
STRINGIFY(PERL_API_SUBVERSION)
START_EXTERN_C
EXTCONST
char
PL_warn_uninit[]
INIT(
"Use of uninitialized value%s%s%s"
);
EXTCONST
char
PL_warn_uninit_sv[]
INIT(
"Use of uninitialized value%"
SVf
"%s%s"
);
EXTCONST
char
PL_warn_nosemi[]
INIT(
"Semicolon seems to be missing"
);
EXTCONST
char
PL_warn_reserved[]
INIT(
"Unquoted string \"%s\" may clash with future reserved word"
);
EXTCONST
char
PL_warn_nl[]
INIT(
"Unsuccessful %s on filename containing newline"
);
EXTCONST
char
PL_no_wrongref[]
INIT(
"Can't use %s ref as %s ref"
);
EXTCONST
char
PL_no_symref[] __attribute__deprecated__
INIT(
"Can't use string (\"%.32s\") as %s ref while \"strict refs\" in use"
);
EXTCONST
char
PL_no_symref_sv[]
INIT(
"Can't use string (\"%"
SVf32
"\"%s) as %s ref while \"strict refs\" in use"
);
EXTCONST
char
PL_no_usym[]
INIT(
"Can't use an undefined value as %s reference"
);
EXTCONST
char
PL_no_aelem[]
INIT(
"Modification of non-creatable array value attempted, subscript %d"
);
EXTCONST
char
PL_no_helem_sv[]
INIT(
"Modification of non-creatable hash value attempted, subscript \"%"
SVf
"\""
);
EXTCONST
char
PL_no_modify[]
INIT(
"Modification of a read-only value attempted"
);
EXTCONST
char
PL_no_security[]
INIT(
"Insecure dependency in %s%s"
);
EXTCONST
char
PL_no_sock_func[]
INIT(
"Unsupported socket function \"%s\" called"
);
EXTCONST
char
PL_no_dir_func[]
INIT(
"Unsupported directory function \"%s\" called"
);
EXTCONST
char
PL_no_func[]
INIT(
"The %s function is unimplemented"
);
EXTCONST
char
PL_no_myglob[]
INIT(
"\"%s\" %s %s can't be in a package"
);
EXTCONST
char
PL_no_localize_ref[]
INIT(
"Can't localize through a reference"
);
EXTCONST
char
PL_memory_wrap[]
INIT(
"panic: memory wrap"
);
EXTCONST
char
PL_extended_cp_format[]
INIT(
"Code point 0x%"
UVXf
" is not Unicode, requires a Perl extension,"
" and so is not portable"
);
EXTCONST
char
PL_Yes[]
INIT(
"1"
);
EXTCONST
char
PL_No[]
INIT(
""
);
EXTCONST
char
PL_Zero[]
INIT(
"0"
);
EXTCONST
char
PL_hexdigit[]
INIT(
"0123456789abcdef0123456789ABCDEF"
);
EXT
char
PL_WARN_ALL
INIT(0);
EXT
char
PL_WARN_NONE
INIT(0);
#ifndef OS2
EXTCONST
char
PL_sh_path[]
INIT(SH_PATH);
#endif
#ifdef CSH
EXTCONST
char
PL_cshname[]
INIT(CSH);
# define PL_cshlen (sizeof(CSH "") - 1)
#endif
EXTCONST U8 PL_revision
INIT(PERL_REVISION);
EXTCONST U8 PL_version
INIT(PERL_VERSION);
EXTCONST U8 PL_subversion
INIT(PERL_SUBVERSION);
EXTCONST
char
PL_uuemap[65]
INIT(
"`!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"
);
EXTCONST
char
PL_isa_DOES[]
INIT(
"isa"
);
#ifdef DOINIT
EXTCONST
char
PL_uudmap[256] =
# include "uudmap.h"
;
EXTCONST
char
PL_bitcount[256] =
# include "bitcount.h"
;
EXTCONST
char
*
const
PL_sig_name[] = { SIG_NAME };
EXTCONST
int
PL_sig_num[] = { SIG_NUM };
#else
EXTCONST
char
PL_uudmap[256];
EXTCONST
char
PL_bitcount[256];
EXTCONST
char
*
const
PL_sig_name[];
EXTCONST
int
PL_sig_num[];
#endif
#ifdef DOINIT
# ifndef EBCDIC
EXTCONST unsigned
char
PL_fold[] = {
0, 1, 2, 3, 4, 5, 6, 7,
8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23,
24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39,
40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55,
56, 57, 58, 59, 60, 61, 62, 63,
64,
'a'
,
'b'
,
'c'
,
'd'
,
'e'
,
'f'
,
'g'
,
'h'
,
'i'
,
'j'
,
'k'
,
'l'
,
'm'
,
'n'
,
'o'
,
'p'
,
'q'
,
'r'
,
's'
,
't'
,
'u'
,
'v'
,
'w'
,
'x'
,
'y'
,
'z'
, 91, 92, 93, 94, 95,
96,
'A'
,
'B'
,
'C'
,
'D'
,
'E'
,
'F'
,
'G'
,
'H'
,
'I'
,
'J'
,
'K'
,
'L'
,
'M'
,
'N'
,
'O'
,
'P'
,
'Q'
,
'R'
,
'S'
,
'T'
,
'U'
,
'V'
,
'W'
,
'X'
,
'Y'
,
'Z'
, 123, 124, 125, 126, 127,
128, 129, 130, 131, 132, 133, 134, 135,
136, 137, 138, 139, 140, 141, 142, 143,
144, 145, 146, 147, 148, 149, 150, 151,
152, 153, 154, 155, 156, 157, 158, 159,
160, 161, 162, 163, 164, 165, 166, 167,
168, 169, 170, 171, 172, 173, 174, 175,
176, 177, 178, 179, 180, 181, 182, 183,
184, 185, 186, 187, 188, 189, 190, 191,
192, 193, 194, 195, 196, 197, 198, 199,
200, 201, 202, 203, 204, 205, 206, 207,
208, 209, 210, 211, 212, 213, 214, 215,
216, 217, 218, 219, 220, 221, 222, 223,
224, 225, 226, 227, 228, 229, 230, 231,
232, 233, 234, 235, 236, 237, 238, 239,
240, 241, 242, 243, 244, 245, 246, 247,
248, 249, 250, 251, 252, 253, 254, 255
};
EXTCONST unsigned
char
PL_fold_latin1[] = {
0, 1, 2, 3, 4, 5, 6, 7,
8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23,
24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39,
40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55,
56, 57, 58, 59, 60, 61, 62, 63,
64,
'a'
,
'b'
,
'c'
,
'd'
,
'e'
,
'f'
,
'g'
,
'h'
,
'i'
,
'j'
,
'k'
,
'l'
,
'm'
,
'n'
,
'o'
,
'p'
,
'q'
,
'r'
,
's'
,
't'
,
'u'
,
'v'
,
'w'
,
'x'
,
'y'
,
'z'
, 91, 92, 93, 94, 95,
96,
'A'
,
'B'
,
'C'
,
'D'
,
'E'
,
'F'
,
'G'
,
'H'
,
'I'
,
'J'
,
'K'
,
'L'
,
'M'
,
'N'
,
'O'
,
'P'
,
'Q'
,
'R'
,
'S'
,
'T'
,
'U'
,
'V'
,
'W'
,
'X'
,
'Y'
,
'Z'
, 123, 124, 125, 126, 127,
128, 129, 130, 131, 132, 133, 134, 135,
136, 137, 138, 139, 140, 141, 142, 143,
144, 145, 146, 147, 148, 149, 150, 151,
152, 153, 154, 155, 156, 157, 158, 159,
160, 161, 162, 163, 164, 165, 166, 167,
168, 169, 170, 171, 172, 173, 174, 175,
176, 177, 178, 179, 180, 181
, 182, 183,
184, 185, 186, 187, 188, 189, 190, 191,
192+32, 193+32, 194+32, 195+32, 196+32, 197+32, 198+32, 199+32,
200+32, 201+32, 202+32, 203+32, 204+32, 205+32, 206+32, 207+32,
208+32, 209+32, 210+32, 211+32, 212+32, 213+32, 214+32, 215,
216+32, 217+32, 218+32, 219+32, 220+32, 221+32, 222+32, 223
,
224-32, 225-32, 226-32, 227-32, 228-32, 229-32, 230-32, 231-32,
232-32, 233-32, 234-32, 235-32, 236-32, 237-32, 238-32, 239-32,
240-32, 241-32, 242-32, 243-32, 244-32, 245-32, 246-32, 247,
248-32, 249-32, 250-32, 251-32, 252-32, 253-32, 254-32,
255
};
EXTCONST unsigned
char
PL_latin1_lc[] = {
0, 1, 2, 3, 4, 5, 6, 7,
8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23,
24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39,
40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55,
56, 57, 58, 59, 60, 61, 62, 63,
64,
'a'
,
'b'
,
'c'
,
'd'
,
'e'
,
'f'
,
'g'
,
'h'
,
'i'
,
'j'
,
'k'
,
'l'
,
'm'
,
'n'
,
'o'
,
'p'
,
'q'
,
'r'
,
's'
,
't'
,
'u'
,
'v'
,
'w'
,
'x'
,
'y'
,
'z'
, 91, 92, 93, 94, 95,
96, 97, 98, 99, 100, 101, 102, 103,
104, 105, 106, 107, 108, 109, 110, 111,
112, 113, 114, 115, 116, 117, 118, 119,
120, 121, 122, 123, 124, 125, 126, 127,
128, 129, 130, 131, 132, 133, 134, 135,
136, 137, 138, 139, 140, 141, 142, 143,
144, 145, 146, 147, 148, 149, 150, 151,
152, 153, 154, 155, 156, 157, 158, 159,
160, 161, 162, 163, 164, 165, 166, 167,
168, 169, 170, 171, 172, 173, 174, 175,
176, 177, 178, 179, 180, 181, 182, 183,
184, 185, 186, 187, 188, 189, 190, 191,
192+32, 193+32, 194+32, 195+32, 196+32, 197+32, 198+32, 199+32,
200+32, 201+32, 202+32, 203+32, 204+32, 205+32, 206+32, 207+32,
208+32, 209+32, 210+32, 211+32, 212+32, 213+32, 214+32, 215,
216+32, 217+32, 218+32, 219+32, 220+32, 221+32, 222+32, 223,
224, 225, 226, 227, 228, 229, 230, 231,
232, 233, 234, 235, 236, 237, 238, 239,
240, 241, 242, 243, 244, 245, 246, 247,
248, 249, 250, 251, 252, 253, 254, 255
};
EXTCONST unsigned
char
PL_mod_latin1_uc[] = {
0, 1, 2, 3, 4, 5, 6, 7,
8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23,
24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39,
40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55,
56, 57, 58, 59, 60, 61, 62, 63,
64, 65, 66, 67, 68, 69, 70, 71,
72, 73, 74, 75, 76, 77, 78, 79,
80, 81, 82, 83, 84, 85, 86, 87,
88, 89, 90, 91, 92, 93, 94, 95,
96,
'A'
,
'B'
,
'C'
,
'D'
,
'E'
,
'F'
,
'G'
,
'H'
,
'I'
,
'J'
,
'K'
,
'L'
,
'M'
,
'N'
,
'O'
,
'P'
,
'Q'
,
'R'
,
'S'
,
'T'
,
'U'
,
'V'
,
'W'
,
'X'
,
'Y'
,
'Z'
, 123, 124, 125, 126, 127,
128, 129, 130, 131, 132, 133, 134, 135,
136, 137, 138, 139, 140, 141, 142, 143,
144, 145, 146, 147, 148, 149, 150, 151,
152, 153, 154, 155, 156, 157, 158, 159,
160, 161, 162, 163, 164, 165, 166, 167,
168, 169, 170, 171, 172, 173, 174, 175,
176, 177, 178, 179, 180, 255
, 182, 183,
184, 185, 186, 187, 188, 189, 190, 191,
192, 193, 194, 195, 196, 197, 198, 199,
200, 201, 202, 203, 204, 205, 206, 207,
208, 209, 210, 211, 212, 213, 214, 215,
216, 217, 218, 219, 220, 221, 222,
# if UNICODE_MAJOR_VERSION > 2 \
|| (UNICODE_MAJOR_VERSION == 2 && UNICODE_DOT_VERSION >= 1 \
&& UNICODE_DOT_DOT_VERSION >= 8)
255
,
# else /* uc(sharp s) is 'sharp s' itself in early unicode */
223,
# endif
224-32, 225-32, 226-32, 227-32, 228-32, 229-32, 230-32, 231-32,
232-32, 233-32, 234-32, 235-32, 236-32, 237-32, 238-32, 239-32,
240-32, 241-32, 242-32, 243-32, 244-32, 245-32, 246-32, 247,
248-32, 249-32, 250-32, 251-32, 252-32, 253-32, 254-32, 255
};
# endif /* !EBCDIC, but still in DOINIT */
#else /* ! DOINIT */
# ifndef EBCDIC
EXTCONST unsigned
char
PL_fold[];
EXTCONST unsigned
char
PL_fold_latin1[];
EXTCONST unsigned
char
PL_mod_latin1_uc[];
EXTCONST unsigned
char
PL_latin1_lc[];
# endif
#endif
#ifdef DOINIT
EXTCONST
char
*
const
PL_block_type[] = {
"NULL"
,
"WHEN"
,
"BLOCK"
,
"GIVEN"
,
"LOOP_ARY"
,
"LOOP_LAZYSV"
,
"LOOP_LAZYIV"
,
"LOOP_LIST"
,
"LOOP_PLAIN"
,
"SUB"
,
"FORMAT"
,
"EVAL"
,
"SUBST"
,
"DEFER"
};
#else
EXTCONST
char
* PL_block_type[];
#endif
#ifdef DOINIT
EXTCONST
char
PL_bincompat_options[] =
# ifdef DEBUG_LEAKING_SCALARS
" DEBUG_LEAKING_SCALARS"
# endif
# ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
" DEBUG_LEAKING_SCALARS_FORK_DUMP"
# endif
# ifdef HAS_TIMES
" HAS_TIMES"
# endif
# ifdef HAVE_INTERP_INTERN
" HAVE_INTERP_INTERN"
# endif
# ifdef MULTIPLICITY
" MULTIPLICITY"
# endif
# ifdef MYMALLOC
" MYMALLOC"
# endif
# ifdef NO_HASH_SEED
" NO_HASH_SEED"
# endif
# ifdef PERLIO_LAYERS
" PERLIO_LAYERS"
# endif
# ifdef PERL_DEBUG_READONLY_COW
" PERL_DEBUG_READONLY_COW"
# endif
# ifdef PERL_DEBUG_READONLY_OPS
" PERL_DEBUG_READONLY_OPS"
# endif
# ifdef PERL_HASH_FUNC_DEFINE
" "
PERL_HASH_FUNC_DEFINE
# endif
# ifdef PERL_HASH_USE_SBOX32
" PERL_HASH_USE_SBOX32"
# else
" PERL_HASH_NO_SBOX32"
# endif
# ifdef PERL_IMPLICIT_SYS
" PERL_IMPLICIT_SYS"
# endif
# ifdef PERL_POISON
" PERL_POISON"
# endif
# ifdef PERL_SAWAMPERSAND
" PERL_SAWAMPERSAND"
# endif
# ifdef PERL_TRACK_MEMPOOL
" PERL_TRACK_MEMPOOL"
# endif
# ifdef PERL_USES_PL_PIDSTATUS
" PERL_USES_PL_PIDSTATUS"
# endif
# ifdef USE_64_BIT_ALL
" USE_64_BIT_ALL"
# endif
# ifdef USE_64_BIT_INT
" USE_64_BIT_INT"
# endif
# ifdef USE_IEEE
" USE_IEEE"
# endif
# ifdef USE_ITHREADS
" USE_ITHREADS"
# endif
# ifdef USE_LARGE_FILES
" USE_LARGE_FILES"
# endif
# ifdef USE_LOCALE_COLLATE
" USE_LOCALE_COLLATE"
# endif
# ifdef USE_LOCALE_NUMERIC
" USE_LOCALE_NUMERIC"
# endif
# ifdef USE_LOCALE_TIME
" USE_LOCALE_TIME"
# endif
# ifdef USE_LONG_DOUBLE
" USE_LONG_DOUBLE"
# endif
# ifdef USE_PERLIO
" USE_PERLIO"
# endif
# ifdef USE_QUADMATH
" USE_QUADMATH"
# endif
# ifdef USE_REENTRANT_API
" USE_REENTRANT_API"
# endif
# ifdef USE_SOCKS
" USE_SOCKS"
# endif
# ifdef VMS_DO_SOCKETS
" VMS_DO_SOCKETS"
# endif
# ifdef VMS_SHORTEN_LONG_SYMBOLS
" VMS_SHORTEN_LONG_SYMBOLS"
# endif
# ifdef VMS_WE_ARE_CASE_SENSITIVE
" VMS_SYMBOL_CASE_AS_IS"
# endif
""
;
#else
EXTCONST
char
PL_bincompat_options[];
#endif
#ifndef PERL_SET_PHASE
# define PERL_SET_PHASE(new_phase) \
PERL_DTRACE_PROBE_PHASE(new_phase); \
PL_phase = new_phase;
#endif
enum
perl_phase {
PERL_PHASE_CONSTRUCT = 0,
PERL_PHASE_START = 1,
PERL_PHASE_CHECK = 2,
PERL_PHASE_INIT = 3,
PERL_PHASE_RUN = 4,
PERL_PHASE_END = 5,
PERL_PHASE_DESTRUCT = 6
};
#ifdef DOINIT
EXTCONST
char
*
const
PL_phase_names[] = {
"CONSTRUCT"
,
"START"
,
"CHECK"
,
"INIT"
,
"RUN"
,
"END"
,
"DESTRUCT"
};
#else
EXTCONST
char
*
const
PL_phase_names[];
#endif
#define phase_name(phase) (PL_phase_names[phase])
#ifndef PERL_CORE
# define PL_dirty cBOOL(PL_phase == PERL_PHASE_DESTRUCT)
# define PL_amagic_generation PL_na
# define PL_encoding ((SV *)NULL)
#endif /* !PERL_CORE */
#define PL_hints PL_compiling.cop_hints
#define PL_maxo MAXO
END_EXTERN_C
#ifdef __Lynx__
#ifdef FORMAT
#undef FORMAT
#endif
#ifdef SPACE
#undef SPACE
#endif
#endif
#define LEX_NOTPARSING 11 /* borrowed from toke.c */
typedef
enum
{
XOPERATOR,
XTERM,
XREF,
XSTATE,
XBLOCK,
XATTRBLOCK,
XATTRTERM,
XTERMBLOCK,
XBLOCKTERM,
XPOSTDEREF,
XTERMORDORDOR
} expectation;
#define KEY_sigvar 0xFFFF /* fake keyword representing a signature var */
#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_LOCALE_PARTIAL 0x00000010 /* locale, but a subset of categories */
#define HINT_EXPLICIT_STRICT_REFS 0x00000020 /* strict.pm */
#define HINT_EXPLICIT_STRICT_SUBS 0x00000040 /* strict.pm */
#define HINT_EXPLICIT_STRICT_VARS 0x00000080 /* strict.pm */
#define HINT_BLOCK_SCOPE 0x00000100
#define HINT_STRICT_SUBS 0x00000200 /* strict pragma */
#define HINT_STRICT_VARS 0x00000400 /* strict pragma */
#define HINT_UNI_8_BIT 0x00000800 /* unicode_strings feature */
#define HINT_NEW_INTEGER 0x00001000
#define HINT_NEW_FLOAT 0x00002000
#define HINT_NEW_BINARY 0x00004000
#define HINT_NEW_STRING 0x00008000
#define HINT_NEW_RE 0x00010000
#define HINT_LOCALIZE_HH 0x00020000 /* %^H needs to be copied */
#define HINT_LEXICAL_IO_IN 0x00040000 /* ${^OPEN} is set for input */
#define HINT_LEXICAL_IO_OUT 0x00080000 /* ${^OPEN} is set for output */
#define HINT_RE_TAINT 0x00100000 /* re pragma */
#define HINT_RE_EVAL 0x00200000 /* re pragma */
#define HINT_FILETEST_ACCESS 0x00400000 /* filetest pragma */
#define HINT_UTF8 0x00800000 /* utf8 pragma */
#define HINT_NO_AMAGIC 0x01000000 /* overloading pragma */
#define HINT_RE_FLAGS 0x02000000 /* re '/xism' pragma */
#define HINT_FEATURE_MASK 0x3c000000 /* 4 bits for feature bundles */
#define HINT_ALL_STRICT HINT_STRICT_REFS \
| HINT_STRICT_SUBS \
| HINT_STRICT_VARS
#ifdef USE_STRICT_BY_DEFAULT
#define HINTS_DEFAULT HINT_ALL_STRICT
#else
#define HINTS_DEFAULT 0
#endif
#define SAWAMPERSAND_LEFT 1 /* saw $` */
#define SAWAMPERSAND_MIDDLE 2 /* saw $& */
#define SAWAMPERSAND_RIGHT 4 /* saw $' */
#ifndef PERL_SAWAMPERSAND
# define PL_sawampersand \
(SAWAMPERSAND_LEFT|SAWAMPERSAND_MIDDLE|SAWAMPERSAND_RIGHT)
#endif
#define DBVARMG_SINGLE 0
#define DBVARMG_TRACE 1
#define DBVARMG_SIGNAL 2
#define DBVARMG_COUNT 3
#define PL_DBsingle_iv (PL_DBcontrol[DBVARMG_SINGLE])
#define PL_DBtrace_iv (PL_DBcontrol[DBVARMG_TRACE])
#define PL_DBsignal_iv (PL_DBcontrol[DBVARMG_SIGNAL])
#define RsSNARF(sv) (! SvOK(sv))
#define RsSIMPLE(sv) (SvOK(sv) && (! SvPOK(sv) || SvCUR(sv)))
#define RsPARA(sv) (SvPOK(sv) && ! SvCUR(sv))
#define RsRECORD(sv) (SvROK(sv) && (SvIV(SvRV(sv)) > 0))
struct
perl_debug_pad {
SV pad[3];
};
#define PERL_DEBUG_PAD(i) &(PL_debug_pad.pad[i])
#define PERL_DEBUG_PAD_ZERO(i) (SvPVX(PERL_DEBUG_PAD(i))[0] = 0, \
(((XPV*) SvANY(PERL_DEBUG_PAD(i)))->xpv_cur = 0), \
PERL_DEBUG_PAD(i))
typedef
void
(*peep_t)(pTHX_ OP* o);
typedef
regexp* (*regcomp_t) (pTHX_
char
*
exp
,
char
* xend, PMOP* pm);
typedef
I32 (*regexec_t) (pTHX_ regexp* prog,
char
* stringarg,
char
* strend,
char
* strbeg, I32 minend,
SV* screamer,
void
* data, U32 flags);
typedef
char
* (*re_intuit_start_t) (pTHX_ regexp *prog, SV *sv,
char
*strpos,
char
*strend,
U32 flags,
re_scream_pos_data *d);
typedef
SV* (*re_intuit_string_t) (pTHX_ regexp *prog);
typedef
void
(*regfree_t) (pTHX_
struct
regexp* r);
typedef
regexp* (*regdupe_t) (pTHX_
const
regexp* r, CLONE_PARAMS *param);
typedef
I32 (*re_fold_t)(pTHX_
const
char
*,
char
const
*, I32);
typedef
void
(*DESTRUCTORFUNC_NOCONTEXT_t) (
void
*);
typedef
void
(*DESTRUCTORFUNC_t) (pTHX_
void
*);
typedef
void
(*SVFUNC_t) (pTHX_ SV*
const
);
typedef
I32 (*SVCOMPARE_t) (pTHX_ SV*
const
, SV*
const
);
typedef
void
(*XSINIT_t) (pTHX);
typedef
void
(*ATEXIT_t) (pTHX_
void
*);
typedef
void
(*XSUBADDR_t) (pTHX_ CV *);
enum
Perl_custom_infix_precedence {
INFIX_PREC_LOW = 10,
INFIX_PREC_LOGICAL_OR_LOW = 30,
INFIX_PREC_LOGICAL_AND_LOW = 40,
INFIX_PREC_ASSIGN = 50,
INFIX_PREC_LOGICAL_OR = 70,
INFIX_PREC_LOGICAL_AND = 80,
INFIX_PREC_REL = 90,
INFIX_PREC_ADD = 110,
INFIX_PREC_MUL = 130,
INFIX_PREC_POW = 150,
INFIX_PREC_HIGH = 170,
};
struct
Perl_custom_infix;
struct
Perl_custom_infix {
enum
Perl_custom_infix_precedence prec;
void
(*parse)(pTHX_ SV **opdata,
struct
Perl_custom_infix *);
OP *(*build_op)(pTHX_ SV **opdata, OP *lhs, OP *rhs,
struct
Perl_custom_infix *);
};
typedef
OP* (*Perl_ppaddr_t)(pTHX);
typedef
OP* (*Perl_check_t) (pTHX_ OP*);
typedef
void
(*Perl_ophook_t)(pTHX_ OP*);
typedef
int
(*Perl_keyword_plugin_t)(pTHX_
char
*, STRLEN, OP**);
typedef
STRLEN (*Perl_infix_plugin_t)(pTHX_
char
*, STRLEN,
struct
Perl_custom_infix **);
typedef
void
(*Perl_cpeep_t)(pTHX_ OP *, OP *);
typedef
void
(*globhook_t)(pTHX);
#define KEYWORD_PLUGIN_DECLINE 0
#define KEYWORD_PLUGIN_STMT 1
#define KEYWORD_PLUGIN_EXPR 2
typedef
struct
exitlistentry {
void
(*fn) (pTHX_
void
*);
void
*ptr;
} PerlExitListEntry;
#if !defined(HAS_SIGACTION) && defined(VMS)
# define FAKE_PERSISTENT_SIGNAL_HANDLERS
#endif
#if defined(KILL_BY_SIGPRC)
# define FAKE_DEFAULT_SIGNAL_HANDLERS
#endif
#if !defined(MULTIPLICITY)
struct
interpreter {
char
broiled;
};
#else
# define PERLVAR(prefix,var,type) type prefix##var;
# define PERLVARA(prefix,var,n,type) type prefix##var[n];
# define PERLVARI(prefix,var,type,init) type prefix##var;
# define PERLVARIC(prefix,var,type,init) type prefix##var;
struct
interpreter {
# include "intrpvar.h"
};
EXTCONST U16 PL_interp_size
INIT(
sizeof
(
struct
interpreter));
# define PERL_INTERPRETER_SIZE_UPTO_MEMBER(member) \
STRUCT_OFFSET(
struct
interpreter, member) + \
sizeof
(((
struct
interpreter*)0)->member)
EXTCONST U16 PL_interp_size_5_18_0
INIT(PERL_INTERPRETER_SIZE_UPTO_MEMBER(PERL_LAST_5_18_0_INTERP_MEMBER));
# undef PERLVAR
# undef PERLVARA
# undef PERLVARI
# undef PERLVARIC
#endif /* MULTIPLICITY */
struct
tempsym;
#include "thread.h"
#include "pp.h"
#undef PERL_CKDEF
#undef PERL_PPDEF
#define PERL_CKDEF(s) PERL_CALLCONV OP *s (pTHX_ OP *o);
#define PERL_PPDEF(s) PERL_CALLCONV OP *s (pTHX);
#ifdef MYMALLOC
# include "malloc_ctl.h"
#endif
#if defined(WIN32)
# include "win32iop.h"
#endif
#include "proto.h"
#include "opcode.h"
#if !defined(PERL_FOR_X2P)
# include "embedvar.h"
#endif
#define PERLVAR(prefix,var,type) EXT type PL_##var;
#define PERLVARA(prefix,var,n,type) EXT type PL_##var[n];
#define PERLVARI(prefix,var,type,init) EXT type PL_##var INIT(init);
#define PERLVARIC(prefix,var,type,init) EXTCONST type PL_##var INIT(init);
#if !defined(MULTIPLICITY)
START_EXTERN_C
# include "intrpvar.h"
END_EXTERN_C
# define PL_sv_yes (PL_sv_immortals[0])
# define PL_sv_undef (PL_sv_immortals[1])
# define PL_sv_no (PL_sv_immortals[2])
# define PL_sv_zero (PL_sv_immortals[3])
#endif
#ifdef PERL_CORE
# undef PL_na
#endif
#include "embed.h"
START_EXTERN_C
# include "perlvars.h"
END_EXTERN_C
#undef PERLVAR
#undef PERLVARA
#undef PERLVARI
#undef PERLVARIC
#if !defined(MULTIPLICITY)
# define PERLVAR(prefix,var,type) type prefix##var;
# define PERLVARA(prefix,var,n,type) type prefix##var[n];
# define PERLVARI(prefix,var,type,init) type prefix##var;
# define PERLVARIC(prefix,var,type,init) type prefix##var;
struct
PerlHandShakeInterpreter {
# include "intrpvar.h"
};
# undef PERLVAR
# undef PERLVARA
# undef PERLVARI
# undef PERLVARIC
#endif
START_EXTERN_C
EXTCONST runops_proc_t PL_runops_std
INIT(Perl_runops_standard);
EXTCONST runops_proc_t PL_runops_dbg
INIT(Perl_runops_debug);
#define EXT_MGVTBL EXTCONST MGVTBL
#define PERL_MAGIC_READONLY_ACCEPTABLE 0x40
#define PERL_MAGIC_VALUE_MAGIC 0x80
#define PERL_MAGIC_VTABLE_MASK 0x3F
#define PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(t) \
(PL_magic_data[(U8)(t)] & PERL_MAGIC_READONLY_ACCEPTABLE)
#define PERL_MAGIC_TYPE_IS_VALUE_MAGIC(t) \
(PL_magic_data[(U8)(t)] & PERL_MAGIC_VALUE_MAGIC)
#include "mg_vtable.h"
#ifdef DOINIT
EXTCONST U8 PL_magic_data[256] =
# include "mg_data.h"
;
#else
EXTCONST U8 PL_magic_data[256];
#endif
#ifdef DOINIT
EXTCONST
bool
PL_valid_types_IVX[] = { 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0 };
EXTCONST
bool
PL_valid_types_NVX[] = { 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0 };
EXTCONST
bool
PL_valid_types_PVX[] = { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0 };
EXTCONST
bool
PL_valid_types_RV[] = { 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0 };
EXTCONST
bool
PL_valid_types_IV_set[] = { 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0 };
EXTCONST
bool
PL_valid_types_NV_set[] = { 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 };
EXTCONST U8
PL_deBruijn_bitpos_tab32[] = {
0, 1, 28, 2, 29, 14, 24, 3, 30, 22, 20, 15, 25, 17, 4, 8,
31, 27, 13, 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9
};
EXTCONST U8
PL_deBruijn_bitpos_tab64[] = {
63, 0, 58, 1, 59, 47, 53, 2, 60, 39, 48, 27, 54, 33, 42, 3,
61, 51, 37, 40, 49, 18, 28, 20, 55, 30, 34, 11, 43, 14, 22, 4,
62, 57, 46, 52, 38, 26, 32, 41, 50, 36, 17, 19, 29, 10, 13, 21,
56, 45, 25, 31, 35, 16, 9, 12, 44, 24, 15, 8, 23, 7, 6, 5
};
#else
EXTCONST
bool
PL_valid_types_IVX[];
EXTCONST
bool
PL_valid_types_NVX[];
EXTCONST
bool
PL_valid_types_PVX[];
EXTCONST
bool
PL_valid_types_RV[];
EXTCONST
bool
PL_valid_types_IV_set[];
EXTCONST
bool
PL_valid_types_NV_set[];
EXTCONST U8 PL_deBruijn_bitpos_tab32[];
EXTCONST U8 PL_deBruijn_bitpos_tab64[];
#endif
#define PERL_deBruijnMagic32_ 0x077CB531
#define PERL_deBruijnShift32_ 27
#define PERL_deBruijnMagic64_ 0x07EDD5E59A4E28C2
#define PERL_deBruijnShift64_ 58
#define INFNAN_U8_NV_DECL EXTCONST union { U8 u8[NVSIZE]; NV nv; }
#define INFNAN_NV_U8_DECL EXTCONST union { NV nv; U8 u8[NVSIZE]; }
#ifndef PERL_SET_CONTEXT
# define PERL_SET_CONTEXT(i) PERL_SET_INTERP(i)
#endif
#ifdef USE_PERL_SWITCH_LOCALE_CONTEXT
# define PERL_SET_LOCALE_CONTEXT(i) \
STMT_START { \
if
(LIKELY(! PL_veto_switch_non_tTHX_context)) \
Perl_switch_locale_context(i); \
} STMT_END
# define PERL_SET_NON_tTHX_CONTEXT(i) \
STMT_START {
if
(i) PERL_SET_LOCALE_CONTEXT(i); } STMT_END
#else
# define PERL_SET_LOCALE_CONTEXT(i) NOOP
# define PERL_SET_NON_tTHX_CONTEXT(i) NOOP
#endif
#ifndef PERL_GET_CONTEXT
# define PERL_GET_CONTEXT PERL_GET_INTERP
#endif
#ifndef PERL_GET_THX
# define PERL_GET_THX ((void*)NULL)
#endif
#ifndef PERL_SET_THX
# define PERL_SET_THX(t) NOOP
#endif
#ifdef WIN32
# define PERL_REENTRANT_LOCK(name, mutex, counter, \
cond_to_panic_if_already_locked) \
MUTEX_LOCK(mutex)
# define PERL_REENTRANT_UNLOCK(name, mutex, counter) MUTEX_UNLOCK(mutex)
#else
# define PERL_REENTRANT_LOCK(name, mutex, counter, \
cond_to_panic_if_already_locked) \
STMT_START { \
CLANG_DIAG_IGNORE(-Wthread-safety) \
if
(LIKELY(counter <= 0)) { \
UNLESS_PERL_MEM_LOG(DEBUG_Lv(PerlIO_printf(Perl_debug_log, \
"%s: %d: locking "
name
"; lock depth=1\n"
, \
__FILE__, __LINE__)); \
) \
MUTEX_LOCK(mutex); \
counter = 1; \
UNLESS_PERL_MEM_LOG(DEBUG_Lv(PerlIO_printf(Perl_debug_log, \
"%s: %d: "
name
" locked; lock depth=1\n"
, \
__FILE__, __LINE__)); \
) \
} \
else
{ \
counter++; \
UNLESS_PERL_MEM_LOG(DEBUG_Lv(PerlIO_printf(Perl_debug_log, \
"%s: %d: avoided locking "
name
"; new lock"
\
" depth=%d, but will panic if '%s' is true\n"
, \
__FILE__, __LINE__, counter, \
STRINGIFY(cond_to_panic_if_already_locked))); \
) \
if
(cond_to_panic_if_already_locked) { \
Perl_croak_nocontext(
"panic: %s: %d: attempting to lock"
\
name
" incompatibly: %s\n"
, \
__FILE__, __LINE__, \
STRINGIFY(cond_to_panic_if_already_locked));\
} \
} \
CLANG_DIAG_RESTORE \
} STMT_END
# define PERL_REENTRANT_UNLOCK(name, mutex, counter) \
STMT_START { \
if
(LIKELY(counter == 1)) { \
UNLESS_PERL_MEM_LOG(DEBUG_Lv(PerlIO_printf(Perl_debug_log, \
"%s: %d: unlocking "
name
"; new lock depth=0\n"
, \
__FILE__, __LINE__)); \
) \
counter = 0; \
MUTEX_UNLOCK(mutex); \
} \
else
if
(counter <= 0) { \
Perl_croak_nocontext(
"panic: %s: %d: attempting to unlock"
\
" already unlocked "
name
"; depth was"
\
" %d\n"
, __FILE__, __LINE__, \
counter); \
} \
else
{ \
counter--; \
UNLESS_PERL_MEM_LOG(DEBUG_Lv(PerlIO_printf(Perl_debug_log, \
"%s: %d: avoided unlocking "
name
"; new lock depth=%d\n"
, \
__FILE__, __LINE__, counter)); \
) \
} \
} STMT_END
#endif
#ifndef EBCDIC
# ifdef DOINIT
# if 0 /* This is the original table given in
https:
static
U8 utf8d_C9[] = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
8,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
10,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3, 11,6,6,6,5,8,8,8,8,8,8,8,8,8,8,8,
0,12,24,36,60,96,84,12,12,12,48,72, 12,12,12,12,12,12,12,12,12,12,12,12,
12, 0,12,12,12,12,12, 0,12, 0,12,12, 12,24,12,12,12,12,12,24,12,24,12,12,
12,12,12,12,12,12,12,24,12,12,12,12, 12,24,12,12,12,12,12,12,12,24,12,12,
12,12,12,12,12,12,12,36,12,36,12,12, 12,36,12,12,12,12,12,36,12,36,12,12,
12,36,12,12,12,12,12,12,12,12,12,12
};
# endif
EXTCONST U8 PL_extended_utf8_dfa_tab[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
7, 7, 8, 8, 9, 9, 9, 9,10,10,10,10,10,10,10,10,
11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
13, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
14, 4, 4, 4, 4, 4, 4, 4,15, 5, 5, 5,16, 6,
# ifdef UV_IS_QUAD
17,
# else
1,
# endif
1,
# if defined(PERL_CORE)
# define NUM_CLASSES 18
# define N0 0
# define N1 ((N0) + NUM_CLASSES)
# define N2 ((N1) + NUM_CLASSES)
# define N3 ((N2) + NUM_CLASSES)
# define N4 ((N3) + NUM_CLASSES)
# define N5 ((N4) + NUM_CLASSES)
# define N6 ((N5) + NUM_CLASSES)
# define N7 ((N6) + NUM_CLASSES)
# define N8 ((N7) + NUM_CLASSES)
# define N9 ((N8) + NUM_CLASSES)
# define N10 ((N9) + NUM_CLASSES)
0, 1,N1,N2,N3,N4,N5, 1, 1, 1, 1, 1, 1,N6,N7,N8,N9,N10,
1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1,N1,N1,N1,N1,N1,N1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1,N2,N2,N2,N2,N2,N2, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1,N3,N3,N3,N3,N3,N3, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1,N4,N4,N4,N4,N4,N4, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,N1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,N2,N2, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,N3,N3,N3, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1,N4,N4,N4,N4, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,N5,N5,N5,N5,N5, 1, 1, 1, 1, 1,
};
EXTCONST U8 PL_strict_utf8_dfa_tab[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,
11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,
13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,14,
15,15,15,15,15,15,15,16,15,15,15,15,15,15,17,18,
1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
7, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 4,
8, 6, 6, 6, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
# undef N0
# undef N1
# undef N2
# undef N3
# undef N4
# undef N5
# undef N6
# undef N7
# undef N8
# undef N9
# undef NUM_CLASSES
# define NUM_CLASSES 19
# define N0 0
# define N1 ((N0) + NUM_CLASSES)
# define N2 ((N1) + NUM_CLASSES)
# define N3 ((N2) + NUM_CLASSES)
# define N4 ((N3) + NUM_CLASSES)
# define N5 ((N4) + NUM_CLASSES)
# define N6 ((N5) + NUM_CLASSES)
# define N7 ((N6) + NUM_CLASSES)
# define N8 ((N7) + NUM_CLASSES)
# define N9 ((N8) + NUM_CLASSES)
# define N10 ((N9) + NUM_CLASSES)
# define N11 ((N10) + NUM_CLASSES)
0, 1, N1, N2, N4, N7, N6, N3, N5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, N1, N1, N1, N1, N1, N1, N1, N1, N1, N1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, N1, N1, N1, N1, N1, N1,
1, 1, 1, 1, 1, 1, 1, 1, 1, N1, N1, N1, N1, N1, N1, N1, N8, N1, N9,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, N2,N10, N2,N10, N2, N2, N2,N10,
1, 1, 1, 1, 1, 1, 1, 1, 1, N2,N10, N2,N10, N2,N10, N2, N2, N2,N10,
1, 1, 1, 1, 1, 1, 1, 1, 1, N2,N10, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, N1, N1, N1, N1, N1, N1, N1, N1, N1,N11,
1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
};
EXTCONST U8 PL_c9_utf8_dfa_tab[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
7, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 3,
8, 6, 6, 6, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
# undef N0
# undef N1
# undef N2
# undef N3
# undef N4
# undef N5
# undef N6
# undef N7
# undef NUM_CLASSES
# define NUM_CLASSES 12
# define N0 0
# define N1 ((N0) + NUM_CLASSES)
# define N2 ((N1) + NUM_CLASSES)
# define N3 ((N2) + NUM_CLASSES)
# define N4 ((N3) + NUM_CLASSES)
# define N5 ((N4) + NUM_CLASSES)
# define N6 ((N5) + NUM_CLASSES)
# define N7 ((N6) + NUM_CLASSES)
0, 1, N1, N2, N5, N7, N3, N4, N6, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, N1, N1, N1,
1, 1, 1, 1, 1, 1, 1, 1, 1, N2, N2, N2,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, N1,
1, 1, 1, 1, 1, 1, 1, 1, 1, N1, N1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, N2, N2,
1, 1, 1, 1, 1, 1, 1, 1, 1, N2, 1, 1,
};
# endif /* defined(PERL_CORE) */
# else /* End of is DOINIT */
EXTCONST U8 PL_extended_utf8_dfa_tab[];
EXTCONST U8 PL_strict_utf8_dfa_tab[];
EXTCONST U8 PL_c9_utf8_dfa_tab[];
# endif
#endif /* end of isn't EBCDIC */
#include "overload.h"
END_EXTERN_C
struct
am_table {
U8 flags;
U8 fallback;
U16 spare;
U32 was_ok_sub;
CV* table[NofAMmeth];
};
struct
am_table_short {
U8 flags;
U8 fallback;
U16 spare;
U32 was_ok_sub;
};
typedef
struct
am_table AMT;
typedef
struct
am_table_short AMTS;
#define AMGfallNEVER 1
#define AMGfallNO 2
#define AMGfallYES 3
#define AMTf_AMAGIC 1
#define AMT_AMAGIC(amt) ((amt)->flags & AMTf_AMAGIC)
#define AMT_AMAGIC_on(amt) ((amt)->flags |= AMTf_AMAGIC)
#define AMT_AMAGIC_off(amt) ((amt)->flags &= ~AMTf_AMAGIC)
#define StashHANDLER(stash,meth) gv_handler((stash),CAT2(meth,_amg))
#ifdef _FASTMATH
# ifdef atan2
# define F_atan2_amg atan2_amg
# endif
# ifdef cos
# define F_cos_amg cos_amg
# endif
# ifdef exp
# define F_exp_amg exp_amg
# endif
# ifdef log
# define F_log_amg log_amg
# endif
# ifdef pow
# define F_pow_amg pow_amg
# endif
# ifdef sin
# define F_sin_amg sin_amg
# endif
# ifdef sqrt
# define F_sqrt_amg sqrt_amg
# endif
#endif /* _FASTMATH */
#define PERLDB_ALL (PERLDBf_SUB | PERLDBf_LINE | \
PERLDBf_NOOPT | PERLDBf_INTER | \
PERLDBf_SUBLINE| PERLDBf_SINGLE| \
PERLDBf_NAMEEVAL| PERLDBf_NAMEANON | \
PERLDBf_SAVESRC)
#define PERLDBf_SUB 0x01 /* Debug sub enter/exit */
#define PERLDBf_LINE 0x02 /* Keep line # */
#define PERLDBf_NOOPT 0x04 /* Switch off optimizations */
#define PERLDBf_INTER 0x08 /* Preserve more data for
later inspections */
#define PERLDBf_SUBLINE 0x10 /* Keep subr source lines */
#define PERLDBf_SINGLE 0x20 /* Start with single-step on */
#define PERLDBf_NONAME 0x40 /* For _SUB: no name of the subr */
#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_SAVESRC 0x400 /* Save source lines into @{"_<$filename"} */
#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 & 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)
#define PERLDB_LINE_OR_SAVESRC (PL_perldb & (PERLDBf_LINE | PERLDBf_SAVESRC))
#ifdef USE_THREADS
# define KEYWORD_PLUGIN_MUTEX_INIT MUTEX_INIT(&PL_keyword_plugin_mutex)
# define KEYWORD_PLUGIN_MUTEX_LOCK MUTEX_LOCK(&PL_keyword_plugin_mutex)
# define KEYWORD_PLUGIN_MUTEX_UNLOCK MUTEX_UNLOCK(&PL_keyword_plugin_mutex)
# define KEYWORD_PLUGIN_MUTEX_TERM MUTEX_DESTROY(&PL_keyword_plugin_mutex)
# define USER_PROP_MUTEX_INIT MUTEX_INIT(&PL_user_prop_mutex)
# define USER_PROP_MUTEX_LOCK MUTEX_LOCK(&PL_user_prop_mutex)
# define USER_PROP_MUTEX_UNLOCK MUTEX_UNLOCK(&PL_user_prop_mutex)
# define USER_PROP_MUTEX_TERM MUTEX_DESTROY(&PL_user_prop_mutex)
#else
# define KEYWORD_PLUGIN_MUTEX_INIT NOOP
# define KEYWORD_PLUGIN_MUTEX_LOCK NOOP
# define KEYWORD_PLUGIN_MUTEX_UNLOCK NOOP
# define KEYWORD_PLUGIN_MUTEX_TERM NOOP
# define USER_PROP_MUTEX_INIT NOOP
# define USER_PROP_MUTEX_LOCK NOOP
# define USER_PROP_MUTEX_UNLOCK NOOP
# define USER_PROP_MUTEX_TERM NOOP
#endif
#ifdef USE_THREADS
# define ENV_LOCK PERL_WRITE_LOCK(&PL_env_mutex)
# define ENV_UNLOCK PERL_WRITE_UNLOCK(&PL_env_mutex)
# define ENV_READ_LOCK PERL_READ_LOCK(&PL_env_mutex)
# define ENV_READ_UNLOCK PERL_READ_UNLOCK(&PL_env_mutex)
# define ENV_INIT PERL_RW_MUTEX_INIT(&PL_env_mutex)
# define ENV_TERM PERL_RW_MUTEX_DESTROY(&PL_env_mutex)
# ifdef GETENV_PRESERVES_OTHER_THREAD
# define GETENV_LOCK ENV_READ_LOCK
# define GETENV_UNLOCK ENV_READ_UNLOCK
# else
# define GETENV_LOCK ENV_LOCK
# define GETENV_UNLOCK ENV_UNLOCK
# endif
#else
# define ENV_LOCK NOOP
# define ENV_UNLOCK NOOP
# define ENV_READ_LOCK NOOP
# define ENV_READ_UNLOCK NOOP
# define ENV_INIT NOOP
# define ENV_TERM NOOP
# define GETENV_LOCK NOOP
# define GETENV_UNLOCK NOOP
#endif
#if ! defined(USE_LOCALE_THREADS) /* No threads, or no locales */
# define LOCALE_LOCK_(cond) NOOP
# define LOCALE_UNLOCK_ NOOP
# define LOCALE_LOCK NOOP
# define LOCALE_UNLOCK NOOP
#else /* Below: Threaded, and locales are supported */
# define LOCALE_LOCK_(cond_to_panic_if_already_locked) \
PERL_REENTRANT_LOCK(
"locale"
, \
&PL_locale_mutex, PL_locale_mutex_depth, \
cond_to_panic_if_already_locked)
# define LOCALE_UNLOCK_ \
PERL_REENTRANT_UNLOCK(
"locale"
, \
&PL_locale_mutex, PL_locale_mutex_depth)
# ifdef USE_THREAD_SAFE_LOCALE
# define LOCALE_LOCK NOOP
# define LOCALE_UNLOCK NOOP
# else
# define LOCALE_LOCK_DOES_SOMETHING_
# define LOCALE_LOCK LOCALE_LOCK_(0)
# define LOCALE_UNLOCK LOCALE_UNLOCK_
# ifdef USE_LOCALE_NUMERIC
# define LC_NUMERIC_LOCK(cond_to_panic_if_already_locked) \
LOCALE_LOCK_(cond_to_panic_if_already_locked)
# define LC_NUMERIC_UNLOCK LOCALE_UNLOCK_
# endif
# endif
#endif
#define gwLOCALE_LOCK LOCALE_LOCK_(0)
#define gwLOCALE_UNLOCK LOCALE_UNLOCK_
#ifdef LOCALE_LOCK_DOES_SOMETHING
# define gwENVr_LOCALEr_LOCK \
STMT_START { LOCALE_LOCK; ENV_READ_LOCK; } STMT_END
# define gwENVr_LOCALEr_UNLOCK \
STMT_START { ENV_READ_UNLOCK; LOCALE_UNLOCK; } STMT_END
#else
# define gwENVr_LOCALEr_LOCK ENV_LOCK
# define gwENVr_LOCALEr_UNLOCK ENV_UNLOCK
#endif
#define LOCALE_READ_LOCK LOCALE_LOCK
#define LOCALE_READ_UNLOCK LOCALE_UNLOCK
#if defined(WIN32) && defined(USE_THREAD_SAFE_LOCALE)
# define POSIX_SETLOCALE_LOCK \
STMT_START { \
if
(_configthreadlocale(0) == _DISABLE_PER_THREAD_LOCALE) \
gwLOCALE_LOCK; \
} STMT_END
# define POSIX_SETLOCALE_UNLOCK \
STMT_START { \
if
(_configthreadlocale(0) == _DISABLE_PER_THREAD_LOCALE) \
gwLOCALE_UNLOCK; \
} STMT_END
#else
# define POSIX_SETLOCALE_LOCK gwLOCALE_LOCK
# define POSIX_SETLOCALE_UNLOCK gwLOCALE_UNLOCK
#endif
#define WSETLOCALE_LOCK POSIX_SETLOCALE_LOCK
#define WSETLOCALE_UNLOCK POSIX_SETLOCALE_UNLOCK
#ifndef LC_NUMERIC_LOCK
# define LC_NUMERIC_LOCK(cond) NOOP
# define LC_NUMERIC_UNLOCK NOOP
#endif
# define MBLEN_LOCK_ gwLOCALE_LOCK
# define MBLEN_UNLOCK_ gwLOCALE_UNLOCK
# define MBTOWC_LOCK_ gwLOCALE_LOCK
# define MBTOWC_UNLOCK_ gwLOCALE_UNLOCK
# define WCTOMB_LOCK_ gwLOCALE_LOCK
# define WCTOMB_UNLOCK_ gwLOCALE_UNLOCK
# define MBRLEN_LOCK_ NOOP
# define MBRLEN_UNLOCK_ NOOP
# define MBRTOWC_LOCK_ NOOP
# define MBRTOWC_UNLOCK_ NOOP
# define WCRTOMB_LOCK_ NOOP
# define WCRTOMB_UNLOCK_ NOOP
# define LC_COLLATE_LOCK LOCALE_LOCK
# define LC_COLLATE_UNLOCK LOCALE_UNLOCK
#define ENVr_LOCALEr_LOCK \
STMT_START { LOCALE_READ_LOCK; ENV_READ_LOCK; } STMT_END
#define ENVr_LOCALEr_UNLOCK \
STMT_START { ENV_READ_UNLOCK; LOCALE_READ_UNLOCK; } STMT_END
#define STRFTIME_LOCK ENVr_LOCALEr_LOCK
#define STRFTIME_UNLOCK ENVr_LOCALEr_UNLOCK
#ifdef PERL_REENTR_USING_ASCTIME_R
# define ASCTIME_LOCK ENVr_LOCALEr_LOCK
# define ASCTIME_UNLOCK ENVr_LOCALEr_UNLOCK
#else
# define ASCTIME_LOCK gwENVr_LOCALEr_LOCK
# define ASCTIME_UNLOCK gwENVr_LOCALEr_UNLOCK
#endif
#define CTIME_LOCK gwENVr_LOCALEr_LOCK
#define CTIME_UNLOCK gwENVr_LOCALEr_UNLOCK
#ifdef PERL_REENTR_USING_GMTIME_R
# define GMTIME_LOCK ENVr_LOCALEr_LOCK
# define GMTIME_UNLOCK ENVr_LOCALEr_UNLOCK
#else
# define GMTIME_LOCK gwENVr_LOCALEr_LOCK
# define GMTIME_UNLOCK gwENVr_LOCALEr_UNLOCK
#endif
#define LOCALTIME_LOCK gwENVr_LOCALEr_LOCK
#define LOCALTIME_UNLOCK gwENVr_LOCALEr_UNLOCK
#define MKTIME_LOCK gwENVr_LOCALEr_LOCK
#define MKTIME_UNLOCK gwENVr_LOCALEr_UNLOCK
#define TZSET_LOCK gwENVr_LOCALEr_LOCK
#define TZSET_UNLOCK gwENVr_LOCALEr_UNLOCK
#define gwLOCALEr_LOCK gwENVr_LOCALEr_LOCK
#define gwLOCALEr_UNLOCK gwENVr_LOCALEr_UNLOCK
#ifdef PERL_REENTR_USING_GETHOSTBYADDR_R
# define GETHOSTBYADDR_LOCK ENVr_LOCALEr_LOCK
# define GETHOSTBYADDR_UNLOCK ENVr_LOCALEr_UNLOCK
#else
# define GETHOSTBYADDR_LOCK gwENVr_LOCALEr_LOCK
# define GETHOSTBYADDR_UNLOCK gwENVr_LOCALEr_UNLOCK
#endif
#ifdef PERL_REENTR_USING_GETHOSTBYNAME_R
# define GETHOSTBYNAME_LOCK ENVr_LOCALEr_LOCK
# define GETHOSTBYNAME_UNLOCK ENVr_LOCALEr_UNLOCK
#else
# define GETHOSTBYNAME_LOCK gwENVr_LOCALEr_LOCK
# define GETHOSTBYNAME_UNLOCK gwENVr_LOCALEr_UNLOCK
#endif
#ifdef PERL_REENTR_USING_GETNETBYADDR_R
# define GETNETBYADDR_LOCK LOCALE_READ_LOCK
# define GETNETBYADDR_UNLOCK LOCALE_READ_UNLOCK
#else
# define GETNETBYADDR_LOCK gwLOCALEr_LOCK
# define GETNETBYADDR_UNLOCK gwLOCALEr_UNLOCK
#endif
#ifdef PERL_REENTR_USING_GETNETBYNAME_R
# define GETNETBYNAME_LOCK LOCALE_READ_LOCK
# define GETNETBYNAME_UNLOCK LOCALE_READ_UNLOCK
#else
# define GETNETBYNAME_LOCK gwLOCALEr_LOCK
# define GETNETBYNAME_UNLOCK gwLOCALEr_UNLOCK
#endif
#ifdef PERL_REENTR_USING_GETPROTOBYNAME_R
# define GETPROTOBYNAME_LOCK LOCALE_READ_LOCK
# define GETPROTOBYNAME_UNLOCK LOCALE_READ_UNLOCK
#else
# define GETPROTOBYNAME_LOCK gwLOCALEr_LOCK
# define GETPROTOBYNAME_UNLOCK gwLOCALEr_UNLOCK
#endif
#ifdef PERL_REENTR_USING_GETPROTOBYNUMBER_R
# define GETPROTOBYNUMBER_LOCK LOCALE_READ_LOCK
# define GETPROTOBYNUMBER_UNLOCK LOCALE_READ_UNLOCK
#else
# define GETPROTOBYNUMBER_LOCK gwLOCALEr_LOCK
# define GETPROTOBYNUMBER_UNLOCK gwLOCALEr_UNLOCK
#endif
#ifdef PERL_REENTR_USING_GETPROTOENT_R
# define GETPROTOENT_LOCK LOCALE_READ_LOCK
# define GETPROTOENT_UNLOCK LOCALE_READ_UNLOCK
#else
# define GETPROTOENT_LOCK gwLOCALEr_LOCK
# define GETPROTOENT_UNLOCK gwLOCALEr_UNLOCK
#endif
#ifdef PERL_REENTR_USING_GETPWNAM_R
# define GETPWNAM_LOCK LOCALE_READ_LOCK
# define GETPWNAM_UNLOCK LOCALE_READ_UNLOCK
#else
# define GETPWNAM_LOCK gwLOCALEr_LOCK
# define GETPWNAM_UNLOCK gwLOCALEr_UNLOCK
#endif
#ifdef PERL_REENTR_USING_GETPWUID_R
# define GETPWUID_LOCK LOCALE_READ_LOCK
# define GETPWUID_UNLOCK LOCALE_READ_UNLOCK
#else
# define GETPWUID_LOCK gwLOCALEr_LOCK
# define GETPWUID_UNLOCK gwLOCALEr_UNLOCK
#endif
#ifdef PERL_REENTR_USING_GETSERVBYNAME_R
# define GETSERVBYNAME_LOCK LOCALE_READ_LOCK
# define GETSERVBYNAME_UNLOCK LOCALE_READ_UNLOCK
#else
# define GETSERVBYNAME_LOCK gwLOCALEr_LOCK
# define GETSERVBYNAME_UNLOCK gwLOCALEr_UNLOCK
#endif
#ifdef PERL_REENTR_USING_GETSERVBYPORT_R
# define GETSERVBYPORT_LOCK LOCALE_READ_LOCK
# define GETSERVBYPORT_UNLOCK LOCALE_READ_UNLOCK
#else
# define GETSERVBYPORT_LOCK gwLOCALEr_LOCK
# define GETSERVBYPORT_UNLOCK gwLOCALEr_UNLOCK
#endif
#ifdef PERL_REENTR_USING_GETSERVENT_R
# define GETSERVENT_LOCK LOCALE_READ_LOCK
# define GETSERVENT_UNLOCK LOCALE_READ_UNLOCK
#else
# define GETSERVENT_LOCK gwLOCALEr_LOCK
# define GETSERVENT_UNLOCK gwLOCALEr_UNLOCK
#endif
#ifdef PERL_REENTR_USING_GETSPNAM_R
# define GETSPNAM_LOCK LOCALE_READ_LOCK
# define GETSPNAM_UNLOCK LOCALE_READ_UNLOCK
#else
# define GETSPNAM_LOCK gwLOCALEr_LOCK
# define GETSPNAM_UNLOCK gwLOCALEr_UNLOCK
#endif
#define STRFMON_LOCK LC_MONETARY_LOCK
#define STRFMON_UNLOCK LC_MONETARY_UNLOCK
#if ! defined(USE_LOCALE_THREADS)
# define LOCALE_INIT
# define LOCALE_TERM
#else
# ifdef WIN32_USE_FAKE_OLD_MINGW_LOCALES
# define LOCALE_TERM_POSIX_2008_ Perl_thread_locale_term(NULL)
# elif ! defined(USE_POSIX_2008_LOCALE)
# define LOCALE_TERM_POSIX_2008_ NOOP
# else
# define LOCALE_TERM_POSIX_2008_ \
STMT_START { \
if
(PL_C_locale_obj) { \
\
uselocale(LC_GLOBAL_LOCALE); \
freelocale(PL_C_locale_obj); \
PL_C_locale_obj = (locale_t) NULL; \
} \
} STMT_END
# endif
# define LOCALE_INIT MUTEX_INIT(&PL_locale_mutex)
# define LOCALE_TERM STMT_START { \
LOCALE_TERM_POSIX_2008_; \
MUTEX_DESTROY(&PL_locale_mutex); \
} STMT_END
#endif
#ifdef USE_LOCALE /* These locale things are all subject to change */
# define IN_LOCALE_RUNTIME (PL_curcop \
&& CopHINTS_get(PL_curcop) & HINT_LOCALE)
# define IN_SOME_LOCALE_FORM_RUNTIME \
cBOOL(CopHINTS_get(PL_curcop) & (HINT_LOCALE|HINT_LOCALE_PARTIAL))
# define IN_LOCALE_COMPILETIME cBOOL(PL_hints & HINT_LOCALE)
# define IN_SOME_LOCALE_FORM_COMPILETIME \
cBOOL(PL_hints & (HINT_LOCALE|HINT_LOCALE_PARTIAL))
# define IN_LOCALE \
(IN_PERL_COMPILETIME ? IN_LOCALE_COMPILETIME : IN_LOCALE_RUNTIME)
# define IN_SOME_LOCALE_FORM \
(IN_PERL_COMPILETIME ? IN_SOME_LOCALE_FORM_COMPILETIME \
: IN_SOME_LOCALE_FORM_RUNTIME)
# define IN_LC_ALL_COMPILETIME IN_LOCALE_COMPILETIME
# define IN_LC_ALL_RUNTIME IN_LOCALE_RUNTIME
# define IN_LC_PARTIAL_COMPILETIME cBOOL(PL_hints & HINT_LOCALE_PARTIAL)
# define IN_LC_PARTIAL_RUNTIME \
(PL_curcop && CopHINTS_get(PL_curcop) & HINT_LOCALE_PARTIAL)
# define IN_LC_COMPILETIME(category) \
( IN_LC_ALL_COMPILETIME \
|| ( IN_LC_PARTIAL_COMPILETIME \
&& Perl__is_in_locale_category(aTHX_ TRUE, (category))))
# define IN_LC_RUNTIME(category) \
(IN_LC_ALL_RUNTIME || (IN_LC_PARTIAL_RUNTIME \
&& Perl__is_in_locale_category(aTHX_ FALSE, (category))))
# define IN_LC(category) \
(IN_LC_COMPILETIME(category) || IN_LC_RUNTIME(category))
# if defined (PERL_CORE) || defined (PERL_IN_XSUB_RE) || defined(PERL_EXT_POSIX)
# ifdef USE_LOCALE_CTYPE
# define CHECK_AND_WARN_PROBLEMATIC_LOCALE_ \
STMT_START { \
if
(UNLIKELY(PL_warn_locale)) { \
Perl_warn_problematic_locale(); \
} \
} STMT_END
# else
# define CHECK_AND_WARN_PROBLEMATIC_LOCALE_
# endif
# define _CHECK_AND_OUTPUT_WIDE_LOCALE_CP_MSG(cp) \
STMT_START { \
if
(! IN_UTF8_CTYPE_LOCALE && ckWARN(WARN_LOCALE)) { \
Perl_warner(aTHX_ packWARN(WARN_LOCALE), \
"Wide character (U+%"
UVXf
") in %s"
,\
(UV) cp, OP_DESC(PL_op)); \
} \
} STMT_END
# define _CHECK_AND_OUTPUT_WIDE_LOCALE_UTF8_MSG(s, send) \
STMT_START {
\
if
(! IN_UTF8_CTYPE_LOCALE && ckWARN(WARN_LOCALE)) { \
UV cp = utf8_to_uvchr_buf((U8 *) (s), (U8 *) (send), NULL); \
Perl_warner(aTHX_ packWARN(WARN_LOCALE), \
"Wide character (U+%"
UVXf
") in %s"
, \
(cp == 0) \
? UNICODE_REPLACEMENT \
: (UV) cp, \
OP_DESC(PL_op)); \
} \
} STMT_END
# endif /* PERL_CORE or PERL_IN_XSUB_RE */
#else /* No locale usage */
# define IN_LOCALE_RUNTIME 0
# define IN_SOME_LOCALE_FORM_RUNTIME 0
# define IN_LOCALE_COMPILETIME 0
# define IN_SOME_LOCALE_FORM_COMPILETIME 0
# define IN_LOCALE 0
# define IN_SOME_LOCALE_FORM 0
# define IN_LC_ALL_COMPILETIME 0
# define IN_LC_ALL_RUNTIME 0
# define IN_LC_PARTIAL_COMPILETIME 0
# define IN_LC_PARTIAL_RUNTIME 0
# define IN_LC_COMPILETIME(category) 0
# define IN_LC_RUNTIME(category) 0
# define IN_LC(category) 0
# define CHECK_AND_WARN_PROBLEMATIC_LOCALE_
# define _CHECK_AND_OUTPUT_WIDE_LOCALE_UTF8_MSG(s, send)
# define _CHECK_AND_OUTPUT_WIDE_LOCALE_CP_MSG(c)
#endif
#define locale_panic_via_(m, f, l) Perl_locale_panic((m), __LINE__, f, l)
#define locale_panic_(m) locale_panic_via_((m), __FILE__, __LINE__)
#ifdef USE_LOCALE_NUMERIC
# define NOT_IN_NUMERIC_STANDARD_ (! PL_numeric_standard)
# define NOT_IN_NUMERIC_UNDERLYING_ \
(! PL_numeric_underlying && PL_numeric_standard < 2)
# define DECLARATION_FOR_LC_NUMERIC_MANIPULATION \
void
(*_restore_LC_NUMERIC_function)(pTHX_
const
char
*
const
file, \
const
line_t line) = NULL
# define STORE_LC_NUMERIC_SET_TO_NEEDED_IN(in) \
STMT_START { \
bool
_in_lc_numeric = (in); \
LC_NUMERIC_LOCK( \
( ( _in_lc_numeric && NOT_IN_NUMERIC_UNDERLYING_) \
|| (! _in_lc_numeric && NOT_IN_NUMERIC_STANDARD_))); \
if
(_in_lc_numeric) { \
if
(NOT_IN_NUMERIC_UNDERLYING_) { \
Perl_set_numeric_underlying(aTHX_ __FILE__, __LINE__); \
_restore_LC_NUMERIC_function \
= &Perl_set_numeric_standard; \
} \
} \
else
{ \
if
(NOT_IN_NUMERIC_STANDARD_) { \
Perl_set_numeric_standard(aTHX_ __FILE__, __LINE__); \
_restore_LC_NUMERIC_function \
= &Perl_set_numeric_underlying; \
} \
} \
} STMT_END
# define STORE_LC_NUMERIC_SET_TO_NEEDED() \
STORE_LC_NUMERIC_SET_TO_NEEDED_IN(IN_LC(LC_NUMERIC))
# define RESTORE_LC_NUMERIC() \
STMT_START { \
if
(_restore_LC_NUMERIC_function) { \
_restore_LC_NUMERIC_function(aTHX_ __FILE__, __LINE__); \
} \
LC_NUMERIC_UNLOCK; \
} STMT_END
# define SET_NUMERIC_STANDARD() \
STMT_START { \
DEBUG_Lv(PerlIO_printf(Perl_debug_log, \
"%s: %d: lc_numeric standard=%d\n"
, \
__FILE__, __LINE__, PL_numeric_standard)); \
if
(UNLIKELY(NOT_IN_NUMERIC_STANDARD_)) { \
Perl_set_numeric_standard(aTHX_ __FILE__, __LINE__); \
} \
DEBUG_Lv(PerlIO_printf(Perl_debug_log, \
"%s: %d: lc_numeric standard=%d\n"
, \
__FILE__, __LINE__, PL_numeric_standard)); \
} STMT_END
# define SET_NUMERIC_UNDERLYING() \
STMT_START { \
\
if
(NOT_IN_NUMERIC_UNDERLYING_) { \
Perl_set_numeric_underlying(aTHX_ __FILE__, __LINE__); \
} \
} STMT_END
# define STORE_LC_NUMERIC_SET_STANDARD() \
STMT_START { \
LC_NUMERIC_LOCK(NOT_IN_NUMERIC_STANDARD_); \
if
(NOT_IN_NUMERIC_STANDARD_) { \
_restore_LC_NUMERIC_function = &Perl_set_numeric_underlying;\
Perl_set_numeric_standard(aTHX_ __FILE__, __LINE__); \
} \
} STMT_END
# define STORE_LC_NUMERIC_FORCE_TO_UNDERLYING() \
STMT_START { \
LC_NUMERIC_LOCK(NOT_IN_NUMERIC_UNDERLYING_); \
if
(NOT_IN_NUMERIC_UNDERLYING_) { \
Perl_set_numeric_underlying(aTHX_ __FILE__, __LINE__); \
_restore_LC_NUMERIC_function = &Perl_set_numeric_standard; \
} \
} STMT_END
# define DISABLE_LC_NUMERIC_CHANGES() \
STMT_START { \
DEBUG_Lv(PerlIO_printf(Perl_debug_log, \
"%s: %d: lc_numeric_standard now locked to depth %d\n"
, \
__FILE__, __LINE__, PL_numeric_standard)); \
PL_numeric_standard++; \
} STMT_END
# define REENABLE_LC_NUMERIC_CHANGES() \
STMT_START { \
if
(PL_numeric_standard > 1) { \
PL_numeric_standard--; \
} \
else
{ \
assert
(0); \
} \
DEBUG_Lv(PerlIO_printf(Perl_debug_log, \
"%s: %d: "
, __FILE__, __LINE__); \
if
(PL_numeric_standard <= 1) \
PerlIO_printf(Perl_debug_log, \
"lc_numeric_standard now unlocked\n"
);\
else
PerlIO_printf(Perl_debug_log, \
"lc_numeric_standard lock decremented to depth %d\n"
, \
PL_numeric_standard););\
} STMT_END
# define LOCK_LC_NUMERIC_STANDARD() \
STMT_START { \
assert
(PL_numeric_standard > 0 || PL_numeric_standard); \
DISABLE_LC_NUMERIC_CHANGES(); \
} STMT_END
# define UNLOCK_LC_NUMERIC_STANDARD() REENABLE_LC_NUMERIC_CHANGES()
# define WITH_LC_NUMERIC_SET_TO_NEEDED_IN(in_lc_numeric, block) \
STMT_START { \
DECLARATION_FOR_LC_NUMERIC_MANIPULATION; \
STORE_LC_NUMERIC_SET_TO_NEEDED_IN(in_lc_numeric); \
block; \
RESTORE_LC_NUMERIC(); \
} STMT_END
# define WITH_LC_NUMERIC_SET_TO_NEEDED(block) \
WITH_LC_NUMERIC_SET_TO_NEEDED_IN(IN_LC(LC_NUMERIC), block)
#else /* !USE_LOCALE_NUMERIC */
# define SET_NUMERIC_STANDARD()
# define SET_NUMERIC_UNDERLYING()
# define IS_NUMERIC_RADIX(a, b) (0)
# define DECLARATION_FOR_LC_NUMERIC_MANIPULATION dNOOP
# define STORE_LC_NUMERIC_SET_STANDARD()
# define STORE_LC_NUMERIC_FORCE_TO_UNDERLYING()
# define STORE_LC_NUMERIC_SET_TO_NEEDED_IN(in_lc_numeric)
# define STORE_LC_NUMERIC_SET_TO_NEEDED()
# define RESTORE_LC_NUMERIC()
# define LOCK_LC_NUMERIC_STANDARD()
# define UNLOCK_LC_NUMERIC_STANDARD()
# define DISABLE_LC_NUMERIC_CHANGES()
# define REENABLE_LC_NUMERIC_CHANGES()
# define WITH_LC_NUMERIC_SET_TO_NEEDED_IN(in_lc_numeric, block) \
STMT_START { block; } STMT_END
# define WITH_LC_NUMERIC_SET_TO_NEEDED(block) \
STMT_START { block; } STMT_END
#endif /* !USE_LOCALE_NUMERIC */
#ifndef PERL_NO_INLINE_FUNCTIONS
START_EXTERN_C
# include "perlstatic.h"
# include "inline.h"
# include "sv_inline.h"
END_EXTERN_C
#endif
#define Strtod my_strtod
#if defined(HAS_STRTOD) \
|| defined(USE_QUADMATH) \
|| (defined(HAS_STRTOLD) && defined(HAS_LONG_DOUBLE) \
&& defined(USE_LONG_DOUBLE))
# define Perl_strtod Strtod
#endif
#if !defined(Strtol) && defined(USE_64_BIT_INT) && defined(IV_IS_QUAD) && \
(QUADKIND == QUAD_IS_LONG_LONG || QUADKIND == QUAD_IS___INT64)
# ifdef __hpux
# define strtoll __strtoll /* secret handshake */
# endif
# if defined(WIN64) && defined(_MSC_VER)
# define strtoll _strtoi64 /* secret handshake */
# endif
# if !defined(Strtol) && defined(HAS_STRTOLL)
# define Strtol strtoll
# endif
# if !defined(Strtol) && defined(HAS_STRTOQ)
# define Strtol strtoq
# endif
#endif
#if !defined(Strtol) && defined(HAS_STRTOL)
# define Strtol strtol
#endif
#ifndef Atol
# if defined(USE_64_BIT_INT) && defined(IV_IS_QUAD) && defined(HAS_ATOLL) && \
(QUADKIND == QUAD_IS_LONG_LONG || QUADKIND == QUAD_IS___INT64)
# ifdef WIN64
# define atoll _atoi64 /* secret handshake */
# endif
# define Atol atoll
# else
# define Atol atol
# endif
#endif
#if !defined(Strtoul) && defined(USE_64_BIT_INT) && defined(UV_IS_QUAD) && \
(QUADKIND == QUAD_IS_LONG_LONG || QUADKIND == QUAD_IS___INT64)
# ifdef __hpux
# define strtoull __strtoull /* secret handshake */
# endif
# if defined(WIN64) && defined(_MSC_VER)
# define strtoull _strtoui64 /* secret handshake */
# endif
# if !defined(Strtoul) && defined(HAS_STRTOULL)
# define Strtoul strtoull
# endif
# if !defined(Strtoul) && defined(HAS_STRTOUQ)
# define Strtoul strtouq
# endif
#endif
#if !defined(Strtoul) && defined(HAS_STRTOUL)
# define Strtoul strtoul
#endif
#if !defined(Strtoul) && defined(HAS_STRTOL) /* Last resort. */
# define Strtoul(s, e, b) strchr((s), '-') ? ULONG_MAX : (unsigned long)strtol((s), (e), (b))
#endif
#ifndef Atoul
# define Atoul(s) Strtoul(s, NULL, 10)
#endif
#define grok_bin(s,lp,fp,rp) \
grok_bin_oct_hex(s, lp, fp, rp, 1, CC_BINDIGIT_,
'b'
)
#define grok_oct(s,lp,fp,rp) \
(*(fp) |= PERL_SCAN_DISALLOW_PREFIX, \
grok_bin_oct_hex(s, lp, fp, rp, 3, CC_OCTDIGIT_,
'\0'
))
#define grok_hex(s,lp,fp,rp) \
grok_bin_oct_hex(s, lp, fp, rp, 4, CC_XDIGIT_,
'x'
)
#ifndef PERL_SCRIPT_MODE
#define PERL_SCRIPT_MODE "r"
#endif
#define PERL_STACK_OVERFLOW_CHECK() NOOP
#ifndef PERL_ASYNC_CHECK
#define PERL_ASYNC_CHECK() if (UNLIKELY(PL_sig_pending)) PL_signalhook(aTHX)
#endif
#ifndef PERL_ALLOC_CHECK
#define PERL_ALLOC_CHECK(p) NOOP
#endif
#ifdef HAS_SEM
# include <sys/ipc.h>
# include <sys/sem.h>
# ifndef HAS_UNION_SEMUN /* Provide the union semun. */
union
semun {
int
val;
struct
semid_ds *buf;
unsigned
short
*array;
};
# endif
# ifdef USE_SEMCTL_SEMUN
# ifdef IRIX32_SEMUN_BROKEN_BY_GCC
union
gccbug_semun {
int
val;
struct
semid_ds *buf;
unsigned
short
*array;
char
__dummy[5];
};
# define semun gccbug_semun
# endif
# define Semctl(id, num, cmd, semun) semctl(id, num, cmd, semun)
# elif defined(USE_SEMCTL_SEMID_DS)
# ifdef EXTRA_F_IN_SEMUN_BUF
# define Semctl(id, num, cmd, semun) semctl(id, num, cmd, semun.buff)
# else
# define Semctl(id, num, cmd, semun) semctl(id, num, cmd, semun.buf)
# endif
# endif
#endif
#if defined(MULTIPLICITY)
# define START_MY_CXT static int my_cxt_index = -1;
# define MY_CXT_INDEX my_cxt_index
# define MY_CXT_INIT_ARG &my_cxt_index
# define MY_CXT_INIT \
my_cxt_t *my_cxtp = \
(my_cxt_t*)Perl_my_cxt_init(aTHX_ MY_CXT_INIT_ARG,
sizeof
(my_cxt_t)); \
PERL_UNUSED_VAR(my_cxtp)
# define MY_CXT_INIT_INTERP(my_perl) \
my_cxt_t *my_cxtp = \
(my_cxt_t*)Perl_my_cxt_init(my_perl, MY_CXT_INIT_ARG,
sizeof
(my_cxt_t)); \
PERL_UNUSED_VAR(my_cxtp)
# define dMY_CXT \
my_cxt_t *my_cxtp = (my_cxt_t *)PL_my_cxt_list[MY_CXT_INDEX]
# define dMY_CXT_INTERP(my_perl) \
my_cxt_t *my_cxtp = (my_cxt_t *)(my_perl)->Imy_cxt_list[MY_CXT_INDEX]
# define MY_CXT_CLONE \
my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(
sizeof
(my_cxt_t)-1));\
void
* old_my_cxtp = PL_my_cxt_list[MY_CXT_INDEX]; \
PL_my_cxt_list[MY_CXT_INDEX] = my_cxtp; \
Copy(old_my_cxtp, my_cxtp, 1, my_cxt_t);
# define MY_CXT (*my_cxtp)
# define pMY_CXT my_cxt_t *my_cxtp
# define pMY_CXT_ pMY_CXT,
# define _pMY_CXT ,pMY_CXT
# define aMY_CXT my_cxtp
# define aMY_CXT_ aMY_CXT,
# define _aMY_CXT ,aMY_CXT
#else /* MULTIPLICITY */
# define START_MY_CXT static my_cxt_t my_cxt;
# define dMY_CXT dNOOP
# define dMY_CXT_INTERP(my_perl) dNOOP
# define MY_CXT_INIT NOOP
# define MY_CXT_CLONE NOOP
# define MY_CXT my_cxt
# define pMY_CXT void
# define pMY_CXT_
# define _pMY_CXT
# define aMY_CXT
# define aMY_CXT_
# define _aMY_CXT
#endif /* !defined(MULTIPLICITY) */
#ifdef I_FCNTL
# include <fcntl.h>
#endif
#ifdef __Lynx__
# include <fcntl.h>
#endif
#ifdef __amigaos4__
# undef FD_CLOEXEC /* a lie in AmigaOS */
#endif
#ifdef I_SYS_FILE
# include <sys/file.h>
#endif
#if defined(HAS_FLOCK) && !defined(HAS_FLOCK_PROTO)
EXTERN_C
int
flock(
int
fd,
int
op);
#endif
#ifndef O_RDONLY
# define O_RDONLY 0000
# define O_WRONLY 0001
# define O_RDWR 0002
# define O_CREAT 0100
#endif
#ifndef O_BINARY
# define O_BINARY 0
#endif
#ifndef O_TEXT
# define O_TEXT 0
#endif
#if O_TEXT != O_BINARY
# if defined(__HAIKU__) || defined(__VOS__) || defined(__CYGWIN__)
# undef PERLIO_USING_CRLF
# else
# define PERLIO_USING_CRLF 1
# endif
#endif
#ifdef I_LIBUTIL
# include <libutil.h> /* setproctitle() in some FreeBSDs */
#endif
#ifndef EXEC_ARGV_CAST
#define EXEC_ARGV_CAST(x) (char **)x
#endif
#define IS_NUMBER_IN_UV 0x01 /* number within UV range (maybe not
int
). value returned in pointed-
to UV */
#define IS_NUMBER_GREATER_THAN_UV_MAX 0x02 /* pointed to UV undefined */
#define IS_NUMBER_NOT_INT 0x04 /* saw . or E notation or infnan */
#define IS_NUMBER_NEG 0x08 /* leading minus sign */
#define IS_NUMBER_INFINITY 0x10 /* this is big */
#define IS_NUMBER_NAN 0x20 /* this is not */
#define IS_NUMBER_TRAILING 0x40 /* number has trailing trash */
#define GROK_NUMERIC_RADIX(sp, send) grok_numeric_radix(sp, send)
#define PERL_SCAN_ALLOW_UNDERSCORES 0x01 /* grok_??? accept _ in numbers */
#define PERL_SCAN_DISALLOW_PREFIX 0x02 /* grok_??? reject 0x in hex etc */
#define PERL_SCAN_GREATER_THAN_UV_MAX 0x04
#define PERL_SCAN_SILENT_ILLDIGIT 0x08
#define PERL_SCAN_TRAILING 0x10 /* grok_number_flags() allow trailing
and set IS_NUMBER_TRAILING */
#if defined(PERL_CORE) || defined(PERL_EXT)
# define PERL_SCAN_SILENT_NON_PORTABLE 0x20
# define PERL_SCAN_NOTIFY_ILLDIGIT 0x40
# define PERL_SCAN_SILENT_OVERFLOW 0x80
# define PERL_SCAN_ALLOW_MEDIAL_UNDERSCORES (0x100|PERL_SCAN_ALLOW_UNDERSCORES)
#endif
#ifdef PERL_GPROF_CONTROL
extern
void
moncontrol(
int
);
#define PERL_GPROF_MONCONTROL(x) moncontrol(x)
#else
#define PERL_GPROF_MONCONTROL(x)
#endif
#define NEXT_LINE_CHAR NEXT_LINE_NATIVE
#ifndef PIPESOCK_MODE
# define PIPESOCK_MODE
#endif
#ifndef SOCKET_OPEN_MODE
# define SOCKET_OPEN_MODE PIPESOCK_MODE
#endif
#ifndef PIPE_OPEN_MODE
# define PIPE_OPEN_MODE PIPESOCK_MODE
#endif
#define PERL_MAGIC_UTF8_CACHESIZE 2
#ifdef PERL_CORE
#define PERL_UNICODE_STDIN_FLAG 0x0001
#define PERL_UNICODE_STDOUT_FLAG 0x0002
#define PERL_UNICODE_STDERR_FLAG 0x0004
#define PERL_UNICODE_IN_FLAG 0x0008
#define PERL_UNICODE_OUT_FLAG 0x0010
#define PERL_UNICODE_ARGV_FLAG 0x0020
#define PERL_UNICODE_LOCALE_FLAG 0x0040
#define PERL_UNICODE_WIDESYSCALLS_FLAG 0x0080 /* for Sarathy */
#define PERL_UNICODE_UTF8CACHEASSERT_FLAG 0x0100
#define PERL_UNICODE_STD_FLAG \
(PERL_UNICODE_STDIN_FLAG | \
PERL_UNICODE_STDOUT_FLAG | \
PERL_UNICODE_STDERR_FLAG)
#define PERL_UNICODE_INOUT_FLAG \
(PERL_UNICODE_IN_FLAG | \
PERL_UNICODE_OUT_FLAG)
#define PERL_UNICODE_DEFAULT_FLAGS \
(PERL_UNICODE_STD_FLAG | \
PERL_UNICODE_INOUT_FLAG | \
PERL_UNICODE_LOCALE_FLAG)
#define PERL_UNICODE_ALL_FLAGS 0x01ff
#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'
#define PERL_UNICODE_UTF8CACHEASSERT 'a'
#endif
#define PERL_SIGNALS_UNSAFE_FLAG 0x0001
#define PERL_ABS(x) ((x) < 0 ? -(x) : (x))
#if defined(__DECC) && defined(__osf__)
#pragma message disable (mainparm) /* Perl uses the envp in main(). */
#endif
#define do_open(g, n, l, a, rm, rp, sf) \
do_openn(g, n, l, a, rm, rp, sf, (SV **) NULL, 0)
#ifdef PERL_DEFAULT_DO_EXEC3_IMPLEMENTATION
# define do_exec(cmd) do_exec3(cmd,0,0)
#endif
#ifdef OS2
# define do_aexec Perl_do_aexec
#else
# define do_aexec(really, mark,sp) do_aexec5(really, mark, sp, 0, 0)
#endif
#define IS_SAFE_SYSCALL(p, len, what, op_name) (Perl_is_safe_syscall(aTHX_ (p), (len), (what), (op_name)))
#define IS_SAFE_PATHNAME(p, len, op_name) IS_SAFE_SYSCALL((p), (len), "pathname", (op_name))
#if defined(OEMVS) || defined(__amigaos4__)
#define NO_ENV_ARRAY_IN_MAIN
#endif
#define PERL_PV_ESCAPE_QUOTE 0x000001
#define PERL_PV_PRETTY_QUOTE PERL_PV_ESCAPE_QUOTE
#define PERL_PV_PRETTY_ELLIPSES 0x000002
#define PERL_PV_PRETTY_LTGT 0x000004
#define PERL_PV_PRETTY_EXACTSIZE 0x000008
#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_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 0x010000
#define PERL_PV_ESCAPE_DWIM_ALL_HEX 0x020000
#define PERL_PV_ESCAPE_NON_WC 0x040000
#define PERL_PV_ESCAPE_TRUNC_MIDDLE 0x080000
#define PERL_PV_PRETTY_QUOTEDPREFIX ( \
PERL_PV_PRETTY_ELLIPSES | \
PERL_PV_PRETTY_QUOTE | \
PERL_PV_ESCAPE_NONASCII | \
PERL_PV_ESCAPE_NON_WC | \
PERL_PV_ESCAPE_TRUNC_MIDDLE | \
0)
#define PERL_PV_PRETTY_DUMP PERL_PV_PRETTY_ELLIPSES|PERL_PV_PRETTY_QUOTE
#define PERL_PV_PRETTY_REGPROP PERL_PV_PRETTY_ELLIPSES|PERL_PV_PRETTY_LTGT|PERL_PV_ESCAPE_RE|PERL_PV_ESCAPE_NONASCII
#if DOUBLEKIND == DOUBLE_IS_VAX_F_FLOAT || \
DOUBLEKIND == DOUBLE_IS_VAX_D_FLOAT || \
DOUBLEKIND == DOUBLE_IS_VAX_G_FLOAT
# define DOUBLE_IS_VAX_FLOAT
#else
# define DOUBLE_IS_IEEE_FORMAT
#endif
#if DOUBLEKIND == DOUBLE_IS_IEEE_754_32_BIT_LITTLE_ENDIAN || \
DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_LITTLE_ENDIAN || \
DOUBLEKIND == DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN
# define DOUBLE_LITTLE_ENDIAN
#endif
#if DOUBLEKIND == DOUBLE_IS_IEEE_754_32_BIT_BIG_ENDIAN || \
DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_BIG_ENDIAN || \
DOUBLEKIND == DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN
# define DOUBLE_BIG_ENDIAN
#endif
#if DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_LE_BE || \
DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_BE_LE
# define DOUBLE_MIX_ENDIAN
#endif
#ifdef DOUBLE_IS_VAX_FLOAT
# define DOUBLE_VAX_ENDIAN
#endif
#ifdef DOUBLE_IS_IEEE_FORMAT
# define NV_IMPLICIT_BIT
#endif
#if defined(LONG_DOUBLEKIND) && LONG_DOUBLEKIND != LONG_DOUBLE_IS_DOUBLE
# if LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN || \
LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN || \
LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_LE
# define LONGDOUBLE_LITTLE_ENDIAN
# endif
# if LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN || \
LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN || \
LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_BE
# define LONGDOUBLE_BIG_ENDIAN
# endif
# if LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_BE || \
LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_LE
# define LONGDOUBLE_MIX_ENDIAN
# endif
# if LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN || \
LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN
# define LONGDOUBLE_X86_80_BIT
# ifdef USE_LONG_DOUBLE
# undef NV_IMPLICIT_BIT
# define NV_X86_80_BIT
# endif
# endif
# if LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_LE || \
LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_BE || \
LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_BE || \
LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_LE
# define LONGDOUBLE_DOUBLEDOUBLE
# endif
# if LONG_DOUBLEKIND == LONG_DOUBLE_IS_VAX_H_FLOAT
# define LONGDOUBLE_VAX_ENDIAN
# endif
#endif /* LONG_DOUBLEKIND */
#ifdef USE_QUADMATH /* assume quadmath endianness == native double endianness */
# if defined(DOUBLE_LITTLE_ENDIAN)
# define NV_LITTLE_ENDIAN
# elif defined(DOUBLE_BIG_ENDIAN)
# define NV_BIG_ENDIAN
# elif defined(DOUBLE_MIX_ENDIAN) /* stretch */
# define NV_MIX_ENDIAN
# endif
#elif NVSIZE == DOUBLESIZE
# ifdef DOUBLE_LITTLE_ENDIAN
# define NV_LITTLE_ENDIAN
# endif
# ifdef DOUBLE_BIG_ENDIAN
# define NV_BIG_ENDIAN
# endif
# ifdef DOUBLE_MIX_ENDIAN
# define NV_MIX_ENDIAN
# endif
# ifdef DOUBLE_VAX_ENDIAN
# define NV_VAX_ENDIAN
# endif
#elif NVSIZE == LONG_DOUBLESIZE
# ifdef LONGDOUBLE_LITTLE_ENDIAN
# define NV_LITTLE_ENDIAN
# endif
# ifdef LONGDOUBLE_BIG_ENDIAN
# define NV_BIG_ENDIAN
# endif
# ifdef LONGDOUBLE_MIX_ENDIAN
# define NV_MIX_ENDIAN
# endif
# ifdef LONGDOUBLE_VAX_ENDIAN
# define NV_VAX_ENDIAN
# endif
#endif
#if !defined(Perl_fp_class_denorm) && defined(Perl_isinf) && defined(Perl_isnan) && defined(NV_MIN)
# define Perl_fp_class_denorm(x) ((x) != 0.0 && !Perl_isinf(x) && !Perl_isnan(x) && PERL_ABS(x) < NV_MIN)
#endif
#if !defined(Perl_fp_class_denorm)
# define Perl_fp_class_denorm(x) FALSE
#endif
#ifdef DOUBLE_IS_IEEE_FORMAT
# define DOUBLE_HAS_INF
# define DOUBLE_HAS_NAN
#endif
#ifdef DOUBLE_HAS_NAN
START_EXTERN_C
#ifdef DOINIT
# ifndef USE_CPLUSPLUS
GCC_DIAG_IGNORE_DECL(-Wc++-compat);
# endif
# ifdef USE_QUADMATH
INFNAN_NV_U8_DECL PL_inf = { 1.0Q/0.0Q };
# elif NVSIZE == LONG_DOUBLESIZE && defined(LONGDBLINFBYTES)
INFNAN_U8_NV_DECL PL_inf = { { LONGDBLINFBYTES } };
# elif NVSIZE == DOUBLESIZE && defined(DOUBLEINFBYTES)
INFNAN_U8_NV_DECL PL_inf = { { DOUBLEINFBYTES } };
# else
# if NVSIZE == LONG_DOUBLESIZE && defined(USE_LONG_DOUBLE)
# if defined(LDBL_INFINITY)
INFNAN_NV_U8_DECL PL_inf = { LDBL_INFINITY };
# elif defined(LDBL_INF)
INFNAN_NV_U8_DECL PL_inf = { LDBL_INF };
# elif defined(INFINITY)
INFNAN_NV_U8_DECL PL_inf = { (NV)INFINITY };
# elif defined(INF)
INFNAN_NV_U8_DECL PL_inf = { (NV)INF };
# else
INFNAN_NV_U8_DECL PL_inf = { 1.0L/0.0L };
# endif
# else
# if defined(DBL_INFINITY)
INFNAN_NV_U8_DECL PL_inf = { DBL_INFINITY };
# elif defined(DBL_INF)
INFNAN_NV_U8_DECL PL_inf = { DBL_INF };
# elif defined(INFINITY) /* C99 */
INFNAN_NV_U8_DECL PL_inf = { (NV)INFINITY };
# elif defined(INF)
INFNAN_NV_U8_DECL PL_inf = { (NV)INF };
# else
INFNAN_NV_U8_DECL PL_inf = { 1.0/0.0 };
# endif
# endif
# endif
# ifdef USE_QUADMATH
INFNAN_NV_U8_DECL PL_nan = { 0.0Q/0.0Q };
# elif NVSIZE == LONG_DOUBLESIZE && defined(LONGDBLNANBYTES)
INFNAN_U8_NV_DECL PL_nan = { { LONGDBLNANBYTES } };
# elif NVSIZE == DOUBLESIZE && defined(DOUBLENANBYTES)
INFNAN_U8_NV_DECL PL_nan = { { DOUBLENANBYTES } };
# else
# if NVSIZE == LONG_DOUBLESIZE && defined(USE_LONG_DOUBLE)
# if defined(LDBL_NAN)
INFNAN_NV_U8_DECL PL_nan = { LDBL_NAN };
# elif defined(LDBL_QNAN)
INFNAN_NV_U8_DECL PL_nan = { LDBL_QNAN };
# elif defined(NAN)
INFNAN_NV_U8_DECL PL_nan = { (NV)NAN };
# else
INFNAN_NV_U8_DECL PL_nan = { 0.0L/0.0L };
# endif
# else
# if defined(DBL_NAN)
INFNAN_NV_U8_DECL PL_nan = { DBL_NAN };
# elif defined(DBL_QNAN)
INFNAN_NV_U8_DECL PL_nan = { DBL_QNAN };
# elif defined(NAN) /* C99 */
INFNAN_NV_U8_DECL PL_nan = { (NV)NAN };
# else
INFNAN_NV_U8_DECL PL_nan = { 0.0/0.0 };
# endif
# endif
# endif
# ifndef USE_CPLUSPLUS
GCC_DIAG_RESTORE_DECL;
# endif
#else
# if !defined(USE_QUADMATH) && \
(NVSIZE == LONG_DOUBLESIZE && defined(LONGDBLINFBYTES) || \
NVSIZE == DOUBLESIZE && defined(DOUBLEINFBYTES))
INFNAN_U8_NV_DECL PL_inf;
# else
INFNAN_NV_U8_DECL PL_inf;
# endif
# if !defined(USE_QUADMATH) && \
(NVSIZE == LONG_DOUBLESIZE && defined(LONGDBLNANBYTES) || \
NVSIZE == DOUBLESIZE && defined(DOUBLENANBYTES))
INFNAN_U8_NV_DECL PL_nan;
# else
INFNAN_NV_U8_DECL PL_nan;
# endif
#endif
END_EXTERN_C
#ifndef NV_INF
# define NV_INF PL_inf.nv
#endif
#ifndef NV_NAN
# define NV_NAN PL_nan.nv
#endif
#define NV_NAN_BITS (NVMANTBITS - 1)
#if defined(USE_LONG_DOUBLE) && NVSIZE > DOUBLESIZE
# if LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN
# define NV_NAN_QS_BYTE_OFFSET 13
# elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN
# define NV_NAN_QS_BYTE_OFFSET 2
# elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN
# define NV_NAN_QS_BYTE_OFFSET 7
# elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN
# define NV_NAN_QS_BYTE_OFFSET 2
# elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_LE
# define NV_NAN_QS_BYTE_OFFSET 13
# elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_BE
# define NV_NAN_QS_BYTE_OFFSET 1
# elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_BE
# define NV_NAN_QS_BYTE_OFFSET 9
# elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_LE
# define NV_NAN_QS_BYTE_OFFSET 6
# else
# error "Unexpected long double format"
# endif
#else
# ifdef USE_QUADMATH
# ifdef NV_LITTLE_ENDIAN
# define NV_NAN_QS_BYTE_OFFSET 13
# elif defined(NV_BIG_ENDIAN)
# define NV_NAN_QS_BYTE_OFFSET 2
# else
# error "Unexpected quadmath format"
# endif
# elif DOUBLEKIND == DOUBLE_IS_IEEE_754_32_BIT_LITTLE_ENDIAN
# define NV_NAN_QS_BYTE_OFFSET 2
# elif DOUBLEKIND == DOUBLE_IS_IEEE_754_32_BIT_BIG_ENDIAN
# define NV_NAN_QS_BYTE_OFFSET 1
# elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_LITTLE_ENDIAN
# define NV_NAN_QS_BYTE_OFFSET 6
# elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_BIG_ENDIAN
# define NV_NAN_QS_BYTE_OFFSET 1
# elif DOUBLEKIND == DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN
# define NV_NAN_QS_BYTE_OFFSET 13
# elif DOUBLEKIND == DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN
# define NV_NAN_QS_BYTE_OFFSET 2
# elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_LE_BE
# define NV_NAN_QS_BYTE_OFFSET 2 /* bytes 4 5 6 7 0 1 2 3 (MSB 7) */
# elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_BE_LE
# define NV_NAN_QS_BYTE_OFFSET 5 /* bytes 3 2 1 0 7 6 5 4 (MSB 7) */
# else
# error "Unexpected double format"
# endif
#endif
#define NV_NAN_QS_BYTE(nvp) (((U8*)(nvp))[NV_NAN_QS_BYTE_OFFSET])
#if defined(USE_LONG_DOUBLE) && \
(LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN || \
LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN)
# define NV_NAN_QS_BIT_SHIFT 6 /* 0x40 */
#elif defined(USE_LONG_DOUBLE) && \
(LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_LE || \
LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_BE || \
LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_BE || \
LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_LE)
# define NV_NAN_QS_BIT_SHIFT 3 /* 0x08, but not via NV_NAN_BITS */
#else
# define NV_NAN_QS_BIT_SHIFT ((NV_NAN_BITS) % 8) /* usually 3, or 0x08 */
#endif
#define NV_NAN_QS_BIT (1 << (NV_NAN_QS_BIT_SHIFT))
#define NV_NAN_QS_BIT_OFFSET \
(8 * (NV_NAN_QS_BYTE_OFFSET) + (NV_NAN_QS_BIT_SHIFT))
#define NV_NAN_QS_QUIET \
((NV_NAN_QS_BYTE(PL_nan.u8) & NV_NAN_QS_BIT) == NV_NAN_QS_BIT)
#define NV_NAN_QS_SIGNALING (!(NV_NAN_QS_QUIET))
#define NV_NAN_QS_TEST(nvp) (NV_NAN_QS_BYTE(nvp) & NV_NAN_QS_BIT)
#define NV_NAN_IS_QUIET(nvp) \
(NV_NAN_QS_TEST(nvp) == (NV_NAN_QS_QUIET ? NV_NAN_QS_BIT : 0))
#define NV_NAN_IS_SIGNALING(nvp) \
(NV_NAN_QS_TEST(nvp) == (NV_NAN_QS_QUIET ? 0 : NV_NAN_QS_BIT))
#define NV_NAN_SET_QUIET(nvp) \
(NV_NAN_QS_QUIET ? \
(NV_NAN_QS_BYTE(nvp) |= NV_NAN_QS_BIT) : \
(NV_NAN_QS_BYTE(nvp) &= ~NV_NAN_QS_BIT))
#define NV_NAN_SET_SIGNALING(nvp) \
(NV_NAN_QS_QUIET ? \
(NV_NAN_QS_BYTE(nvp) &= ~NV_NAN_QS_BIT) : \
(NV_NAN_QS_BYTE(nvp) |= NV_NAN_QS_BIT))
#define NV_NAN_QS_XOR(nvp) (NV_NAN_QS_BYTE(nvp) ^= NV_NAN_QS_BIT)
#define NV_NAN_PAYLOAD_MASK_SKIP_EIGHT \
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
#define NV_NAN_PAYLOAD_PERM_SKIP_EIGHT \
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
#define NV_NAN_PAYLOAD_PERM_0_TO_7 \
0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7
#define NV_NAN_PAYLOAD_PERM_7_TO_0 \
0x7, 0x6, 0x5, 0x4, 0x3, 0x2, 0x1, 0x0
#define NV_NAN_PAYLOAD_MASK_IEEE_754_128_LE \
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, \
0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00
#define NV_NAN_PAYLOAD_PERM_IEEE_754_128_LE \
NV_NAN_PAYLOAD_PERM_0_TO_7, \
0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xFF, 0xFF
#define NV_NAN_PAYLOAD_MASK_IEEE_754_128_BE \
0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, \
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
#define NV_NAN_PAYLOAD_PERM_IEEE_754_128_BE \
0xFF, 0xFF, 0xd, 0xc, 0xb, 0xa, 0x9, 0x8, \
NV_NAN_PAYLOAD_PERM_7_TO_0
#define NV_NAN_PAYLOAD_MASK_IEEE_754_64_LE \
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00
#define NV_NAN_PAYLOAD_PERM_IEEE_754_64_LE \
0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0xFF
#define NV_NAN_PAYLOAD_MASK_IEEE_754_64_BE \
0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
#define NV_NAN_PAYLOAD_PERM_IEEE_754_64_BE \
0xFF, 0x6, 0x5, 0x4, 0x3, 0x2, 0x1, 0x0
#if defined(USE_LONG_DOUBLE) && NVSIZE > DOUBLESIZE
# if LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN
# define NV_NAN_PAYLOAD_MASK NV_NAN_PAYLOAD_MASK_IEEE_754_128_LE
# define NV_NAN_PAYLOAD_PERM NV_NAN_PAYLOAD_PERM_IEEE_754_128_LE
# elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN
# define NV_NAN_PAYLOAD_MASK NV_NAN_PAYLOAD_MASK_IEEE_754_128_BE
# define NV_NAN_PAYLOAD_PERM NV_NAN_PAYLOAD_PERM_IEEE_754_128_BE
# elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN
# if LONG_DOUBLESIZE == 10
# define NV_NAN_PAYLOAD_MASK \
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, \
0x00, 0x00
# define NV_NAN_PAYLOAD_PERM \
NV_NAN_PAYLOAD_PERM_0_TO_7, 0xFF, 0xFF
# elif LONG_DOUBLESIZE == 12
# define NV_NAN_PAYLOAD_MASK \
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, \
0x00, 0x00, 0x00, 0x00
# define NV_NAN_PAYLOAD_PERM \
NV_NAN_PAYLOAD_PERM_0_TO_7, 0xFF, 0xFF, 0xFF, 0xFF
# elif LONG_DOUBLESIZE == 16
# define NV_NAN_PAYLOAD_MASK \
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, \
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
# define NV_NAN_PAYLOAD_PERM \
NV_NAN_PAYLOAD_PERM_0_TO_7, \
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
# else
# error "Unexpected x86 80-bit little-endian long double format"
# endif
# elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN
# if LONG_DOUBLESIZE == 10
# define NV_NAN_PAYLOAD_MASK \
0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, \
0xff, 0xff
# define NV_NAN_PAYLOAD_PERM \
NV_NAN_PAYLOAD_PERM_7_TO_0, 0xFF, 0xFF
# elif LONG_DOUBLESIZE == 12
# define NV_NAN_PAYLOAD_MASK \
0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, \
0xff, 0xff, 0x00, 0x00
# define NV_NAN_PAYLOAD_PERM \
NV_NAN_PAYLOAD_PERM_7_TO_0, 0xFF, 0xFF, 0xFF, 0xFF
# elif LONG_DOUBLESIZE == 16
# define NV_NAN_PAYLOAD_MASK \
0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, \
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
# define NV_NAN_PAYLOAD_PERM \
NV_NAN_PAYLOAD_PERM_7_TO_0, \
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
# else
# error "Unexpected x86 80-bit big-endian long double format"
# endif
# elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_LE
# define NV_NAN_PAYLOAD_MASK \
NV_NAN_PAYLOAD_MASK_SKIP_EIGHT, NV_NAN_PAYLOAD_MASK_IEEE_754_64_LE
# define NV_NAN_PAYLOAD_PERM \
NV_NAN_PAYLOAD_PERM_SKIP_EIGHT, NV_NAN_PAYLOAD_PERM_IEEE_754_64_LE
# elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_BE
# define NV_NAN_PAYLOAD_MASK \
NV_NAN_PAYLOAD_MASK_IEEE_754_64_BE
# define NV_NAN_PAYLOAD_PERM \
NV_NAN_PAYLOAD_PERM_IEEE_754_64_BE
# elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_BE
# define NV_NAN_PAYLOAD_MASK \
NV_NAN_PAYLOAD_MASK_IEEE_754_64_LE
# define NV_NAN_PAYLOAD_PERM \
NV_NAN_PAYLOAD_PERM_IEEE_754_64_LE
# elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_LE
# define NV_NAN_PAYLOAD_MASK \
NV_NAN_PAYLOAD_MASK_SKIP_EIGHT, NV_NAN_PAYLOAD_MASK_IEEE_754_64_BE
# define NV_NAN_PAYLOAD_PERM \
NV_NAN_PAYLOAD_PERM_SKIP_EIGHT, NV_NAN_PAYLOAD_PERM_IEEE_754_64_BE
# else
# error "Unexpected long double format"
# endif
#else
# ifdef USE_QUADMATH /* quadmath is not long double */
# ifdef NV_LITTLE_ENDIAN
# define NV_NAN_PAYLOAD_MASK NV_NAN_PAYLOAD_MASK_IEEE_754_128_LE
# define NV_NAN_PAYLOAD_PERM NV_NAN_PAYLOAD_PERM_IEEE_754_128_LE
# elif defined(NV_BIG_ENDIAN)
# define NV_NAN_PAYLOAD_MASK NV_NAN_PAYLOAD_MASK_IEEE_754_128_BE
# define NV_NAN_PAYLOAD_PERM NV_NAN_PAYLOAD_PERM_IEEE_754_128_BE
# else
# error "Unexpected quadmath format"
# endif
# elif DOUBLEKIND == DOUBLE_IS_IEEE_754_32_BIT_LITTLE_ENDIAN
# define NV_NAN_PAYLOAD_MASK 0xff, 0xff, 0x07, 0x00
# define NV_NAN_PAYLOAD_PERM 0x0, 0x1, 0x2, 0xFF
# elif DOUBLEKIND == DOUBLE_IS_IEEE_754_32_BIT_BIG_ENDIAN
# define NV_NAN_PAYLOAD_MASK 0x00, 0x07, 0xff, 0xff
# define NV_NAN_PAYLOAD_PERM 0xFF, 0x2, 0x1, 0x0
# elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_LITTLE_ENDIAN
# define NV_NAN_PAYLOAD_MASK NV_NAN_PAYLOAD_MASK_IEEE_754_64_LE
# define NV_NAN_PAYLOAD_PERM NV_NAN_PAYLOAD_PERM_IEEE_754_64_LE
# elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_BIG_ENDIAN
# define NV_NAN_PAYLOAD_MASK NV_NAN_PAYLOAD_MASK_IEEE_754_64_BE
# define NV_NAN_PAYLOAD_PERM NV_NAN_PAYLOAD_PERM_IEEE_754_64_BE
# elif DOUBLEKIND == DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN
# define NV_NAN_PAYLOAD_MASK NV_NAN_PAYLOAD_MASK_IEEE_754_128_LE
# define NV_NAN_PAYLOAD_PERM NV_NAN_PAYLOAD_PERM_IEEE_754_128_LE
# elif DOUBLEKIND == DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN
# define NV_NAN_PAYLOAD_MASK NV_NAN_PAYLOAD_MASK_IEEE_754_128_BE
# define NV_NAN_PAYLOAD_PERM NV_NAN_PAYLOAD_PERM_IEEE_754_128_BE
# elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_LE_BE
# define NV_NAN_PAYLOAD_MASK 0xff, 0xff, 0x07, 0x00, 0xff, 0xff, 0xff, 0xff
# define NV_NAN_PAYLOAD_PERM 0x4, 0x5, 0x6, 0xFF, 0x0, 0x1, 0x2, 0x3
# elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_BE_LE
# define NV_NAN_PAYLOAD_MASK 0xff, 0xff, 0xff, 0xff, 0x00, 0x07, 0xff, 0xff
# define NV_NAN_PAYLOAD_PERM 0x3, 0x2, 0x1, 0x0, 0xFF, 0x6, 0x5, 0x4
# else
# error "Unexpected double format"
# endif
#endif
#endif /* DOUBLE_HAS_NAN */
#define PERL_SRAND_OVERRIDE_NEXT() PERL_XORSHIFT32_A(PL_srand_override_next);
#define PERL_SRAND_OVERRIDE_NEXT_INIT() STMT_START { \
PL_srand_override = PL_srand_override_next; \
PERL_SRAND_OVERRIDE_NEXT(); \
} STMT_END
#define PERL_SRAND_OVERRIDE_GET(into) STMT_START { \
into= PL_srand_override; \
PERL_SRAND_OVERRIDE_NEXT_INIT(); \
} STMT_END
#define PERL_SRAND_OVERRIDE_NEXT_CHILD() STMT_START { \
PERL_XORSHIFT32_B(PL_srand_override_next); \
PERL_SRAND_OVERRIDE_NEXT_INIT(); \
} STMT_END
#define PERL_SRAND_OVERRIDE_NEXT_PARENT() \
PERL_SRAND_OVERRIDE_NEXT()
#ifndef PERL_MAX_NESTED_EVAL_BEGIN_BLOCKS_DEFAULT
#define PERL_MAX_NESTED_EVAL_BEGIN_BLOCKS_DEFAULT 1000
#endif
#define PERL_VAR_MAX_NESTED_EVAL_BEGIN_BLOCKS "\015AX_NESTED_EVAL_BEGIN_BLOCKS"
#define PERL_DIAG_STR_(x) ("" x "")
#define PERL_DIAG_WARN_SYNTAX(x) PERL_DIAG_STR_(x)
#define PERL_DIAG_DIE_SYNTAX(x) PERL_DIAG_STR_(x)
#ifndef PERL_STOP_PARSING_AFTER_N_ERRORS
#define PERL_STOP_PARSING_AFTER_N_ERRORS 10
#endif
#define PERL_PARSE_ERROR_COUNT(f) (f)
#if defined(WIN32) && !defined(WIN64) && defined(__GNUC__)
# define PERL_STACK_REALIGN __attribute__((force_align_arg_pointer))
#else
# define PERL_STACK_REALIGN
#endif
#endif /* Include guard */