summaryrefslogtreecommitdiffstats
path: root/contrib/perl5/perl.h
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/perl5/perl.h')
-rw-r--r--contrib/perl5/perl.h3478
1 files changed, 0 insertions, 3478 deletions
diff --git a/contrib/perl5/perl.h b/contrib/perl5/perl.h
deleted file mode 100644
index 2e2b8ca..0000000
--- a/contrib/perl5/perl.h
+++ /dev/null
@@ -1,3478 +0,0 @@
-/* perl.h
- *
- * Copyright (c) 1987-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- * $FreeBSD$
- */
-#ifndef H_PERL
-#define H_PERL 1
-
-#ifdef PERL_FOR_X2P
-/*
- * This file is being used for x2p stuff.
- * Above symbol is defined via -D in 'x2p/Makefile.SH'
- * Decouple x2p stuff from some of perls more extreme eccentricities.
- */
-#undef MULTIPLICITY
-#undef USE_STDIO
-#define USE_STDIO
-#endif /* PERL_FOR_X2P */
-
-#define VOIDUSED 1
-#include "config.h"
-
-#if defined(USE_ITHREADS) && defined(USE_5005THREADS)
-# include "error: USE_ITHREADS and USE_5005THREADS are incompatible"
-#endif
-
-/* XXX This next guard can disappear if the sources are revised
- to use USE_5005THREADS throughout. -- A.D 1/6/2000
-*/
-#if defined(USE_ITHREADS) && defined(USE_THREADS)
-# include "error: USE_ITHREADS and USE_THREADS are incompatible"
-#endif
-
-/* See L<perlguts/"The Perl API"> for detailed notes on
- * PERL_IMPLICIT_CONTEXT and PERL_IMPLICIT_SYS */
-
-#ifdef USE_ITHREADS
-# if !defined(MULTIPLICITY) && !defined(PERL_OBJECT)
-# define MULTIPLICITY
-# endif
-#endif
-
-#ifdef USE_THREADS
-# ifndef PERL_IMPLICIT_CONTEXT
-# define PERL_IMPLICIT_CONTEXT
-# endif
-#endif
-
-#if defined(MULTIPLICITY)
-# ifndef PERL_IMPLICIT_CONTEXT
-# define PERL_IMPLICIT_CONTEXT
-# endif
-#endif
-
-#ifdef PERL_CAPI
-# undef PERL_OBJECT
-# ifndef MULTIPLICITY
-# define MULTIPLICITY
-# endif
-# ifndef PERL_IMPLICIT_CONTEXT
-# define PERL_IMPLICIT_CONTEXT
-# endif
-# ifndef PERL_IMPLICIT_SYS
-# define PERL_IMPLICIT_SYS
-# endif
-#endif
-
-#ifdef PERL_OBJECT
-# ifndef PERL_IMPLICIT_CONTEXT
-# define PERL_IMPLICIT_CONTEXT
-# endif
-# ifndef PERL_IMPLICIT_SYS
-# define PERL_IMPLICIT_SYS
-# endif
-#endif
-
-#ifdef PERL_OBJECT
-
-/* PERL_OBJECT explained - DickH and DougL @ ActiveState.com
-
-Defining PERL_OBJECT turns on creation of a C++ object that
-contains all writable core perl global variables and functions.
-Stated another way, all necessary global variables and functions
-are members of a big C++ object. This object's class is CPerlObj.
-This allows a Perl Host to have multiple, independent perl
-interpreters in the same process space. This is very important on
-Win32 systems as the overhead of process creation is quite high --
-this could be even higher than the script compile and execute time
-for small scripts.
-
-The perl executable implementation on Win32 is composed of perl.exe
-(the Perl Host) and perlX.dll. (the Perl Core). This allows the
-same Perl Core to easily be embedded in other applications that use
-the perl interpreter.
-
-+-----------+
-| Perl Host |
-+-----------+
- ^
- |
- v
-+-----------+ +-----------+
-| Perl Core |<->| Extension |
-+-----------+ +-----------+ ...
-
-Defining PERL_OBJECT has the following effects:
-
-PERL CORE
-1. CPerlObj is defined (this is the PERL_OBJECT)
-2. all static functions that needed to access either global
-variables or functions needed are made member functions
-3. all writable static variables are made member variables
-4. all global variables and functions are defined as:
- #define var CPerlObj::PL_var
- #define func CPerlObj::Perl_func
- * these are in embed.h
-This necessitated renaming some local variables and functions that
-had the same name as a global variable or function. This was
-probably a _good_ thing anyway.
-
-
-EXTENSIONS
-1. Access to global variables and perl functions is through a
-pointer to the PERL_OBJECT. This pointer type is CPerlObj*. This is
-made transparent to extension developers by the following macros:
- #define var pPerl->PL_var
- #define func pPerl->Perl_func
- * these are done in objXSUB.h
-This requires that the extension be compiled as C++, which means
-that the code must be ANSI C and not K&R C. For K&R extensions,
-please see the C API notes located in Win32/GenCAPI.pl. This script
-creates a perlCAPI.lib that provides a K & R compatible C interface
-to the PERL_OBJECT.
-2. Local variables and functions cannot have the same name as perl's
-variables or functions since the macros will redefine these. Look for
-this if you get some strange error message and it does not look like
-the code that you had written. This often happens with variables that
-are local to a function.
-
-PERL HOST
-1. The perl host is linked with perlX.lib to get perl_alloc. This
-function will return a pointer to CPerlObj (the PERL_OBJECT). It
-takes pointers to the various PerlXXX_YYY interfaces (see iperlsys.h
-for more information on this).
-2. The perl host calls the same functions as normally would be
-called in setting up and running a perl script, except that the
-functions are now member functions of the PERL_OBJECT.
-
-*/
-
-
-class CPerlObj;
-
-#define STATIC
-#define CPERLscope(x) CPerlObj::x
-#define CALL_FPTR(fptr) (aTHXo->*fptr)
-
-#define pTHXo CPerlObj *pPerl
-#define pTHXo_ pTHXo,
-#define aTHXo this
-#define aTHXo_ this,
-#define PERL_OBJECT_THIS aTHXo
-#define PERL_OBJECT_THIS_ aTHXo_
-#define dTHXoa(a) pTHXo = (CPerlObj*)a
-#define dTHXo pTHXo = PERL_GET_THX
-
-#define pTHXx void
-#define pTHXx_
-#define aTHXx
-#define aTHXx_
-
-#else /* !PERL_OBJECT */
-
-#ifdef PERL_IMPLICIT_CONTEXT
-# ifdef USE_THREADS
-struct perl_thread;
-# define pTHX register struct perl_thread *thr
-# define aTHX thr
-# define dTHR dNOOP /* only backward compatibility */
-# define dTHXa(a) pTHX = (struct perl_thread*)a
-# else
-# ifndef MULTIPLICITY
-# define MULTIPLICITY
-# endif
-# define pTHX register PerlInterpreter *my_perl
-# define aTHX my_perl
-# define dTHXa(a) pTHX = (PerlInterpreter*)a
-# endif
-# 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
-#endif
-
-#define STATIC static
-#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)
-
-#endif /* PERL_OBJECT */
-
-#define CALLRUNOPS CALL_FPTR(PL_runops)
-#define CALLREGCOMP CALL_FPTR(PL_regcompp)
-#define CALLREGEXEC CALL_FPTR(PL_regexecp)
-#define CALLREG_INTUIT_START CALL_FPTR(PL_regint_start)
-#define CALLREG_INTUIT_STRING CALL_FPTR(PL_regint_string)
-#define CALLREGFREE CALL_FPTR(PL_regfree)
-
-#ifdef PERL_FLEXIBLE_EXCEPTIONS
-# define CALLPROTECT CALL_FPTR(PL_protect)
-#endif
-
-#define NOOP (void)0
-#define dNOOP extern int Perl___notused
-
-#ifndef pTHX
-# define pTHX void
-# define pTHX_
-# define aTHX
-# define aTHX_
-# define dTHXa(a) dNOOP
-# define dTHX dNOOP
-# define pTHX_1 1
-# define pTHX_2 2
-# define pTHX_3 3
-# define pTHX_4 4
-#endif
-
-#ifndef pTHXo
-# define pTHXo pTHX
-# define pTHXo_ pTHX_
-# define aTHXo aTHX
-# define aTHXo_ aTHX_
-# define dTHXo dTHX
-# define dTHXoa(x) dTHXa(x)
-#endif
-
-#ifndef pTHXx
-# define pTHXx register PerlInterpreter *my_perl
-# define pTHXx_ pTHXx,
-# define aTHXx my_perl
-# define aTHXx_ aTHXx,
-# define dTHXx dTHX
-#endif
-
-#undef START_EXTERN_C
-#undef END_EXTERN_C
-#undef EXTERN_C
-#ifdef __cplusplus
-# define START_EXTERN_C extern "C" {
-# define END_EXTERN_C }
-# define EXTERN_C extern "C"
-#else
-# define START_EXTERN_C
-# define END_EXTERN_C
-# define EXTERN_C extern
-#endif
-
-#ifdef OP_IN_REGISTER
-# ifdef __GNUC__
-# define stringify_immed(s) #s
-# define stringify(s) stringify_immed(s)
-register struct op *Perl_op asm(stringify(OP_IN_REGISTER));
-# endif
-#endif
-
-/*
- * STMT_START { statements; } STMT_END;
- * can be used as a single statement, as in
- * if (x) STMT_START { ... } STMT_END; else ...
- *
- * Trying to select a version that gives no warnings...
- */
-#if !(defined(STMT_START) && defined(STMT_END))
-# if defined(__GNUC__) && !defined(__STRICT_ANSI__) && !defined(__cplusplus)
-# define STMT_START (void)( /* gcc supports ``({ STATEMENTS; })'' */
-# define STMT_END )
-# else
- /* Now which other defined()s do we need here ??? */
-# if (VOIDFLAGS) && (defined(sun) || defined(__sun__))
-# define STMT_START if (1)
-# define STMT_END else (void)0
-# else
-# define STMT_START do
-# define STMT_END while (0)
-# endif
-# endif
-#endif
-
-#define WITH_THX(s) STMT_START { dTHX; s; } STMT_END
-#define WITH_THR(s) WITH_THX(s)
-
-/*
- * SOFT_CAST can be used for args to prototyped functions to retain some
- * type checking; it only casts if the compiler does not know prototypes.
- */
-#if defined(CAN_PROTOTYPE) && defined(DEBUGGING_COMPILE)
-#define SOFT_CAST(type)
-#else
-#define SOFT_CAST(type) (type)
-#endif
-
-#ifndef BYTEORDER /* Should never happen -- byteorder is in config.h */
-# define BYTEORDER 0x1234
-#endif
-
-/* Overall memory policy? */
-#ifndef CONSERVATIVE
-# define LIBERAL 1
-#endif
-
-#if 'A' == 65 && 'I' == 73 && 'J' == 74 && 'Z' == 90
-#define ASCIIish
-#else
-#undef ASCIIish
-#endif
-
-/*
- * The following contortions are brought to you on behalf of all the
- * standards, semi-standards, de facto standards, not-so-de-facto standards
- * of the world, as well as all the other botches anyone ever thought of.
- * The basic theory is that if we work hard enough here, the rest of the
- * code can be a lot prettier. Well, so much for theory. Sorry, Henry...
- */
-
-/* define this once if either system, instead of cluttering up the src */
-#if defined(MSDOS) || defined(atarist) || defined(WIN32)
-#define DOSISH 1
-#endif
-
-#if defined(__STDC__) || defined(vax11c) || defined(_AIX) || defined(__stdc__) || defined(__cplusplus) || defined( EPOC)
-# define STANDARD_C 1
-#endif
-
-#if defined(__cplusplus) || defined(WIN32) || defined(__sgi) || defined(OS2) || defined(__DGUX) || defined( EPOC) || defined(__QNX__)
-# define DONT_DECLARE_STD 1
-#endif
-
-#if defined(HASVOLATILE) || defined(STANDARD_C)
-# ifdef __cplusplus
-# define VOL // to temporarily suppress warnings
-# else
-# define VOL volatile
-# endif
-#else
-# define VOL
-#endif
-
-#define TAINT (PL_tainted = TRUE)
-#define TAINT_NOT (PL_tainted = FALSE)
-#define TAINT_IF(c) if (c) { PL_tainted = TRUE; }
-#define TAINT_ENV() if (PL_tainting) { taint_env(); }
-#define TAINT_PROPER(s) if (PL_tainting) { taint_proper(Nullch, s); }
-
-/* XXX All process group stuff is handled in pp_sys.c. Should these
- defines move there? If so, I could simplify this a lot. --AD 9/96.
-*/
-/* Process group stuff changed from traditional BSD to POSIX.
- perlfunc.pod documents the traditional BSD-style syntax, so we'll
- try to preserve that, if possible.
-*/
-#ifdef HAS_SETPGID
-# define BSD_SETPGRP(pid, pgrp) setpgid((pid), (pgrp))
-#else
-# if defined(HAS_SETPGRP) && defined(USE_BSD_SETPGRP)
-# define BSD_SETPGRP(pid, pgrp) setpgrp((pid), (pgrp))
-# else
-# ifdef HAS_SETPGRP2 /* DG/UX */
-# define BSD_SETPGRP(pid, pgrp) setpgrp2((pid), (pgrp))
-# endif
-# endif
-#endif
-#if defined(BSD_SETPGRP) && !defined(HAS_SETPGRP)
-# define HAS_SETPGRP /* Well, effectively it does . . . */
-#endif
-
-/* getpgid isn't POSIX, but at least Solaris and Linux have it, and it makes
- our life easier :-) so we'll try it.
-*/
-#ifdef HAS_GETPGID
-# define BSD_GETPGRP(pid) getpgid((pid))
-#else
-# if defined(HAS_GETPGRP) && defined(USE_BSD_GETPGRP)
-# define BSD_GETPGRP(pid) getpgrp((pid))
-# else
-# ifdef HAS_GETPGRP2 /* DG/UX */
-# define BSD_GETPGRP(pid) getpgrp2((pid))
-# endif
-# endif
-#endif
-#if defined(BSD_GETPGRP) && !defined(HAS_GETPGRP)
-# define HAS_GETPGRP /* Well, effectively it does . . . */
-#endif
-
-/* These are not exact synonyms, since setpgrp() and getpgrp() may
- have different behaviors, but perl.h used to define USE_BSDPGRP
- (prior to 5.003_05) so some extension might depend on it.
-*/
-#if defined(USE_BSD_SETPGRP) || defined(USE_BSD_GETPGRP)
-# ifndef USE_BSDPGRP
-# define USE_BSDPGRP
-# endif
-#endif
-
-/* HP-UX 10.X CMA (Common Multithreaded Architecure) insists that
- pthread.h must be included before all other header files.
-*/
-#if (defined(USE_THREADS) || defined(USE_ITHREADS)) \
- && defined(PTHREAD_H_FIRST) && defined(I_PTHREAD)
-# include <pthread.h>
-#endif
-
-#ifndef _TYPES_ /* If types.h defines this it's easy. */
-# ifndef major /* Does everyone's types.h define this? */
-# include <sys/types.h>
-# endif
-#endif
-
-#ifdef __cplusplus
-# ifndef I_STDARG
-# define I_STDARG 1
-# endif
-#endif
-
-#ifdef I_STDARG
-# include <stdarg.h>
-#else
-# ifdef I_VARARGS
-# include <varargs.h>
-# endif
-#endif
-
-#ifdef USE_NEXT_CTYPE
-
-#if NX_CURRENT_COMPILER_RELEASE >= 500
-# include <bsd/ctypes.h>
-#else
-# if NX_CURRENT_COMPILER_RELEASE >= 400
-# include <objc/NXCType.h>
-# else /* NX_CURRENT_COMPILER_RELEASE < 400 */
-# include <appkit/NXCType.h>
-# endif /* NX_CURRENT_COMPILER_RELEASE >= 400 */
-#endif /* NX_CURRENT_COMPILER_RELEASE >= 500 */
-
-#else /* !USE_NEXT_CTYPE */
-#include <ctype.h>
-#endif /* USE_NEXT_CTYPE */
-
-#ifdef METHOD /* Defined by OSF/1 v3.0 by ctype.h */
-#undef METHOD
-#endif
-
-#ifdef I_LOCALE
-# include <locale.h>
-#endif
-
-#if !defined(NO_LOCALE) && defined(HAS_SETLOCALE)
-# define USE_LOCALE
-# if !defined(NO_LOCALE_COLLATE) && defined(LC_COLLATE) \
- && defined(HAS_STRXFRM)
-# define USE_LOCALE_COLLATE
-# endif
-# if !defined(NO_LOCALE_CTYPE) && defined(LC_CTYPE)
-# define USE_LOCALE_CTYPE
-# endif
-# if !defined(NO_LOCALE_NUMERIC) && defined(LC_NUMERIC)
-# define USE_LOCALE_NUMERIC
-# endif
-#endif /* !NO_LOCALE && HAS_SETLOCALE */
-
-#include <setjmp.h>
-
-#ifdef I_SYS_PARAM
-# ifdef PARAM_NEEDS_TYPES
-# include <sys/types.h>
-# endif
-# include <sys/param.h>
-#endif
-
-/* Use all the "standard" definitions? */
-#if defined(STANDARD_C) && defined(I_STDLIB)
-# include <stdlib.h>
-#endif
-
-/* If this causes problems, set i_unistd=undef in the hint file. */
-#ifdef I_UNISTD
-# include <unistd.h>
-#endif
-
-#ifdef PERL_MICRO /* Last chance to export Perl_my_swap */
-# define MYSWAP
-#endif
-
-#if !defined(PERL_FOR_X2P) && !defined(WIN32)
-# include "embed.h"
-#endif
-
-#define MEM_SIZE Size_t
-
-#if defined(STANDARD_C) && defined(I_STDDEF)
-# include <stddef.h>
-# define STRUCT_OFFSET(s,m) offsetof(s,m)
-#else
-# define STRUCT_OFFSET(s,m) (Size_t)(&(((s *)0)->m))
-#endif
-
-#if defined(I_STRING) || defined(__cplusplus)
-# include <string.h>
-#else
-# include <strings.h>
-#endif
-
-/* This comes after <stdlib.h> so we don't try to change the standard
- * library prototypes; we'll use our own in proto.h instead. */
-
-#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
-Malloc_t Perl_malloc (MEM_SIZE nbytes);
-Malloc_t Perl_calloc (MEM_SIZE elements, MEM_SIZE size);
-Malloc_t Perl_realloc (Malloc_t where, MEM_SIZE nbytes);
-/* 'mfree' rather than 'free', since there is already a 'perl_free'
- * that causes clashes with case-insensitive linkers */
-Free_t Perl_mfree (Malloc_t where);
-
-typedef struct perl_mstats perl_mstats_t;
-
-# define safemalloc Perl_malloc
-# define safecalloc Perl_calloc
-# define saferealloc Perl_realloc
-# define safefree Perl_mfree
-#else /* MYMALLOC */
-# define safemalloc safesysmalloc
-# define safecalloc safesyscalloc
-# define saferealloc safesysrealloc
-# define safefree safesysfree
-#endif /* MYMALLOC */
-
-#if !defined(HAS_STRCHR) && defined(HAS_INDEX) && !defined(strchr)
-#define strchr index
-#define strrchr rindex
-#endif
-
-#ifdef I_MEMORY
-# include <memory.h>
-#endif
-
-#ifdef HAS_MEMCPY
-# if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)
-# ifndef memcpy
- extern char * memcpy (char*, char*, int);
-# endif
-# endif
-#else
-# ifndef memcpy
-# ifdef HAS_BCOPY
-# define memcpy(d,s,l) bcopy(s,d,l)
-# else
-# define memcpy(d,s,l) my_bcopy(s,d,l)
-# endif
-# endif
-#endif /* HAS_MEMCPY */
-
-#ifdef HAS_MEMSET
-# if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)
-# ifndef memset
- extern char *memset (char*, int, int);
-# endif
-# endif
-#else
-# define memset(d,c,l) my_memset(d,c,l)
-#endif /* HAS_MEMSET */
-
-#if !defined(HAS_MEMMOVE) && !defined(memmove)
-# if defined(HAS_BCOPY) && defined(HAS_SAFE_BCOPY)
-# define memmove(d,s,l) bcopy(s,d,l)
-# else
-# if defined(HAS_MEMCPY) && defined(HAS_SAFE_MEMCPY)
-# define memmove(d,s,l) memcpy(d,s,l)
-# else
-# define memmove(d,s,l) my_bcopy(s,d,l)
-# endif
-# endif
-#endif
-
-#if defined(mips) && defined(ultrix) && !defined(__STDC__)
-# undef HAS_MEMCMP
-#endif
-
-#if defined(HAS_MEMCMP) && defined(HAS_SANE_MEMCMP)
-# if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)
-# ifndef memcmp
- extern int memcmp (char*, char*, int);
-# endif
-# endif
-# ifdef BUGGY_MSC
- # pragma function(memcmp)
-# endif
-#else
-# ifndef memcmp
-# define memcmp my_memcmp
-# endif
-#endif /* HAS_MEMCMP && HAS_SANE_MEMCMP */
-
-#ifndef memzero
-# ifdef HAS_MEMSET
-# define memzero(d,l) memset(d,0,l)
-# else
-# ifdef HAS_BZERO
-# define memzero(d,l) bzero(d,l)
-# else
-# define memzero(d,l) my_bzero(d,l)
-# endif
-# endif
-#endif
-
-#ifndef memchr
-# ifndef HAS_MEMCHR
-# define memchr(s,c,n) ninstr((char*)(s), ((char*)(s)) + n, &(c), &(c) + 1)
-# endif
-#endif
-
-#ifndef HAS_BCMP
-# ifndef bcmp
-# define bcmp(s1,s2,l) memcmp(s1,s2,l)
-# endif
-#endif /* !HAS_BCMP */
-
-#ifdef I_NETINET_IN
-# include <netinet/in.h>
-#endif
-
-#ifdef I_ARPA_INET
-# include <arpa/inet.h>
-#endif
-
-#if defined(SF_APPEND) && defined(USE_SFIO) && defined(I_SFIO)
-/* <sfio.h> defines SF_APPEND and <sys/stat.h> might define SF_APPEND
- * (the neo-BSD seem to do this). */
-# undef SF_APPEND
-#endif
-
-#ifdef I_SYS_STAT
-# include <sys/stat.h>
-#endif
-
-/* The stat macros for Amdahl UTS, Unisoft System V/88 (and derivatives
- like UTekV) are broken, sometimes giving false positives. Undefine
- them here and let the code below set them to proper values.
-
- The ghs macro stands for GreenHills Software C-1.8.5 which
- is the C compiler for sysV88 and the various derivatives.
- This header file bug is corrected in gcc-2.5.8 and later versions.
- --Kaveh Ghazi (ghazi@noc.rutgers.edu) 10/3/94. */
-
-#if defined(uts) || (defined(m88k) && defined(ghs))
-# undef S_ISDIR
-# undef S_ISCHR
-# undef S_ISBLK
-# undef S_ISREG
-# undef S_ISFIFO
-# undef S_ISLNK
-#endif
-
-#ifdef I_TIME
-# include <time.h>
-#endif
-
-#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
-
-#if defined(HAS_STRERROR) && (!defined(HAS_MKDIR) || !defined(HAS_RMDIR))
-# undef HAS_STRERROR
-#endif
-
-#include <errno.h>
-
-#if defined(WIN32) && (defined(PERL_OBJECT) || defined(PERL_IMPLICIT_SYS) || defined(PERL_CAPI))
-# define WIN32SCK_IS_STDSCK /* don't pull in custom wsock layer */
-#endif
-
-#if defined(HAS_SOCKET) && !defined(VMS) /* VMS handles sockets via vmsish.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
-# ifdef USE_THREADS
-# define PERL_USE_THREADS /* store our value */
-# undef USE_THREADS
-# endif
-# include <socks.h>
-# ifdef USE_THREADS
-# undef USE_THREADS /* socks.h does this on its own */
-# endif
-# ifdef PERL_USE_THREADS
-# define USE_THREADS /* restore our value */
-# undef PERL_USE_THREADS
-# endif
-# ifdef PERL_SOCKS_NEED_PROTOTYPES /* keep cpp space clean */
-# undef INCLUDE_PROTOTYPES
-# undef PERL_SOCKS_NEED_PROTOTYPES
-# endif
-# ifdef USE_64_BIT_ALL
-# define SOCKS_64BIT_BUG /* until proven otherwise */
-# endif
-# endif
-# ifdef I_NETDB
-# include <netdb.h>
-# endif
-# ifndef ENOTSOCK
-# ifdef I_NET_ERRNO
-# include <net/errno.h>
-# endif
-# endif
-#endif
-
-#ifdef SETERRNO
-# undef SETERRNO /* SOCKS might have defined this */
-#endif
-
-#ifdef VMS
-# define SETERRNO(errcode,vmserrcode) \
- STMT_START { \
- set_errno(errcode); \
- set_vaxc_errno(vmserrcode); \
- } STMT_END
-#else
-# define SETERRNO(errcode,vmserrcode) (errno = (errcode))
-#endif
-
-#ifdef USE_THREADS
-# define ERRSV (thr->errsv)
-# define DEFSV THREADSV(0)
-# define SAVE_DEFSV save_threadsv(0)
-#else
-# define ERRSV GvSV(PL_errgv)
-# define DEFSV GvSV(PL_defgv)
-# define SAVE_DEFSV SAVESPTR(GvSV(PL_defgv))
-#endif /* USE_THREADS */
-
-#define ERRHV GvHV(PL_errgv) /* XXX unused, here for compatibility */
-
-#ifndef errno
- extern int errno; /* ANSI allows errno to be an lvalue expr.
- * For example in multithreaded environments
- * something like this might happen:
- * extern int *_errno(void);
- * #define errno (*_errno()) */
-#endif
-
-#ifdef HAS_STRERROR
-# ifdef VMS
- char *strerror (int,...);
-# else
-#ifndef DONT_DECLARE_STD
- char *strerror (int);
-#endif
-# endif
-# ifndef Strerror
-# define Strerror strerror
-# endif
-#else
-# ifdef HAS_SYS_ERRLIST
- extern int sys_nerr;
- extern char *sys_errlist[];
-# ifndef Strerror
-# define Strerror(e) \
- ((e) < 0 || (e) >= sys_nerr ? "(unknown)" : sys_errlist[e])
-# endif
-# endif
-#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
-
-#if INTSIZE == 2
-# define htoni htons
-# define ntohi ntohs
-#else
-# define htoni htonl
-# define ntohi ntohl
-#endif
-
-/* Configure already sets Direntry_t */
-#if defined(I_DIRENT)
-# include <dirent.h>
- /* NeXT needs dirent + sys/dir.h */
-# if defined(I_SYS_DIR) && (defined(NeXT) || defined(__NeXT__))
-# include <sys/dir.h>
-# endif
-#else
-# ifdef I_SYS_NDIR
-# include <sys/ndir.h>
-# else
-# ifdef I_SYS_DIR
-# ifdef hp9000s500
-# include <ndir.h> /* may be wrong in the future */
-# else
-# include <sys/dir.h>
-# endif
-# endif
-# endif
-#endif
-
-#ifdef FPUTS_BOTCH
-/* work around botch in SunOS 4.0.1 and 4.0.2 */
-# ifndef fputs
-# define fputs(sv,fp) fprintf(fp,"%s",sv)
-# endif
-#endif
-
-/*
- * The following gobbledygook brought to you on behalf of __STDC__.
- * (I could just use #ifndef __STDC__, but this is more bulletproof
- * in the face of half-implementations.)
- */
-
-#ifdef 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)
-# else
-# ifdef _S_IFLNK
-# define S_ISLNK(m) ((m & S_IFMT) == _S_IFLNK)
-# else
-# ifdef S_IFLNK
-# define S_ISLNK(m) ((m & S_IFMT) == S_IFLNK)
-# else
-# define S_ISLNK(m) (0)
-# endif
-# endif
-# endif
-#endif
-
-#ifndef S_ISSOCK
-# ifdef _S_ISSOCK
-# define S_ISSOCK(m) _S_ISSOCK(m)
-# else
-# ifdef _S_IFSOCK
-# define S_ISSOCK(m) ((m & S_IFMT) == _S_IFSOCK)
-# else
-# ifdef S_IFSOCK
-# define S_ISSOCK(m) ((m & S_IFMT) == S_IFSOCK)
-# else
-# define S_ISSOCK(m) (0)
-# endif
-# endif
-# 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
-
-#ifndef S_IREAD
-# define S_IREAD S_IRUSR
-#endif
-
-#ifndef S_IWRITE
-# define S_IWRITE S_IWUSR
-#endif
-
-#ifndef S_IEXEC
-# define S_IEXEC S_IXUSR
-#endif
-
-#ifdef ff_next
-# undef ff_next
-#endif
-
-#if defined(cray) || defined(gould) || defined(i860) || defined(pyr)
-# define SLOPPYDIVIDE
-#endif
-
-#ifdef UV
-#undef UV
-#endif
-
-/*
- The IV type is supposed to be long enough to hold any integral
- value or a pointer.
- --Andy Dougherty August 1996
-*/
-
-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 INT64_MAX
-# define IV_MIN INT64_MIN
-# define UV_MAX UINT64_MAX
-# ifndef UINT64_MIN
-# define UINT64_MIN 0
-# endif
-# define UV_MIN 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 INT32_MAX
-# define IV_MIN INT32_MIN
-# ifndef UINT32_MAX_BROKEN /* e.g. HP-UX with gcc messes this up */
-# define UV_MAX UINT32_MAX
-# else
-# define UV_MAX 4294967295U
-# endif
-# ifndef UINT32_MIN
-# define UINT32_MIN 0
-# endif
-# define UV_MIN 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
-# undef HAS_QUAD
-# endif
-#endif
-
-#define IV_DIG (BIT_DIGITS(IVSIZE * 8))
-#define UV_DIG (BIT_DIGITS(UVSIZE * 8))
-
-/*
- * The macros INT2PTR and NUM2PTR are (despite their names)
- * bi-directional: they will convert int/float to or from pointers.
- * However the conversion to int/float are named explicitly:
- * PTR2IV, PTR2UV, PTR2NV.
- *
- * For int conversions we do not need two casts if pointers are
- * the same size as IV and UV. Otherwise we need an explicit
- * cast (PTRV) to avoid compiler warnings.
- */
-#if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE)
-# define PTRV UV
-# define INT2PTR(any,d) (any)(d)
-#else
-# if PTRSIZE == LONGSIZE
-# define PTRV unsigned long
-# else
-# define PTRV unsigned
-# endif
-# define INT2PTR(any,d) (any)(PTRV)(d)
-#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)
-#if PTRSIZE == LONGSIZE
-# define PTR2ul(p) (unsigned long)(p)
-#else
-# define PTR2ul(p) INT2PTR(unsigned long,p)
-#endif
-
-#ifdef USE_LONG_DOUBLE
-# if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE == DOUBLESIZE
-# define LONG_DOUBLE_EQUALS_DOUBLE
-# endif
-# if !(defined(HAS_LONG_DOUBLE) && (LONG_DOUBLESIZE > DOUBLESIZE))
-# undef USE_LONG_DOUBLE /* Ouch! */
-# endif
-#endif
-
-#ifdef OVR_DBL_DIG
-/* Use an overridden DBL_DIG */
-# ifdef DBL_DIG
-# undef DBL_DIG
-# endif
-# define DBL_DIG OVR_DBL_DIG
-#else
-/* The following is all to get DBL_DIG, in order to pick a nice
- default value for printing floating point numbers in Gconvert.
- (see config.h)
-*/
-#ifdef I_LIMITS
-#include <limits.h>
-#endif
-#ifdef I_FLOAT
-#include <float.h>
-#endif
-#ifndef HAS_DBL_DIG
-#define DBL_DIG 15 /* A guess that works lots of places */
-#endif
-#endif
-#ifdef I_FLOAT
-#include <float.h>
-#endif
-#ifndef HAS_DBL_DIG
-#define DBL_DIG 15 /* A guess that works lots of places */
-#endif
-
-#ifdef OVR_LDBL_DIG
-/* Use an overridden LDBL_DIG */
-# ifdef LDBL_DIG
-# undef LDBL_DIG
-# endif
-# define LDBL_DIG OVR_LDBL_DIG
-#else
-/* The following is all to get LDBL_DIG, in order to pick a nice
- default value for printing floating point numbers in Gconvert.
- (see config.h)
-*/
-# ifdef I_LIMITS
-# include <limits.h>
-# endif
-# ifdef I_FLOAT
-# include <float.h>
-# endif
-# ifndef HAS_LDBL_DIG
-# if LONG_DOUBLESIZE == 10
-# define LDBL_DIG 18 /* assume IEEE */
-# else
-# if LONG_DOUBLESIZE == 12
-# define LDBL_DIG 18 /* gcc? */
-# else
-# if LONG_DOUBLESIZE == 16
-# define LDBL_DIG 33 /* assume IEEE */
-# else
-# if LONG_DOUBLESIZE == DOUBLESIZE
-# define LDBL_DIG DBL_DIG /* bummer */
-# endif
-# endif
-# endif
-# endif
-# endif
-#endif
-
-typedef NVTYPE NV;
-
-#ifdef I_IEEEFP
-# include <ieeefp.h>
-#endif
-
-#ifdef USE_LONG_DOUBLE
-# ifdef I_SUNMATH
-# include <sunmath.h>
-# endif
-# define NV_DIG LDBL_DIG
-# ifdef LDBL_MANT_DIG
-# define NV_MANT_DIG LDBL_MANT_DIG
-# endif
-# ifdef LDBL_MAX
-# define NV_MAX LDBL_MAX
-# define NV_MIN LDBL_MIN
-# else
-# ifdef HUGE_VALL
-# define NV_MAX HUGE_VALL
-# else
-# ifdef HUGE_VAL
-# define NV_MAX ((NV)HUGE_VAL)
-# endif
-# endif
-# endif
-# ifdef HAS_SQRTL
-# define Perl_cos cosl
-# define Perl_sin sinl
-# define Perl_sqrt sqrtl
-# define Perl_exp expl
-# define Perl_log logl
-# define Perl_atan2 atan2l
-# define Perl_pow powl
-# define Perl_floor floorl
-# define Perl_fmod fmodl
-# endif
-/* e.g. libsunmath doesn't have modfl and frexpl as of mid-March 2000 */
-# ifdef HAS_MODFL
-# define Perl_modf(x,y) modfl(x,y)
-# else
-# define Perl_modf(x,y) ((long double)modf((double)(x),(double*)(y)))
-# endif
-# ifdef HAS_FREXPL
-# define Perl_frexp(x,y) frexpl(x,y)
-# else
-# define Perl_frexp(x,y) ((long double)frexp((double)(x),y))
-# endif
-# ifdef HAS_ISNANL
-# define Perl_isnan(x) isnanl(x)
-# else
-# ifdef HAS_ISNAN
-# define Perl_isnan(x) isnan((double)(x))
-# else
-# define Perl_isnan(x) ((x)!=(x))
-# endif
-# endif
-#else
-# define NV_DIG DBL_DIG
-# ifdef DBL_MANT_DIG
-# define NV_MANT_DIG DBL_MANT_DIG
-# endif
-# ifdef DBL_MAX
-# define NV_MAX DBL_MAX
-# define NV_MIN DBL_MIN
-# else
-# ifdef HUGE_VAL
-# define NV_MAX HUGE_VAL
-# endif
-# endif
-# define Perl_cos cos
-# define Perl_sin sin
-# define Perl_sqrt sqrt
-# define Perl_exp exp
-# define Perl_log log
-# define Perl_atan2 atan2
-# define Perl_pow pow
-# define Perl_floor floor
-# define Perl_fmod fmod
-# define Perl_modf(x,y) modf(x,y)
-# define Perl_frexp(x,y) frexp(x,y)
-# ifdef HAS_ISNAN
-# define Perl_isnan(x) isnan(x)
-# else
-# define Perl_isnan(x) ((x)!=(x))
-# endif
-#endif
-
-#if !defined(Perl_atof) && defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
-# if !defined(Perl_atof) && defined(HAS_STRTOLD)
-# define Perl_atof(s) (NV)strtold(s, (char**)NULL)
-# endif
-# if !defined(Perl_atof) && defined(HAS_ATOLF)
-# define Perl_atof (NV)atolf
-# endif
-# if !defined(Perl_atof) && defined(PERL_SCNfldbl)
-# define Perl_atof PERL_SCNfldbl
-# define Perl_atof2(s,f) sscanf((s), "%"PERL_SCNfldbl, &(f))
-# endif
-#endif
-#if !defined(Perl_atof)
-# define Perl_atof atof /* we assume atof being available anywhere */
-#endif
-#if !defined(Perl_atof2)
-# define Perl_atof2(s,f) ((f) = (NV)Perl_atof(s))
-#endif
-
-/* Previously these definitions used hardcoded figures.
- * It is hoped these formula are more portable, although
- * no data one way or another is presently known to me.
- * The "PERL_" names are used because these calculated constants
- * do not meet the ANSI requirements for LONG_MAX, etc., which
- * need to be constants acceptable to #if - kja
- * define PERL_LONG_MAX 2147483647L
- * define PERL_LONG_MIN (-LONG_MAX - 1)
- * define PERL ULONG_MAX 4294967295L
- */
-
-#ifdef I_LIMITS /* Needed for cast_xxx() functions below. */
-# include <limits.h>
-#else
-#ifdef I_VALUES
-# include <values.h>
-#endif
-#endif
-
-/*
- * Try to figure out max and min values for the integral types. THE CORRECT
- * SOLUTION TO THIS MESS: ADAPT enquire.c FROM GCC INTO CONFIGURE. The
- * following hacks are used if neither limits.h or values.h provide them:
- * U<TYPE>_MAX: for types >= int: ~(unsigned TYPE)0
- * for types < int: (unsigned TYPE)~(unsigned)0
- * The argument to ~ must be unsigned so that later signed->unsigned
- * conversion can't modify the value's bit pattern (e.g. -0 -> +0),
- * and it must not be smaller than int because ~ does integral promotion.
- * <type>_MAX: (<type>) (U<type>_MAX >> 1)
- * <type>_MIN: -<type>_MAX - <is_twos_complement_architecture: (3 & -1) == 3>.
- * The latter is a hack which happens to work on some machines but
- * does *not* catch any random system, or things like integer types
- * with NaN if that is possible.
- *
- * All of the types are explicitly cast to prevent accidental loss of
- * numeric range, and in the hope that they will be less likely to confuse
- * over-eager optimizers.
- *
- */
-
-#define PERL_UCHAR_MIN ((unsigned char)0)
-
-#ifdef UCHAR_MAX
-# define PERL_UCHAR_MAX ((unsigned char)UCHAR_MAX)
-#else
-# ifdef MAXUCHAR
-# define PERL_UCHAR_MAX ((unsigned char)MAXUCHAR)
-# else
-# define PERL_UCHAR_MAX ((unsigned char)~(unsigned)0)
-# endif
-#endif
-
-/*
- * CHAR_MIN and CHAR_MAX are not included here, as the (char) type may be
- * ambiguous. It may be equivalent to (signed char) or (unsigned char)
- * depending on local options. Until Configure detects this (or at least
- * detects whether the "signed" keyword is available) the CHAR ranges
- * will not be included. UCHAR functions normally.
- * - kja
- */
-
-#define PERL_USHORT_MIN ((unsigned short)0)
-
-#ifdef USHORT_MAX
-# define PERL_USHORT_MAX ((unsigned short)USHORT_MAX)
-#else
-# ifdef MAXUSHORT
-# define PERL_USHORT_MAX ((unsigned short)MAXUSHORT)
-# else
-# ifdef USHRT_MAX
-# define PERL_USHORT_MAX ((unsigned short)USHRT_MAX)
-# else
-# define PERL_USHORT_MAX ((unsigned short)~(unsigned)0)
-# endif
-# endif
-#endif
-
-#ifdef SHORT_MAX
-# define PERL_SHORT_MAX ((short)SHORT_MAX)
-#else
-# ifdef MAXSHORT /* Often used in <values.h> */
-# define PERL_SHORT_MAX ((short)MAXSHORT)
-# else
-# ifdef SHRT_MAX
-# define PERL_SHORT_MAX ((short)SHRT_MAX)
-# else
-# define PERL_SHORT_MAX ((short) (PERL_USHORT_MAX >> 1))
-# endif
-# endif
-#endif
-
-#ifdef SHORT_MIN
-# define PERL_SHORT_MIN ((short)SHORT_MIN)
-#else
-# ifdef MINSHORT
-# define PERL_SHORT_MIN ((short)MINSHORT)
-# else
-# ifdef SHRT_MIN
-# define PERL_SHORT_MIN ((short)SHRT_MIN)
-# else
-# define PERL_SHORT_MIN (-PERL_SHORT_MAX - ((3 & -1) == 3))
-# endif
-# endif
-#endif
-
-#ifdef UINT_MAX
-# define PERL_UINT_MAX ((unsigned int)UINT_MAX)
-#else
-# ifdef MAXUINT
-# define PERL_UINT_MAX ((unsigned int)MAXUINT)
-# else
-# define PERL_UINT_MAX (~(unsigned int)0)
-# endif
-#endif
-
-#define PERL_UINT_MIN ((unsigned int)0)
-
-#ifdef INT_MAX
-# define PERL_INT_MAX ((int)INT_MAX)
-#else
-# ifdef MAXINT /* Often used in <values.h> */
-# define PERL_INT_MAX ((int)MAXINT)
-# else
-# define PERL_INT_MAX ((int)(PERL_UINT_MAX >> 1))
-# endif
-#endif
-
-#ifdef INT_MIN
-# define PERL_INT_MIN ((int)INT_MIN)
-#else
-# ifdef MININT
-# define PERL_INT_MIN ((int)MININT)
-# else
-# define PERL_INT_MIN (-PERL_INT_MAX - ((3 & -1) == 3))
-# endif
-#endif
-
-#ifdef ULONG_MAX
-# define PERL_ULONG_MAX ((unsigned long)ULONG_MAX)
-#else
-# ifdef MAXULONG
-# define PERL_ULONG_MAX ((unsigned long)MAXULONG)
-# else
-# define PERL_ULONG_MAX (~(unsigned long)0)
-# endif
-#endif
-
-#define PERL_ULONG_MIN ((unsigned long)0L)
-
-#ifdef LONG_MAX
-# define PERL_LONG_MAX ((long)LONG_MAX)
-#else
-# ifdef MAXLONG /* Often used in <values.h> */
-# define PERL_LONG_MAX ((long)MAXLONG)
-# else
-# define PERL_LONG_MAX ((long) (PERL_ULONG_MAX >> 1))
-# endif
-#endif
-
-#ifdef LONG_MIN
-# define PERL_LONG_MIN ((long)LONG_MIN)
-#else
-# ifdef MINLONG
-# define PERL_LONG_MIN ((long)MINLONG)
-# else
-# define PERL_LONG_MIN (-PERL_LONG_MAX - ((3 & -1) == 3))
-# endif
-#endif
-
-#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
-
-struct perl_mstats {
- UV *nfree;
- UV *ntotal;
- IV topbucket, topbucket_ev, topbucket_odd, totfree, total, total_chain;
- IV total_sbrk, sbrks, sbrk_good, sbrk_slack, start_slack, sbrked_remains;
- IV minbucket;
- /* Level 1 info */
- UV *bucket_mem_size;
- UV *bucket_available_size;
- UV nbuckets;
-};
-
-typedef MEM_SIZE STRLEN;
-
-typedef struct op OP;
-typedef struct cop COP;
-typedef struct unop UNOP;
-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 interpreter PerlInterpreter;
-#ifdef UTS
-# define STRUCT_SV perl_sv /* Amdahl's <ksync.h> has struct 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 regexp REGEXP;
-typedef struct gp GP;
-typedef struct gv GV;
-typedef struct io IO;
-typedef struct context PERL_CONTEXT;
-typedef struct block BLOCK;
-
-typedef struct magic MAGIC;
-typedef struct xrv XRV;
-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 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 mgvtbl MGVTBL;
-typedef union any ANY;
-typedef struct ptr_tbl_ent PTR_TBL_ENT_t;
-typedef struct ptr_tbl PTR_TBL_t;
-
-#include "handy.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
-
-/* Notice the use of HAS_FSEEKO: now we are obligated to always use
- * fseeko/ftello if possible. Don't go #defining ftell to ftello yourself,
- * however, because operating systems like to do that themself. */
-#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
-/* Most 64-bit environments have defines like _LARGEFILE_SOURCE that
- * will trigger defines like the ones below. Some 64-bit environments,
- * however, do not. Therefore we have to explicitly mix and match. */
-# 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
-/* Most 64-bit environments have defines like _LARGEFILE_SOURCE that
- * will trigger defines like the ones below. Some 64-bit environments,
- * however, do not. */
-# 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
-
-#if defined(__OPEN_VM)
-# include "vmesa/vmesaish.h"
-#endif
-
-#ifdef DOSISH
-# if defined(OS2)
-# include "os2ish.h"
-# else
-# include "dosish.h"
-# endif
-#else
-# if defined(VMS)
-# include "vmsish.h"
-# else
-# if defined(PLAN9)
-# include "./plan9/plan9ish.h"
-# else
-# if defined(MPE)
-# include "mpeix/mpeixish.h"
-# else
-# if defined(__VOS__)
-# include "vosish.h"
-# else
-# if defined(EPOC)
-# include "epocish.h"
-# else
-# if defined(MACOS_TRADITIONAL)
-# include "macos/macish.h"
-# ifndef NO_ENVIRON_ARRAY
-# define NO_ENVIRON_ARRAY
-# endif
-# else
-# include "unixish.h"
-# endif
-# endif
-# endif
-# endif
-# endif
-# endif
-#endif
-
-#ifndef NO_ENVIRON_ARRAY
-# define USE_ENVIRON_ARRAY
-#endif
-
-#ifdef JPL
- /* E.g. JPL needs to operate on a copy of the real environment.
- * JDK 1.2 and 1.3 seem to get upset if the original environment
- * is diddled with. */
-# define NEED_ENVIRON_DUP_FOR_MODIFY
-#endif
-
-#ifndef PERL_SYS_INIT3
-# define PERL_SYS_INIT3(argvp,argcp,envp) PERL_SYS_INIT(argvp,argcp)
-#endif
-
-#ifndef MAXPATHLEN
-# ifdef PATH_MAX
-# ifdef _POSIX_PATH_MAX
-# if PATH_MAX > _POSIX_PATH_MAX
-/* MAXPATHLEN is supposed to include the final null character,
- * as opposed to PATH_MAX and _POSIX_PATH_MAX. */
-# define MAXPATHLEN (PATH_MAX+1)
-# else
-# define MAXPATHLEN (_POSIX_PATH_MAX+1)
-# endif
-# else
-# define MAXPATHLEN (PATH_MAX+1)
-# endif
-# else
-# ifdef _POSIX_PATH_MAX
-# define MAXPATHLEN (_POSIX_PATH_MAX+1)
-# else
-# define MAXPATHLEN 1024 /* Err on the large side. */
-# endif
-# endif
-#endif
-
-/*
- * USE_THREADS needs to be after unixish.h as <pthread.h> includes
- * <sys/signal.h> which defines NSIG - which will stop inclusion of <signal.h>
- * this results in many functions being undeclared which bothers C++
- * May make sense to have threads after "*ish.h" anyway
- */
-
-#if defined(USE_THREADS) || defined(USE_ITHREADS)
-# if defined(USE_THREADS)
- /* pending resolution of licensing issues, we avoid the erstwhile
- * atomic.h everywhere */
-# define EMULATE_ATOMIC_REFCOUNTS
-# endif
-# ifdef FAKE_THREADS
-# include "fakethr.h"
-# else
-# ifdef WIN32
-# include <win32thread.h>
-# else
-# ifdef OS2
-# include "os2thread.h"
-# else
-# ifdef I_MACH_CTHREADS
-# include <mach/cthreads.h>
-# if (defined(NeXT) || defined(__NeXT__)) && defined(PERL_POLLUTE_MALLOC)
-# define MUTEX_INIT_CALLS_MALLOC
-# endif
-typedef cthread_t perl_os_thread;
-typedef mutex_t perl_mutex;
-typedef condition_t perl_cond;
-typedef void * perl_key;
-# else /* Posix threads */
-# ifdef I_PTHREAD
-# include <pthread.h>
-# endif
-typedef pthread_t perl_os_thread;
-typedef pthread_mutex_t perl_mutex;
-typedef pthread_cond_t perl_cond;
-typedef pthread_key_t perl_key;
-# endif /* I_MACH_CTHREADS */
-# endif /* OS2 */
-# endif /* WIN32 */
-# endif /* FAKE_THREADS */
-#endif /* USE_THREADS || USE_ITHREADS */
-
-#ifdef WIN32
-# include "win32.h"
-#endif
-
-#ifdef VMS
-# define STATUS_NATIVE PL_statusvalue_vms
-# define STATUS_NATIVE_EXPORT \
- (((I32)PL_statusvalue_vms == -1 ? 44 : PL_statusvalue_vms) | (VMSISH_HUSHED ? 0x10000000 : 0))
-# define STATUS_NATIVE_SET(n) \
- STMT_START { \
- PL_statusvalue_vms = (n); \
- if ((I32)PL_statusvalue_vms == -1) \
- PL_statusvalue = -1; \
- else if (PL_statusvalue_vms & STS$M_SUCCESS) \
- PL_statusvalue = 0; \
- else if ((PL_statusvalue_vms & STS$M_SEVERITY) == 0) \
- PL_statusvalue = 1 << 8; \
- else \
- PL_statusvalue = (PL_statusvalue_vms & STS$M_SEVERITY) << 8; \
- } STMT_END
-# define STATUS_POSIX PL_statusvalue
-# ifdef VMSISH_STATUS
-# define STATUS_CURRENT (VMSISH_STATUS ? STATUS_NATIVE : STATUS_POSIX)
-# else
-# define STATUS_CURRENT STATUS_POSIX
-# endif
-# define STATUS_POSIX_SET(n) \
- STMT_START { \
- PL_statusvalue = (n); \
- if (PL_statusvalue != -1) { \
- PL_statusvalue &= 0xFFFF; \
- PL_statusvalue_vms = PL_statusvalue ? 44 : 1; \
- } \
- else PL_statusvalue_vms = -1; \
- } STMT_END
-# define STATUS_ALL_SUCCESS (PL_statusvalue = 0, PL_statusvalue_vms = 1)
-# define STATUS_ALL_FAILURE (PL_statusvalue = 1, PL_statusvalue_vms = 44)
-#else
-# define STATUS_NATIVE STATUS_POSIX
-# define STATUS_NATIVE_EXPORT STATUS_POSIX
-# define STATUS_NATIVE_SET STATUS_POSIX_SET
-# define STATUS_POSIX PL_statusvalue
-# define STATUS_POSIX_SET(n) \
- STMT_START { \
- PL_statusvalue = (n); \
- if (PL_statusvalue != -1) \
- PL_statusvalue &= 0xFFFF; \
- } STMT_END
-# define STATUS_CURRENT STATUS_POSIX
-# define STATUS_ALL_SUCCESS (PL_statusvalue = 0)
-# define STATUS_ALL_FAILURE (PL_statusvalue = 1)
-#endif
-
-/* flags in PL_exit_flags for nature of exit() */
-#define PERL_EXIT_EXPECTED 0x01
-
-#ifndef MEMBER_TO_FPTR
-# define MEMBER_TO_FPTR(name) name
-#endif
-
-/* format to use for version numbers in file/directory names */
-/* XXX move to Configure? */
-#ifndef PERL_FS_VER_FMT
-# define PERL_FS_VER_FMT "%d.%d.%d"
-#endif
-
-/* This defines a way to flush all output buffers. This may be a
- * performance issue, so we allow people to disable it.
- */
-#ifndef PERL_FLUSHALL_FOR_CHILD
-# if defined(FFLUSH_NULL) || defined(USE_SFIO)
-# define PERL_FLUSHALL_FOR_CHILD PerlIO_flush((PerlIO*)NULL)
-# else
-# ifdef FFLUSH_ALL
-# define PERL_FLUSHALL_FOR_CHILD my_fflush_all()
-# else
-# define PERL_FLUSHALL_FOR_CHILD NOOP
-# endif
-# endif
-#endif
-
-#ifndef PERL_WAIT_FOR_CHILDREN
-# define PERL_WAIT_FOR_CHILDREN NOOP
-#endif
-
-/* the traditional thread-unsafe notion of "current interpreter". */
-#ifndef PERL_SET_INTERP
-# define PERL_SET_INTERP(i) (PL_curinterp = (PerlInterpreter*)(i))
-#endif
-
-#ifndef PERL_GET_INTERP
-# define PERL_GET_INTERP (PL_curinterp)
-#endif
-
-#if defined(PERL_IMPLICIT_CONTEXT) && !defined(PERL_GET_THX)
-# ifdef USE_THREADS
-# define PERL_GET_THX ((struct perl_thread *)PERL_GET_CONTEXT)
-# else
-# ifdef MULTIPLICITY
-# define PERL_GET_THX ((PerlInterpreter *)PERL_GET_CONTEXT)
-# else
-# ifdef PERL_OBJECT
-# define PERL_GET_THX ((CPerlObj *)PERL_GET_CONTEXT)
-# endif
-# endif
-# endif
-# define PERL_SET_THX(t) PERL_SET_CONTEXT(t)
-#endif
-
-#ifndef SVf
-# ifdef CHECK_FORMAT
-# define SVf "p"
-# else
-# define SVf "_"
-# endif
-#endif
-
-#ifndef UVf
-# ifdef CHECK_FORMAT
-# define UVf UVuf
-# else
-# define UVf "Vu"
-# endif
-#endif
-
-#ifndef VDf
-# ifdef CHECK_FORMAT
-# define VDf "p"
-# else
-# define VDf "vd"
-# endif
-#endif
-
-/* Some unistd.h's give a prototype for pause() even though
- HAS_PAUSE ends up undefined. This causes the #define
- below to be rejected by the compiler. Sigh.
-*/
-#ifdef HAS_PAUSE
-#define Pause pause
-#else
-#define Pause() sleep((32767<<16)+32767)
-#endif
-
-#ifndef IOCPARM_LEN
-# ifdef IOCPARM_MASK
- /* on BSDish systes we're safe */
-# define IOCPARM_LEN(x) (((x) >> 16) & IOCPARM_MASK)
-# else
- /* otherwise guess at what's safe */
-# define IOCPARM_LEN(x) 256
-# endif
-#endif
-
-#if defined(__CYGWIN__)
-/* USEMYBINMODE
- * This symbol, if defined, indicates that the program should
- * use the routine my_binmode(FILE *fp, char iotype, int mode) to insure
- * that a file is in "binary" mode -- that is, that no translation
- * of bytes occurs on read or write operations.
- */
-# define USEMYBINMODE / **/
-# define my_binmode(fp, iotype, mode) \
- (PerlLIO_setmode(PerlIO_fileno(fp), mode) != -1 ? TRUE : FALSE)
-#endif
-
-#ifdef UNION_ANY_DEFINITION
-UNION_ANY_DEFINITION;
-#else
-union any {
- void* any_ptr;
- I32 any_i32;
- IV any_iv;
- long any_long;
- void (*any_dptr) (void*);
- void (*any_dxptr) (pTHXo_ void*);
-};
-#endif
-
-#ifdef USE_THREADS
-#define ARGSproto struct perl_thread *thr
-#else
-#define ARGSproto
-#endif /* USE_THREADS */
-
-typedef I32 (*filter_t) (pTHXo_ int, SV *, int);
-
-#define FILTER_READ(idx, sv, len) filter_read(idx, sv, len)
-#define FILTER_DATA(idx) (AvARRAY(PL_rsfp_filters)[idx])
-#define FILTER_ISREADER(idx) (idx >= AvFILLp(PL_rsfp_filters))
-
-#if !defined(OS2)
-# include "iperlsys.h"
-#endif
-#include "regexp.h"
-#include "sv.h"
-#include "util.h"
-#include "form.h"
-#include "gv.h"
-#include "cv.h"
-#include "opnames.h"
-#include "op.h"
-#include "cop.h"
-#include "av.h"
-#include "hv.h"
-#include "mg.h"
-#include "scope.h"
-#include "warnings.h"
-#include "utf8.h"
-
-/* Current curly descriptor */
-typedef struct curcur CURCUR;
-struct curcur {
- int parenfloor; /* how far back to strip paren data */
- int cur; /* how many instances of scan we've matched */
- int min; /* the minimal number of scans to match */
- int max; /* the maximal number of scans to match */
- int minmod; /* whether to work our way up or down */
- regnode * scan; /* the thing to match */
- regnode * next; /* what has to match after it */
- char * lastloc; /* where we started matching this scan */
- CURCUR * oldcc; /* current curly before we started this one */
-};
-
-typedef struct _sublex_info SUBLEXINFO;
-struct _sublex_info {
- I32 super_state; /* lexer state to save */
- I32 sub_inwhat; /* "lex_inwhat" to use */
- OP *sub_op; /* "lex_op" to use */
- char *super_bufptr; /* PL_bufptr that was */
- char *super_bufend; /* PL_bufend that was */
-};
-
-typedef struct magic_state MGS; /* struct magic_state defined in mg.c */
-
-struct scan_data_t; /* Used in S_* functions in regcomp.c */
-struct regnode_charclass_class; /* Used in S_* functions in regcomp.c */
-
-typedef I32 CHECKPOINT;
-
-struct ptr_tbl_ent {
- struct ptr_tbl_ent* next;
- void* oldval;
- void* newval;
-};
-
-struct ptr_tbl {
- struct ptr_tbl_ent** tbl_ary;
- UV tbl_max;
- UV tbl_items;
-};
-
-#if defined(iAPX286) || defined(M_I286) || defined(I80286)
-# define I286
-#endif
-
-#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
-#if (BYTEORDER & 0xffff) != 0x4321
-#define HAS_HTONS
-#define HAS_HTONL
-#define HAS_NTOHS
-#define HAS_NTOHL
-#define MYSWAP
-#define htons my_swap
-#define htonl my_htonl
-#define ntohs my_swap
-#define ntohl my_ntohl
-#endif
-#else
-#if (BYTEORDER & 0xffff) == 0x4321
-#undef HAS_HTONS
-#undef HAS_HTONL
-#undef HAS_NTOHS
-#undef HAS_NTOHL
-#endif
-#endif
-
-/*
- * Little-endian byte order functions - 'v' for 'VAX', or 'reVerse'.
- * -DWS
- */
-#if BYTEORDER != 0x1234
-# define HAS_VTOHL
-# define HAS_VTOHS
-# define HAS_HTOVL
-# define HAS_HTOVS
-# if 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)
-# endif
- /* otherwise default to functions in util.c */
-#endif
-
-#ifdef CASTNEGFLOAT
-#define U_S(what) ((U16)(what))
-#define U_I(what) ((unsigned int)(what))
-#define U_L(what) ((U32)(what))
-#else
-#define U_S(what) ((U16)cast_ulong((NV)(what)))
-#define U_I(what) ((unsigned int)cast_ulong((NV)(what)))
-#define U_L(what) (cast_ulong((NV)(what)))
-#endif
-
-#ifdef CASTI32
-#define I_32(what) ((I32)(what))
-#define I_V(what) ((IV)(what))
-#define U_V(what) ((UV)(what))
-#else
-#define I_32(what) (cast_i32((NV)(what)))
-#define I_V(what) (cast_iv((NV)(what)))
-#define U_V(what) (cast_uv((NV)(what)))
-#endif
-
-/* These do not care about the fractional part, only about the range. */
-#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)
-
-/* Used with UV/IV arguments: */
- /* XXXX: need to speed it up */
-#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
-Uid_t getuid (void);
-Uid_t geteuid (void);
-Gid_t getgid (void);
-Gid_t getegid (void);
-#endif
-
-#ifndef Perl_debug_log
-# define Perl_debug_log PerlIO_stderr()
-#endif
-
-#ifndef Perl_error_log
-# define Perl_error_log (PL_stderrgv \
- && GvIOp(PL_stderrgv) \
- && IoOFP(GvIOp(PL_stderrgv)) \
- ? IoOFP(GvIOp(PL_stderrgv)) \
- : PerlIO_stderr())
-#endif
-
-#ifdef DEBUGGING
-#undef YYDEBUG
-#define YYDEBUG 1
-#define DEB(a) a
-#define DEBUG(a) if (PL_debug) a
-#define DEBUG_p(a) if (PL_debug & 1) a
-#define DEBUG_s(a) if (PL_debug & 2) a
-#define DEBUG_l(a) if (PL_debug & 4) a
-#define DEBUG_t(a) if (PL_debug & 8) a
-#define DEBUG_o(a) if (PL_debug & 16) a
-#define DEBUG_c(a) if (PL_debug & 32) a
-#define DEBUG_P(a) if (PL_debug & 64) a
-# if defined(PERL_OBJECT)
-# define DEBUG_m(a) if (PL_debug & 128) a
-# else
- /* Temporarily turn off memory debugging in case the a
- * does memory allocation, either directly or indirectly. */
-# define DEBUG_m(a) \
- STMT_START { \
- if (PERL_GET_INTERP) { dTHX; if (PL_debug & 128) {PL_debug&=~128; a; PL_debug|=128;} } \
- } STMT_END
-# endif
-#define DEBUG_f(a) if (PL_debug & 256) a
-#define DEBUG_r(a) if (PL_debug & 512) a
-#define DEBUG_x(a) if (PL_debug & 1024) a
-#define DEBUG_u(a) if (PL_debug & 2048) a
-#define DEBUG_L(a) if (PL_debug & 4096) a
-#define DEBUG_H(a) if (PL_debug & 8192) a
-#define DEBUG_X(a) if (PL_debug & 16384) a
-#define DEBUG_D(a) if (PL_debug & 32768) a
-# ifdef USE_THREADS
-# define DEBUG_S(a) if (PL_debug & (1<<16)) a
-# else
-# define DEBUG_S(a)
-# endif
-#define DEBUG_T(a) if (PL_debug & (1<<17)) a
-#else
-#define DEB(a)
-#define 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_S(a)
-#define DEBUG_H(a)
-#define DEBUG_X(a)
-#define DEBUG_D(a)
-#define DEBUG_S(a)
-#define DEBUG_T(a)
-#endif
-#define YYMAXDEPTH 300
-
-#ifndef assert /* <assert.h> might have been included somehow */
-#define assert(what) DEB( { \
- if (!(what)) { \
- Perl_croak(aTHX_ "Assertion failed: file \"%s\", line %d", \
- __FILE__, __LINE__); \
- PerlProc_exit(1); \
- }})
-#endif
-
-struct ufuncs {
- I32 (*uf_val)(IV, SV*);
- I32 (*uf_set)(IV, SV*);
- IV uf_index;
-};
-
-/* Fix these up for __STDC__ */
-#ifndef DONT_DECLARE_STD
-char *mktemp (char*);
-#ifndef atof
-double atof (const char*);
-#endif
-#endif
-
-#ifndef STANDARD_C
-/* All of these are in stdlib.h or time.h for ANSI C */
-Time_t time();
-struct tm *gmtime(), *localtime();
-#if defined(OEMVS) || defined(__OPEN_VM)
-char *(strchr)(), *(strrchr)();
-char *(strcpy)(), *(strcat)();
-#else
-char *strchr(), *strrchr();
-char *strcpy(), *strcat();
-#endif
-#endif /* ! STANDARD_C */
-
-
-#ifdef I_MATH
-# include <math.h>
-#else
-START_EXTERN_C
- double exp (double);
- double log (double);
- double log10 (double);
- double sqrt (double);
- double frexp (double,int*);
- double ldexp (double,int);
- double modf (double,double*);
- double sin (double);
- double cos (double);
- double atan2 (double,double);
- double pow (double,double);
-END_EXTERN_C
-#endif
-
-#ifndef __cplusplus
-# if defined(NeXT) || defined(__NeXT__) /* or whatever catches all NeXTs */
-char *crypt (); /* Maybe more hosts will need the unprototyped version */
-# else
-# if !defined(WIN32)
-char *crypt (const char*, const char*);
-# endif /* !WIN32 */
-# endif /* !NeXT && !__NeXT__ */
-# ifndef DONT_DECLARE_STD
-# ifndef getenv
-char *getenv (const char*);
-# endif /* !getenv */
-# if !defined(HAS_LSEEK_PROTO) && !defined(EPOC) && !defined(__hpux)
-# ifdef _FILE_OFFSET_BITS
-# if _FILE_OFFSET_BITS == 64
-Off_t lseek (int,Off_t,int);
-# endif
-# endif
-# endif
-# endif /* !DONT_DECLARE_STD */
-char *getlogin (void);
-#endif /* !__cplusplus */
-
-#ifdef UNLINK_ALL_VERSIONS /* Currently only makes sense for VMS */
-#define UNLINK unlnk
-I32 unlnk (char*);
-#else
-#define UNLINK PerlLIO_unlink
-#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
-
-/* Sighandler_t defined in iperlsys.h */
-
-#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
-
-#ifdef DEBUGGING
-# ifndef register
-# define register
-# endif
-# define PAD_SV(po) pad_sv(po)
-# define RUNOPS_DEFAULT Perl_runops_debug
-#else
-# define PAD_SV(po) PL_curpad[po]
-# define RUNOPS_DEFAULT Perl_runops_standard
-#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
-
-
-typedef int (CPERLscope(*runops_proc_t)) (pTHX);
-typedef OP* (CPERLscope(*PPADDR_t)[]) (pTHX);
-
-/* _ (for $_) must be first in the following list (DEFSV requires it) */
-#define THREADSV_NAMES "_123456789&`'+/.,\\\";^-%=|~:\001\005!@"
-
-/* NeXT has problems with crt0.o globals */
-#if defined(__DYNAMIC__) && \
- (defined(NeXT) || defined(__NeXT__) || defined(__APPLE__))
-# if defined(NeXT) || defined(__NeXT)
-# include <mach-o/dyld.h>
-# define environ (*environ_pointer)
-EXT char *** environ_pointer;
-# else
-# if defined(__APPLE__) && defined(PERL_CORE)
-# include <crt_externs.h> /* for the env array */
-# define environ (*_NSGetEnviron())
-# endif
-# endif
-#else
- /* VMS and some other platforms don't use the environ array */
-# ifdef USE_ENVIRON_ARRAY
-# if !defined(DONT_DECLARE_STD) || \
- (defined(__svr4__) && defined(__GNUC__) && defined(sun)) || \
- defined(__sgi) || \
- defined(__DGUX)
-extern char ** environ; /* environment variables supplied via exec */
-# endif
-# endif
-#endif
-
-START_EXTERN_C
-
-/* handy constants */
-EXTCONST char PL_warn_uninit[]
- INIT("Use of uninitialized value%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[]
- INIT("Can't use string (\"%.32s\") 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[]
- INIT("Modification of non-creatable hash value attempted, subscript \"%s\"");
-EXTCONST char PL_no_modify[]
- INIT("Modification of a read-only value attempted");
-EXTCONST char PL_no_mem[]
- INIT("Out of memory!\n");
-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("\"my\" variable %s can't be in a package");
-
-EXTCONST char PL_uuemap[65]
- INIT("`!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_");
-
-
-#ifdef DOINIT
-EXT char *PL_sig_name[] = { SIG_NAME };
-EXT int PL_sig_num[] = { SIG_NUM };
-#else
-EXT char *PL_sig_name[];
-EXT int PL_sig_num[];
-#endif
-
-/* fast case folding tables */
-
-#ifdef DOINIT
-#ifdef EBCDIC
-EXT unsigned char PL_fold[] = { /* fast EBCDIC case folding table */
- 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, 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, 'A', 'B', 'C', 'D', 'E', 'F', 'G',
- 'H', 'I', 138, 139, 140, 141, 142, 143,
- 144, 'J', 'K', 'L', 'M', 'N', 'O', 'P',
- 'Q', 'R', 154, 155, 156, 157, 158, 159,
- 160, 161, 'S', 'T', 'U', 'V', 'W', 'X',
- 'Y', 'Z', 170, 171, 172, 173, 174, 175,
- 176, 177, 178, 179, 180, 181, 182, 183,
- 184, 185, 186, 187, 188, 189, 190, 191,
- 192, 'a', 'b', 'c', 'd', 'e', 'f', 'g',
- 'h', 'i', 202, 203, 204, 205, 206, 207,
- 208, 'j', 'k', 'l', 'm', 'n', 'o', 'p',
- 'q', 'r', 218, 219, 220, 221, 222, 223,
- 224, 225, 's', 't', 'u', 'v', 'w', 'x',
- 'y', 'z', 234, 235, 236, 237, 238, 239,
- 240, 241, 242, 243, 244, 245, 246, 247,
- 248, 249, 250, 251, 252, 253, 254, 255
-};
-#else /* ascii rather than 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
-};
-#endif /* !EBCDIC */
-#else
-EXTCONST unsigned char PL_fold[];
-#endif
-
-#ifdef DOINIT
-EXT unsigned char PL_fold_locale[] = {
- 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
-};
-#else
-EXT unsigned char PL_fold_locale[];
-#endif
-
-#ifdef DOINIT
-#ifdef EBCDIC
-EXT unsigned char PL_freq[] = {/* EBCDIC frequencies for mixed English/C */
- 1, 2, 84, 151, 154, 155, 156, 157,
- 165, 246, 250, 3, 158, 7, 18, 29,
- 40, 51, 62, 73, 85, 96, 107, 118,
- 129, 140, 147, 148, 149, 150, 152, 153,
- 255, 6, 8, 9, 10, 11, 12, 13,
- 14, 15, 24, 25, 26, 27, 28, 226,
- 29, 30, 31, 32, 33, 43, 44, 45,
- 46, 47, 48, 49, 50, 76, 77, 78,
- 79, 80, 81, 82, 83, 84, 85, 86,
- 87, 94, 95, 234, 181, 233, 187, 190,
- 180, 96, 97, 98, 99, 100, 101, 102,
- 104, 112, 182, 174, 236, 232, 229, 103,
- 228, 226, 114, 115, 116, 117, 118, 119,
- 120, 121, 122, 235, 176, 230, 194, 162,
- 130, 131, 132, 133, 134, 135, 136, 137,
- 138, 139, 201, 205, 163, 217, 220, 224,
- 5, 248, 227, 244, 242, 255, 241, 231,
- 240, 253, 16, 197, 19, 20, 21, 187,
- 23, 169, 210, 245, 237, 249, 247, 239,
- 168, 252, 34, 196, 36, 37, 38, 39,
- 41, 42, 251, 254, 238, 223, 221, 213,
- 225, 177, 52, 53, 54, 55, 56, 57,
- 58, 59, 60, 61, 63, 64, 65, 66,
- 67, 68, 69, 70, 71, 72, 74, 75,
- 205, 208, 186, 202, 200, 218, 198, 179,
- 178, 214, 88, 89, 90, 91, 92, 93,
- 217, 166, 170, 207, 199, 209, 206, 204,
- 160, 212, 105, 106, 108, 109, 110, 111,
- 203, 113, 216, 215, 192, 175, 193, 243,
- 172, 161, 123, 124, 125, 126, 127, 128,
- 222, 219, 211, 195, 188, 193, 185, 184,
- 191, 183, 141, 142, 143, 144, 145, 146
-};
-#else /* ascii rather than ebcdic */
-EXTCONST unsigned char PL_freq[] = { /* letter frequencies for mixed English/C */
- 1, 2, 84, 151, 154, 155, 156, 157,
- 165, 246, 250, 3, 158, 7, 18, 29,
- 40, 51, 62, 73, 85, 96, 107, 118,
- 129, 140, 147, 148, 149, 150, 152, 153,
- 255, 182, 224, 205, 174, 176, 180, 217,
- 233, 232, 236, 187, 235, 228, 234, 226,
- 222, 219, 211, 195, 188, 193, 185, 184,
- 191, 183, 201, 229, 181, 220, 194, 162,
- 163, 208, 186, 202, 200, 218, 198, 179,
- 178, 214, 166, 170, 207, 199, 209, 206,
- 204, 160, 212, 216, 215, 192, 175, 173,
- 243, 172, 161, 190, 203, 189, 164, 230,
- 167, 248, 227, 244, 242, 255, 241, 231,
- 240, 253, 169, 210, 245, 237, 249, 247,
- 239, 168, 252, 251, 254, 238, 223, 221,
- 213, 225, 177, 197, 171, 196, 159, 4,
- 5, 6, 8, 9, 10, 11, 12, 13,
- 14, 15, 16, 17, 19, 20, 21, 22,
- 23, 24, 25, 26, 27, 28, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39,
- 41, 42, 43, 44, 45, 46, 47, 48,
- 49, 50, 52, 53, 54, 55, 56, 57,
- 58, 59, 60, 61, 63, 64, 65, 66,
- 67, 68, 69, 70, 71, 72, 74, 75,
- 76, 77, 78, 79, 80, 81, 82, 83,
- 86, 87, 88, 89, 90, 91, 92, 93,
- 94, 95, 97, 98, 99, 100, 101, 102,
- 103, 104, 105, 106, 108, 109, 110, 111,
- 112, 113, 114, 115, 116, 117, 119, 120,
- 121, 122, 123, 124, 125, 126, 127, 128,
- 130, 131, 132, 133, 134, 135, 136, 137,
- 138, 139, 141, 142, 143, 144, 145, 146
-};
-#endif
-#else
-EXTCONST unsigned char PL_freq[];
-#endif
-
-#ifdef DEBUGGING
-#ifdef DOINIT
-EXTCONST char* PL_block_type[] = {
- "NULL",
- "SUB",
- "EVAL",
- "LOOP",
- "SUBST",
- "BLOCK",
-};
-#else
-EXTCONST char* PL_block_type[];
-#endif
-#endif
-
-END_EXTERN_C
-
-/*****************************************************************************/
-/* This lexer/parser stuff is currently global since yacc is hard to reenter */
-/*****************************************************************************/
-/* XXX This needs to be revisited, since BEGIN makes yacc re-enter... */
-
-#include "perly.h"
-
-#define LEX_NOTPARSING 11 /* borrowed from toke.c */
-
-typedef enum {
- XOPERATOR,
- XTERM,
- XREF,
- XSTATE,
- XBLOCK,
- XATTRBLOCK,
- XATTRTERM,
- XTERMBLOCK
-} expectation;
-
-enum { /* pass one of these to get_vtbl */
- want_vtbl_sv,
- want_vtbl_env,
- want_vtbl_envelem,
- want_vtbl_sig,
- want_vtbl_sigelem,
- want_vtbl_pack,
- want_vtbl_packelem,
- want_vtbl_dbline,
- want_vtbl_isa,
- want_vtbl_isaelem,
- want_vtbl_arylen,
- want_vtbl_glob,
- want_vtbl_mglob,
- want_vtbl_nkeys,
- want_vtbl_taint,
- want_vtbl_substr,
- want_vtbl_vec,
- want_vtbl_pos,
- want_vtbl_bm,
- want_vtbl_fm,
- want_vtbl_uvar,
- want_vtbl_defelem,
- want_vtbl_regexp,
- want_vtbl_collxfrm,
- want_vtbl_amagic,
- want_vtbl_amagicelem,
-#ifdef USE_THREADS
- want_vtbl_mutex,
-#endif
- want_vtbl_regdata,
- want_vtbl_regdatum,
- want_vtbl_backref
-};
-
- /* Note: the lowest 8 bits are reserved for
- stuffing into op->op_private */
-#define HINT_PRIVATE_MASK 0x000000ff
-#define HINT_INTEGER 0x00000001
-#define HINT_STRICT_REFS 0x00000002
-/* #define HINT_notused4 0x00000004 */
-#define HINT_BYTE 0x00000008
-/* #define HINT_notused10 0x00000010 */
- /* Note: 20,40,80 used for NATIVE_HINTS */
-
-#define HINT_BLOCK_SCOPE 0x00000100
-#define HINT_STRICT_SUBS 0x00000200
-#define HINT_STRICT_VARS 0x00000400
-#define HINT_LOCALE 0x00000800
-
-#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_RE_TAINT 0x00100000
-#define HINT_RE_EVAL 0x00200000
-
-#define HINT_FILETEST_ACCESS 0x00400000
-#define HINT_UTF8 0x00800000
-
-/* Various states of an input record separator SV (rs, nrs) */
-#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))
-
-/* Enable variables which are pointers to functions */
-typedef regexp*(CPERLscope(*regcomp_t)) (pTHX_ char* exp, char* xend, PMOP* pm);
-typedef I32 (CPERLscope(*regexec_t)) (pTHX_ regexp* prog, char* stringarg,
- char* strend, char* strbeg, I32 minend,
- SV* screamer, void* data, U32 flags);
-typedef char* (CPERLscope(*re_intuit_start_t)) (pTHX_ regexp *prog, SV *sv,
- char *strpos, char *strend,
- U32 flags,
- struct re_scream_pos_data_s *d);
-typedef SV* (CPERLscope(*re_intuit_string_t)) (pTHX_ regexp *prog);
-typedef void (CPERLscope(*regfree_t)) (pTHX_ struct regexp* r);
-
-typedef void (*DESTRUCTORFUNC_NOCONTEXT_t) (void*);
-typedef void (*DESTRUCTORFUNC_t) (pTHXo_ void*);
-typedef void (*SVFUNC_t) (pTHXo_ SV*);
-typedef I32 (*SVCOMPARE_t) (pTHXo_ SV*, SV*);
-typedef void (*XSINIT_t) (pTHXo);
-typedef void (*ATEXIT_t) (pTHXo_ void*);
-typedef void (*XSUBADDR_t) (pTHXo_ CV *);
-
-/* Set up PERLVAR macros for populating structs */
-#define PERLVAR(var,type) type var;
-#define PERLVARA(var,n,type) type var[n];
-#define PERLVARI(var,type,init) type var;
-#define PERLVARIC(var,type,init) type var;
-
-/* Interpreter exitlist entry */
-typedef struct exitlistentry {
- void (*fn) (pTHXo_ void*);
- void *ptr;
-} PerlExitListEntry;
-
-#ifdef PERL_GLOBAL_STRUCT
-struct perl_vars {
-# include "perlvars.h"
-};
-
-# ifdef PERL_CORE
-EXT struct perl_vars PL_Vars;
-EXT struct perl_vars *PL_VarsPtr INIT(&PL_Vars);
-# else /* PERL_CORE */
-# if !defined(__GNUC__) || !defined(WIN32)
-EXT
-# endif /* WIN32 */
-struct perl_vars *PL_VarsPtr;
-# define PL_Vars (*((PL_VarsPtr) \
- ? PL_VarsPtr : (PL_VarsPtr = Perl_GetVars(aTHX))))
-# endif /* PERL_CORE */
-#endif /* PERL_GLOBAL_STRUCT */
-
-#if defined(MULTIPLICITY) || defined(PERL_OBJECT)
-/* If we have multiple interpreters define a struct
- holding variables which must be per-interpreter
- If we don't have threads anything that would have
- be per-thread is per-interpreter.
-*/
-
-struct interpreter {
-# ifndef USE_THREADS
-# include "thrdvar.h"
-# endif
-# include "intrpvar.h"
-/*
- * The following is a buffer where new variables must
- * be defined to maintain binary compatibility with PERL_OBJECT
- */
-PERLVARA(object_compatibility,30, char)
-};
-
-#else
-struct interpreter {
- char broiled;
-};
-#endif /* MULTIPLICITY || PERL_OBJECT */
-
-#ifdef USE_THREADS
-/* If we have threads define a struct with all the variables
- * that have to be per-thread
- */
-
-
-struct perl_thread {
-#include "thrdvar.h"
-};
-
-typedef struct perl_thread *Thread;
-
-#else
-typedef void *Thread;
-#endif
-
-/* Done with PERLVAR macros for now ... */
-#undef PERLVAR
-#undef PERLVARA
-#undef PERLVARI
-#undef PERLVARIC
-
-#include "thread.h"
-#include "pp.h"
-
-#ifndef PERL_CALLCONV
-# define PERL_CALLCONV
-#endif
-
-#ifndef NEXT30_NO_ATTRIBUTE
-# ifndef HASATTRIBUTE /* disable GNU-cc attribute checking? */
-# ifdef __attribute__ /* Avoid possible redefinition errors */
-# undef __attribute__
-# endif
-# define __attribute__(attr)
-# endif
-#endif
-
-#ifdef PERL_OBJECT
-# define PERL_DECL_PROT
-#endif
-
-#undef PERL_CKDEF
-#undef PERL_PPDEF
-#define PERL_CKDEF(s) OP *s (pTHX_ OP *o);
-#define PERL_PPDEF(s) OP *s (pTHX);
-
-#include "proto.h"
-
-#ifdef PERL_OBJECT
-# undef PERL_DECL_PROT
-#endif
-
-#ifndef PERL_OBJECT
-/* this has structure inits, so it cannot be included before here */
-# include "opcode.h"
-#endif
-
-/* The following must follow proto.h as #defines mess up syntax */
-
-#if !defined(PERL_FOR_X2P)
-# include "embedvar.h"
-#endif
-
-/* Now include all the 'global' variables
- * If we don't have threads or multiple interpreters
- * these include variables that would have been their struct-s
- */
-
-#define PERLVAR(var,type) EXT type PL_##var;
-#define PERLVARA(var,n,type) EXT type PL_##var[n];
-#define PERLVARI(var,type,init) EXT type PL_##var INIT(init);
-#define PERLVARIC(var,type,init) EXTCONST type PL_##var INIT(init);
-
-#if !defined(MULTIPLICITY) && !defined(PERL_OBJECT)
-START_EXTERN_C
-# include "intrpvar.h"
-# ifndef USE_THREADS
-# include "thrdvar.h"
-# endif
-END_EXTERN_C
-#endif
-
-#ifdef PERL_OBJECT
-# include "embed.h"
-
-# ifdef DOINIT
-# include "INTERN.h"
-# else
-# include "EXTERN.h"
-# endif
-
-/* this has structure inits, so it cannot be included before here */
-# include "opcode.h"
-
-#else
-# if defined(WIN32)
-# include "embed.h"
-# endif
-#endif /* PERL_OBJECT */
-
-#ifndef PERL_GLOBAL_STRUCT
-START_EXTERN_C
-
-# include "perlvars.h"
-
-END_EXTERN_C
-#endif
-
-#undef PERLVAR
-#undef PERLVARA
-#undef PERLVARI
-#undef PERLVARIC
-
-START_EXTERN_C
-
-#ifdef DOINIT
-
-EXT MGVTBL PL_vtbl_sv = {MEMBER_TO_FPTR(Perl_magic_get),
- MEMBER_TO_FPTR(Perl_magic_set),
- MEMBER_TO_FPTR(Perl_magic_len),
- 0, 0};
-EXT MGVTBL PL_vtbl_env = {0, MEMBER_TO_FPTR(Perl_magic_set_all_env),
- 0, MEMBER_TO_FPTR(Perl_magic_clear_all_env),
- 0};
-EXT MGVTBL PL_vtbl_envelem = {0, MEMBER_TO_FPTR(Perl_magic_setenv),
- 0, MEMBER_TO_FPTR(Perl_magic_clearenv),
- 0};
-EXT MGVTBL PL_vtbl_sig = {0, 0, 0, 0, 0};
-EXT MGVTBL PL_vtbl_sigelem = {MEMBER_TO_FPTR(Perl_magic_getsig),
- MEMBER_TO_FPTR(Perl_magic_setsig),
- 0, MEMBER_TO_FPTR(Perl_magic_clearsig),
- 0};
-EXT MGVTBL PL_vtbl_pack = {0, 0, MEMBER_TO_FPTR(Perl_magic_sizepack), MEMBER_TO_FPTR(Perl_magic_wipepack),
- 0};
-EXT MGVTBL PL_vtbl_packelem = {MEMBER_TO_FPTR(Perl_magic_getpack),
- MEMBER_TO_FPTR(Perl_magic_setpack),
- 0, MEMBER_TO_FPTR(Perl_magic_clearpack),
- 0};
-EXT MGVTBL PL_vtbl_dbline = {0, MEMBER_TO_FPTR(Perl_magic_setdbline),
- 0, 0, 0};
-EXT MGVTBL PL_vtbl_isa = {0, MEMBER_TO_FPTR(Perl_magic_setisa),
- 0, MEMBER_TO_FPTR(Perl_magic_setisa),
- 0};
-EXT MGVTBL PL_vtbl_isaelem = {0, MEMBER_TO_FPTR(Perl_magic_setisa),
- 0, 0, 0};
-EXT MGVTBL PL_vtbl_arylen = {MEMBER_TO_FPTR(Perl_magic_getarylen),
- MEMBER_TO_FPTR(Perl_magic_setarylen),
- 0, 0, 0};
-EXT MGVTBL PL_vtbl_glob = {MEMBER_TO_FPTR(Perl_magic_getglob),
- MEMBER_TO_FPTR(Perl_magic_setglob),
- 0, 0, 0};
-EXT MGVTBL PL_vtbl_mglob = {0, MEMBER_TO_FPTR(Perl_magic_setmglob),
- 0, 0, 0};
-EXT MGVTBL PL_vtbl_nkeys = {MEMBER_TO_FPTR(Perl_magic_getnkeys),
- MEMBER_TO_FPTR(Perl_magic_setnkeys),
- 0, 0, 0};
-EXT MGVTBL PL_vtbl_taint = {MEMBER_TO_FPTR(Perl_magic_gettaint),MEMBER_TO_FPTR(Perl_magic_settaint),
- 0, 0, 0};
-EXT MGVTBL PL_vtbl_substr = {MEMBER_TO_FPTR(Perl_magic_getsubstr), MEMBER_TO_FPTR(Perl_magic_setsubstr),
- 0, 0, 0};
-EXT MGVTBL PL_vtbl_vec = {MEMBER_TO_FPTR(Perl_magic_getvec),
- MEMBER_TO_FPTR(Perl_magic_setvec),
- 0, 0, 0};
-EXT MGVTBL PL_vtbl_pos = {MEMBER_TO_FPTR(Perl_magic_getpos),
- MEMBER_TO_FPTR(Perl_magic_setpos),
- 0, 0, 0};
-EXT MGVTBL PL_vtbl_bm = {0, MEMBER_TO_FPTR(Perl_magic_setbm),
- 0, 0, 0};
-EXT MGVTBL PL_vtbl_fm = {0, MEMBER_TO_FPTR(Perl_magic_setfm),
- 0, 0, 0};
-EXT MGVTBL PL_vtbl_uvar = {MEMBER_TO_FPTR(Perl_magic_getuvar),
- MEMBER_TO_FPTR(Perl_magic_setuvar),
- 0, 0, 0};
-#ifdef USE_THREADS
-EXT MGVTBL PL_vtbl_mutex = {0, 0, 0, 0, MEMBER_TO_FPTR(Perl_magic_mutexfree)};
-#endif /* USE_THREADS */
-EXT MGVTBL PL_vtbl_defelem = {MEMBER_TO_FPTR(Perl_magic_getdefelem),MEMBER_TO_FPTR(Perl_magic_setdefelem),
- 0, 0, 0};
-
-EXT MGVTBL PL_vtbl_regexp = {0,0,0,0, MEMBER_TO_FPTR(Perl_magic_freeregexp)};
-EXT MGVTBL PL_vtbl_regdata = {0, 0, MEMBER_TO_FPTR(Perl_magic_regdata_cnt), 0, 0};
-EXT MGVTBL PL_vtbl_regdatum = {MEMBER_TO_FPTR(Perl_magic_regdatum_get),
- MEMBER_TO_FPTR(Perl_magic_regdatum_set), 0, 0, 0};
-
-#ifdef USE_LOCALE_COLLATE
-EXT MGVTBL PL_vtbl_collxfrm = {0,
- MEMBER_TO_FPTR(Perl_magic_setcollxfrm),
- 0, 0, 0};
-#endif
-
-EXT MGVTBL PL_vtbl_amagic = {0, MEMBER_TO_FPTR(Perl_magic_setamagic),
- 0, 0, MEMBER_TO_FPTR(Perl_magic_setamagic)};
-EXT MGVTBL PL_vtbl_amagicelem = {0, MEMBER_TO_FPTR(Perl_magic_setamagic),
- 0, 0, MEMBER_TO_FPTR(Perl_magic_setamagic)};
-
-EXT MGVTBL PL_vtbl_backref = {0, 0,
- 0, 0, MEMBER_TO_FPTR(Perl_magic_killbackrefs)};
-
-#else /* !DOINIT */
-
-EXT MGVTBL PL_vtbl_sv;
-EXT MGVTBL PL_vtbl_env;
-EXT MGVTBL PL_vtbl_envelem;
-EXT MGVTBL PL_vtbl_sig;
-EXT MGVTBL PL_vtbl_sigelem;
-EXT MGVTBL PL_vtbl_pack;
-EXT MGVTBL PL_vtbl_packelem;
-EXT MGVTBL PL_vtbl_dbline;
-EXT MGVTBL PL_vtbl_isa;
-EXT MGVTBL PL_vtbl_isaelem;
-EXT MGVTBL PL_vtbl_arylen;
-EXT MGVTBL PL_vtbl_glob;
-EXT MGVTBL PL_vtbl_mglob;
-EXT MGVTBL PL_vtbl_nkeys;
-EXT MGVTBL PL_vtbl_taint;
-EXT MGVTBL PL_vtbl_substr;
-EXT MGVTBL PL_vtbl_vec;
-EXT MGVTBL PL_vtbl_pos;
-EXT MGVTBL PL_vtbl_bm;
-EXT MGVTBL PL_vtbl_fm;
-EXT MGVTBL PL_vtbl_uvar;
-
-#ifdef USE_THREADS
-EXT MGVTBL PL_vtbl_mutex;
-#endif /* USE_THREADS */
-
-EXT MGVTBL PL_vtbl_defelem;
-EXT MGVTBL PL_vtbl_regexp;
-EXT MGVTBL PL_vtbl_regdata;
-EXT MGVTBL PL_vtbl_regdatum;
-
-#ifdef USE_LOCALE_COLLATE
-EXT MGVTBL PL_vtbl_collxfrm;
-#endif
-
-EXT MGVTBL PL_vtbl_amagic;
-EXT MGVTBL PL_vtbl_amagicelem;
-
-EXT MGVTBL PL_vtbl_backref;
-
-#endif /* !DOINIT */
-
-enum {
- fallback_amg, abs_amg,
- bool__amg, nomethod_amg,
- string_amg, numer_amg,
- add_amg, add_ass_amg,
- subtr_amg, subtr_ass_amg,
- mult_amg, mult_ass_amg,
- div_amg, div_ass_amg,
- modulo_amg, modulo_ass_amg,
- pow_amg, pow_ass_amg,
- lshift_amg, lshift_ass_amg,
- rshift_amg, rshift_ass_amg,
- band_amg, band_ass_amg,
- bor_amg, bor_ass_amg,
- bxor_amg, bxor_ass_amg,
- lt_amg, le_amg,
- gt_amg, ge_amg,
- eq_amg, ne_amg,
- ncmp_amg, scmp_amg,
- slt_amg, sle_amg,
- sgt_amg, sge_amg,
- seq_amg, sne_amg,
- not_amg, compl_amg,
- inc_amg, dec_amg,
- atan2_amg, cos_amg,
- sin_amg, exp_amg,
- log_amg, sqrt_amg,
- repeat_amg, repeat_ass_amg,
- concat_amg, concat_ass_amg,
- copy_amg, neg_amg,
- to_sv_amg, to_av_amg,
- to_hv_amg, to_gv_amg,
- to_cv_amg, iter_amg,
- max_amg_code
- /* Do not leave a trailing comma here. C9X allows it, C89 doesn't. */
-};
-
-#define NofAMmeth max_amg_code
-
-#ifdef DOINIT
-EXTCONST char * PL_AMG_names[NofAMmeth] = {
- "fallback", "abs", /* "fallback" should be the first. */
- "bool", "nomethod",
- "\"\"", "0+",
- "+", "+=",
- "-", "-=",
- "*", "*=",
- "/", "/=",
- "%", "%=",
- "**", "**=",
- "<<", "<<=",
- ">>", ">>=",
- "&", "&=",
- "|", "|=",
- "^", "^=",
- "<", "<=",
- ">", ">=",
- "==", "!=",
- "<=>", "cmp",
- "lt", "le",
- "gt", "ge",
- "eq", "ne",
- "!", "~",
- "++", "--",
- "atan2", "cos",
- "sin", "exp",
- "log", "sqrt",
- "x", "x=",
- ".", ".=",
- "=", "neg",
- "${}", "@{}",
- "%{}", "*{}",
- "&{}", "<>",
-};
-#else
-EXTCONST char * PL_AMG_names[NofAMmeth];
-#endif /* def INITAMAGIC */
-
-END_EXTERN_C
-
-struct am_table {
- long was_ok_sub;
- long was_ok_am;
- U32 flags;
- CV* table[NofAMmeth];
- long fallback;
-};
-struct am_table_short {
- long was_ok_sub;
- long was_ok_am;
- U32 flags;
-};
-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)
-
-
-/*
- * some compilers like to redefine cos et alia as faster
- * (and less accurate?) versions called F_cos et cetera (Quidquid
- * latine dictum sit, altum viditur.) This trick collides with
- * the Perl overloading (amg). The following #defines fool both.
- */
-
-#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)
- /* No _NONAME, _GOTO */
-#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 PERLDB_SUB (PL_perldb && (PL_perldb & PERLDBf_SUB))
-#define PERLDB_LINE (PL_perldb && (PL_perldb & PERLDBf_LINE))
-#define PERLDB_NOOPT (PL_perldb && (PL_perldb & PERLDBf_NOOPT))
-#define PERLDB_INTER (PL_perldb && (PL_perldb & PERLDBf_INTER))
-#define PERLDB_SUBLINE (PL_perldb && (PL_perldb & PERLDBf_SUBLINE))
-#define PERLDB_SINGLE (PL_perldb && (PL_perldb & PERLDBf_SINGLE))
-#define PERLDB_SUB_NN (PL_perldb && (PL_perldb & (PERLDBf_NONAME)))
-#define PERLDB_GOTO (PL_perldb && (PL_perldb & PERLDBf_GOTO))
-#define PERLDB_NAMEEVAL (PL_perldb && (PL_perldb & PERLDBf_NAMEEVAL))
-#define PERLDB_NAMEANON (PL_perldb && (PL_perldb & PERLDBf_NAMEANON))
-
-
-#ifdef USE_LOCALE_NUMERIC
-
-#define SET_NUMERIC_STANDARD() \
- set_numeric_standard();
-
-#define SET_NUMERIC_LOCAL() \
- set_numeric_local();
-
-#define IS_NUMERIC_RADIX(s) \
- ((PL_hints & HINT_LOCALE) && \
- PL_numeric_radix_sv && memEQ(s, SvPVX(PL_numeric_radix_sv), SvCUR(PL_numeric_radix_sv)))
-
-#define STORE_NUMERIC_LOCAL_SET_STANDARD() \
- bool was_local = (PL_hints & HINT_LOCALE) && PL_numeric_local; \
- if (was_local) SET_NUMERIC_STANDARD();
-
-#define STORE_NUMERIC_STANDARD_SET_LOCAL() \
- bool was_standard = (PL_hints & HINT_LOCALE) && PL_numeric_standard; \
- if (was_standard) SET_NUMERIC_LOCAL();
-
-#define RESTORE_NUMERIC_LOCAL() \
- if (was_local) SET_NUMERIC_LOCAL();
-
-#define RESTORE_NUMERIC_STANDARD() \
- if (was_standard) SET_NUMERIC_STANDARD();
-
-#define Atof my_atof
-
-#else /* !USE_LOCALE_NUMERIC */
-
-#define SET_NUMERIC_STANDARD() /**/
-#define SET_NUMERIC_LOCAL() /**/
-#define IS_NUMERIC_RADIX(c) (0)
-#define STORE_NUMERIC_LOCAL_SET_STANDARD() /**/
-#define STORE_NUMERIC_STANDARD_SET_LOCAL() /**/
-#define RESTORE_NUMERIC_LOCAL() /**/
-#define RESTORE_NUMERIC_STANDARD() /**/
-#define Atof Perl_atof
-
-#endif /* !USE_LOCALE_NUMERIC */
-
-#if !defined(Strtol) && defined(USE_64_BIT_INT) && defined(IV_IS_QUAD) && QUADKIND == QUAD_IS_LONG_LONG
-# ifdef __hpux
-# define strtoll __strtoll /* secret handshake */
-# endif
-# if !defined(Strtol) && defined(HAS_STRTOLL)
-# define Strtol strtoll
-# endif
-/* is there atoq() anywhere? */
-#endif
-#if !defined(Strtol) && defined(HAS_STRTOL)
-# define Strtol strtol
-#endif
-#ifndef Atol
-/* It would be more fashionable to use Strtol() to define atol()
- * (as is done for Atoul(), see below) but for backward compatibility
- * we just assume atol(). */
-# if defined(USE_64_BIT_INT) && defined(IV_IS_QUAD) && QUADKIND == QUAD_IS_LONG_LONG && defined(HAS_ATOLL)
-# 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
-# ifdef __hpux
-# define strtoull __strtoull /* secret handshake */
-# endif
-# if !defined(Strtoul) && defined(HAS_STRTOULL)
-# define Strtoul strtoull
-# endif
-# if !defined(Strtoul) && defined(HAS_STRTOUQ)
-# define Strtoul strtouq
-# endif
-/* is there atouq() anywhere? */
-#endif
-#if !defined(Strtoul) && defined(HAS_STRTOUL)
-# define Strtoul strtoul
-#endif
-#ifndef Atoul
-# define Atoul(s) Strtoul(s, (char **)NULL, 10)
-#endif
-
-#if !defined(PERLIO_IS_STDIO) && defined(HASATTRIBUTE)
-/*
- * Now we have __attribute__ out of the way
- * Remap printf
- */
-#undef printf
-#define printf PerlIO_stdoutf
-#endif
-
-/* if these never got defined, they need defaults */
-#ifndef PERL_SET_CONTEXT
-# define PERL_SET_CONTEXT(i) PERL_SET_INTERP(i)
-#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
-
-#ifndef PERL_SCRIPT_MODE
-#define PERL_SCRIPT_MODE "r"
-#endif
-
-/*
- * Some operating systems are stingy with stack allocation,
- * so perl may have to guard against stack overflow.
- */
-#ifndef PERL_STACK_OVERFLOW_CHECK
-#define PERL_STACK_OVERFLOW_CHECK() NOOP
-#endif
-
-/*
- * Some nonpreemptive operating systems find it convenient to
- * check for asynchronous conditions after each op execution.
- * Keep this check simple, or it may slow down execution
- * massively.
- */
-#ifndef PERL_ASYNC_CHECK
-#define PERL_ASYNC_CHECK() NOOP
-#endif
-
-/*
- * On some operating systems, a memory allocation may succeed,
- * but put the process too close to the system's comfort limit.
- * In this case, PERL_ALLOC_CHECK frees the pointer and sets
- * it to NULL.
- */
-#ifndef PERL_ALLOC_CHECK
-#define PERL_ALLOC_CHECK(p) NOOP
-#endif
-
-/*
- * nice_chunk and nice_chunk size need to be set
- * and queried under the protection of sv_mutex
- */
-#define offer_nice_chunk(chunk, chunk_size) do { \
- LOCK_SV_MUTEX; \
- if (!PL_nice_chunk) { \
- PL_nice_chunk = (char*)(chunk); \
- PL_nice_chunk_size = (chunk_size); \
- } \
- else { \
- Safefree(chunk); \
- } \
- UNLOCK_SV_MUTEX; \
- } while (0)
-
-#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)
-# else
-# ifdef 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
-#endif
-
-#ifdef I_FCNTL
-# include <fcntl.h>
-#endif
-
-#ifdef I_SYS_FILE
-# include <sys/file.h>
-#endif
-
-#ifndef O_RDONLY
-/* Assume UNIX defaults */
-# 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
-
-#ifdef IAMSUID
-
-#ifdef I_SYS_STATVFS
-# include <sys/statvfs.h> /* for f?statvfs() */
-#endif
-#ifdef I_SYS_MOUNT
-# include <sys/mount.h> /* for *BSD f?statfs() */
-#endif
-#ifdef I_MNTENT
-# include <mntent.h> /* for getmntent() */
-#endif
-#ifdef I_SYS_STATFS
-# include <sys/statfs.h> /* for some statfs() */
-#endif
-#ifdef I_SYS_VFS
-# ifdef __sgi
-# define sv IRIX_sv /* kludge: IRIX has an sv of its own */
-# endif
-# include <sys/vfs.h> /* for some statfs() */
-# ifdef __sgi
-# undef IRIX_sv
-# endif
-#endif
-#ifdef I_USTAT
-# include <ustat.h> /* for ustat() */
-#endif
-
-#if !defined(PERL_MOUNT_NOSUID) && defined(MOUNT_NOSUID)
-# define PERL_MOUNT_NOSUID MOUNT_NOSUID
-#endif
-#if !defined(PERL_MOUNT_NOSUID) && defined(MNT_NOSUID)
-# define PERL_MOUNT_NOSUID MNT_NOSUID
-#endif
-#if !defined(PERL_MOUNT_NOSUID) && defined(MS_NOSUID)
-# define PERL_MOUNT_NOSUID MS_NOSUID
-#endif
-#if !defined(PERL_MOUNT_NOSUID) && defined(M_NOSUID)
-# define PERL_MOUNT_NOSUID M_NOSUID
-#endif
-
-#endif /* IAMSUID */
-
-#ifdef I_LIBUTIL
-# include <libutil.h> /* setproctitle() in some FreeBSDs */
-#endif
-
-#ifndef EXEC_ARGV_CAST
-#define EXEC_ARGV_CAST(x) x
-#endif
-
-/* and finally... */
-#define PERL_PATCHLEVEL_H_IMPLICIT
-#include "patchlevel.h"
-#undef PERL_PATCHLEVEL_H_IMPLICIT
-
-/* Mention
-
- NV_PRESERVES_UV
-
- HAS_ICONV
- I_ICONV
-
- HAS_MKSTEMP
- HAS_MKSTEMPS
- HAS_MKDTEMP
-
- HAS_GETCWD
-
- HAS_MMAP
- HAS_MPROTECT
- HAS_MSYNC
- HAS_MADVISE
- HAS_MUNMAP
- I_SYSMMAN
- Mmap_t
-
- NVef
- NVff
- NVgf
-
- so that Configure picks them up. */
-
-#endif /* Include guard */
OpenPOWER on IntegriCloud