#ifndef H_PERL
#define H_PERL 1
#ifdef PERL_FOR_X2P
#undef MULTIPLICITY
#undef USE_STDIO
#define USE_STDIO
#endif
#if defined(DGUX)
#include <sys/fcntl.h>
#endif
#ifdef VOIDUSED
# undef VOIDUSED
#endif
#define VOIDUSED 1
#ifdef PERL_MICRO
# include "uconfig.h"
#else
# include "config.h"
#endif
#if defined(USE_ITHREADS) && defined(USE_5005THREADS)
# include "error: USE_ITHREADS and USE_5005THREADS are incompatible"
#endif
#if defined(USE_ITHREADS) && defined(USE_5005THREADS)
# include "error: USE_ITHREADS and USE_5005THREADS are incompatible"
#endif
#ifdef PERL_IMPLICIT_SYS
# ifndef PL_OP_SLAB_ALLOC
# define PL_OP_SLAB_ALLOC
# endif
#endif
#ifdef USE_ITHREADS
# if !defined(MULTIPLICITY)
# define MULTIPLICITY
# endif
#endif
#ifdef USE_5005THREADS
# ifndef PERL_IMPLICIT_CONTEXT
# define PERL_IMPLICIT_CONTEXT
# endif
#endif
#if defined(MULTIPLICITY)
# ifndef PERL_IMPLICIT_CONTEXT
# define PERL_IMPLICIT_CONTEXT
# endif
#endif
#ifdef __CYGWIN__
# undef WIN32
# undef _WIN32
#endif
#if defined(USE_ITHREADS) && !defined(USE_REENTRANT_API) && !defined(NETWARE) && !defined(WIN32) && !defined(__APPLE__)
# define USE_REENTRANT_API
#endif
#ifdef PERL_IMPLICIT_CONTEXT
# ifdef USE_5005THREADS
struct perl_thread;
# define pTHX register struct perl_thread *thr PERL_UNUSED_DECL
# define aTHX thr
# define dTHR dNOOP
# define dTHXa(a) pTHX = (struct perl_thread*)a
# else
# ifndef MULTIPLICITY
# define MULTIPLICITY
# endif
# define pTHX register PerlInterpreter *my_perl PERL_UNUSED_DECL
# define aTHX my_perl
# define dTHXa(a) pTHX = (PerlInterpreter*)a
# 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)
#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
#ifdef HASATTRIBUTE
# if defined(__GNUC__) && defined(__cplusplus)
# define PERL_UNUSED_DECL
# else
# define PERL_UNUSED_DECL __attribute__((unused))
# endif
#else
# define PERL_UNUSED_DECL
#endif
#define PERL_UNUSED_VAR(var) if (0) var = var
#define NOOP (void)0
#define dNOOP extern int Perl___notused PERL_UNUSED_DECL
#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
#if !defined(pTHXo) && !defined(PERL_CORE)
# 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
#ifdef PERL_IMPLICIT_SYS
# define dTHXs dTHX
#else
# define dTHXs dNOOP
#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
#if !(defined(STMT_START) && defined(STMT_END))
# if defined(__GNUC__) && !defined(__STRICT_ANSI__) && !defined(PERL_GCC_PEDANTIC) && !defined(__cplusplus)
# define STMT_START (void)(
# define STMT_END )
# else
# if (VOIDFLAGS) && (defined(sun) || defined(__sun__)) && !defined(__GNUC__)
# 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)
#if defined(CAN_PROTOTYPE) && defined(DEBUGGING_COMPILE)
#define SOFT_CAST(type)
#else
#define SOFT_CAST(type) (type)
#endif
#ifndef BYTEORDER
# define BYTEORDER 0x1234
#endif
#ifndef CONSERVATIVE
# define LIBERAL 1
#endif
#if 'A' == 65 && 'I' == 73 && 'J' == 74 && 'Z' == 90
#define ASCIIish
#else
#undef ASCIIish
#endif
#if defined(MSDOS) || defined(atarist) || defined(WIN32) || defined(NETWARE)
#define DOSISH 1
#endif
#if defined(__STDC__) || defined(vax11c) || defined(_AIX) || defined(__stdc__) || defined(__cplusplus) || defined( EPOC) || defined(NETWARE)
# define STANDARD_C 1
#endif
#if defined(__cplusplus) || defined(WIN32) || defined(__sgi) || defined(OS2) || defined(__DGUX) || defined( EPOC) || defined(__QNX__) || defined(NETWARE)
# define DONT_DECLARE_STD 1
#endif
#if defined(HASVOLATILE) || defined(STANDARD_C)
# ifdef __cplusplus
# define VOL
# 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); }
#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
# define BSD_SETPGRP(pid, pgrp) setpgrp2((pid), (pgrp))
# endif
# endif
#endif
#if defined(BSD_SETPGRP) && !defined(HAS_SETPGRP)
# define HAS_SETPGRP
#endif
#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
# define BSD_GETPGRP(pid) getpgrp2((pid))
# endif
# endif
#endif
#if defined(BSD_GETPGRP) && !defined(HAS_GETPGRP)
# define HAS_GETPGRP
#endif
#if defined(USE_BSD_SETPGRP) || defined(USE_BSD_GETPGRP)
# ifndef USE_BSDPGRP
# define USE_BSDPGRP
# endif
#endif
#if (defined(USE_5005THREADS) || defined(USE_ITHREADS)) \
&& defined(PTHREAD_H_FIRST) && defined(I_PTHREAD)
# include <pthread.h>
#endif
#ifndef _TYPES_
# ifndef major
# 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
# include <appkit/NXCType.h>
# endif
#endif
#else
#include <ctype.h>
#endif
#ifdef METHOD
#undef METHOD
#endif
#ifdef PERL_MICRO
# define NO_LOCALE
#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
#include <setjmp.h>
#ifdef I_SYS_PARAM
# ifdef PARAM_NEEDS_TYPES
# include <sys/types.h>
# endif
# include <sys/param.h>
#endif
#if defined(STANDARD_C) && defined(I_STDLIB)
# include <stdlib.h>
#endif
#ifdef I_UNISTD
# include <unistd.h>
#endif
#if defined(HAS_SYSCALL) && !defined(HAS_SYSCALL_PROTO) && !defined(PERL_MICRO)
int syscall(int, ...);
#endif
#if defined(HAS_USLEEP) && !defined(HAS_USLEEP_PROTO) && !defined(PERL_MICRO)
int usleep(unsigned int);
#endif
#ifdef PERL_MICRO
# define MYSWAP
#endif
#if !defined(PERL_FOR_X2P) && !(defined(WIN32)||defined(VMS))
# 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
#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
# endif
START_EXTERN_C
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);
Free_t Perl_mfree (Malloc_t where);
END_EXTERN_C
typedef struct perl_mstats perl_mstats_t;
# define safemalloc Perl_malloc
# define safecalloc Perl_calloc
# define saferealloc Perl_realloc
# define safefree Perl_mfree
#else
# define safemalloc safesysmalloc
# define safecalloc safesyscalloc
# define saferealloc safesysrealloc
# define safefree safesysfree
#endif
#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
#ifdef HAS_MEMSET
# if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)
# ifndef memset
extern char *memset (char*, int, int);
# endif
# endif
#else
# undef memset
# define memset(d,c,l) my_memset(d,c,l)
#endif
#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
#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
#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)
# undef SF_APPEND
#endif
#ifdef I_SYS_STAT
# include <sys/stat.h>
#endif
#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_IMPLICIT_SYS)
# define WIN32SCK_IS_STDSCK
#endif
#if defined(__osf__) && defined(__alpha) && !defined(_SOCKADDR_LEN)
# define _SOCKADDR_LEN
#endif
#if defined(HAS_SOCKET) && !defined(VMS) && !defined(WIN32)
# include <sys/socket.h>
# if defined(USE_SOCKS) && defined(I_SOCKS)
# if !defined(INCLUDE_PROTOTYPES)
# define INCLUDE_PROTOTYPES
# define PERL_SOCKS_NEED_PROTOTYPES
# endif
# ifdef USE_5005THREADS
# define PERL_USE_THREADS
# undef USE_5005THREADS
# endif
# include <socks.h>
# ifdef USE_5005THREADS
# undef USE_5005THREADS
# endif
# ifdef PERL_USE_THREADS
# define USE_5005THREADS
# undef PERL_USE_THREADS
# endif
# ifdef PERL_SOCKS_NEED_PROTOTYPES
# undef INCLUDE_PROTOTYPES
# undef PERL_SOCKS_NEED_PROTOTYPES
# endif
# endif
# ifdef I_NETDB
# ifdef NETWARE
# include<stdio.h>
# endif
# 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)
int sockatmark(int);
#endif
#ifdef SETERRNO
# undef SETERRNO
#endif
#ifdef VMS
# define SETERRNO(errcode,vmserrcode) \
STMT_START { \
set_errno(errcode); \
set_vaxc_errno(vmserrcode); \
} STMT_END
# 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
#else
# define SETERRNO(errcode,vmserrcode) (errno = (errcode))
# 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
#endif
#ifdef USE_5005THREADS
# define ERRSV (thr->errsv)
# define DEFSV THREADSV(0)
# define SAVE_DEFSV save_threadsv(0)
#else
# define ERRSV GvSV(PL_errgv)
# define DEFSV GvSV(PL_defgv)
# define SAVE_DEFSV SAVESPTR(GvSV(PL_defgv))
#endif
#define ERRHV GvHV(PL_errgv)
#ifndef errno
extern int 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
#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>
# 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>
# else
# include <sys/dir.h>
# endif
# endif
# endif
#endif
#ifdef PERL_MICRO
# ifndef DIR
# define DIR void
# endif
#endif
#ifdef FPUTS_BOTCH
# ifndef fputs
# define fputs(sv,fp) fprintf(fp,"%s",sv)
# endif
#endif
#if defined(I_SYSMODE) && !defined(PERL_MICRO)
#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
#if !defined(S_IREAD) && !defined(__BEOS__)
# define S_IREAD S_IRUSR
#endif
#if !defined(S_IWRITE) && !defined(__BEOS__)
# 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
#ifdef SPRINTF_E_BUG
# define sprintf UTS_sprintf_wrap
#endif
#ifdef UTS
# undef UVTYPE
# define UVTYPE unsigned
#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 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
# 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
#if defined(uts) || defined(UTS)
# undef UV_MAX
# define UV_MAX (4294967295u)
#endif
#define IV_DIG (BIT_DIGITS(IVSIZE * 8))
#define UV_DIG (BIT_DIGITS(UVSIZE * 8))
#ifndef NO_PERL_PRESERVE_IVUV
#define PERL_PRESERVE_IVUV
#endif
#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
# endif
#endif
#ifdef OVR_DBL_DIG
# ifdef DBL_DIG
# undef DBL_DIG
# endif
# define DBL_DIG OVR_DBL_DIG
#else
#ifdef I_LIMITS
#include <limits.h>
#endif
#ifdef I_FLOAT
#include <float.h>
#endif
#ifndef HAS_DBL_DIG
#define DBL_DIG 15
#endif
#endif
#ifdef I_FLOAT
#include <float.h>
#endif
#ifndef HAS_DBL_DIG
#define DBL_DIG 15
#endif
#ifdef OVR_LDBL_DIG
# ifdef LDBL_DIG
# undef LDBL_DIG
# endif
# define LDBL_DIG OVR_LDBL_DIG
#else
# 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
# else
# if LONG_DOUBLESIZE == 12
# define LDBL_DIG 18
# else
# if LONG_DOUBLESIZE == 16
# define LDBL_DIG 33
# else
# if LONG_DOUBLESIZE == DOUBLESIZE
# define LDBL_DIG DBL_DIG
# endif
# endif
# endif
# endif
# endif
#endif
#ifdef I_LIMITS
# include <limits.h>
#endif
#ifdef I_VALUES
# if !(defined(DBL_MIN) && defined(DBL_MAX) && defined(I_LIMITS))
# include <values.h>
# if defined(MAXDOUBLE) && !defined(DBL_MAX)
# define DBL_MAX MAXDOUBLE
# endif
# if defined(MINDOUBLE) && !defined(DBL_MIN)
# define DBL_MIN MINDOUBLE
# 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_MIN
# define NV_MIN LDBL_MIN
# endif
# ifdef LDBL_MAX
# define NV_MAX LDBL_MAX
# 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
# 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
# ifdef HAS_MODFL
# define Perl_modf(x,y) modfl(x,y)
# ifndef HAS_MODFL_PROTO
long double modfl(long double, long double *);
# endif
# else
# if 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
# ifdef HAS_FREXPL
# define Perl_frexp(x,y) frexpl(x,y)
# else
# if 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_isnan
# ifdef HAS_ISNANL
# define Perl_isnan(x) isnanl(x)
# endif
# endif
# ifndef Perl_isinf
# ifdef HAS_FINITEL
# define Perl_isinf(x) !(finitel(x)||Perl_isnan(x))
# endif
# endif
#else
# define NV_DIG DBL_DIG
# ifdef DBL_MANT_DIG
# define NV_MANT_DIG DBL_MANT_DIG
# endif
# ifdef DBL_MIN
# define NV_MIN DBL_MIN
# endif
# ifdef DBL_MAX
# define NV_MAX DBL_MAX
# endif
# ifdef DBL_MIN_10_EXP
# define NV_MIN_10_EXP DBL_MIN_10_EXP
# endif
# ifdef DBL_MAX_10_EXP
# define NV_MAX_10_EXP DBL_MAX_10_EXP
# endif
# ifdef DBL_EPSILON
# define NV_EPSILON DBL_EPSILON
# 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)
#endif
#if !defined(Perl_fp_class) && (defined(HAS_FPCLASS)||defined(HAS_FPCLASSL))
# ifdef I_IEEFP
# include <ieeefp.h>
# endif
# ifdef I_FP
# include <fp.h>
# endif
# if defined(USE_LONG_DOUBLE) && defined(HAS_FPCLASSL)
# define Perl_fp_class() fpclassl(x)
# else
# define Perl_fp_class() fpclass(x)
# endif
# 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_nan(x) (Perl_fp_class(x)==FP_CLASS_SNAN||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_inf(x) (Perl_fp_class(x)==FP_CLASS_NINF||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_norm(x) (Perl_fp_class(x)==FP_CLASS_NNORM||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_denorm(x) (Perl_fp_class(x)==FP_CLASS_NDENORM||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)
# define Perl_fp_class_zero(x) (Perl_fp_class(x)==FP_CLASS_NZERO||Perl_fp_class(x)==FP_CLASS_PZERO)
#endif
#if !defined(Perl_fp_class) && defined(HAS_FP_CLASS) && !defined(PERL_MICRO)
# include <math.h>
# if !defined(FP_SNAN) && defined(I_FP_CLASS)
# include <fp_class.h>
# endif
# define Perl_fp_class(x) fp_class(x)
# define Perl_fp_class_snan(x) (fp_class(x)==FP_SNAN)
# define Perl_fp_class_qnan(x) (fp_class(x)==FP_QNAN)
# define Perl_fp_class_nan(x) (fp_class(x)==FP_SNAN||fp_class(x)==FP_QNAN)
# define Perl_fp_class_ninf(x) (fp_class(x)==FP_NEG_INF)
# define Perl_fp_class_pinf(x) (fp_class(x)==FP_POS_INF)
# define Perl_fp_class_inf(x) (fp_class(x)==FP_NEG_INF||fp_class(x)==FP_POS_INF)
# define Perl_fp_class_nnorm(x) (fp_class(x)==FP_NEG_NORM)
# define Perl_fp_class_pnorm(x) (fp_class(x)==FP_POS_NORM)
# define Perl_fp_class_norm(x) (fp_class(x)==FP_NEG_NORM||fp_class(x)==FP_POS_NORM)
# define Perl_fp_class_ndenorm(x) (fp_class(x)==FP_NEG_DENORM)
# define Perl_fp_class_pdenorm(x) (fp_class(x)==FP_POS_DENORM)
# define Perl_fp_class_denorm(x) (fp_class(x)==FP_NEG_DENORM||fp_class(x)==FP_POS_DENORM)
# define Perl_fp_class_nzero(x) (fp_class(x)==FP_NEG_ZERO)
# define Perl_fp_class_pzero(x) (fp_class(x)==FP_POS_ZERO)
# define Perl_fp_class_zero(x) (fp_class(x)==FP_NEG_ZERO||fp_class(x)==FP_POS_ZERO)
#endif
#if !defined(Perl_fp_class) && defined(HAS_FPCLASSIFY)
# include <math.h>
# define Perl_fp_class(x) fpclassify(x)
# define Perl_fp_class_nan(x) (fp_classify(x)==FP_SNAN||fp_classify(x)==FP_QNAN)
# define Perl_fp_class_inf(x) (fp_classify(x)==FP_INFINITE)
# define Perl_fp_class_norm(x) (fp_classify(x)==FP_NORMAL)
# define Perl_fp_class_denorm(x) (fp_classify(x)==FP_SUBNORMAL)
# define Perl_fp_class_zero(x) (fp_classify(x)==FP_ZERO)
#endif
#if !defined(Perl_fp_class) && defined(HAS_CLASS)
# include <math.h>
# ifndef _cplusplus
# define Perl_fp_class(x) class(x)
# else
# define Perl_fp_class(x) _class(x)
# endif
# 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_nan(x) (Perl_fp_class(x)==FP_SNAN||Perl_fp_class(x)==FP_QNAN)
# 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_inf(x) (Perl_fp_class(x)==FP_MINUS_INF||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_norm(x) (Perl_fp_class(x)==FP_MINUS_NORM||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_denorm(x) (Perl_fp_class(x)==FP_MINUS_DENORM||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)
# define Perl_fp_class_zero(x) (Perl_fp_class(x)==FP_MINUS_ZERO||Perl_fp_class(x)==FP_PLUS_ZERO)
#endif
#ifndef Perl_isnan
# ifdef HAS_ISNAN
# define Perl_isnan(x) isnan((NV)x)
# else
# ifdef Perl_fp_class_nan
# define Perl_isnan(x) Perl_fp_class_nan(x)
# else
# ifdef HAS_UNORDERED
# define Perl_isnan(x) unordered((x), 0.0)
# else
# define Perl_isnan(x) ((x)!=(x))
# endif
# endif
# endif
#endif
#ifdef UNDER_CE
int isnan(double d);
#endif
#ifndef Perl_isinf
# ifdef HAS_ISINF
# define Perl_isinf(x) isinf((NV)x)
# else
# ifdef Perl_fp_class_inf
# define Perl_isinf(x) Perl_fp_class_inf(x)
# else
# define Perl_isinf(x) ((x)==NV_INF)
# endif
# endif
#endif
#ifndef Perl_isfinite
# ifdef HAS_FINITE
# define Perl_isfinite(x) finite((NV)x)
# else
# ifdef HAS_ISFINITE
# define Perl_isfinite(x) isfinite(x)
# else
# ifdef Perl_fp_class_finite
# define Perl_isfinite(x) Perl_fp_class_finite(x)
# else
# define Perl_isfinite(x) !(Perl_is_inf(x)||Perl_is_nan(x))
# endif
# endif
# 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(s)
# define Perl_atof2(s, n) Perl_my_atof2(aTHX_ (s), &(n))
#else
# define Perl_atof(s) (NV)atof(s)
# define Perl_atof2(s, n) ((n) = atof(s))
#endif
#ifdef I_LIMITS
# include <limits.h>
#endif
#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
#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
# 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
# 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
# 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;
UV *bucket_mem_size;
UV *bucket_available_size;
UV nbuckets;
};
struct RExC_state_t;
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;
#if defined(UTS) || 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 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;
typedef struct clone_params CLONE_PARAMS;
#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
# 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
# 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
# endif
# if defined(USE_FTELL64)
# define ftell ftell64
# 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) || defined(MACOS_TRADITIONAL)
# include "iperlsys.h"
#endif
#if defined(__OPEN_VM)
# include "vmesa/vmesaish.h"
# define ISHISH "vmesa"
#endif
#ifdef DOSISH
# if defined(OS2)
# include "os2ish.h"
# else
# include "dosish.h"
# endif
# define ISHISH "dos"
#endif
#if defined(VMS)
# include "vmsish.h"
# include "embed.h"
# define ISHISH "vms"
#endif
#if defined(PLAN9)
# include "./plan9/plan9ish.h"
# define ISHISH "plan9"
#endif
#if defined(MPE)
# include "mpeix/mpeixish.h"
# define ISHISH "mpeix"
#endif
#if defined(__VOS__)
# ifdef __GNUC__
# include "./vos/vosish.h"
# else
# include "vos/vosish.h"
# endif
# define ISHISH "vos"
#endif
#if defined(EPOC)
# include "epocish.h"
# define ISHISH "epoc"
#endif
#if defined(MACOS_TRADITIONAL)
# include "macos/macish.h"
# ifndef NO_ENVIRON_ARRAY
# define NO_ENVIRON_ARRAY
# endif
# define ISHISH "macos classic"
#endif
#if defined(__BEOS__)
# include "beos/beosish.h"
# define ISHISH "beos"
#endif
#ifndef ISHISH
# include "unixish.h"
# define ISHISH "unix"
#endif
#ifndef NO_ENVIRON_ARRAY
# define USE_ENVIRON_ARRAY
#endif
#ifndef PERL_FPU_INIT
# ifdef HAS_FPSETMASK
# if HAS_FLOATINGPOINT_H
# include <floatingpoint.h>
# endif
# define PERL_FPU_INIT fpsetmask(0);
# else
# if defined(SIGFPE) && defined(SIG_IGN)
# define PERL_FPU_INIT signal(SIGFPE, SIG_IGN);
# else
# define PERL_FPU_INIT
# endif
# endif
#endif
#ifndef PERL_SYS_INIT3
# define PERL_SYS_INIT3(argvp,argcp,envp) PERL_SYS_INIT(argvp,argcp)
#endif
#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
# ifdef _POSIX_PATH_MAX
# define MAXPATHLEN _POSIX_PATH_MAX
# else
# define MAXPATHLEN 1024
# endif
# endif
#endif
#if defined(USE_5005THREADS) || defined(USE_ITHREADS)
# if defined(USE_5005THREADS)
# define EMULATE_ATOMIC_REFCOUNTS
# endif
# ifdef NETWARE
# include <nw5thread.h>
# else
# 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
# 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
# endif
# endif
# endif
#endif
#endif
#if defined(WIN32)
# include "win32.h"
#endif
#ifdef NETWARE
# include "netware.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
#define PERL_EXIT_EXPECTED 0x01
#define PERL_EXIT_DESTRUCT_END 0x02
#ifndef MEMBER_TO_FPTR
# define MEMBER_TO_FPTR(name) name
#endif
#ifndef PERL_FS_VER_FMT
# define PERL_FS_VER_FMT "%d.%d.%d"
#endif
#ifndef PERL_FLUSHALL_FOR_CHILD
# if defined(USE_PERLIO) || 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
#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_5005THREADS
# define PERL_GET_THX ((struct perl_thread *)PERL_GET_CONTEXT)
# else
# ifdef MULTIPLICITY
# define PERL_GET_THX ((PerlInterpreter *)PERL_GET_CONTEXT)
# endif
# endif
# define PERL_SET_THX(t) PERL_SET_CONTEXT(t)
#endif
#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
#ifndef Nullformat
# ifdef CHECK_FORMAT
# define Nullformat "%s",""
# else
# define Nullformat Nullch
# endif
#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)
# else
# define IOCPARM_LEN(x) 256
# endif
#endif
#if defined(__CYGWIN__)
# define USEMYBINMODE / **/
# include <io.h>
# define my_binmode(fp, iotype, mode) \
(PerlLIO_setmode(fileno(fp), mode) != -1 ? TRUE : FALSE)
#endif
#ifdef __CYGWIN__
void init_os_extras(void);
#endif
#ifdef UNION_ANY_DEFINITION
UNION_ANY_DEFINITION;
#else
union any {
void* any_ptr;
I32 any_i32;
IV any_iv;
long any_long;
bool any_bool;
void (*any_dptr) (void*);
void (*any_dxptr) (pTHX_ void*);
};
#endif
#ifdef USE_5005THREADS
#define ARGSproto struct perl_thread *thr
#else
#define ARGSproto
#endif
typedef I32 (*filter_t) (pTHX_ 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(_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
#endif
#if !defined(OS2) && !defined(MACOS_TRADITIONAL)
# include "iperlsys.h"
#endif
#include "regexp.h"
#include "sv.h"
#include "util.h"
#include "form.h"
#include "gv.h"
#include "pad.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"
typedef struct curcur CURCUR;
struct curcur {
int parenfloor;
int cur;
int min;
int max;
int minmod;
regnode * scan;
regnode * next;
char * lastloc;
CURCUR * oldcc;
};
typedef struct _sublex_info SUBLEXINFO;
struct _sublex_info {
I32 super_state;
I32 sub_inwhat;
OP *sub_op;
char *super_bufptr;
char *super_bufend;
};
typedef struct magic_state MGS;
struct scan_data_t;
struct regnode_charclass_class;
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
#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
#ifndef htovs
short htovs(short n);
short vtohs(short n);
long htovl(long n);
long vtohl(long n);
#endif
#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) ((n) < IV_MAX_P1 ? ((n) < IV_MIN ? IV_MIN : (IV) (n)) \
: ((n) < UV_MAX_P1 ? (IV)(UV) (n) \
: ((n) > 0 ? (IV)UV_MAX : 0 )))
#define U_V(n) ((n) < 0.0 ? ((n) < IV_MIN ? (UV) IV_MIN : (UV)(IV) (n)) \
: ((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)
#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
#ifndef UNDER_CE
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
#define DEBUG_s_FLAG 0x00000002
#define DEBUG_l_FLAG 0x00000004
#define DEBUG_t_FLAG 0x00000008
#define DEBUG_o_FLAG 0x00000010
#define DEBUG_c_FLAG 0x00000020
#define DEBUG_P_FLAG 0x00000040
#define DEBUG_m_FLAG 0x00000080
#define DEBUG_f_FLAG 0x00000100
#define DEBUG_r_FLAG 0x00000200
#define DEBUG_x_FLAG 0x00000400
#define DEBUG_u_FLAG 0x00000800
#define DEBUG_H_FLAG 0x00002000
#define DEBUG_X_FLAG 0x00004000
#define DEBUG_D_FLAG 0x00008000
#define DEBUG_S_FLAG 0x00010000
#define DEBUG_T_FLAG 0x00020000
#define DEBUG_R_FLAG 0x00040000
#define DEBUG_J_FLAG 0x00080000
#define DEBUG_v_FLAG 0x00100000
#define DEBUG_MASK 0x001FEFFF
#define DEBUG_DB_RECURSE_FLAG 0x40000000
#define DEBUG_TOP_FLAG 0x80000000
# define DEBUG_p_TEST_ (PL_debug & DEBUG_p_FLAG)
# define DEBUG_s_TEST_ (PL_debug & DEBUG_s_FLAG)
# define DEBUG_l_TEST_ (PL_debug & DEBUG_l_FLAG)
# define DEBUG_t_TEST_ (PL_debug & DEBUG_t_FLAG)
# define DEBUG_o_TEST_ (PL_debug & DEBUG_o_FLAG)
# define DEBUG_c_TEST_ (PL_debug & DEBUG_c_FLAG)
# define DEBUG_P_TEST_ (PL_debug & DEBUG_P_FLAG)
# define DEBUG_m_TEST_ (PL_debug & DEBUG_m_FLAG)
# define DEBUG_f_TEST_ (PL_debug & DEBUG_f_FLAG)
# define DEBUG_r_TEST_ (PL_debug & DEBUG_r_FLAG)
# define DEBUG_x_TEST_ (PL_debug & DEBUG_x_FLAG)
# define DEBUG_u_TEST_ (PL_debug & DEBUG_u_FLAG)
# define DEBUG_H_TEST_ (PL_debug & DEBUG_H_FLAG)
# define DEBUG_X_TEST_ (PL_debug & DEBUG_X_FLAG)
# define DEBUG_D_TEST_ (PL_debug & DEBUG_D_FLAG)
# define DEBUG_S_TEST_ (PL_debug & DEBUG_S_FLAG)
# define DEBUG_T_TEST_ (PL_debug & DEBUG_T_FLAG)
# define DEBUG_R_TEST_ (PL_debug & DEBUG_R_FLAG)
# define DEBUG_J_TEST_ (PL_debug & DEBUG_J_FLAG)
# define DEBUG_v_TEST_ (PL_debug & DEBUG_v_FLAG)
# define DEBUG_Xv_TEST_ (DEBUG_X_TEST_ && DEBUG_v_TEST_)
#ifdef DEBUGGING
# undef YYDEBUG
# define YYDEBUG 1
# 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_H_TEST DEBUG_H_TEST_
# define DEBUG_X_TEST DEBUG_X_TEST_
# define DEBUG_Xv_TEST DEBUG_Xv_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 DEB(a) a
# define 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
# define DEBUG__(t, a) \
STMT_START { \
if (t) STMT_START {a;} STMT_END; \
} STMT_END
# define DEBUG_f(a) DEBUG__(DEBUG_f_TEST, a)
# define DEBUG_r(a) DEBUG__(DEBUG_r_TEST, a)
# define DEBUG_x(a) DEBUG__(DEBUG_x_TEST, a)
# define DEBUG_u(a) DEBUG__(DEBUG_u_TEST, a)
# define DEBUG_H(a) DEBUG__(DEBUG_H_TEST, a)
# define DEBUG_X(a) DEBUG__(DEBUG_X_TEST, a)
# define DEBUG_Xv(a) DEBUG__(DEBUG_Xv_TEST, a)
# define DEBUG_D(a) DEBUG__(DEBUG_D_TEST, a)
# ifdef USE_5005THREADS
# define DEBUG_S(a) DEBUG__(DEBUG_S_TEST, a)
# else
# define DEBUG_S(a)
# endif
# define DEBUG_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)
#else
# 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_H_TEST (0)
# define DEBUG_X_TEST (0)
# define DEBUG_Xv_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 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_H(a)
# define DEBUG_X(a)
# define DEBUG_Xv(a)
# define DEBUG_D(a)
# define DEBUG_S(a)
# define DEBUG_T(a)
# define DEBUG_R(a)
# define DEBUG_v(a)
#endif
#define PERL_MAGIC_sv '\0'
#define PERL_MAGIC_overload 'A'
#define PERL_MAGIC_overload_elem 'a'
#define PERL_MAGIC_overload_table 'c'
#define PERL_MAGIC_bm 'B'
#define PERL_MAGIC_regdata 'D'
#define PERL_MAGIC_regdatum 'd'
#define PERL_MAGIC_env 'E'
#define PERL_MAGIC_envelem 'e'
#define PERL_MAGIC_fm 'f'
#define PERL_MAGIC_regex_global 'g'
#define PERL_MAGIC_isa 'I'
#define PERL_MAGIC_isaelem 'i'
#define PERL_MAGIC_nkeys 'k'
#define PERL_MAGIC_dbfile 'L'
#define PERL_MAGIC_dbline 'l'
#define PERL_MAGIC_mutex 'm'
#define PERL_MAGIC_shared 'N'
#define PERL_MAGIC_shared_scalar 'n'
#define PERL_MAGIC_collxfrm 'o'
#define PERL_MAGIC_tied 'P'
#define PERL_MAGIC_tiedelem 'p'
#define PERL_MAGIC_tiedscalar 'q'
#define PERL_MAGIC_qr 'r'
#define PERL_MAGIC_sig 'S'
#define PERL_MAGIC_sigelem 's'
#define PERL_MAGIC_taint 't'
#define PERL_MAGIC_uvar 'U'
#define PERL_MAGIC_uvar_elem 'u'
#define PERL_MAGIC_vstring 'V'
#define PERL_MAGIC_vec 'v'
#define PERL_MAGIC_utf8 'w'
#define PERL_MAGIC_substr 'x'
#define PERL_MAGIC_defelem 'y'
#define PERL_MAGIC_glob '*'
#define PERL_MAGIC_arylen '#'
#define PERL_MAGIC_pos '.'
#define PERL_MAGIC_backref '<'
#define PERL_MAGIC_ext '~'
#define YYMAXDEPTH 300
#ifndef assert
#ifdef DEBUGGING
#define assert(what) DEB( { \
if (!(what)) { \
Perl_croak(aTHX_ "Assertion " STRINGIFY(what) " failed: file \"%s\", line %d", \
__FILE__, __LINE__); \
PerlProc_exit(1); \
}})
#else
#define assert(what) DEB( { \
if (!(what)) { \
Perl_croak(aTHX_ "Assertion failed: file \"%s\", line %d", \
__FILE__, __LINE__); \
PerlProc_exit(1); \
}})
#endif
#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
#ifndef DONT_DECLARE_STD
char *mktemp (char*);
#ifndef atof
double atof (const char*);
#endif
#endif
#ifndef STANDARD_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
#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
#if !defined(NV_INF) && defined(USE_LONG_DOUBLE) && defined(LDBL_INFINITY)
# define NV_INF LDBL_INFINITY
#endif
#if !defined(NV_INF) && defined(DBL_INFINITY)
# define NV_INF (NV)DBL_INFINITY
#endif
#if !defined(NV_INF) && defined(INFINITY)
# define NV_INF (NV)INFINITY
#endif
#if !defined(NV_INF) && defined(INF)
# define NV_INF (NV)INF
#endif
#if !defined(NV_INF) && defined(USE_LONG_DOUBLE) && defined(HUGE_VALL)
# define NV_INF (NV)HUGE_VALL
#endif
#if !defined(NV_INF) && defined(HUGE_VAL)
# define NV_INF (NV)HUGE_VAL
#endif
#if !defined(NV_NAN) && defined(USE_LONG_DOUBLE)
# if !defined(NV_NAN) && defined(LDBL_NAN)
# define NV_NAN LDBL_NAN
# endif
# if !defined(NV_NAN) && defined(LDBL_QNAN)
# define NV_NAN LDBL_QNAN
# endif
# if !defined(NV_NAN) && defined(LDBL_SNAN)
# define NV_NAN LDBL_SNAN
# endif
#endif
#if !defined(NV_NAN) && defined(DBL_NAN)
# define NV_NAN (NV)DBL_NAN
#endif
#if !defined(NV_NAN) && defined(DBL_QNAN)
# define NV_NAN (NV)DBL_QNAN
#endif
#if !defined(NV_NAN) && defined(DBL_SNAN)
# define NV_NAN (NV)DBL_SNAN
#endif
#if !defined(NV_NAN) && defined(QNAN)
# define NV_NAN (NV)QNAN
#endif
#if !defined(NV_NAN) && defined(SNAN)
# define NV_NAN (NV)SNAN
#endif
#if !defined(NV_NAN) && defined(NAN)
# define NV_NAN (NV)NAN
#endif
#ifndef __cplusplus
# if defined(NeXT) || defined(__NeXT__)
char *crypt ();
# else
# if !defined(WIN32) && !defined(VMS)
#ifndef crypt
char *crypt (const char*, const char*);
#endif
# endif
# endif
# ifndef DONT_DECLARE_STD
# ifndef getenv
char *getenv (const char*);
# endif
# 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
#ifndef getlogin
char *getlogin (void);
#endif
#endif
#ifdef UNLINK_ALL_VERSIONS
#define UNLINK unlnk
I32 unlnk (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
#ifdef DEBUGGING
# ifndef register
# define register
# endif
# define RUNOPS_DEFAULT Perl_runops_debug
#else
# 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 void (CPERLscope(*share_proc_t)) (pTHX_ SV *sv);
typedef int (CPERLscope(*thrhook_proc_t)) (pTHX);
typedef OP* (CPERLscope(*PPADDR_t)[]) (pTHX);
#define THREADSV_NAMES "_123456789&`'+/.,\\\";^-%=|~:\001\005!@"
#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>
# define environ (*_NSGetEnviron())
# endif
# endif
#else
# ifdef USE_ENVIRON_ARRAY
# if !defined(DONT_DECLARE_STD) || \
(defined(__svr4__) && defined(__GNUC__) && defined(sun)) || \
defined(__sgi) || \
defined(__DGUX)
extern char ** environ;
# endif
# endif
#endif
START_EXTERN_C
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_no_localize_ref[]
INIT("Can't localize through a reference");
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
#ifdef DOINIT
#ifdef EBCDIC
EXT 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, 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
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
#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[] = {
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
EXTCONST unsigned char PL_freq[] = {
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
#include "perly.h"
#define LEX_NOTPARSING 11
typedef enum {
XOPERATOR,
XTERM,
XREF,
XSTATE,
XBLOCK,
XATTRBLOCK,
XATTRTERM,
XTERMBLOCK
} expectation;
enum {
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_5005THREADS
want_vtbl_mutex,
#endif
want_vtbl_regdata,
want_vtbl_regdatum,
want_vtbl_backref,
want_vtbl_utf8
};
#define HINT_PRIVATE_MASK 0x000000ff
#define HINT_INTEGER 0x00000001
#define HINT_STRICT_REFS 0x00000002
#define HINT_LOCALE 0x00000004
#define HINT_BYTES 0x00000008
#define HINT_BLOCK_SCOPE 0x00000100
#define HINT_STRICT_SUBS 0x00000200
#define HINT_STRICT_VARS 0x00000400
#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
#define HINT_RE_TAINT 0x00100000
#define HINT_RE_EVAL 0x00200000
#define HINT_FILETEST_ACCESS 0x00400000
#define HINT_UTF8 0x00800000
#define HINT_SORT_SORT_BITS 0x000000FF
#define HINT_SORT_QUICKSORT 0x00000001
#define HINT_SORT_MERGESORT 0x00000002
#define HINT_SORT_STABLE 0x00000100
#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, SvCUR(PERL_DEBUG_PAD(i)) = 0, PERL_DEBUG_PAD(i))
typedef void (CPERLscope(*peep_t))(pTHX_ OP* o);
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) (pTHX_ void*);
typedef void (*SVFUNC_t) (pTHX_ SV*);
typedef I32 (*SVCOMPARE_t) (pTHX_ SV*, SV*);
typedef void (*XSINIT_t) (pTHX);
typedef void (*ATEXIT_t) (pTHX_ void*);
typedef void (*XSUBADDR_t) (pTHX_ CV *);
#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;
typedef struct exitlistentry {
void (*fn) (pTHX_ 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
# if !defined(__GNUC__) || !defined(WIN32)
EXT
# endif
struct perl_vars *PL_VarsPtr;
# define PL_Vars (*((PL_VarsPtr) \
? PL_VarsPtr : (PL_VarsPtr = Perl_GetVars(aTHX))))
# endif
#endif
#if defined(MULTIPLICITY)
struct interpreter {
# ifndef USE_5005THREADS
# include "thrdvar.h"
# endif
# include "intrpvar.h"
PERLVARA(object_compatibility,30, char)
};
#else
struct interpreter {
char broiled;
};
#endif
#ifdef USE_5005THREADS
struct perl_thread {
#include "thrdvar.h"
};
typedef struct perl_thread *Thread;
#else
typedef void *Thread;
#endif
#undef PERLVAR
#undef PERLVARA
#undef PERLVARI
#undef PERLVARIC
typedef enum {
e_no_len,
e_number,
e_star
} howlen_t;
typedef struct {
char* patptr;
char* patend;
char* grpbeg;
char* grpend;
I32 code;
I32 length;
howlen_t howlen;
int level;
U32 flags;
} tempsym_t;
#include "thread.h"
#include "pp.h"
#ifndef PERL_CALLCONV
# define PERL_CALLCONV
#endif
#ifndef NEXT30_NO_ATTRIBUTE
# ifndef HASATTRIBUTE
# ifdef __attribute__
# undef __attribute__
# endif
# define __attribute__(attr)
# endif
#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"
#include "opcode.h"
#if !defined(PERL_FOR_X2P)
# include "embedvar.h"
#endif
#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)
START_EXTERN_C
# include "intrpvar.h"
# ifndef USE_5005THREADS
# include "thrdvar.h"
# endif
END_EXTERN_C
#endif
#if defined(WIN32)
# include "embed.h"
#endif
#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};
#ifdef PERL_MICRO
EXT MGVTBL PL_vtbl_sigelem = {0, 0, 0, 0, 0};
#else
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};
#endif
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_5005THREADS
EXT MGVTBL PL_vtbl_mutex = {0, 0, 0, 0,
MEMBER_TO_FPTR(Perl_magic_mutexfree)};
#endif
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, MEMBER_TO_FPTR(Perl_magic_setregexp),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)};
EXT MGVTBL PL_vtbl_ovrld = {0, 0,
0, 0, MEMBER_TO_FPTR(Perl_magic_freeovrld)};
EXT MGVTBL PL_vtbl_utf8 = {0,
MEMBER_TO_FPTR(Perl_magic_setutf8),
0, 0, 0};
#else
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;
EXT MGVTBL PL_vtbl_ovrld;
#ifdef USE_5005THREADS
EXT MGVTBL PL_vtbl_mutex;
#endif
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;
EXT MGVTBL PL_vtbl_utf8;
#endif
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,
int_amg, DESTROY_amg,
max_amg_code
};
#define NofAMmeth max_amg_code
#define AMG_id2name(id) ((char*)PL_AMG_names[id]+1)
#ifdef DOINIT
EXTCONST char * PL_AMG_names[NofAMmeth] = {
"()", "(abs",
"(bool", "(nomethod",
"(\"\"", "(0+",
"(+", "(+=",
"(-", "(-=",
"(*", "(*=",
"(/", "(/=",
"(%", "(%=",
"(**", "(**=",
"(<<", "(<<=",
"(>>", "(>>=",
"(&", "(&=",
"(|", "(|=",
"(^", "(^=",
"(<", "(<=",
"(>", "(>=",
"(==", "(!=",
"(<=>", "(cmp",
"(lt", "(le",
"(gt", "(ge",
"(eq", "(ne",
"(!", "(~",
"(++", "(--",
"(atan2", "(cos",
"(sin", "(exp",
"(log", "(sqrt",
"(x", "(x=",
"(.", "(.=",
"(=", "(neg",
"(${}", "(@{}",
"(%{}", "(*{}",
"(&{}", "(<>",
"(int", "DESTROY",
};
#else
EXTCONST char * PL_AMG_names[NofAMmeth];
#endif
END_EXTERN_C
struct am_table {
U32 was_ok_sub;
long was_ok_am;
U32 flags;
CV* table[NofAMmeth];
long fallback;
};
struct am_table_short {
U32 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 AMTf_OVERLOADED 2
#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 AMT_OVERLOADED(amt) ((amt)->flags & AMTf_OVERLOADED)
#define AMT_OVERLOADED_on(amt) ((amt)->flags |= AMTf_OVERLOADED)
#define AMT_OVERLOADED_off(amt) ((amt)->flags &= ~AMTf_OVERLOADED)
#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
#define PERLDB_ALL (PERLDBf_SUB | PERLDBf_LINE | \
PERLDBf_NOOPT | PERLDBf_INTER | \
PERLDBf_SUBLINE| PERLDBf_SINGLE| \
PERLDBf_NAMEEVAL| PERLDBf_NAMEANON)
#define PERLDBf_SUB 0x01
#define PERLDBf_LINE 0x02
#define PERLDBf_NOOPT 0x04
#define PERLDBf_INTER 0x08
#define PERLDBf_SUBLINE 0x10
#define PERLDBf_SINGLE 0x20
#define PERLDBf_NONAME 0x40
#define PERLDBf_GOTO 0x80
#define PERLDBf_NAMEEVAL 0x100
#define PERLDBf_NAMEANON 0x200
#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 IN_LOCALE_RUNTIME (PL_curcop->op_private & HINT_LOCALE)
#define IN_LOCALE_COMPILETIME (PL_hints & HINT_LOCALE)
#define IN_LOCALE \
(PL_curcop == &PL_compiling ? IN_LOCALE_COMPILETIME : IN_LOCALE_RUNTIME)
#define STORE_NUMERIC_LOCAL_SET_STANDARD() \
bool was_local = PL_numeric_local && IN_LOCALE; \
if (was_local) SET_NUMERIC_STANDARD();
#define STORE_NUMERIC_STANDARD_SET_LOCAL() \
bool was_standard = PL_numeric_standard && IN_LOCALE; \
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
#define SET_NUMERIC_STANDARD()
#define SET_NUMERIC_LOCAL()
#define IS_NUMERIC_RADIX(a, b) (0)
#define STORE_NUMERIC_LOCAL_SET_STANDARD()
#define STORE_NUMERIC_STANDARD_SET_LOCAL()
#define RESTORE_NUMERIC_LOCAL()
#define RESTORE_NUMERIC_STANDARD()
#define Atof my_atof
#define IN_LOCALE_RUNTIME 0
#endif
#if !defined(Strtol) && defined(USE_64_BIT_INT) && defined(IV_IS_QUAD) && QUADKIND == QUAD_IS_LONG_LONG
# ifdef __hpux
# define strtoll __strtoll
# endif
# ifdef WIN64
# define strtoll _strtoi64
# 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) && QUADKIND == QUAD_IS_LONG_LONG && defined(HAS_ATOLL)
# ifdef WIN64
# define atoll _atoi64
# 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
# ifdef __hpux
# define strtoull __strtoull
# endif
# ifdef WIN64
# define strtoull _strtoui64
# 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
#ifndef Atoul
# define Atoul(s) Strtoul(s, (char **)NULL, 10)
#endif
#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
#ifndef PERL_STACK_OVERFLOW_CHECK
#define PERL_STACK_OVERFLOW_CHECK() NOOP
#endif
#ifndef PERL_MICRO
# ifndef PERL_ASYNC_CHECK
# define PERL_ASYNC_CHECK() if (PL_sig_pending) despatch_signals()
# endif
#endif
#ifndef PERL_ASYNC_CHECK
# define PERL_ASYNC_CHECK() NOOP
#endif
#ifndef PERL_ALLOC_CHECK
#define PERL_ALLOC_CHECK(p) NOOP
#endif
#define offer_nice_chunk(chunk, chunk_size) STMT_START { \
void *new_chunk; \
U32 new_chunk_size; \
LOCK_SV_MUTEX; \
new_chunk = (void *)(chunk); \
new_chunk_size = (chunk_size); \
if (new_chunk_size > PL_nice_chunk_size) { \
if (PL_nice_chunk) Safefree(PL_nice_chunk); \
PL_nice_chunk = new_chunk; \
PL_nice_chunk_size = new_chunk_size; \
} else { \
Safefree(chunk); \
} \
UNLOCK_SV_MUTEX; \
} STMT_END
#ifdef HAS_SEM
# include <sys/ipc.h>
# include <sys/sem.h>
# ifndef HAS_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
#if defined(PERL_IMPLICIT_CONTEXT)
#define START_MY_CXT
#define dMY_CXT_SV \
SV *my_cxt_sv = *hv_fetch(PL_modglobal, MY_CXT_KEY, \
sizeof(MY_CXT_KEY)-1, TRUE)
#define dMY_CXT \
dMY_CXT_SV; \
my_cxt_t *my_cxtp = INT2PTR(my_cxt_t*, SvUV(my_cxt_sv))
#define MY_CXT_INIT \
dMY_CXT_SV; \
\
my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\
Zero(my_cxtp, 1, my_cxt_t); \
sv_setuv(my_cxt_sv, PTR2UV(my_cxtp))
#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
#define START_MY_CXT static my_cxt_t my_cxt;
#define dMY_CXT_SV dNOOP
#define dMY_CXT dNOOP
#define MY_CXT_INIT 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
#ifdef I_FCNTL
# include <fcntl.h>
#endif
#ifdef I_SYS_FILE
# include <sys/file.h>
#endif
#if defined(HAS_FLOCK) && !defined(HAS_FLOCK_PROTO)
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(__BEOS__) || defined(__VOS__)
# undef PERLIO_USING_CRLF
# else
# define PERLIO_USING_CRLF 1
# endif
#endif
#ifdef IAMSUID
#ifdef I_SYS_STATVFS
# if defined(PERL_SCO) && !defined(_SVID3)
# define _SVID3
# endif
# include <sys/statvfs.h>
#endif
#ifdef I_SYS_MOUNT
# include <sys/mount.h>
#endif
#ifdef I_MNTENT
# include <mntent.h>
#endif
#ifdef I_SYS_STATFS
# include <sys/statfs.h>
#endif
#ifdef I_SYS_VFS
# ifdef __sgi
# define sv IRIX_sv
# endif
# include <sys/vfs.h>
# ifdef __sgi
# undef IRIX_sv
# endif
#endif
#ifdef I_USTAT
# include <ustat.h>
#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
#ifdef I_LIBUTIL
# include <libutil.h>
#endif
#ifndef EXEC_ARGV_CAST
#define EXEC_ARGV_CAST(x) x
#endif
#define IS_NUMBER_IN_UV 0x01
#define IS_NUMBER_GREATER_THAN_UV_MAX 0x02
#define IS_NUMBER_NOT_INT 0x04
#define IS_NUMBER_NEG 0x08
#define IS_NUMBER_INFINITY 0x10
#define IS_NUMBER_NAN 0x20
#define GROK_NUMERIC_RADIX(sp, send) grok_numeric_radix(sp, send)
#define PERL_SCAN_ALLOW_UNDERSCORES 0x01
#define PERL_SCAN_DISALLOW_PREFIX 0x02
#define PERL_SCAN_SILENT_ILLDIGIT 0x04
#define PERL_SCAN_GREATER_THAN_UV_MAX 0x02
#ifdef PERL_GPROF_CONTROL
extern void moncontrol(int);
#define PERL_GPROF_MONCONTROL(x) moncontrol(x)
#else
#define PERL_GPROF_MONCONTROL(x)
#endif
#ifdef UNDER_CE
#include "wince.h"
#endif
#ifdef EBCDIC
# if '^' == 95
# define NEXT_LINE_CHAR 0x15
# else
# define NEXT_LINE_CHAR 0x25
# endif
#else
# define NEXT_LINE_CHAR 0x85
#endif
#define UNICODE_LINE_SEPA_0 0xE2
#define UNICODE_LINE_SEPA_1 0x80
#define UNICODE_LINE_SEPA_2 0xA8
#define UNICODE_PARA_SEPA_0 0xE2
#define UNICODE_PARA_SEPA_1 0x80
#define UNICODE_PARA_SEPA_2 0xA9
#ifndef PIPESOCK_MODE
# define PIPESOCK_MODE
#endif
#define PERL_MAGIC_UTF8_CACHESIZE 2
#define PERL_UNICODE_STDIN_FLAG 0x0001
#define PERL_UNICODE_STDOUT_FLAG 0x0002
#define PERL_UNICODE_STDERR_FLAG 0x0004
#define PERL_UNICODE_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
#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 0x00ff
#define PERL_UNICODE_STDIN 'I'
#define PERL_UNICODE_STDOUT 'O'
#define PERL_UNICODE_STDERR 'E'
#define PERL_UNICODE_STD 'S'
#define PERL_UNICODE_IN 'i'
#define PERL_UNICODE_OUT 'o'
#define PERL_UNICODE_INOUT 'D'
#define PERL_UNICODE_ARGV 'A'
#define PERL_UNICODE_LOCALE 'L'
#define PERL_UNICODE_WIDESYSCALLS 'W'
#define PERL_SIGNALS_UNSAFE_FLAG 0x0001
#define PERL_BLOCK_SIGNALS
#if defined(HAS_SIGPROCMASK) && defined(PERL_BLOCK_SIGNALS)
# define PERL_BLOCKSIG_ADD(set,sig) \
sigset_t set; sigemptyset(&(set)); sigaddset(&(set), sig)
# define PERL_BLOCKSIG_BLOCK(set) \
sigprocmask(SIG_BLOCK, &(set), NULL)
# define PERL_BLOCKSIG_UNBLOCK(set) \
sigprocmask(SIG_UNBLOCK, &(set), NULL)
#endif
#ifndef PERL_BLOCKSIG_ADD
# define PERL_BLOCKSIG_ADD(set, sig) NOOP
#endif
#ifndef PERL_BLOCKSIG_BLOCK
# define PERL_BLOCKSIG_BLOCK(set) NOOP
#endif
#ifndef PERL_BLOCKSIG_UNBLOCK
# define PERL_BLOCKSIG_UNBLOCK(set) NOOP
#endif
#define PERL_ABS(x) ((x) < 0 ? -(x) : (x))
#define PERL_PATCHLEVEL_H_IMPLICIT
#include "patchlevel.h"
#undef PERL_PATCHLEVEL_H_IMPLICIT
#endif