This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
caller.pm typos
[perl5.git] / perl.h
CommitLineData
a0d0e21e 1/* perl.h
a687059c 2 *
9607fc9c 3 * Copyright (c) 1987-1997, Larry Wall
a687059c 4 *
352d5a3a
LW
5 * You may distribute under the terms of either the GNU General Public
6 * License or the Artistic License, as specified in the README file.
8d063cd8 7 *
8d063cd8 8 */
85e6fe83
LW
9#ifndef H_PERL
10#define H_PERL 1
8d063cd8 11
cea2e8a9
GS
12/*#define PERL_IMPLICIT_CONTEXT*/
13
760ac839
LW
14#ifdef PERL_FOR_X2P
15/*
16 * This file is being used for x2p stuff.
17 * Above symbol is defined via -D in 'x2p/Makefile.SH'
18 * Decouple x2p stuff from some of perls more extreme eccentricities.
19 */
55497cff 20#undef MULTIPLICITY
760ac839
LW
21#undef USE_STDIO
22#define USE_STDIO
23#endif /* PERL_FOR_X2P */
24
76e3520e 25#ifdef PERL_OBJECT
3dfd1da1
GS
26
27/* PERL_OBJECT explained - DickH and DougL @ ActiveState.com
28
29Defining PERL_OBJECT turns on creation of a C++ object that
30contains all writable core perl global variables and functions.
31Stated another way, all necessary global variables and functions
32are members of a big C++ object. This object's class is CPerlObj.
33This allows a Perl Host to have multiple, independent perl
34interpreters in the same process space. This is very important on
35Win32 systems as the overhead of process creation is quite high --
36this could be even higher than the script compile and execute time
37for small scripts.
38
39The perl executable implementation on Win32 is composed of perl.exe
40(the Perl Host) and perlX.dll. (the Perl Core). This allows the
41same Perl Core to easily be embedded in other applications that use
42the perl interpreter.
43
44+-----------+
45| Perl Host |
46+-----------+
47 ^
48 |
49 v
50+-----------+ +-----------+
51| Perl Core |<->| Extension |
52+-----------+ +-----------+ ...
53
54Defining PERL_OBJECT has the following effects:
55
56PERL CORE
571. CPerlObj is defined (this is the PERL_OBJECT)
582. all static functions that needed to access either global
59variables or functions needed are made member functions
603. all writable static variables are made member variables
614. all global variables and functions are defined as:
22c35a8c 62 #define var CPerlObj::PL_var
3dfd1da1 63 #define func CPerlObj::Perl_func
22c35a8c 64 * these are in embed.h
3dfd1da1
GS
65This necessitated renaming some local variables and functions that
66had the same name as a global variable or function. This was
67probably a _good_ thing anyway.
68
69
70EXTENSIONS
711. Access to global variables and perl functions is through a
72pointer to the PERL_OBJECT. This pointer type is CPerlObj*. This is
73made transparent to extension developers by the following macros:
22c35a8c 74 #define var pPerl->PL_var
3dfd1da1 75 #define func pPerl->Perl_func
6de196ee 76 * these are done in objXSUB.h
3dfd1da1
GS
77This requires that the extension be compiled as C++, which means
78that the code must be ANSI C and not K&R C. For K&R extensions,
79please see the C API notes located in Win32/GenCAPI.pl. This script
6de196ee 80creates a perlCAPI.lib that provides a K & R compatible C interface
3dfd1da1
GS
81to the PERL_OBJECT.
822. Local variables and functions cannot have the same name as perl's
83variables or functions since the macros will redefine these. Look for
84this if you get some strange error message and it does not look like
85the code that you had written. This often happens with variables that
86are local to a function.
87
88PERL HOST
891. The perl host is linked with perlX.lib to get perl_alloc. This
90function will return a pointer to CPerlObj (the PERL_OBJECT). It
0f4eea8f
DL
91takes pointers to the various PerlXXX_YYY interfaces (see iperlsys.h
92for more information on this).
3dfd1da1
GS
932. The perl host calls the same functions as normally would be
94called in setting up and running a perl script, except that the
95functions are now member functions of the PERL_OBJECT.
96
97*/
98
99
76e3520e
GS
100class CPerlObj;
101
102#define STATIC
103#define CPERLscope(x) CPerlObj::x
104#define CPERLproto CPerlObj *
e3b8966e 105#define _CPERLproto ,CPERLproto
76e3520e
GS
106#define CPERLarg CPerlObj *pPerl
107#define CPERLarg_ CPERLarg,
e3b8966e 108#define _CPERLarg ,CPERLarg
1d583055
GS
109#define PERL_OBJECT_THIS this
110#define _PERL_OBJECT_THIS ,this
111#define PERL_OBJECT_THIS_ this,
312caa8e 112#define CALL_FPTR(fptr) (this->*fptr)
76e3520e
GS
113
114#else /* !PERL_OBJECT */
115
116#define STATIC static
117#define CPERLscope(x) x
118#define CPERLproto
e3b8966e 119#define _CPERLproto
565764a8 120#define CPERLarg void
76e3520e 121#define CPERLarg_
e3b8966e 122#define _CPERLarg
1d583055
GS
123#define PERL_OBJECT_THIS
124#define _PERL_OBJECT_THIS
125#define PERL_OBJECT_THIS_
312caa8e 126#define CALL_FPTR(fptr) (*fptr)
76e3520e
GS
127
128#endif /* PERL_OBJECT */
129
312caa8e
CS
130#define CALLRUNOPS CALL_FPTR(PL_runops)
131#define CALLREGCOMP CALL_FPTR(PL_regcompp)
132#define CALLREGEXEC CALL_FPTR(PL_regexecp)
133#define CALLPROTECT CALL_FPTR(PL_protect)
134
71be2cbc 135#define VOIDUSED 1
136#include "config.h"
137
cea2e8a9
GS
138/* XXXXXX testing threads via implicit pointer */
139#ifdef USE_THREADS
140#define PERL_IMPLICIT_CONTEXT
22c35a8c 141#endif
71be2cbc 142
326b05e3
GS
143#undef START_EXTERN_C
144#undef END_EXTERN_C
145#undef EXTERN_C
32f822de
GS
146#ifdef __cplusplus
147# define START_EXTERN_C extern "C" {
148# define END_EXTERN_C }
149# define EXTERN_C extern "C"
150#else
151# define START_EXTERN_C
152# define END_EXTERN_C
153# define EXTERN_C
154#endif
155
462e5cf6
MB
156#ifdef OP_IN_REGISTER
157# ifdef __GNUC__
158# define stringify_immed(s) #s
159# define stringify(s) stringify_immed(s)
d1ca3daa 160register struct op *Perl_op asm(stringify(OP_IN_REGISTER));
462e5cf6
MB
161# endif
162#endif
163
728e2803 164/*
165 * STMT_START { statements; } STMT_END;
166 * can be used as a single statement, as in
167 * if (x) STMT_START { ... } STMT_END; else ...
168 *
169 * Trying to select a version that gives no warnings...
170 */
171#if !(defined(STMT_START) && defined(STMT_END))
169d69b2 172# if defined(__GNUC__) && !defined(__STRICT_ANSI__) && !defined(__cplusplus)
728e2803 173# define STMT_START (void)( /* gcc supports ``({ STATEMENTS; })'' */
174# define STMT_END )
175# else
176 /* Now which other defined()s do we need here ??? */
177# if (VOIDFLAGS) && (defined(sun) || defined(__sun__))
178# define STMT_START if (1)
179# define STMT_END else (void)0
180# else
181# define STMT_START do
182# define STMT_END while (0)
183# endif
184# endif
185#endif
186
462e5cf6 187#define NOOP (void)0
cea2e8a9 188#define dNOOP extern int Perl___notused
61bb5906 189#define WITH_THR(s) STMT_START { dTHR; s; } STMT_END
ea0efc06 190
55497cff 191/*
192 * SOFT_CAST can be used for args to prototyped functions to retain some
193 * type checking; it only casts if the compiler does not know prototypes.
194 */
195#if defined(CAN_PROTOTYPE) && defined(DEBUGGING_COMPILE)
196#define SOFT_CAST(type)
197#else
198#define SOFT_CAST(type) (type)
199#endif
79072805 200
6ee623d5 201#ifndef BYTEORDER /* Should never happen -- byteorder is in config.h */
79072805
LW
202# define BYTEORDER 0x1234
203#endif
204
205/* Overall memory policy? */
206#ifndef CONSERVATIVE
207# define LIBERAL 1
208#endif
209
8ada0baa
JH
210#if 'A' == 65 && 'I' == 73 && 'J' == 74 && 'Z' == 90
211#define ASCIIish
212#else
213#undef ASCIIish
214#endif
215
79072805
LW
216/*
217 * The following contortions are brought to you on behalf of all the
218 * standards, semi-standards, de facto standards, not-so-de-facto standards
219 * of the world, as well as all the other botches anyone ever thought of.
220 * The basic theory is that if we work hard enough here, the rest of the
221 * code can be a lot prettier. Well, so much for theory. Sorry, Henry...
222 */
ac58e20f 223
ee0007ab 224/* define this once if either system, instead of cluttering up the src */
8736538c 225#if defined(MSDOS) || defined(atarist) || defined(WIN32) || defined(CYGWIN32)
ee0007ab
LW
226#define DOSISH 1
227#endif
228
a0d0e21e 229#if defined(__STDC__) || defined(vax11c) || defined(_AIX) || defined(__stdc__) || defined(__cplusplus)
352d5a3a
LW
230# define STANDARD_C 1
231#endif
232
09b7f37c 233#if defined(__cplusplus) || defined(WIN32) || defined(__sgi) || defined(OS2) || defined(__DGUX)
68dc0745 234# define DONT_DECLARE_STD 1
235#endif
236
352d5a3a 237#if defined(HASVOLATILE) || defined(STANDARD_C)
79072805
LW
238# ifdef __cplusplus
239# define VOL // to temporarily suppress warnings
240# else
241# define VOL volatile
242# endif
663a0e37 243#else
79072805 244# define VOL
663a0e37
LW
245#endif
246
3280af22
NIS
247#define TAINT (PL_tainted = TRUE)
248#define TAINT_NOT (PL_tainted = FALSE)
249#define TAINT_IF(c) if (c) { PL_tainted = TRUE; }
250#define TAINT_ENV() if (PL_tainting) { taint_env(); }
22c35a8c 251#define TAINT_PROPER(s) if (PL_tainting) { taint_proper(Nullch, s); }
a687059c 252
a6e633de 253/* XXX All process group stuff is handled in pp_sys.c. Should these
254 defines move there? If so, I could simplify this a lot. --AD 9/96.
255*/
256/* Process group stuff changed from traditional BSD to POSIX.
257 perlfunc.pod documents the traditional BSD-style syntax, so we'll
258 try to preserve that, if possible.
259*/
260#ifdef HAS_SETPGID
261# define BSD_SETPGRP(pid, pgrp) setpgid((pid), (pgrp))
c07a80fd 262#else
a6e633de 263# if defined(HAS_SETPGRP) && defined(USE_BSD_SETPGRP)
264# define BSD_SETPGRP(pid, pgrp) setpgrp((pid), (pgrp))
265# else
266# ifdef HAS_SETPGRP2 /* DG/UX */
267# define BSD_SETPGRP(pid, pgrp) setpgrp2((pid), (pgrp))
268# endif
269# endif
270#endif
271#if defined(BSD_SETPGRP) && !defined(HAS_SETPGRP)
272# define HAS_SETPGRP /* Well, effectively it does . . . */
273#endif
274
275/* getpgid isn't POSIX, but at least Solaris and Linux have it, and it makes
276 our life easier :-) so we'll try it.
277*/
278#ifdef HAS_GETPGID
279# define BSD_GETPGRP(pid) getpgid((pid))
280#else
281# if defined(HAS_GETPGRP) && defined(USE_BSD_GETPGRP)
282# define BSD_GETPGRP(pid) getpgrp((pid))
283# else
284# ifdef HAS_GETPGRP2 /* DG/UX */
285# define BSD_GETPGRP(pid) getpgrp2((pid))
286# endif
287# endif
288#endif
289#if defined(BSD_GETPGRP) && !defined(HAS_GETPGRP)
290# define HAS_GETPGRP /* Well, effectively it does . . . */
291#endif
292
293/* These are not exact synonyms, since setpgrp() and getpgrp() may
294 have different behaviors, but perl.h used to define USE_BSDPGRP
295 (prior to 5.003_05) so some extension might depend on it.
296*/
297#if defined(USE_BSD_SETPGRP) || defined(USE_BSD_GETPGRP)
298# ifndef USE_BSDPGRP
299# define USE_BSDPGRP
300# endif
663a0e37
LW
301#endif
302
8ac5a1fe
MH
303/* HP-UX 10.X CMA (Common Multithreaded Architecure) insists that
304 pthread.h must be included before all other header files.
305*/
306#if defined(USE_THREADS) && defined(PTHREAD_H_FIRST)
307# include <pthread.h>
308#endif
309
760ac839
LW
310#ifndef _TYPES_ /* If types.h defines this it's easy. */
311# ifndef major /* Does everyone's types.h define this? */
312# include <sys/types.h>
c07a80fd 313# endif
663a0e37
LW
314#endif
315
760ac839
LW
316#ifdef __cplusplus
317# ifndef I_STDARG
318# define I_STDARG 1
319# endif
320#endif
321
322#ifdef I_STDARG
323# include <stdarg.h>
324#else
325# ifdef I_VARARGS
326# include <varargs.h>
327# endif
328#endif
329
4633a7c4 330#ifdef USE_NEXT_CTYPE
0c30d9ec 331
092bebab
JH
332#if NX_CURRENT_COMPILER_RELEASE >= 500
333# include <bsd/ctypes.h>
334#else
335# if NX_CURRENT_COMPILER_RELEASE >= 400
336# include <objc/NXCType.h>
337# else /* NX_CURRENT_COMPILER_RELEASE < 400 */
338# include <appkit/NXCType.h>
339# endif /* NX_CURRENT_COMPILER_RELEASE >= 400 */
340#endif /* NX_CURRENT_COMPILER_RELEASE >= 500 */
0c30d9ec 341
342#else /* !USE_NEXT_CTYPE */
fe14fcc3 343#include <ctype.h>
0c30d9ec 344#endif /* USE_NEXT_CTYPE */
a0d0e21e
LW
345
346#ifdef METHOD /* Defined by OSF/1 v3.0 by ctype.h */
347#undef METHOD
a0d0e21e
LW
348#endif
349
4633a7c4 350#ifdef I_LOCALE
36477c24 351# include <locale.h>
4633a7c4
LW
352#endif
353
36477c24 354#if !defined(NO_LOCALE) && defined(HAS_SETLOCALE)
355# define USE_LOCALE
356# if !defined(NO_LOCALE_COLLATE) && defined(LC_COLLATE) \
357 && defined(HAS_STRXFRM)
358# define USE_LOCALE_COLLATE
359# endif
360# if !defined(NO_LOCALE_CTYPE) && defined(LC_CTYPE)
361# define USE_LOCALE_CTYPE
362# endif
363# if !defined(NO_LOCALE_NUMERIC) && defined(LC_NUMERIC)
364# define USE_LOCALE_NUMERIC
365# endif
366#endif /* !NO_LOCALE && HAS_SETLOCALE */
a0d0e21e 367
fe14fcc3 368#include <setjmp.h>
79072805 369
a0d0e21e 370#ifdef I_SYS_PARAM
79072805
LW
371# ifdef PARAM_NEEDS_TYPES
372# include <sys/types.h>
373# endif
374# include <sys/param.h>
352d5a3a 375#endif
79072805
LW
376
377
378/* Use all the "standard" definitions? */
a0d0e21e 379#if defined(STANDARD_C) && defined(I_STDLIB)
79072805 380# include <stdlib.h>
ff68c719 381#endif
03a14243 382
cea2e8a9
GS
383#if !defined(PERL_FOR_X2P)
384# include "embed.h"
385#endif
386
c31fac66
GS
387#define MEM_SIZE Size_t
388
55497cff 389/* This comes after <stdlib.h> so we don't try to change the standard
390 * library prototypes; we'll use our own in proto.h instead. */
03a14243 391
4633a7c4 392#ifdef MYMALLOC
86058a2d
GS
393# ifdef PERL_POLLUTE_MALLOC
394# define Perl_malloc malloc
395# define Perl_calloc calloc
396# define Perl_realloc realloc
397# define Perl_mfree free
398# else
399# define EMBEDMYMALLOC /* for compatibility */
400# endif
20ce7b12
GS
401Malloc_t Perl_malloc (MEM_SIZE nbytes);
402Malloc_t Perl_calloc (MEM_SIZE elements, MEM_SIZE size);
403Malloc_t Perl_realloc (Malloc_t where, MEM_SIZE nbytes);
86058a2d
GS
404/* 'mfree' rather than 'free', since there is already a 'perl_free'
405 * that causes clashes with case-insensitive linkers */
20ce7b12 406Free_t Perl_mfree (Malloc_t where);
55497cff 407
651b9576
GS
408# define safemalloc Perl_malloc
409# define safecalloc Perl_calloc
410# define saferealloc Perl_realloc
411# define safefree Perl_mfree
f2517201
GS
412#else /* MYMALLOC */
413# define safemalloc safesysmalloc
414# define safecalloc safesyscalloc
415# define saferealloc safesysrealloc
416# define safefree safesysfree
55497cff 417#endif /* MYMALLOC */
4633a7c4 418
ff68c719 419#if defined(STANDARD_C) && defined(I_STDDEF)
420# include <stddef.h>
71be2cbc 421# define STRUCT_OFFSET(s,m) offsetof(s,m)
ff68c719 422#else
71be2cbc 423# define STRUCT_OFFSET(s,m) (Size_t)(&(((s *)0)->m))
ff68c719 424#endif
425
a0d0e21e
LW
426#if defined(I_STRING) || defined(__cplusplus)
427# include <string.h>
428#else
429# include <strings.h>
430#endif
431
432#if !defined(HAS_STRCHR) && defined(HAS_INDEX) && !defined(strchr)
433#define strchr index
434#define strrchr rindex
435#endif
436
16d20bd9
AD
437#ifdef I_MEMORY
438# include <memory.h>
439#endif
440
fe14fcc3 441#ifdef HAS_MEMCPY
85e6fe83 442# if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)
fe14fcc3 443# ifndef memcpy
20ce7b12 444 extern char * memcpy (char*, char*, int);
ee0007ab
LW
445# endif
446# endif
447#else
448# ifndef memcpy
449# ifdef HAS_BCOPY
450# define memcpy(d,s,l) bcopy(s,d,l)
451# else
452# define memcpy(d,s,l) my_bcopy(s,d,l)
453# endif
454# endif
455#endif /* HAS_MEMCPY */
fe14fcc3 456
ee0007ab 457#ifdef HAS_MEMSET
85e6fe83 458# if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)
ee0007ab 459# ifndef memset
20ce7b12 460 extern char *memset (char*, int, int);
ee0007ab
LW
461# endif
462# endif
ee0007ab 463#else
fc36a67e 464# define memset(d,c,l) my_memset(d,c,l)
ee0007ab
LW
465#endif /* HAS_MEMSET */
466
85e6fe83 467#if !defined(HAS_MEMMOVE) && !defined(memmove)
2304df62 468# if defined(HAS_BCOPY) && defined(HAS_SAFE_BCOPY)
79072805
LW
469# define memmove(d,s,l) bcopy(s,d,l)
470# else
2304df62 471# if defined(HAS_MEMCPY) && defined(HAS_SAFE_MEMCPY)
79072805 472# define memmove(d,s,l) memcpy(d,s,l)
ee0007ab 473# else
79072805 474# define memmove(d,s,l) my_bcopy(s,d,l)
ee0007ab 475# endif
352d5a3a 476# endif
d9d8d8de 477#endif
ee0007ab 478
36477c24 479#if defined(mips) && defined(ultrix) && !defined(__STDC__)
480# undef HAS_MEMCMP
481#endif
482
483#if defined(HAS_MEMCMP) && defined(HAS_SANE_MEMCMP)
85e6fe83 484# if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)
ee0007ab 485# ifndef memcmp
20ce7b12 486 extern int memcmp (char*, char*, int);
ee0007ab
LW
487# endif
488# endif
36477c24 489# ifdef BUGGY_MSC
490 # pragma function(memcmp)
491# endif
ee0007ab
LW
492#else
493# ifndef memcmp
ecfc5424 494# define memcmp my_memcmp
352d5a3a 495# endif
36477c24 496#endif /* HAS_MEMCMP && HAS_SANE_MEMCMP */
8d063cd8 497
fc36a67e 498#ifndef memzero
c635e13b 499# ifdef HAS_MEMSET
500# define memzero(d,l) memset(d,0,l)
79072805 501# else
c635e13b 502# ifdef HAS_BZERO
503# define memzero(d,l) bzero(d,l)
79072805 504# else
fc36a67e 505# define memzero(d,l) my_bzero(d,l)
79072805
LW
506# endif
507# endif
d9d8d8de 508#endif
378cc40b 509
0f27ced1
JH
510#ifndef memchr
511# ifndef HAS_MEMCHR
512# define memchr(s,c,n) ninstr((char*)(s), ((char*)(s)) + n, &(c), &(c) + 1)
513# endif
514#endif
515
36477c24 516#ifndef HAS_BCMP
517# ifndef bcmp
518# define bcmp(s1,s2,l) memcmp(s1,s2,l)
79072805 519# endif
36477c24 520#endif /* !HAS_BCMP */
378cc40b 521
ae986130 522#ifdef I_NETINET_IN
79072805 523# include <netinet/in.h>
ae986130
LW
524#endif
525
28e8609d
JH
526#ifdef I_ARPA_INET
527# include <arpa/inet.h>
528#endif
529
84902520
TB
530#if defined(SF_APPEND) && defined(USE_SFIO) && defined(I_SFIO)
531/* <sfio.h> defines SF_APPEND and <sys/stat.h> might define SF_APPEND
532 * (the neo-BSD seem to do this). */
533# undef SF_APPEND
534#endif
535
1aef975c 536#ifdef I_SYS_STAT
84902520 537# include <sys/stat.h>
1aef975c 538#endif
79072805 539
a0d0e21e
LW
540/* The stat macros for Amdahl UTS, Unisoft System V/88 (and derivatives
541 like UTekV) are broken, sometimes giving false positives. Undefine
542 them here and let the code below set them to proper values.
543
544 The ghs macro stands for GreenHills Software C-1.8.5 which
545 is the C compiler for sysV88 and the various derivatives.
546 This header file bug is corrected in gcc-2.5.8 and later versions.
547 --Kaveh Ghazi (ghazi@noc.rutgers.edu) 10/3/94. */
548
549#if defined(uts) || (defined(m88k) && defined(ghs))
79072805
LW
550# undef S_ISDIR
551# undef S_ISCHR
552# undef S_ISBLK
553# undef S_ISREG
554# undef S_ISFIFO
555# undef S_ISLNK
ee0007ab 556#endif
135863df 557
663a0e37
LW
558#ifdef I_TIME
559# include <time.h>
ffed7fef 560#endif
663a0e37 561
fe14fcc3 562#ifdef I_SYS_TIME
85e6fe83 563# ifdef I_SYS_TIME_KERNEL
663a0e37
LW
564# define KERNEL
565# endif
566# include <sys/time.h>
85e6fe83 567# ifdef I_SYS_TIME_KERNEL
663a0e37
LW
568# undef KERNEL
569# endif
a687059c 570#endif
135863df 571
55497cff 572#if defined(HAS_TIMES) && defined(I_SYS_TIMES)
85e6fe83 573# include <sys/times.h>
d9d8d8de 574#endif
8d063cd8 575
fe14fcc3 576#if defined(HAS_STRERROR) && (!defined(HAS_MKDIR) || !defined(HAS_RMDIR))
79072805 577# undef HAS_STRERROR
663a0e37
LW
578#endif
579
580#include <errno.h>
ed6116ce 581#ifdef HAS_SOCKET
85e6fe83 582# ifdef I_NET_ERRNO
ed6116ce
LW
583# include <net/errno.h>
584# endif
585#endif
f86702cc 586
587#ifdef VMS
588# define SETERRNO(errcode,vmserrcode) \
589 STMT_START { \
590 set_errno(errcode); \
591 set_vaxc_errno(vmserrcode); \
592 } STMT_END
748a9306 593#else
aba27d88 594# define SETERRNO(errcode,vmserrcode) (errno = (errcode))
748a9306 595#endif
ed6116ce 596
38a03e6e
MB
597#ifdef USE_THREADS
598# define ERRSV (thr->errsv)
599# define ERRHV (thr->errhv)
940cb80d
MB
600# define DEFSV THREADSV(0)
601# define SAVE_DEFSV save_threadsv(0)
38a03e6e 602#else
3280af22
NIS
603# define ERRSV GvSV(PL_errgv)
604# define ERRHV GvHV(PL_errgv)
605# define DEFSV GvSV(PL_defgv)
606# define SAVE_DEFSV SAVESPTR(GvSV(PL_defgv))
38a03e6e
MB
607#endif /* USE_THREADS */
608
55497cff 609#ifndef errno
5ff3f7a4
GS
610 extern int errno; /* ANSI allows errno to be an lvalue expr.
611 * For example in multithreaded environments
612 * something like this might happen:
613 * extern int *_errno(void);
614 * #define errno (*_errno()) */
d9d8d8de 615#endif
663a0e37 616
2304df62 617#ifdef HAS_STRERROR
a0d0e21e 618# ifdef VMS
20ce7b12 619 char *strerror (int,...);
a0d0e21e 620# else
68dc0745 621#ifndef DONT_DECLARE_STD
20ce7b12 622 char *strerror (int);
68dc0745 623#endif
a0d0e21e 624# endif
2304df62
AD
625# ifndef Strerror
626# define Strerror strerror
627# endif
628#else
629# ifdef HAS_SYS_ERRLIST
79072805
LW
630 extern int sys_nerr;
631 extern char *sys_errlist[];
2304df62
AD
632# ifndef Strerror
633# define Strerror(e) \
79072805 634 ((e) < 0 || (e) >= sys_nerr ? "(unknown)" : sys_errlist[e])
2304df62 635# endif
79072805 636# endif
35c8bce7 637#endif
663a0e37 638
2304df62 639#ifdef I_SYS_IOCTL
79072805
LW
640# ifndef _IOCTL_
641# include <sys/ioctl.h>
642# endif
a687059c
LW
643#endif
644
ee0007ab 645#if defined(mc300) || defined(mc500) || defined(mc700) || defined(mc6000)
79072805
LW
646# ifdef HAS_SOCKETPAIR
647# undef HAS_SOCKETPAIR
648# endif
2304df62
AD
649# ifdef I_NDBM
650# undef I_NDBM
79072805 651# endif
a687059c
LW
652#endif
653
a687059c 654#if INTSIZE == 2
79072805
LW
655# define htoni htons
656# define ntohi ntohs
a687059c 657#else
79072805
LW
658# define htoni htonl
659# define ntohi ntohl
a687059c
LW
660#endif
661
a0d0e21e 662/* Configure already sets Direntry_t */
35c8bce7 663#if defined(I_DIRENT)
663a0e37 664# include <dirent.h>
8f1f23e8
W
665 /* NeXT needs dirent + sys/dir.h */
666# if defined(I_SYS_DIR) && (defined(NeXT) || defined(__NeXT__))
a0d0e21e
LW
667# include <sys/dir.h>
668# endif
ae986130 669#else
fe14fcc3 670# ifdef I_SYS_NDIR
79a0689e 671# include <sys/ndir.h>
663a0e37 672# else
fe14fcc3 673# ifdef I_SYS_DIR
79a0689e
LW
674# ifdef hp9000s500
675# include <ndir.h> /* may be wrong in the future */
676# else
677# include <sys/dir.h>
678# endif
663a0e37
LW
679# endif
680# endif
4633a7c4 681#endif
a687059c 682
352d5a3a
LW
683#ifdef FPUTS_BOTCH
684/* work around botch in SunOS 4.0.1 and 4.0.2 */
685# ifndef fputs
79072805 686# define fputs(sv,fp) fprintf(fp,"%s",sv)
352d5a3a
LW
687# endif
688#endif
689
c623bd54
LW
690/*
691 * The following gobbledygook brought to you on behalf of __STDC__.
692 * (I could just use #ifndef __STDC__, but this is more bulletproof
693 * in the face of half-implementations.)
694 */
695
696#ifndef S_IFMT
697# ifdef _S_IFMT
698# define S_IFMT _S_IFMT
699# else
700# define S_IFMT 0170000
701# endif
702#endif
703
704#ifndef S_ISDIR
705# define S_ISDIR(m) ((m & S_IFMT) == S_IFDIR)
706#endif
707
708#ifndef S_ISCHR
709# define S_ISCHR(m) ((m & S_IFMT) == S_IFCHR)
710#endif
711
712#ifndef S_ISBLK
fe14fcc3
LW
713# ifdef S_IFBLK
714# define S_ISBLK(m) ((m & S_IFMT) == S_IFBLK)
715# else
716# define S_ISBLK(m) (0)
717# endif
c623bd54
LW
718#endif
719
720#ifndef S_ISREG
721# define S_ISREG(m) ((m & S_IFMT) == S_IFREG)
722#endif
723
724#ifndef S_ISFIFO
fe14fcc3
LW
725# ifdef S_IFIFO
726# define S_ISFIFO(m) ((m & S_IFMT) == S_IFIFO)
727# else
728# define S_ISFIFO(m) (0)
729# endif
c623bd54
LW
730#endif
731
732#ifndef S_ISLNK
733# ifdef _S_ISLNK
734# define S_ISLNK(m) _S_ISLNK(m)
735# else
736# ifdef _S_IFLNK
737# define S_ISLNK(m) ((m & S_IFMT) == _S_IFLNK)
738# else
739# ifdef S_IFLNK
740# define S_ISLNK(m) ((m & S_IFMT) == S_IFLNK)
741# else
742# define S_ISLNK(m) (0)
743# endif
744# endif
745# endif
746#endif
747
748#ifndef S_ISSOCK
749# ifdef _S_ISSOCK
750# define S_ISSOCK(m) _S_ISSOCK(m)
751# else
752# ifdef _S_IFSOCK
753# define S_ISSOCK(m) ((m & S_IFMT) == _S_IFSOCK)
754# else
755# ifdef S_IFSOCK
756# define S_ISSOCK(m) ((m & S_IFMT) == S_IFSOCK)
757# else
758# define S_ISSOCK(m) (0)
759# endif
760# endif
761# endif
762#endif
763
764#ifndef S_IRUSR
765# ifdef S_IREAD
766# define S_IRUSR S_IREAD
767# define S_IWUSR S_IWRITE
768# define S_IXUSR S_IEXEC
769# else
770# define S_IRUSR 0400
771# define S_IWUSR 0200
772# define S_IXUSR 0100
773# endif
774# define S_IRGRP (S_IRUSR>>3)
775# define S_IWGRP (S_IWUSR>>3)
776# define S_IXGRP (S_IXUSR>>3)
777# define S_IROTH (S_IRUSR>>6)
778# define S_IWOTH (S_IWUSR>>6)
779# define S_IXOTH (S_IXUSR>>6)
780#endif
781
782#ifndef S_ISUID
783# define S_ISUID 04000
784#endif
785
786#ifndef S_ISGID
787# define S_ISGID 02000
788#endif
789
79072805
LW
790#ifdef ff_next
791# undef ff_next
352d5a3a
LW
792#endif
793
a0d0e21e 794#if defined(cray) || defined(gould) || defined(i860) || defined(pyr)
45d8adaa
LW
795# define SLOPPYDIVIDE
796#endif
797
748a9306
LW
798#ifdef UV
799#undef UV
800#endif
801
5ff3f7a4
GS
802#ifdef I_INTTYPES
803#include <inttypes.h>
804#endif
805
27d4fb96 806/* XXX QUAD stuff is not currently supported on most systems.
807 Specifically, perl internals don't support long long. Among
808 the many problems is that some compilers support long long,
809 but the underlying library functions (such as sprintf) don't.
810 Some things do work (such as quad pack/unpack on convex);
811 also some systems use long long for the fpos_t typedef. That
812 seems to work too.
813
814 The IV type is supposed to be long enough to hold any integral
815 value or a pointer.
816 --Andy Dougherty August 1996
817*/
818
5ff3f7a4
GS
819/* Much more 64-bit probing added. Now we should get Quad_t
820 in most systems: int64_t, long long, long, int, will do.
821
822 Beware of LP32 systems (ILP32, ILP32LL64). Such systems have been
823 used to sizeof(long) == sizeof(foo*). This is a bad assumption
824 because then IV/UV have been 32 bits, too. Which, in turn means
825 that even if the system has quads (e.g. long long), IV cannot be a
826 quad. Introducing a 64-bit IV (because of long long existing)
85ab1d1d 827 will introduce binary incompatibility.
5ff3f7a4
GS
828
829 Summary: a long long system needs to add -DUSE_LONG_LONG to $ccflags
830 to get quads -- and if its pointers are still 32 bits, this will break
831 binary compatibility. Casting an IV (a long long) to a pointer will
832 truncate half of the IV away.
833
834 --jhi September 1998 */
835
836#if INTSIZE == 4 && LONGSIZE == 4 && PTRSIZE == 4
837# define PERL_ILP32
838# if defined(HAS_LONG_LONG) && LONGLONGSIZE == 8
839# define PERL_ILP32LL64
45d8adaa 840# endif
f86702cc 841#endif
842
5ff3f7a4
GS
843#if LONGSIZE == 8 && PTRSIZE == 8
844# define PERL_LP64
845# if INTSIZE == 8
846# define PERL_ILP64
847# endif
848#endif
849
03145268
SH
850#ifndef Quad_t
851# if LONGSIZE == 8
852# define Quad_t long
e862df63 853# define Uquad_t unsigned long
5ff3f7a4 854# define PERL_QUAD_IS_LONG
03145268
SH
855# endif
856#endif
857
858#ifndef Quad_t
859# if INTSIZE == 8
860# define Quad_t int
e862df63 861# define Uquad_t unsigned int
03145268
SH
862# define PERL_QUAD_IS_INT
863# endif
864#endif
865
866#ifndef Quad_t
867# ifdef USE_LONG_LONG /* See above note about LP32. --jhi */
868# if defined(HAS_LONG_LONG) && LONGLONGSIZE == 8
869# define Quad_t long long
e862df63 870# define Uquad_t unsigned long long
03145268 871# define PERL_QUAD_IS_LONG_LONG
5ff3f7a4 872# endif
03145268
SH
873# endif
874#endif
875
876#ifndef Quad_t
877# ifdef HAS_INT64_T
878# define Quad_t int64_t
879# define Uquad_t uint64_t
880# define PERL_QUAD_IS_INT64_T
881# endif
6ee623d5
GS
882#endif
883
f86702cc 884#ifdef Quad_t
885# define HAS_QUAD
03145268 886# ifndef Uquad_t
e862df63
HB
887 /* Note that if your Quad_t is a typedef (not a #define) you *MUST*
888 * have defined by now Uquad_t yourself because 'unsigned type'
889 * is illegal. */
03145268
SH
890# define Uquad_t unsigned Quad_t
891# endif
5ff3f7a4
GS
892#endif
893
03145268
SH
894#if defined(USE_64_BITS) && defined(HAS_QUAD)
895# ifdef PERL_QUAD_IS_LONG /* LP64 */
896 typedef long IV;
897 typedef unsigned long UV;
898# else
899# ifdef PERL_QUAD_IS_INT /* ILP64 */
900 typedef int IV;
901 typedef unsigned int UV;
902# else
903# ifdef PERL_QUAD_IS_LONG_LONG /* LL64 */
904 typedef long long IV;
905 typedef unsigned long long UV;
906# else
907# ifdef PERL_QUAD_IS_INT64_T /* C9X */
908 typedef int64_t IV;
909 typedef uint64_t UV;
910# endif
911# endif
912# endif
913# endif
5ff3f7a4
GS
914# if defined(PERL_QUAD_IS_INT64_T) && defined(INT64_MAX)
915# define IV_MAX INT64_MAX
916# define IV_MIN INT64_MIN
917# define UV_MAX UINT64_MAX
918# define UV_MIN UINT64_MIN
919# else
920# define IV_MAX PERL_QUAD_MAX
921# define IV_MIN PERL_QUAD_MIN
922# define UV_MAX PERL_UQUAD_MAX
923# define UV_MIN PERL_UQUAD_MIN
924# endif
79072805 925#else
03145268
SH
926 typedef long IV;
927 typedef unsigned long UV;
5ff3f7a4
GS
928# if defined(INT32_MAX) && LONGSIZE == 4
929# define IV_MAX INT32_MAX
930# define IV_MIN INT32_MIN
931# define UV_MAX UINT32_MAX
932# define UV_MIN UINT32_MIN
933# else
934# define IV_MAX PERL_LONG_MAX
935# define IV_MIN PERL_LONG_MIN
936# define UV_MAX PERL_ULONG_MAX
937# define UV_MIN PERL_ULONG_MIN
938# endif
79072805
LW
939#endif
940
760ac839
LW
941/* Previously these definitions used hardcoded figures.
942 * It is hoped these formula are more portable, although
943 * no data one way or another is presently known to me.
944 * The "PERL_" names are used because these calculated constants
945 * do not meet the ANSI requirements for LONG_MAX, etc., which
946 * need to be constants acceptable to #if - kja
947 * define PERL_LONG_MAX 2147483647L
948 * define PERL_LONG_MIN (-LONG_MAX - 1)
949 * define PERL ULONG_MAX 4294967295L
950 */
951
952#ifdef I_LIMITS /* Needed for cast_xxx() functions below. */
953# include <limits.h>
954#else
955#ifdef I_VALUES
956# include <values.h>
957#endif
958#endif
959
99abf803 960/*
961 * Try to figure out max and min values for the integral types. THE CORRECT
962 * SOLUTION TO THIS MESS: ADAPT enquire.c FROM GCC INTO CONFIGURE. The
963 * following hacks are used if neither limits.h or values.h provide them:
964 * U<TYPE>_MAX: for types >= int: ~(unsigned TYPE)0
965 * for types < int: (unsigned TYPE)~(unsigned)0
966 * The argument to ~ must be unsigned so that later signed->unsigned
967 * conversion can't modify the value's bit pattern (e.g. -0 -> +0),
968 * and it must not be smaller than int because ~ does integral promotion.
969 * <type>_MAX: (<type>) (U<type>_MAX >> 1)
970 * <type>_MIN: -<type>_MAX - <is_twos_complement_architecture: (3 & -1) == 3>.
971 * The latter is a hack which happens to work on some machines but
972 * does *not* catch any random system, or things like integer types
973 * with NaN if that is possible.
974 *
975 * All of the types are explicitly cast to prevent accidental loss of
976 * numeric range, and in the hope that they will be less likely to confuse
977 * over-eager optimizers.
978 *
979 */
27d4fb96 980
99abf803 981#define PERL_UCHAR_MIN ((unsigned char)0)
982
983#ifdef UCHAR_MAX
984# define PERL_UCHAR_MAX ((unsigned char)UCHAR_MAX)
27d4fb96 985#else
99abf803 986# ifdef MAXUCHAR
987# define PERL_UCHAR_MAX ((unsigned char)MAXUCHAR)
27d4fb96 988# else
99abf803 989# define PERL_UCHAR_MAX ((unsigned char)~(unsigned)0)
27d4fb96 990# endif
991#endif
99abf803 992
993/*
994 * CHAR_MIN and CHAR_MAX are not included here, as the (char) type may be
995 * ambiguous. It may be equivalent to (signed char) or (unsigned char)
996 * depending on local options. Until Configure detects this (or at least
997 * detects whether the "signed" keyword is available) the CHAR ranges
998 * will not be included. UCHAR functions normally.
999 * - kja
1000 */
27d4fb96 1001
99abf803 1002#define PERL_USHORT_MIN ((unsigned short)0)
1003
1004#ifdef USHORT_MAX
1005# define PERL_USHORT_MAX ((unsigned short)USHORT_MAX)
27d4fb96 1006#else
99abf803 1007# ifdef MAXUSHORT
1008# define PERL_USHORT_MAX ((unsigned short)MAXUSHORT)
27d4fb96 1009# else
ef2f54b0
CB
1010# ifdef USHRT_MAX
1011# define PERL_USHORT_MAX ((unsigned short)USHRT_MAX)
1012# else
1013# define PERL_USHORT_MAX ((unsigned short)~(unsigned)0)
1014# endif
27d4fb96 1015# endif
1016#endif
1017
27d4fb96 1018#ifdef SHORT_MAX
99abf803 1019# define PERL_SHORT_MAX ((short)SHORT_MAX)
27d4fb96 1020#else
1021# ifdef MAXSHORT /* Often used in <values.h> */
99abf803 1022# define PERL_SHORT_MAX ((short)MAXSHORT)
27d4fb96 1023# else
ef2f54b0
CB
1024# ifdef SHRT_MAX
1025# define PERL_SHORT_MAX ((short)SHRT_MAX)
1026# else
1027# define PERL_SHORT_MAX ((short) (PERL_USHORT_MAX >> 1))
1028# endif
27d4fb96 1029# endif
1030#endif
1031
1032#ifdef SHORT_MIN
99abf803 1033# define PERL_SHORT_MIN ((short)SHORT_MIN)
27d4fb96 1034#else
1035# ifdef MINSHORT
99abf803 1036# define PERL_SHORT_MIN ((short)MINSHORT)
27d4fb96 1037# else
ef2f54b0
CB
1038# ifdef SHRT_MIN
1039# define PERL_SHORT_MIN ((short)SHRT_MIN)
1040# else
1041# define PERL_SHORT_MIN (-PERL_SHORT_MAX - ((3 & -1) == 3))
1042# endif
27d4fb96 1043# endif
1044#endif
1045
99abf803 1046#ifdef UINT_MAX
1047# define PERL_UINT_MAX ((unsigned int)UINT_MAX)
27d4fb96 1048#else
99abf803 1049# ifdef MAXUINT
1050# define PERL_UINT_MAX ((unsigned int)MAXUINT)
27d4fb96 1051# else
99abf803 1052# define PERL_UINT_MAX (~(unsigned int)0)
27d4fb96 1053# endif
1054#endif
1055
99abf803 1056#define PERL_UINT_MIN ((unsigned int)0)
27d4fb96 1057
1058#ifdef INT_MAX
99abf803 1059# define PERL_INT_MAX ((int)INT_MAX)
27d4fb96 1060#else
1061# ifdef MAXINT /* Often used in <values.h> */
99abf803 1062# define PERL_INT_MAX ((int)MAXINT)
27d4fb96 1063# else
99abf803 1064# define PERL_INT_MAX ((int)(PERL_UINT_MAX >> 1))
27d4fb96 1065# endif
1066#endif
1067
1068#ifdef INT_MIN
99abf803 1069# define PERL_INT_MIN ((int)INT_MIN)
27d4fb96 1070#else
1071# ifdef MININT
99abf803 1072# define PERL_INT_MIN ((int)MININT)
27d4fb96 1073# else
1074# define PERL_INT_MIN (-PERL_INT_MAX - ((3 & -1) == 3))
1075# endif
1076#endif
1077
99abf803 1078#ifdef ULONG_MAX
1079# define PERL_ULONG_MAX ((unsigned long)ULONG_MAX)
27d4fb96 1080#else
99abf803 1081# ifdef MAXULONG
1082# define PERL_ULONG_MAX ((unsigned long)MAXULONG)
27d4fb96 1083# else
99abf803 1084# define PERL_ULONG_MAX (~(unsigned long)0)
27d4fb96 1085# endif
1086#endif
1087
99abf803 1088#define PERL_ULONG_MIN ((unsigned long)0L)
27d4fb96 1089
760ac839 1090#ifdef LONG_MAX
99abf803 1091# define PERL_LONG_MAX ((long)LONG_MAX)
760ac839
LW
1092#else
1093# ifdef MAXLONG /* Often used in <values.h> */
99abf803 1094# define PERL_LONG_MAX ((long)MAXLONG)
760ac839 1095# else
99abf803 1096# define PERL_LONG_MAX ((long) (PERL_ULONG_MAX >> 1))
760ac839
LW
1097# endif
1098#endif
1099
1100#ifdef LONG_MIN
99abf803 1101# define PERL_LONG_MIN ((long)LONG_MIN)
760ac839
LW
1102#else
1103# ifdef MINLONG
99abf803 1104# define PERL_LONG_MIN ((long)MINLONG)
760ac839 1105# else
27d4fb96 1106# define PERL_LONG_MIN (-PERL_LONG_MAX - ((3 & -1) == 3))
760ac839
LW
1107# endif
1108#endif
1109
99abf803 1110#ifdef HAS_QUAD
1111
1112# ifdef UQUAD_MAX
1113# define PERL_UQUAD_MAX ((UV)UQUAD_MAX)
760ac839 1114# else
99abf803 1115# define PERL_UQUAD_MAX (~(UV)0)
760ac839 1116# endif
760ac839 1117
99abf803 1118# define PERL_UQUAD_MIN ((UV)0)
27d4fb96 1119
27d4fb96 1120# ifdef QUAD_MAX
99abf803 1121# define PERL_QUAD_MAX ((IV)QUAD_MAX)
27d4fb96 1122# else
99abf803 1123# define PERL_QUAD_MAX ((IV) (PERL_UQUAD_MAX >> 1))
27d4fb96 1124# endif
1125
1126# ifdef QUAD_MIN
99abf803 1127# define PERL_QUAD_MIN ((IV)QUAD_MIN)
27d4fb96 1128# else
a6e633de 1129# define PERL_QUAD_MIN (-PERL_QUAD_MAX - ((3 & -1) == 3))
27d4fb96 1130# endif
1131
79072805
LW
1132#endif
1133
ee0007ab 1134typedef MEM_SIZE STRLEN;
450a55e4 1135
79072805
LW
1136typedef struct op OP;
1137typedef struct cop COP;
1138typedef struct unop UNOP;
1139typedef struct binop BINOP;
1140typedef struct listop LISTOP;
1141typedef struct logop LOGOP;
1142typedef struct condop CONDOP;
1143typedef struct pmop PMOP;
1144typedef struct svop SVOP;
1145typedef struct gvop GVOP;
1146typedef struct pvop PVOP;
79072805
LW
1147typedef struct loop LOOP;
1148
1149typedef struct Outrec Outrec;
93a17b20 1150typedef struct interpreter PerlInterpreter;
3e3baf6d
TB
1151#ifndef __BORLANDC__
1152typedef struct ff FF; /* XXX not defined anywhere, should go? */
1153#endif
79072805
LW
1154typedef struct sv SV;
1155typedef struct av AV;
1156typedef struct hv HV;
1157typedef struct cv CV;
378cc40b 1158typedef struct regexp REGEXP;
79072805 1159typedef struct gp GP;
0c30d9ec 1160typedef struct gv GV;
8990e307 1161typedef struct io IO;
c09156bb 1162typedef struct context PERL_CONTEXT;
79072805
LW
1163typedef struct block BLOCK;
1164
1165typedef struct magic MAGIC;
ed6116ce 1166typedef struct xrv XRV;
79072805
LW
1167typedef struct xpv XPV;
1168typedef struct xpviv XPVIV;
ff68c719 1169typedef struct xpvuv XPVUV;
79072805
LW
1170typedef struct xpvnv XPVNV;
1171typedef struct xpvmg XPVMG;
1172typedef struct xpvlv XPVLV;
1173typedef struct xpvav XPVAV;
1174typedef struct xpvhv XPVHV;
1175typedef struct xpvgv XPVGV;
1176typedef struct xpvcv XPVCV;
1177typedef struct xpvbm XPVBM;
1178typedef struct xpvfm XPVFM;
8990e307 1179typedef struct xpvio XPVIO;
79072805
LW
1180typedef struct mgvtbl MGVTBL;
1181typedef union any ANY;
8d063cd8 1182
378cc40b 1183#include "handy.h"
a0d0e21e 1184
03145268
SH
1185/* Some day when we have more 64-bit experience under our belts we may
1186 * be able to merge some of the USE_64_BIT_{FILES,OFFSETS,STDIO,DBM}. At
1187 * the moment (Oct 1998), though, keep them separate. --jhi
1188 */
5ff3f7a4
GS
1189#ifdef USE_64_BITS
1190# ifdef USE_64_BIT_FILES
03145268
SH
1191# ifndef USE_64_BIT_OFFSETS
1192# define USE_64_BIT_OFFSETS
5ff3f7a4
GS
1193# endif
1194# ifndef USE_64_BIT_STDIO
1195# define USE_64_BIT_STDIO
1196# endif
1197# ifndef USE_64_BIT_DBM
1198# define USE_64_BIT_DBM
1199# endif
1200# endif
03145268
SH
1201/* Mention LSEEKSIZE here to get it included in %Config. */
1202# ifdef USE_64_BIT_OFFSETS
5ff3f7a4
GS
1203# ifdef HAS_FSTAT64
1204# define fstat fstat64
1205# endif
1206# ifdef HAS_FTRUNCATE64
1207# define ftruncate ftruncate64
1208# endif
1209# ifdef HAS_LSEEK64
1210# define lseek lseek64
1211# ifdef HAS_OFF64_T
1212# undef Off_t
1213# define Off_t off64_t
1214# endif
1215# endif
1216# ifdef HAS_LSTAT64
1217# define lstat lstat64
1218# endif
1219 /* Some systems have open64() in libc but use that only
1220 * for true LP64 mode, in mixed mode (ILP32LL64, for example)
85ab1d1d
JH
1221 * they use the vanilla open(). Such systems should undefine
1222 * d_open64 in their hints files. --jhi */
1223# if defined(HAS_OPEN64)
5ff3f7a4
GS
1224# define open open64
1225# endif
1226# ifdef HAS_OPENDIR64
1227# define opendir opendir64
1228# endif
1229# ifdef HAS_READDIR64
1230# define readdir readdir64
1231# ifdef HAS_STRUCT_DIRENT64
1232# define dirent dirent64
1233# endif
1234# endif
1235# ifdef HAS_SEEKDIR64
1236# define seekdir seekdir64
1237# endif
1238# ifdef HAS_STAT64
1239# define stat stat64 /* Affects also struct stat, hopefully okay. */
1240# endif
1241# ifdef HAS_TELLDIR64
1242# define telldir telldir64
1243# endif
1244# ifdef HAS_TRUNCATE64
1245# define truncate truncate64
1246# endif
1247 /* flock is not #defined here to be flock64 because it seems
1248 that a system may have struct flock64 but still use flock()
1249 and not flock64(). The actual flocking code in pp_sys.c
1250 must be changed. Also lockf and lockf64 must be dealt
1251 with in pp_sys.c. --jhi */
1252# endif
1253# ifdef USE_64_BIT_STDIO
1254# ifdef HAS_FGETPOS64
1255# define fgetpos fgetpos64
1256# endif
1257# ifdef HAS_FOPEN64
1258# define fopen fopen64
1259# endif
1260# ifdef HAS_FREOPEN64
1261# define freopen freopen64
1262# endif
1263# ifdef HAS_FSEEK64
1264# define fseek fseek64
1265# endif
1266# ifdef HAS_FSEEKO64
1267# define fseeko fseeko64
1268# endif
1269# ifdef HAS_FSETPOS64
1270# define fsetpos fsetpos64
1271# endif
1272# ifdef HAS_FTELL64
1273# define ftell ftell64
1274# endif
1275# ifdef HAS_FTELLO64
1276# define ftello ftello64
1277# endif
1278# ifdef HAS_TMPFILE64
1279# define tmpfile tmpfile64
1280# endif
1281# endif
1282# ifdef USE_64_BIT_DBM
1283# ifdef HAS_DBMINIT64
1284# define dbminit dbminit64
1285# endif
1286# ifdef HAS_DBMCLOSE64
1287# define dbmclose dbmclose64
1288# endif
1289# ifdef HAS_FETCH64
1290# define fetch fetch64
1291# endif
1292# ifdef HAS_DELETE64
1293# define delete delete64
1294# endif
1295# ifdef HAS_STORE64
1296# define store store64
1297# endif
1298# ifdef HAS_FIRSTKEY64
1299# define firstkey firstkey64
1300# endif
1301# ifdef HAS_NEXTKEY64
1302# define nextkey nextkey64
1303# endif
1304# endif
1305#endif
1306
6f71a643
JH
1307#if defined(__OPEN_VM)
1308# include "vmesa/vmesaish.h"
1309#endif
1310
748a9306 1311#ifdef DOSISH
4633a7c4
LW
1312# if defined(OS2)
1313# include "os2ish.h"
1314# else
748a9306 1315# include "dosish.h"
4633a7c4 1316# endif
a0d0e21e 1317#else
748a9306
LW
1318# if defined(VMS)
1319# include "vmsish.h"
1320# else
0c30d9ec 1321# if defined(PLAN9)
1322# include "./plan9/plan9ish.h"
1323# else
1d84e8df
JH
1324# if defined(MPE)
1325# include "mpeix/mpeixish.h"
1326# else
495c5fdc
PG
1327# if defined(__VOS__)
1328# include "vosish.h"
1329# else
6f71a643 1330# include "unixish.h"
495c5fdc 1331# endif
1d84e8df 1332# endif
0c30d9ec 1333# endif
748a9306 1334# endif
32f822de
GS
1335#endif
1336
0f31cffe
GS
1337#ifndef MAXPATHLEN
1338# ifdef PATH_MAX
b990c8b2
JH
1339# ifdef _POSIX_PATH_MAX
1340# if PATH_MAX > _POSIX_PATH_MAX
1341/* MAXPATHLEN is supposed to include the final null character,
1342 * as opposed to PATH_MAX and _POSIX_PATH_MAX. */
1343# define MAXPATHLEN (PATH_MAX+1)
1344# else
1345# define MAXPATHLEN (_POSIX_PATH_MAX+1)
1346# endif
1347# else
1348# define MAXPATHLEN (PATH_MAX+1)
1349# endif
0f31cffe 1350# else
b990c8b2
JH
1351# ifdef _POSIX_PATH_MAX
1352# define MAXPATHLEN (_POSIX_PATH_MAX+1)
1353# else
1354# define MAXPATHLEN 1024 /* Err on the large side. */
1355# endif
0f31cffe
GS
1356# endif
1357#endif
1358
ac4c12e7
GS
1359#ifndef FUNC_NAME_TO_PTR
1360#define FUNC_NAME_TO_PTR(name) name
1361#endif
1362
32f822de 1363/*
dd96f567
IZ
1364 * USE_THREADS needs to be after unixish.h as <pthread.h> includes
1365 * <sys/signal.h> which defines NSIG - which will stop inclusion of <signal.h>
32f822de
GS
1366 * this results in many functions being undeclared which bothers C++
1367 * May make sense to have threads after "*ish.h" anyway
1368 */
1369
1370#ifdef USE_THREADS
79d59c5f
GS
1371 /* pending resolution of licensing issues, we avoid the erstwhile
1372 * atomic.h everywhere */
1373# define EMULATE_ATOMIC_REFCOUNTS
1374
32f822de
GS
1375# ifdef FAKE_THREADS
1376# include "fakethr.h"
1377# else
1378# ifdef WIN32
1379# include <win32thread.h>
1380# else
dd96f567
IZ
1381# ifdef OS2
1382# include "os2thread.h"
1383# else
7f3d1cf1 1384# ifdef I_MACH_CTHREADS
bdd66968 1385# include <mach/cthreads.h>
8f1f23e8 1386# if (defined(NeXT) || defined(__NeXT__)) && defined(PERL_POLLUTE_MALLOC)
772fe5b3
HM
1387# define MUTEX_INIT_CALLS_MALLOC
1388# endif
7f3d1cf1
BH
1389typedef cthread_t perl_os_thread;
1390typedef mutex_t perl_mutex;
1391typedef condition_t perl_cond;
1392typedef void * perl_key;
1393# else /* Posix threads */
1394# include <pthread.h>
1395typedef pthread_t perl_os_thread;
1396typedef pthread_mutex_t perl_mutex;
1397typedef pthread_cond_t perl_cond;
1398typedef pthread_key_t perl_key;
1399# endif /* I_MACH_CTHREADS */
dd96f567 1400# endif /* OS2 */
32f822de
GS
1401# endif /* WIN32 */
1402# endif /* FAKE_THREADS */
1403#endif /* USE_THREADS */
3fc1aec6 1404
68dc0745 1405#ifdef VMS
6b88bc9c 1406# define STATUS_NATIVE PL_statusvalue_vms
68dc0745 1407# define STATUS_NATIVE_EXPORT \
6b88bc9c 1408 ((I32)PL_statusvalue_vms == -1 ? 44 : PL_statusvalue_vms)
68dc0745 1409# define STATUS_NATIVE_SET(n) \
1410 STMT_START { \
6b88bc9c
GS
1411 PL_statusvalue_vms = (n); \
1412 if ((I32)PL_statusvalue_vms == -1) \
3280af22 1413 PL_statusvalue = -1; \
6b88bc9c 1414 else if (PL_statusvalue_vms & STS$M_SUCCESS) \
3280af22 1415 PL_statusvalue = 0; \
6b88bc9c
GS
1416 else if ((PL_statusvalue_vms & STS$M_SEVERITY) == 0) \
1417 PL_statusvalue = 1 << 8; \
68dc0745 1418 else \
6b88bc9c 1419 PL_statusvalue = (PL_statusvalue_vms & STS$M_SEVERITY) << 8; \
68dc0745 1420 } STMT_END
3280af22 1421# define STATUS_POSIX PL_statusvalue
68dc0745 1422# ifdef VMSISH_STATUS
1423# define STATUS_CURRENT (VMSISH_STATUS ? STATUS_NATIVE : STATUS_POSIX)
1424# else
1425# define STATUS_CURRENT STATUS_POSIX
1426# endif
1427# define STATUS_POSIX_SET(n) \
1428 STMT_START { \
3280af22
NIS
1429 PL_statusvalue = (n); \
1430 if (PL_statusvalue != -1) { \
1431 PL_statusvalue &= 0xFFFF; \
6b88bc9c 1432 PL_statusvalue_vms = PL_statusvalue ? 44 : 1; \
68dc0745 1433 } \
6b88bc9c 1434 else PL_statusvalue_vms = -1; \
68dc0745 1435 } STMT_END
6b88bc9c
GS
1436# define STATUS_ALL_SUCCESS (PL_statusvalue = 0, PL_statusvalue_vms = 1)
1437# define STATUS_ALL_FAILURE (PL_statusvalue = 1, PL_statusvalue_vms = 44)
68dc0745 1438#else
1439# define STATUS_NATIVE STATUS_POSIX
1440# define STATUS_NATIVE_EXPORT STATUS_POSIX
1441# define STATUS_NATIVE_SET STATUS_POSIX_SET
3280af22 1442# define STATUS_POSIX PL_statusvalue
68dc0745 1443# define STATUS_POSIX_SET(n) \
1444 STMT_START { \
3280af22
NIS
1445 PL_statusvalue = (n); \
1446 if (PL_statusvalue != -1) \
1447 PL_statusvalue &= 0xFFFF; \
68dc0745 1448 } STMT_END
1449# define STATUS_CURRENT STATUS_POSIX
3280af22
NIS
1450# define STATUS_ALL_SUCCESS (PL_statusvalue = 0)
1451# define STATUS_ALL_FAILURE (PL_statusvalue = 1)
68dc0745 1452#endif
1453
45bc9206
GS
1454/* This defines a way to flush all output buffers. This may be a
1455 * performance issue, so we allow people to disable it.
1456 * XXX the default needs a Configure test, as it may not work everywhere.
1457 */
1458#ifndef PERL_FLUSHALL_FOR_CHILD
767df6a1 1459# if defined(FFLUSH_NULL) || defined(USE_SFIO)
66fe083f 1460# define PERL_FLUSHALL_FOR_CHILD PerlIO_flush((PerlIO*)NULL)
767df6a1
JH
1461# else
1462# ifdef FFLUSH_ALL
1463# define PERL_FLUSHALL_FOR_CHILD my_fflush_all()
e2dbf222
GS
1464# else
1465# define PERL_FLUSHALL_FOR_CHILD (void)0
767df6a1 1466# endif
66fe083f 1467# endif
45bc9206
GS
1468#endif
1469
3fc1aec6 1470/* Some unistd.h's give a prototype for pause() even though
1471 HAS_PAUSE ends up undefined. This causes the #define
1472 below to be rejected by the compmiler. Sigh.
1473*/
1474#ifdef HAS_PAUSE
1475#define Pause pause
1476#else
1477#define Pause() sleep((32767<<16)+32767)
748a9306
LW
1478#endif
1479
1480#ifndef IOCPARM_LEN
1481# ifdef IOCPARM_MASK
1482 /* on BSDish systes we're safe */
1483# define IOCPARM_LEN(x) (((x) >> 16) & IOCPARM_MASK)
1484# else
1485 /* otherwise guess at what's safe */
1486# define IOCPARM_LEN(x) 256
1487# endif
a0d0e21e
LW
1488#endif
1489
521e0776 1490#if defined(CYGWIN32)
521e0776
GS
1491/* USEMYBINMODE
1492 * This symbol, if defined, indicates that the program should
1493 * use the routine my_binmode(FILE *fp, char iotype) to insure
1494 * that a file is in "binary" mode -- that is, that no translation
1495 * of bytes occurs on read or write operations.
1496 */
1497# define USEMYBINMODE / **/
1498# define my_binmode(fp, iotype) \
1499 (PerlLIO_setmode(PerlIO_fileno(fp), O_BINARY) != -1 ? TRUE : NULL)
5aabfad6 1500#endif
1501
cea2e8a9
GS
1502#ifdef PERL_IMPLICIT_CONTEXT
1503# ifdef USE_THREADS
1504struct perl_thread;
41cd3736
GS
1505# define pTHX struct perl_thread *thr
1506# define aTHX thr
1507# define dTHXa(a) pTHX = (struct perl_thread *)a
1508# define dTHX dTHXa(SvPVX(PL_thrsv))
1509# define dTHR dNOOP
cea2e8a9
GS
1510# else
1511# define MULTIPLICITY
41cd3736
GS
1512# define pTHX PerlInterpreter *my_perl
1513# define aTHX my_perl
1514# define dTHXa(a) pTHX = (PerlInterpreter *)a
1515# define dTHX dTHXa(PL_curinterp)
cea2e8a9 1516# endif
41cd3736
GS
1517# define pTHX_ pTHX,
1518# define _pTHX ,pTHX
1519# define aTHX_ aTHX,
1520# define _aTHX ,aTHX
cea2e8a9
GS
1521#endif
1522
864dbfa3 1523#ifndef pTHX
41cd3736 1524# define pTHX void
864dbfa3
GS
1525# define pTHX_
1526# define _pTHX
864dbfa3
GS
1527# define aTHX
1528# define aTHX_
1529# define _aTHX
41cd3736
GS
1530# define dTHXa(a) dNOOP
1531# define dTHX dNOOP
864dbfa3
GS
1532#endif
1533
cea2e8a9
GS
1534#define WITH_THX(s) STMT_START { dTHX; s; } STMT_END
1535
864dbfa3
GS
1536#ifndef STATIC
1537# define STATIC static
1538#endif
1539
cea2e8a9
GS
1540#ifdef UNION_ANY_DEFINITION
1541UNION_ANY_DEFINITION;
1542#else
1543union any {
1544 void* any_ptr;
1545 I32 any_i32;
1546 IV any_iv;
1547 long any_long;
1548 void (CPERLscope(*any_dptr)) (pTHX_ void*);
1549};
1550#endif
1551
1552#ifdef USE_THREADS
1553#define ARGSproto struct perl_thread *thr
1554#else
1555#define ARGSproto
1556#endif /* USE_THREADS */
1557
1558#ifdef PERL_OBJECT
1559typedef I32 (*filter_t) (CPerlObj*, int, SV *, int);
1560#else
1561typedef I32 (*filter_t) (pTHX_ int, SV *, int);
1562#endif
1563
1564#define FILTER_READ(idx, sv, len) filter_read(idx, sv, len)
1565#define FILTER_DATA(idx) (AvARRAY(PL_rsfp_filters)[idx])
1566#define FILTER_ISREADER(idx) (idx >= AvFILLp(PL_rsfp_filters))
1567
4f63d024
GS
1568#ifdef WIN32
1569#include "win32.h"
1570#endif
1571
1572#include "iperlsys.h"
378cc40b 1573#include "regexp.h"
79072805 1574#include "sv.h"
378cc40b 1575#include "util.h"
8d063cd8 1576#include "form.h"
79072805
LW
1577#include "gv.h"
1578#include "cv.h"
22c35a8c 1579#ifndef PERL_OBJECT
79072805 1580#include "opcode.h"
22c35a8c 1581#endif
79072805
LW
1582#include "op.h"
1583#include "cop.h"
1584#include "av.h"
1585#include "hv.h"
1586#include "mg.h"
1587#include "scope.h"
599cee73 1588#include "warning.h"
a0ed51b3 1589#include "utf8.h"
8d063cd8 1590
7fae4e64
GS
1591/* Current curly descriptor */
1592typedef struct curcur CURCUR;
1593struct curcur {
1594 int parenfloor; /* how far back to strip paren data */
1595 int cur; /* how many instances of scan we've matched */
1596 int min; /* the minimal number of scans to match */
1597 int max; /* the maximal number of scans to match */
1598 int minmod; /* whether to work our way up or down */
1599 regnode * scan; /* the thing to match */
1600 regnode * next; /* what has to match after it */
1601 char * lastloc; /* where we started matching this scan */
1602 CURCUR * oldcc; /* current curly before we started this one */
1603};
1604
1605typedef struct _sublex_info SUBLEXINFO;
1606struct _sublex_info {
1607 I32 super_state; /* lexer state to save */
1608 I32 sub_inwhat; /* "lex_inwhat" to use */
1609 OP *sub_op; /* "lex_op" to use */
0244c3a4
GS
1610 char *super_bufptr; /* PL_bufptr that was */
1611 char *super_bufend; /* PL_bufend that was */
7fae4e64
GS
1612};
1613
455ece5e 1614typedef struct magic_state MGS; /* struct magic_state defined in mg.c */
76e3520e 1615
864dbfa3
GS
1616/* Length of a variant. */
1617
76e3520e
GS
1618typedef struct {
1619 I32 len_min;
1620 I32 len_delta;
1621 I32 pos_min;
1622 I32 pos_delta;
1623 SV *last_found;
1624 I32 last_end; /* min value, <0 unless valid. */
1625 I32 last_start_min;
1626 I32 last_start_max;
1627 SV **longest; /* Either &l_fixed, or &l_float. */
1628 SV *longest_fixed;
1629 I32 offset_fixed;
1630 SV *longest_float;
1631 I32 offset_float_min;
1632 I32 offset_float_max;
1633 I32 flags;
1634} scan_data_t;
1635
1636typedef I32 CHECKPOINT;
76e3520e 1637
450a55e4 1638#if defined(iAPX286) || defined(M_I286) || defined(I80286)
a687059c
LW
1639# define I286
1640#endif
1641
fe14fcc3
LW
1642#if defined(htonl) && !defined(HAS_HTONL)
1643#define HAS_HTONL
ae986130 1644#endif
fe14fcc3
LW
1645#if defined(htons) && !defined(HAS_HTONS)
1646#define HAS_HTONS
ae986130 1647#endif
fe14fcc3
LW
1648#if defined(ntohl) && !defined(HAS_NTOHL)
1649#define HAS_NTOHL
ae986130 1650#endif
fe14fcc3
LW
1651#if defined(ntohs) && !defined(HAS_NTOHS)
1652#define HAS_NTOHS
ae986130 1653#endif
fe14fcc3 1654#ifndef HAS_HTONL
d9d8d8de 1655#if (BYTEORDER & 0xffff) != 0x4321
fe14fcc3
LW
1656#define HAS_HTONS
1657#define HAS_HTONL
1658#define HAS_NTOHS
1659#define HAS_NTOHL
a687059c
LW
1660#define MYSWAP
1661#define htons my_swap
1662#define htonl my_htonl
1663#define ntohs my_swap
1664#define ntohl my_ntohl
1665#endif
1666#else
d9d8d8de 1667#if (BYTEORDER & 0xffff) == 0x4321
fe14fcc3
LW
1668#undef HAS_HTONS
1669#undef HAS_HTONL
1670#undef HAS_NTOHS
1671#undef HAS_NTOHL
a687059c
LW
1672#endif
1673#endif
1674
988174c1
LW
1675/*
1676 * Little-endian byte order functions - 'v' for 'VAX', or 'reVerse'.
1677 * -DWS
1678 */
1679#if BYTEORDER != 0x1234
1680# define HAS_VTOHL
1681# define HAS_VTOHS
1682# define HAS_HTOVL
1683# define HAS_HTOVS
c67712b2 1684# if BYTEORDER == 0x4321 || BYTEORDER == 0x87654321
988174c1
LW
1685# define vtohl(x) ((((x)&0xFF)<<24) \
1686 +(((x)>>24)&0xFF) \
1687 +(((x)&0x0000FF00)<<8) \
1688 +(((x)&0x00FF0000)>>8) )
1689# define vtohs(x) ((((x)&0xFF)<<8) + (((x)>>8)&0xFF))
1690# define htovl(x) vtohl(x)
1691# define htovs(x) vtohs(x)
1692# endif
1693 /* otherwise default to functions in util.c */
1694#endif
1695
0f85fab0 1696#ifdef CASTNEGFLOAT
79072805 1697#define U_S(what) ((U16)(what))
0f85fab0 1698#define U_I(what) ((unsigned int)(what))
79072805 1699#define U_L(what) ((U32)(what))
0f85fab0 1700#else
232e078e
AD
1701#define U_S(what) ((U16)cast_ulong((double)(what)))
1702#define U_I(what) ((unsigned int)cast_ulong((double)(what)))
1703#define U_L(what) (cast_ulong((double)(what)))
ee0007ab
LW
1704#endif
1705
ed6116ce
LW
1706#ifdef CASTI32
1707#define I_32(what) ((I32)(what))
a0d0e21e 1708#define I_V(what) ((IV)(what))
5d94fbed 1709#define U_V(what) ((UV)(what))
ed6116ce 1710#else
a6e633de 1711#define I_32(what) (cast_i32((double)(what)))
1712#define I_V(what) (cast_iv((double)(what)))
5d94fbed 1713#define U_V(what) (cast_uv((double)(what)))
ed6116ce
LW
1714#endif
1715
25da4f38
IZ
1716/* Used with UV/IV arguments: */
1717 /* XXXX: need to speed it up */
1718#define CLUMP_2UV(iv) ((iv) < 0 ? 0 : (UV)(iv))
1719#define CLUMP_2IV(uv) ((uv) > (UV)IV_MAX ? IV_MAX : (IV)(uv))
1720
79072805
LW
1721struct Outrec {
1722 I32 o_lines;
d9d8d8de 1723 char *o_str;
79072805 1724 U32 o_len;
8d063cd8
LW
1725};
1726
352d5a3a
LW
1727#ifndef MAXSYSFD
1728# define MAXSYSFD 2
1729#endif
ee0007ab 1730
f82b3d41 1731#ifndef TMPPATH
1732# define TMPPATH "/tmp/perl-eXXXXXX"
a0d0e21e 1733#endif
79072805
LW
1734
1735#ifndef __cplusplus
20ce7b12
GS
1736Uid_t getuid (void);
1737Uid_t geteuid (void);
1738Gid_t getgid (void);
1739Gid_t getegid (void);
79072805 1740#endif
8d063cd8 1741
0c30d9ec 1742#ifndef Perl_debug_log
760ac839 1743#define Perl_debug_log PerlIO_stderr()
0c30d9ec 1744#endif
3967c732
JD
1745
1746#ifdef DEBUGGING
9d116dd7 1747#undef YYDEBUG
d96024cf 1748#define YYDEBUG 1
79072805 1749#define DEB(a) a
3280af22
NIS
1750#define DEBUG(a) if (PL_debug) a
1751#define DEBUG_p(a) if (PL_debug & 1) a
1752#define DEBUG_s(a) if (PL_debug & 2) a
1753#define DEBUG_l(a) if (PL_debug & 4) a
1754#define DEBUG_t(a) if (PL_debug & 8) a
1755#define DEBUG_o(a) if (PL_debug & 16) a
1756#define DEBUG_c(a) if (PL_debug & 32) a
1757#define DEBUG_P(a) if (PL_debug & 64) a
0672f40e 1758# if defined(PERL_OBJECT)
c850101c
JD
1759# define DEBUG_m(a) if (PL_debug & 128) a
1760# else
1761# define DEBUG_m(a) if (PL_curinterp && PL_debug & 128) a
1762# endif
3280af22
NIS
1763#define DEBUG_f(a) if (PL_debug & 256) a
1764#define DEBUG_r(a) if (PL_debug & 512) a
1765#define DEBUG_x(a) if (PL_debug & 1024) a
1766#define DEBUG_u(a) if (PL_debug & 2048) a
1767#define DEBUG_L(a) if (PL_debug & 4096) a
1768#define DEBUG_H(a) if (PL_debug & 8192) a
1769#define DEBUG_X(a) if (PL_debug & 16384) a
1770#define DEBUG_D(a) if (PL_debug & 32768) a
8b73bbec
IZ
1771# ifdef USE_THREADS
1772# define DEBUG_S(a) if (PL_debug & (1<<16)) a
1773# else
1774# define DEBUG_S(a)
1775# endif
79072805
LW
1776#else
1777#define DEB(a)
1778#define DEBUG(a)
1779#define DEBUG_p(a)
1780#define DEBUG_s(a)
1781#define DEBUG_l(a)
1782#define DEBUG_t(a)
1783#define DEBUG_o(a)
1784#define DEBUG_c(a)
1785#define DEBUG_P(a)
1786#define DEBUG_m(a)
1787#define DEBUG_f(a)
1788#define DEBUG_r(a)
1789#define DEBUG_x(a)
1790#define DEBUG_u(a)
8b73bbec 1791#define DEBUG_S(a)
79072805
LW
1792#define DEBUG_H(a)
1793#define DEBUG_X(a)
8990e307 1794#define DEBUG_D(a)
8b73bbec 1795#define DEBUG_S(a)
8d063cd8 1796#endif
fe14fcc3 1797#define YYMAXDEPTH 300
8d063cd8 1798
a6e633de 1799#ifndef assert /* <assert.h> might have been included somehow */
79072805
LW
1800#define assert(what) DEB( { \
1801 if (!(what)) { \
cea2e8a9 1802 Perl_croak(aTHX_ "Assertion failed: file \"%s\", line %d", \
79072805 1803 __FILE__, __LINE__); \
cea2e8a9 1804 PerlProc_exit(1); \
79072805 1805 }})
a6e633de 1806#endif
8d063cd8 1807
450a55e4 1808struct ufuncs {
20ce7b12
GS
1809 I32 (*uf_val)(IV, SV*);
1810 I32 (*uf_set)(IV, SV*);
a0d0e21e 1811 IV uf_index;
450a55e4
LW
1812};
1813
fe14fcc3 1814/* Fix these up for __STDC__ */
68dc0745 1815#ifndef DONT_DECLARE_STD
20ce7b12
GS
1816char *mktemp (char*);
1817double atof (const char*);
a0d0e21e 1818#endif
79072805 1819
352d5a3a 1820#ifndef STANDARD_C
fe14fcc3 1821/* All of these are in stdlib.h or time.h for ANSI C */
85e6fe83 1822Time_t time();
8d063cd8 1823struct tm *gmtime(), *localtime();
092bebab 1824#if defined(OEMVS) || defined(__OPEN_VM)
9d116dd7
JH
1825char *(strchr)(), *(strrchr)();
1826char *(strcpy)(), *(strcat)();
1827#else
93a17b20 1828char *strchr(), *strrchr();
378cc40b 1829char *strcpy(), *strcat();
9d116dd7 1830#endif
352d5a3a 1831#endif /* ! STANDARD_C */
8d063cd8 1832
79072805
LW
1833
1834#ifdef I_MATH
1835# include <math.h>
1836#else
32f822de 1837START_EXTERN_C
20ce7b12
GS
1838 double exp (double);
1839 double log (double);
1840 double log10 (double);
1841 double sqrt (double);
1842 double frexp (double,int*);
1843 double ldexp (double,int);
1844 double modf (double,double*);
1845 double sin (double);
1846 double cos (double);
1847 double atan2 (double,double);
1848 double pow (double,double);
32f822de 1849END_EXTERN_C
79072805
LW
1850#endif
1851
a0d0e21e 1852#ifndef __cplusplus
8f1f23e8 1853# if defined(NeXT) || defined(__NeXT__) /* or whatever catches all NeXTs */
3fc1aec6 1854char *crypt (); /* Maybe more hosts will need the unprototyped version */
26618a56
GS
1855# else
1856# if !defined(WIN32) || !defined(HAVE_DES_FCRYPT)
20ce7b12 1857char *crypt (const char*, const char*);
26618a56 1858# endif /* !WIN32 && !HAVE_CRYPT_SOURCE */
8f1f23e8 1859# endif /* !NeXT && !__NeXT__ */
26618a56
GS
1860# ifndef DONT_DECLARE_STD
1861# ifndef getenv
20ce7b12 1862char *getenv (const char*);
26618a56 1863# endif /* !getenv */
20ce7b12 1864Off_t lseek (int,Off_t,int);
26618a56 1865# endif /* !DONT_DECLARE_STD */
20ce7b12 1866char *getlogin (void);
26618a56 1867#endif /* !__cplusplus */
79072805 1868
16d20bd9 1869#ifdef UNLINK_ALL_VERSIONS /* Currently only makes sense for VMS */
378cc40b 1870#define UNLINK unlnk
20ce7b12 1871I32 unlnk (char*);
8d063cd8 1872#else
80252599 1873#define UNLINK PerlLIO_unlink
8d063cd8 1874#endif
a687059c 1875
fe14fcc3 1876#ifndef HAS_SETREUID
85e6fe83
LW
1877# ifdef HAS_SETRESUID
1878# define setreuid(r,e) setresuid(r,e,(Uid_t)-1)
1879# define HAS_SETREUID
1880# endif
a687059c 1881#endif
fe14fcc3 1882#ifndef HAS_SETREGID
85e6fe83
LW
1883# ifdef HAS_SETRESGID
1884# define setregid(r,e) setresgid(r,e,(Gid_t)-1)
1885# define HAS_SETREGID
1886# endif
a687059c 1887#endif
ee0007ab 1888
20ce7b12 1889typedef Signal_t (*Sighandler_t) (int);
ff68c719 1890
1891#ifdef HAS_SIGACTION
1892typedef struct sigaction Sigsave_t;
1893#else
1894typedef Sighandler_t Sigsave_t;
1895#endif
1896
ee0007ab
LW
1897#define SCAN_DEF 0
1898#define SCAN_TR 1
1899#define SCAN_REPL 2
79072805
LW
1900
1901#ifdef DEBUGGING
4633a7c4 1902# ifndef register
a0d0e21e
LW
1903# define register
1904# endif
1905# define PAD_SV(po) pad_sv(po)
cea2e8a9 1906# define RUNOPS_DEFAULT Perl_runops_debug
79072805 1907#else
6b88bc9c 1908# define PAD_SV(po) PL_curpad[po]
cea2e8a9 1909# define RUNOPS_DEFAULT Perl_runops_standard
79072805
LW
1910#endif
1911
18f739ee 1912#ifdef MYMALLOC
772fe5b3 1913# ifdef MUTEX_INIT_CALLS_MALLOC
3541dd58
HM
1914# define MALLOC_INIT \
1915 STMT_START { \
1916 PL_malloc_mutex = NULL; \
1917 MUTEX_INIT(&PL_malloc_mutex); \
1918 } STMT_END
1919# define MALLOC_TERM \
1920 STMT_START { \
1921 perl_mutex tmp = PL_malloc_mutex; \
1922 PL_malloc_mutex = NULL; \
1923 MUTEX_DESTROY(&tmp); \
1924 } STMT_END
1925# else
1926# define MALLOC_INIT MUTEX_INIT(&PL_malloc_mutex)
1927# define MALLOC_TERM MUTEX_DESTROY(&PL_malloc_mutex)
1928# endif
18f739ee
IZ
1929#else
1930# define MALLOC_INIT
1931# define MALLOC_TERM
1932#endif
1933
b6d9d515 1934
44a0ac01
MB
1935/*
1936 * These need prototyping here because <proto.h> isn't
1937 * included until after runops is initialised.
1938 */
1939
76e3520e 1940#ifndef PERL_OBJECT
cea2e8a9
GS
1941typedef int (*runops_proc_t) (pTHX);
1942int Perl_runops_standard (pTHX);
44a0ac01 1943#ifdef DEBUGGING
cea2e8a9 1944int Perl_runops_debug (pTHX);
44a0ac01 1945#endif
22c35a8c
GS
1946#endif
1947
940cb80d 1948/* _ (for $_) must be first in the following list (DEFSV requires it) */
54b9620d 1949#define THREADSV_NAMES "_123456789&`'+/.,\\\";^-%=|~:\001\005!@"
a863c7d1 1950
8f1f23e8
W
1951/* NeXT has problems with crt0.o globals */
1952#if defined(__DYNAMIC__) && \
1953 (defined(NeXT) || defined(__NeXT__) || defined(__APPLE__))
1954# if defined(NeXT) || defined(__NeXT)
1955# include <mach-o/dyld.h>
1956# define environ (*environ_pointer)
0c30d9ec 1957EXT char *** environ_pointer;
8f1f23e8
W
1958# else
1959# if defined(__APPLE__)
1960# include <crt_externs.h> /* for the env array */
1961# define environ (*_NSGetEnviron())
1962# endif
0c30d9ec 1963# endif
8f1f23e8
W
1964#else
1965 /* VMS and some other platforms don't use the environ array */
a6c40364
GS
1966# if !defined(VMS)
1967# if !defined(DONT_DECLARE_STD) || \
1968 (defined(__svr4__) && defined(__GNUC__) && defined(sun)) || \
1969 defined(__sgi) || \
1970 defined(__DGUX)
8f1f23e8 1971extern char ** environ; /* environment variables supplied via exec */
a6c40364 1972# endif
8f1f23e8
W
1973# endif
1974#endif
79072805 1975
79072805 1976/* handy constants */
22c35a8c 1977EXTCONST char PL_warn_uninit[]
a0d0e21e 1978 INIT("Use of uninitialized value");
22c35a8c 1979EXTCONST char PL_warn_nosemi[]
463ee0b2 1980 INIT("Semicolon seems to be missing");
22c35a8c 1981EXTCONST char PL_warn_reserved[]
463ee0b2 1982 INIT("Unquoted string \"%s\" may clash with future reserved word");
22c35a8c 1983EXTCONST char PL_warn_nl[]
93a17b20 1984 INIT("Unsuccessful %s on filename containing newline");
22c35a8c 1985EXTCONST char PL_no_wrongref[]
a0d0e21e 1986 INIT("Can't use %s ref as %s ref");
22c35a8c 1987EXTCONST char PL_no_symref[]
748a9306 1988 INIT("Can't use string (\"%.32s\") as %s ref while \"strict refs\" in use");
22c35a8c 1989EXTCONST char PL_no_usym[]
8990e307 1990 INIT("Can't use an undefined value as %s reference");
22c35a8c 1991EXTCONST char PL_no_aelem[]
93a17b20 1992 INIT("Modification of non-creatable array value attempted, subscript %d");
22c35a8c 1993EXTCONST char PL_no_helem[]
93a17b20 1994 INIT("Modification of non-creatable hash value attempted, subscript \"%s\"");
22c35a8c 1995EXTCONST char PL_no_modify[]
93a17b20 1996 INIT("Modification of a read-only value attempted");
22c35a8c 1997EXTCONST char PL_no_mem[]
93a17b20 1998 INIT("Out of memory!\n");
22c35a8c 1999EXTCONST char PL_no_security[]
463ee0b2 2000 INIT("Insecure dependency in %s%s");
22c35a8c 2001EXTCONST char PL_no_sock_func[]
93a17b20 2002 INIT("Unsupported socket function \"%s\" called");
22c35a8c 2003EXTCONST char PL_no_dir_func[]
93a17b20 2004 INIT("Unsupported directory function \"%s\" called");
22c35a8c 2005EXTCONST char PL_no_func[]
93a17b20 2006 INIT("The %s function is unimplemented");
22c35a8c 2007EXTCONST char PL_no_myglob[]
748a9306 2008 INIT("\"my\" variable %s can't be in a package");
93a17b20 2009
7575fa06 2010EXTCONST char PL_uuemap[65]
80252599
GS
2011 INIT("`!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_");
2012
2013
79072805 2014#ifdef DOINIT
22c35a8c
GS
2015EXT char *PL_sig_name[] = { SIG_NAME };
2016EXT int PL_sig_num[] = { SIG_NUM };
2017EXT SV * PL_psig_ptr[sizeof(PL_sig_num)/sizeof(*PL_sig_num)];
2018EXT SV * PL_psig_name[sizeof(PL_sig_num)/sizeof(*PL_sig_num)];
79072805 2019#else
22c35a8c
GS
2020EXT char *PL_sig_name[];
2021EXT int PL_sig_num[];
2022EXT SV * PL_psig_ptr[];
2023EXT SV * PL_psig_name[];
79072805
LW
2024#endif
2025
bbce6d69 2026/* fast case folding tables */
2027
79072805 2028#ifdef DOINIT
9d116dd7 2029#ifdef EBCDIC
22c35a8c 2030EXT unsigned char PL_fold[] = { /* fast EBCDIC case folding table */
9d116dd7
JH
2031 0, 1, 2, 3, 4, 5, 6, 7,
2032 8, 9, 10, 11, 12, 13, 14, 15,
2033 16, 17, 18, 19, 20, 21, 22, 23,
2034 24, 25, 26, 27, 28, 29, 30, 31,
2035 32, 33, 34, 35, 36, 37, 38, 39,
2036 40, 41, 42, 43, 44, 45, 46, 47,
2037 48, 49, 50, 51, 52, 53, 54, 55,
2038 56, 57, 58, 59, 60, 61, 62, 63,
2039 64, 65, 66, 67, 68, 69, 70, 71,
2040 72, 73, 74, 75, 76, 77, 78, 79,
2041 80, 81, 82, 83, 84, 85, 86, 87,
2042 88, 89, 90, 91, 92, 93, 94, 95,
2043 96, 97, 98, 99, 100, 101, 102, 103,
2044 104, 105, 106, 107, 108, 109, 110, 111,
2045 112, 113, 114, 115, 116, 117, 118, 119,
2046 120, 121, 122, 123, 124, 125, 126, 127,
2047 128, 'A', 'B', 'C', 'D', 'E', 'F', 'G',
2048 'H', 'I', 138, 139, 140, 141, 142, 143,
2049 144, 'J', 'K', 'L', 'M', 'N', 'O', 'P',
2050 'Q', 'R', 154, 155, 156, 157, 158, 159,
2051 160, 161, 'S', 'T', 'U', 'V', 'W', 'X',
2052 'Y', 'Z', 170, 171, 172, 173, 174, 175,
2053 176, 177, 178, 179, 180, 181, 182, 183,
2054 184, 185, 186, 187, 188, 189, 190, 191,
2055 192, 'a', 'b', 'c', 'd', 'e', 'f', 'g',
2056 'h', 'i', 202, 203, 204, 205, 206, 207,
2057 208, 'j', 'k', 'l', 'm', 'n', 'o', 'p',
2058 'q', 'r', 218, 219, 220, 221, 222, 223,
2059 224, 225, 's', 't', 'u', 'v', 'w', 'x',
2060 'y', 'z', 234, 235, 236, 237, 238, 239,
2061 240, 241, 242, 243, 244, 245, 246, 247,
2062 248, 249, 250, 251, 252, 253, 254, 255
2063};
2064#else /* ascii rather than ebcdic */
22c35a8c 2065EXTCONST unsigned char PL_fold[] = {
79072805
LW
2066 0, 1, 2, 3, 4, 5, 6, 7,
2067 8, 9, 10, 11, 12, 13, 14, 15,
2068 16, 17, 18, 19, 20, 21, 22, 23,
2069 24, 25, 26, 27, 28, 29, 30, 31,
2070 32, 33, 34, 35, 36, 37, 38, 39,
2071 40, 41, 42, 43, 44, 45, 46, 47,
2072 48, 49, 50, 51, 52, 53, 54, 55,
2073 56, 57, 58, 59, 60, 61, 62, 63,
2074 64, 'a', 'b', 'c', 'd', 'e', 'f', 'g',
2075 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
2076 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
2077 'x', 'y', 'z', 91, 92, 93, 94, 95,
2078 96, 'A', 'B', 'C', 'D', 'E', 'F', 'G',
2079 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
2080 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
2081 'X', 'Y', 'Z', 123, 124, 125, 126, 127,
2082 128, 129, 130, 131, 132, 133, 134, 135,
2083 136, 137, 138, 139, 140, 141, 142, 143,
2084 144, 145, 146, 147, 148, 149, 150, 151,
2085 152, 153, 154, 155, 156, 157, 158, 159,
2086 160, 161, 162, 163, 164, 165, 166, 167,
2087 168, 169, 170, 171, 172, 173, 174, 175,
2088 176, 177, 178, 179, 180, 181, 182, 183,
2089 184, 185, 186, 187, 188, 189, 190, 191,
2090 192, 193, 194, 195, 196, 197, 198, 199,
2091 200, 201, 202, 203, 204, 205, 206, 207,
2092 208, 209, 210, 211, 212, 213, 214, 215,
2093 216, 217, 218, 219, 220, 221, 222, 223,
2094 224, 225, 226, 227, 228, 229, 230, 231,
2095 232, 233, 234, 235, 236, 237, 238, 239,
2096 240, 241, 242, 243, 244, 245, 246, 247,
2097 248, 249, 250, 251, 252, 253, 254, 255
2098};
9d116dd7 2099#endif /* !EBCDIC */
79072805 2100#else
22c35a8c 2101EXTCONST unsigned char PL_fold[];
79072805
LW
2102#endif
2103
2104#ifdef DOINIT
22c35a8c 2105EXT unsigned char PL_fold_locale[] = {
79072805
LW
2106 0, 1, 2, 3, 4, 5, 6, 7,
2107 8, 9, 10, 11, 12, 13, 14, 15,
2108 16, 17, 18, 19, 20, 21, 22, 23,
2109 24, 25, 26, 27, 28, 29, 30, 31,
2110 32, 33, 34, 35, 36, 37, 38, 39,
2111 40, 41, 42, 43, 44, 45, 46, 47,
2112 48, 49, 50, 51, 52, 53, 54, 55,
2113 56, 57, 58, 59, 60, 61, 62, 63,
2114 64, 'a', 'b', 'c', 'd', 'e', 'f', 'g',
2115 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
2116 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
2117 'x', 'y', 'z', 91, 92, 93, 94, 95,
2118 96, 'A', 'B', 'C', 'D', 'E', 'F', 'G',
2119 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
2120 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
2121 'X', 'Y', 'Z', 123, 124, 125, 126, 127,
2122 128, 129, 130, 131, 132, 133, 134, 135,
2123 136, 137, 138, 139, 140, 141, 142, 143,
2124 144, 145, 146, 147, 148, 149, 150, 151,
2125 152, 153, 154, 155, 156, 157, 158, 159,
2126 160, 161, 162, 163, 164, 165, 166, 167,
2127 168, 169, 170, 171, 172, 173, 174, 175,
2128 176, 177, 178, 179, 180, 181, 182, 183,
2129 184, 185, 186, 187, 188, 189, 190, 191,
2130 192, 193, 194, 195, 196, 197, 198, 199,
2131 200, 201, 202, 203, 204, 205, 206, 207,
2132 208, 209, 210, 211, 212, 213, 214, 215,
2133 216, 217, 218, 219, 220, 221, 222, 223,
2134 224, 225, 226, 227, 228, 229, 230, 231,
2135 232, 233, 234, 235, 236, 237, 238, 239,
2136 240, 241, 242, 243, 244, 245, 246, 247,
2137 248, 249, 250, 251, 252, 253, 254, 255
2138};
2139#else
22c35a8c 2140EXT unsigned char PL_fold_locale[];
79072805
LW
2141#endif
2142
2143#ifdef DOINIT
9d116dd7 2144#ifdef EBCDIC
22c35a8c 2145EXT unsigned char PL_freq[] = {/* EBCDIC frequencies for mixed English/C */
9d116dd7
JH
2146 1, 2, 84, 151, 154, 155, 156, 157,
2147 165, 246, 250, 3, 158, 7, 18, 29,
2148 40, 51, 62, 73, 85, 96, 107, 118,
2149 129, 140, 147, 148, 149, 150, 152, 153,
2150 255, 6, 8, 9, 10, 11, 12, 13,
2151 14, 15, 24, 25, 26, 27, 28, 226,
2152 29, 30, 31, 32, 33, 43, 44, 45,
2153 46, 47, 48, 49, 50, 76, 77, 78,
2154 79, 80, 81, 82, 83, 84, 85, 86,
2155 87, 94, 95, 234, 181, 233, 187, 190,
2156 180, 96, 97, 98, 99, 100, 101, 102,
2157 104, 112, 182, 174, 236, 232, 229, 103,
2158 228, 226, 114, 115, 116, 117, 118, 119,
2159 120, 121, 122, 235, 176, 230, 194, 162,
2160 130, 131, 132, 133, 134, 135, 136, 137,
2161 138, 139, 201, 205, 163, 217, 220, 224,
2162 5, 248, 227, 244, 242, 255, 241, 231,
2163 240, 253, 16, 197, 19, 20, 21, 187,
2164 23, 169, 210, 245, 237, 249, 247, 239,
2165 168, 252, 34, 196, 36, 37, 38, 39,
2166 41, 42, 251, 254, 238, 223, 221, 213,
2167 225, 177, 52, 53, 54, 55, 56, 57,
2168 58, 59, 60, 61, 63, 64, 65, 66,
2169 67, 68, 69, 70, 71, 72, 74, 75,
2170 205, 208, 186, 202, 200, 218, 198, 179,
2171 178, 214, 88, 89, 90, 91, 92, 93,
2172 217, 166, 170, 207, 199, 209, 206, 204,
2173 160, 212, 105, 106, 108, 109, 110, 111,
2174 203, 113, 216, 215, 192, 175, 193, 243,
2175 172, 161, 123, 124, 125, 126, 127, 128,
2176 222, 219, 211, 195, 188, 193, 185, 184,
2177 191, 183, 141, 142, 143, 144, 145, 146
2178};
2179#else /* ascii rather than ebcdic */
22c35a8c 2180EXTCONST unsigned char PL_freq[] = { /* letter frequencies for mixed English/C */
79072805
LW
2181 1, 2, 84, 151, 154, 155, 156, 157,
2182 165, 246, 250, 3, 158, 7, 18, 29,
2183 40, 51, 62, 73, 85, 96, 107, 118,
2184 129, 140, 147, 148, 149, 150, 152, 153,
2185 255, 182, 224, 205, 174, 176, 180, 217,
2186 233, 232, 236, 187, 235, 228, 234, 226,
2187 222, 219, 211, 195, 188, 193, 185, 184,
2188 191, 183, 201, 229, 181, 220, 194, 162,
2189 163, 208, 186, 202, 200, 218, 198, 179,
2190 178, 214, 166, 170, 207, 199, 209, 206,
2191 204, 160, 212, 216, 215, 192, 175, 173,
2192 243, 172, 161, 190, 203, 189, 164, 230,
2193 167, 248, 227, 244, 242, 255, 241, 231,
2194 240, 253, 169, 210, 245, 237, 249, 247,
2195 239, 168, 252, 251, 254, 238, 223, 221,
2196 213, 225, 177, 197, 171, 196, 159, 4,
2197 5, 6, 8, 9, 10, 11, 12, 13,
2198 14, 15, 16, 17, 19, 20, 21, 22,
2199 23, 24, 25, 26, 27, 28, 30, 31,
2200 32, 33, 34, 35, 36, 37, 38, 39,
2201 41, 42, 43, 44, 45, 46, 47, 48,
2202 49, 50, 52, 53, 54, 55, 56, 57,
2203 58, 59, 60, 61, 63, 64, 65, 66,
2204 67, 68, 69, 70, 71, 72, 74, 75,
2205 76, 77, 78, 79, 80, 81, 82, 83,
2206 86, 87, 88, 89, 90, 91, 92, 93,
2207 94, 95, 97, 98, 99, 100, 101, 102,
2208 103, 104, 105, 106, 108, 109, 110, 111,
2209 112, 113, 114, 115, 116, 117, 119, 120,
2210 121, 122, 123, 124, 125, 126, 127, 128,
2211 130, 131, 132, 133, 134, 135, 136, 137,
2212 138, 139, 141, 142, 143, 144, 145, 146
2213};
9d116dd7 2214#endif
79072805 2215#else
22c35a8c 2216EXTCONST unsigned char PL_freq[];
79072805
LW
2217#endif
2218
8990e307
LW
2219#ifdef DEBUGGING
2220#ifdef DOINIT
22c35a8c 2221EXTCONST char* PL_block_type[] = {
8990e307
LW
2222 "NULL",
2223 "SUB",
2224 "EVAL",
2225 "LOOP",
2226 "SUBST",
2227 "BLOCK",
2228};
2229#else
22c35a8c 2230EXTCONST char* PL_block_type[];
8990e307
LW
2231#endif
2232#endif
2233
79072805
LW
2234/*****************************************************************************/
2235/* This lexer/parser stuff is currently global since yacc is hard to reenter */
2236/*****************************************************************************/
8990e307 2237/* XXX This needs to be revisited, since BEGIN makes yacc re-enter... */
79072805 2238
a0d0e21e
LW
2239#include "perly.h"
2240
fb73857a 2241#define LEX_NOTPARSING 11 /* borrowed from toke.c */
2242
79072805
LW
2243typedef enum {
2244 XOPERATOR,
2245 XTERM,
79072805 2246 XREF,
8990e307 2247 XSTATE,
a0d0e21e
LW
2248 XBLOCK,
2249 XTERMBLOCK
79072805
LW
2250} expectation;
2251
dc9e4912
GS
2252enum { /* pass one of these to get_vtbl */
2253 want_vtbl_sv,
2254 want_vtbl_env,
2255 want_vtbl_envelem,
2256 want_vtbl_sig,
2257 want_vtbl_sigelem,
2258 want_vtbl_pack,
2259 want_vtbl_packelem,
2260 want_vtbl_dbline,
2261 want_vtbl_isa,
2262 want_vtbl_isaelem,
2263 want_vtbl_arylen,
2264 want_vtbl_glob,
2265 want_vtbl_mglob,
2266 want_vtbl_nkeys,
2267 want_vtbl_taint,
2268 want_vtbl_substr,
2269 want_vtbl_vec,
2270 want_vtbl_pos,
2271 want_vtbl_bm,
2272 want_vtbl_fm,
2273 want_vtbl_uvar,
2274 want_vtbl_defelem,
2275 want_vtbl_regexp,
2276 want_vtbl_collxfrm,
2277 want_vtbl_amagic,
2278 want_vtbl_amagicelem,
2279#ifdef USE_THREADS
2280 want_vtbl_mutex,
2281#endif
2282 want_vtbl_regdata,
810b8aa5
GS
2283 want_vtbl_regdatum,
2284 want_vtbl_backref
dc9e4912
GS
2285};
2286
85e6fe83
LW
2287 /* Note: the lowest 8 bits are reserved for
2288 stuffing into op->op_private */
f3aa04c2 2289#define HINT_PRIVATE_MASK 0x000000ff
85e6fe83
LW
2290#define HINT_INTEGER 0x00000001
2291#define HINT_STRICT_REFS 0x00000002
a0ed51b3
LW
2292/* #define HINT_notused4 0x00000004 */
2293#define HINT_UTF8 0x00000008
2294/* #define HINT_notused10 0x00000010 */
2295 /* Note: 20,40,80 used for NATIVE_HINTS */
85e6fe83
LW
2296
2297#define HINT_BLOCK_SCOPE 0x00000100
2298#define HINT_STRICT_SUBS 0x00000200
2299#define HINT_STRICT_VARS 0x00000400
bbce6d69 2300#define HINT_LOCALE 0x00000800
85e6fe83 2301
b3ac6de7
IZ
2302#define HINT_NEW_INTEGER 0x00001000
2303#define HINT_NEW_FLOAT 0x00002000
2304#define HINT_NEW_BINARY 0x00004000
2305#define HINT_NEW_STRING 0x00008000
2306#define HINT_NEW_RE 0x00010000
2307#define HINT_LOCALIZE_HH 0x00020000 /* %^H needs to be copied */
2308
b3eb6a9b 2309#define HINT_RE_TAINT 0x00100000
e4d48cc9 2310#define HINT_RE_EVAL 0x00200000
b3eb6a9b 2311
5ff3f7a4
GS
2312#define HINT_FILETEST_ACCESS 0x00400000
2313
d4cce5f1
NIS
2314/* Various states of an input record separator SV (rs, nrs) */
2315#define RsSNARF(sv) (! SvOK(sv))
2316#define RsSIMPLE(sv) (SvOK(sv) && SvCUR(sv))
2317#define RsPARA(sv) (SvOK(sv) && ! SvCUR(sv))
5b2b9c68 2318#define RsRECORD(sv) (SvROK(sv) && (SvIV(SvRV(sv)) > 0))
79072805 2319
56953603 2320/* Enable variables which are pointers to functions */
15e52e56 2321#ifdef PERL_OBJECT
20ce7b12
GS
2322typedef regexp*(CPerlObj::*regcomp_t) (char* exp, char* xend, PMOP* pm);
2323typedef I32 (CPerlObj::*regexec_t) (regexp* prog, char* stringarg,
2324 char* strend, char* strbeg,
2325 I32 minend, SV* screamer, void* data,
2326 U32 flags);
15e52e56 2327#else
cea2e8a9
GS
2328typedef regexp*(*regcomp_t) (pTHX_ char* exp, char* xend, PMOP* pm);
2329typedef I32 (*regexec_t) (pTHX_ regexp* prog, char* stringarg, char* strend, char*
20ce7b12
GS
2330 strbeg, I32 minend, SV* screamer, void* data,
2331 U32 flags);
56953603 2332
15e52e56
GS
2333#endif
2334
22239a37
NIS
2335/* Set up PERLVAR macros for populating structs */
2336#define PERLVAR(var,type) type var;
2337#define PERLVARI(var,type,init) type var;
3fe35a81 2338#define PERLVARIC(var,type,init) type var;
22239a37 2339
58a50f62
GS
2340/* Interpreter exitlist entry */
2341typedef struct exitlistentry {
2342#ifdef PERL_OBJECT
20ce7b12 2343 void (*fn) (CPerlObj*, void*);
58a50f62 2344#else
cea2e8a9 2345 void (*fn) (pTHX_ void*);
58a50f62
GS
2346#endif
2347 void *ptr;
2348} PerlExitListEntry;
2349
76e3520e 2350#ifdef PERL_OBJECT
20ce7b12 2351extern "C" CPerlObj* perl_alloc (IPerlMem*, IPerlEnv*, IPerlStdIO*, IPerlLIO*, IPerlDir*, IPerlSock*, IPerlProc*);
76e3520e 2352
22c35a8c 2353#ifdef PERL_OBJECT
20ce7b12 2354typedef int (CPerlObj::*runops_proc_t) (void);
22c35a8c
GS
2355#endif /* PERL_OBJECT */
2356
76e3520e
GS
2357#undef EXT
2358#define EXT
2359#undef EXTCONST
2360#define EXTCONST
2361#undef INIT
2362#define INIT(x)
2363
2364class CPerlObj {
2365public:
2366 CPerlObj(IPerlMem*, IPerlEnv*, IPerlStdIO*, IPerlLIO*, IPerlDir*, IPerlSock*, IPerlProc*);
2367 void Init(void);
2368 void* operator new(size_t nSize, IPerlMem *pvtbl);
2369#endif /* PERL_OBJECT */
2370
22239a37
NIS
2371#ifdef PERL_GLOBAL_STRUCT
2372struct perl_vars {
2373#include "perlvars.h"
2374};
2375
2376#ifdef PERL_CORE
533c011a
NIS
2377EXT struct perl_vars PL_Vars;
2378EXT struct perl_vars *PL_VarsPtr INIT(&PL_Vars);
2379#else /* PERL_CORE */
8736538c 2380#if !defined(__GNUC__) || !(defined(WIN32) || defined(CYGWIN32))
22239a37 2381EXT
533c011a
NIS
2382#endif /* WIN32 */
2383struct perl_vars *PL_VarsPtr;
2384#define PL_Vars (*((PL_VarsPtr) ? PL_VarsPtr : (PL_VarsPtr = Perl_GetVars())))
2385#endif /* PERL_CORE */
22239a37
NIS
2386#endif /* PERL_GLOBAL_STRUCT */
2387
8990e307 2388#ifdef MULTIPLICITY
d4cce5f1
NIS
2389/* If we have multiple interpreters define a struct
2390 holding variables which must be per-interpreter
2391 If we don't have threads anything that would have
2392 be per-thread is per-interpreter.
2393*/
2394
79072805 2395struct interpreter {
d4cce5f1 2396#include "thrdvar.h"
d4cce5f1 2397#include "intrpvar.h"
49f531da 2398};
d4cce5f1 2399
79072805 2400#else
49f531da
NIS
2401struct interpreter {
2402 char broiled;
2403};
79072805
LW
2404#endif
2405
d4cce5f1
NIS
2406#ifdef USE_THREADS
2407/* If we have threads define a struct with all the variables
2408 * that have to be per-thread
49f531da 2409 */
8023c3ce 2410
79072805 2411
49f531da 2412struct perl_thread {
49f531da 2413#include "thrdvar.h"
79072805 2414};
d4cce5f1 2415
22fae026
TM
2416typedef struct perl_thread *Thread;
2417
2418#else
2419typedef void *Thread;
22239a37
NIS
2420#endif
2421
2422/* Done with PERLVAR macros for now ... */
d4cce5f1
NIS
2423#undef PERLVAR
2424#undef PERLVARI
3fe35a81 2425#undef PERLVARIC
79072805 2426
22239a37 2427#include "thread.h"
79072805 2428#include "pp.h"
864dbfa3
GS
2429
2430#ifndef PERL_CALLCONV
2431# define PERL_CALLCONV
2432#endif
2433
2434#ifdef PERL_OBJECT
2435# define VIRTUAL virtual PERL_CALLCONV
2436#else
2437# define VIRTUAL PERL_CALLCONV
2438START_EXTERN_C
2439#endif
2440
2441#ifndef NEXT30_NO_ATTRIBUTE
2442# ifndef HASATTRIBUTE /* disable GNU-cc attribute checking? */
2443# ifdef __attribute__ /* Avoid possible redefinition errors */
2444# undef __attribute__
2445# endif
2446# define __attribute__(attr)
2447# endif
2448#endif
2449
2450#ifdef USE_PURE_BISON
2451int Perl_yylex(pTHX_ YYSTYPE *lvalp, int *lcharp);
2452#endif
2453
2454typedef void (*DESTRUCTORFUNC_t) (pTHX_ void*);
2455typedef void (*SVFUNC_t) (pTHX_ SV*);
2456typedef I32 (*SVCOMPARE_t) (pTHX_ SV*, SV*);
2457typedef void (*XSINIT_t) (pTHX);
2458typedef void (*ATEXIT_t) (pTHX_ void*);
2459typedef void (*XSUBADDR_t) (pTHX_ CV *);
2460
79072805
LW
2461#include "proto.h"
2462
864dbfa3
GS
2463#include "pp_proto.h"
2464
2465#ifndef PERL_OBJECT
2466END_EXTERN_C
2467#endif
2468
d4cce5f1
NIS
2469/* The following must follow proto.h as #defines mess up syntax */
2470
22c35a8c
GS
2471#if !defined(PERL_FOR_X2P)
2472# include "embedvar.h"
2473#endif
d4cce5f1
NIS
2474
2475/* Now include all the 'global' variables
2476 * If we don't have threads or multiple interpreters
2477 * these include variables that would have been their struct-s
2478 */
533c011a
NIS
2479
2480#define PERLVAR(var,type) EXT type PL_##var;
2481#define PERLVARI(var,type,init) EXT type PL_##var INIT(init);
2482#define PERLVARIC(var,type,init) EXTCONST type PL_##var INIT(init);
d4cce5f1 2483
22239a37 2484#ifndef PERL_GLOBAL_STRUCT
d4cce5f1 2485#include "perlvars.h"
22239a37 2486#endif
d4cce5f1
NIS
2487
2488#ifndef MULTIPLICITY
d4cce5f1 2489
066ef5b5
GS
2490# include "intrpvar.h"
2491# ifndef USE_THREADS
2492# include "thrdvar.h"
2493# endif
d4cce5f1 2494
22239a37
NIS
2495#endif
2496
76e3520e 2497#ifdef PERL_OBJECT
d0c1b099
GS
2498/*
2499 * The following is a buffer where new variables must
2500 * be defined to maintain binary compatibility with PERL_OBJECT
2501 * for 5.005
2502 */
2503PERLVAR(object_compatibility[30], char)
76e3520e
GS
2504};
2505
22c35a8c
GS
2506# include "embed.h"
2507# if defined(WIN32) && !defined(WIN32IO_IS_STDIO)
2508# define errno CPerlObj::ErrorNo()
2509# endif
76e3520e 2510
22c35a8c
GS
2511# ifdef DOINIT
2512# include "INTERN.h"
2513# else
2514# include "EXTERN.h"
2515# endif
2516
2517/* this has structure inits, so it cannot be included before here */
2518# include "opcode.h"
2519
2520#endif /* PERL_OBJECT */
22239a37 2521
d4cce5f1
NIS
2522#undef PERLVAR
2523#undef PERLVARI
0f3f18a6 2524#undef PERLVARIC
79072805
LW
2525
2526#ifdef DOINIT
bbce6d69 2527
cea2e8a9
GS
2528EXT MGVTBL PL_vtbl_sv = {Perl_magic_get,
2529 Perl_magic_set,
2530 Perl_magic_len,
463ee0b2 2531 0, 0};
cea2e8a9
GS
2532EXT MGVTBL PL_vtbl_env = {0, Perl_magic_set_all_env,
2533 0, Perl_magic_clear_all_env,
66b1d557 2534 0};
cea2e8a9
GS
2535EXT MGVTBL PL_vtbl_envelem = {0, Perl_magic_setenv,
2536 0, Perl_magic_clearenv,
85e6fe83 2537 0};
22c35a8c 2538EXT MGVTBL PL_vtbl_sig = {0, 0, 0, 0, 0};
cea2e8a9
GS
2539EXT MGVTBL PL_vtbl_sigelem = {Perl_magic_getsig,
2540 Perl_magic_setsig,
2541 0, Perl_magic_clearsig,
0c30d9ec 2542 0};
cea2e8a9 2543EXT MGVTBL PL_vtbl_pack = {0, 0, Perl_magic_sizepack, Perl_magic_wipepack,
a0d0e21e 2544 0};
cea2e8a9
GS
2545EXT MGVTBL PL_vtbl_packelem = {Perl_magic_getpack,
2546 Perl_magic_setpack,
2547 0, Perl_magic_clearpack,
463ee0b2 2548 0};
cea2e8a9 2549EXT MGVTBL PL_vtbl_dbline = {0, Perl_magic_setdbline,
463ee0b2 2550 0, 0, 0};
cea2e8a9
GS
2551EXT MGVTBL PL_vtbl_isa = {0, Perl_magic_setisa,
2552 0, Perl_magic_setisa,
fb73857a 2553 0};
cea2e8a9 2554EXT MGVTBL PL_vtbl_isaelem = {0, Perl_magic_setisa,
463ee0b2 2555 0, 0, 0};
cea2e8a9
GS
2556EXT MGVTBL PL_vtbl_arylen = {Perl_magic_getarylen,
2557 Perl_magic_setarylen,
463ee0b2 2558 0, 0, 0};
cea2e8a9
GS
2559EXT MGVTBL PL_vtbl_glob = {Perl_magic_getglob,
2560 Perl_magic_setglob,
463ee0b2 2561 0, 0, 0};
cea2e8a9 2562EXT MGVTBL PL_vtbl_mglob = {0, Perl_magic_setmglob,
463ee0b2 2563 0, 0, 0};
cea2e8a9
GS
2564EXT MGVTBL PL_vtbl_nkeys = {Perl_magic_getnkeys,
2565 Perl_magic_setnkeys,
99abf803 2566 0, 0, 0};
cea2e8a9 2567EXT MGVTBL PL_vtbl_taint = {Perl_magic_gettaint,Perl_magic_settaint,
463ee0b2 2568 0, 0, 0};
cea2e8a9 2569EXT MGVTBL PL_vtbl_substr = {Perl_magic_getsubstr, Perl_magic_setsubstr,
463ee0b2 2570 0, 0, 0};
cea2e8a9
GS
2571EXT MGVTBL PL_vtbl_vec = {Perl_magic_getvec,
2572 Perl_magic_setvec,
463ee0b2 2573 0, 0, 0};
cea2e8a9
GS
2574EXT MGVTBL PL_vtbl_pos = {Perl_magic_getpos,
2575 Perl_magic_setpos,
a0d0e21e 2576 0, 0, 0};
cea2e8a9 2577EXT MGVTBL PL_vtbl_bm = {0, Perl_magic_setbm,
463ee0b2 2578 0, 0, 0};
cea2e8a9 2579EXT MGVTBL PL_vtbl_fm = {0, Perl_magic_setfm,
55497cff 2580 0, 0, 0};
cea2e8a9
GS
2581EXT MGVTBL PL_vtbl_uvar = {Perl_magic_getuvar,
2582 Perl_magic_setuvar,
463ee0b2 2583 0, 0, 0};
f93b4edd 2584#ifdef USE_THREADS
cea2e8a9 2585EXT MGVTBL PL_vtbl_mutex = {0, 0, 0, 0, Perl_magic_mutexfree};
f93b4edd 2586#endif /* USE_THREADS */
cea2e8a9 2587EXT MGVTBL PL_vtbl_defelem = {Perl_magic_getdefelem,Perl_magic_setdefelem,
02270b4e 2588 0, 0, 0};
a0d0e21e 2589
cea2e8a9
GS
2590EXT MGVTBL PL_vtbl_regexp = {0,0,0,0, Perl_magic_freeregexp};
2591EXT MGVTBL PL_vtbl_regdata = {0, 0, Perl_magic_regdata_cnt, 0, 0};
2592EXT MGVTBL PL_vtbl_regdatum = {Perl_magic_regdatum_get, 0, 0, 0, 0};
c277df42 2593
36477c24 2594#ifdef USE_LOCALE_COLLATE
22c35a8c 2595EXT MGVTBL PL_vtbl_collxfrm = {0,
cea2e8a9 2596 Perl_magic_setcollxfrm,
bbce6d69 2597 0, 0, 0};
2598#endif
a0d0e21e 2599
cea2e8a9
GS
2600EXT MGVTBL PL_vtbl_amagic = {0, Perl_magic_setamagic,
2601 0, 0, Perl_magic_setamagic};
2602EXT MGVTBL PL_vtbl_amagicelem = {0, Perl_magic_setamagic,
2603 0, 0, Perl_magic_setamagic};
a0d0e21e 2604
810b8aa5 2605EXT MGVTBL PL_vtbl_backref = {0, 0,
cea2e8a9 2606 0, 0, Perl_magic_killbackrefs};
810b8aa5 2607
bbce6d69 2608#else /* !DOINIT */
2609
22c35a8c
GS
2610EXT MGVTBL PL_vtbl_sv;
2611EXT MGVTBL PL_vtbl_env;
2612EXT MGVTBL PL_vtbl_envelem;
2613EXT MGVTBL PL_vtbl_sig;
2614EXT MGVTBL PL_vtbl_sigelem;
2615EXT MGVTBL PL_vtbl_pack;
2616EXT MGVTBL PL_vtbl_packelem;
2617EXT MGVTBL PL_vtbl_dbline;
2618EXT MGVTBL PL_vtbl_isa;
2619EXT MGVTBL PL_vtbl_isaelem;
2620EXT MGVTBL PL_vtbl_arylen;
2621EXT MGVTBL PL_vtbl_glob;
2622EXT MGVTBL PL_vtbl_mglob;
2623EXT MGVTBL PL_vtbl_nkeys;
2624EXT MGVTBL PL_vtbl_taint;
2625EXT MGVTBL PL_vtbl_substr;
2626EXT MGVTBL PL_vtbl_vec;
2627EXT MGVTBL PL_vtbl_pos;
2628EXT MGVTBL PL_vtbl_bm;
2629EXT MGVTBL PL_vtbl_fm;
2630EXT MGVTBL PL_vtbl_uvar;
a0d0e21e 2631
f93b4edd 2632#ifdef USE_THREADS
22c35a8c 2633EXT MGVTBL PL_vtbl_mutex;
f93b4edd
MB
2634#endif /* USE_THREADS */
2635
22c35a8c
GS
2636EXT MGVTBL PL_vtbl_defelem;
2637EXT MGVTBL PL_vtbl_regexp;
2638EXT MGVTBL PL_vtbl_regdata;
2639EXT MGVTBL PL_vtbl_regdatum;
a0d0e21e 2640
36477c24 2641#ifdef USE_LOCALE_COLLATE
22c35a8c 2642EXT MGVTBL PL_vtbl_collxfrm;
bbce6d69 2643#endif
a0d0e21e 2644
22c35a8c
GS
2645EXT MGVTBL PL_vtbl_amagic;
2646EXT MGVTBL PL_vtbl_amagicelem;
a0d0e21e 2647
810b8aa5
GS
2648EXT MGVTBL PL_vtbl_backref;
2649
bbce6d69 2650#endif /* !DOINIT */
85e6fe83 2651
f5284f61
IZ
2652enum {
2653 fallback_amg, abs_amg,
2654 bool__amg, nomethod_amg,
2655 string_amg, numer_amg,
2656 add_amg, add_ass_amg,
2657 subtr_amg, subtr_ass_amg,
2658 mult_amg, mult_ass_amg,
2659 div_amg, div_ass_amg,
2660 modulo_amg, modulo_ass_amg,
2661 pow_amg, pow_ass_amg,
2662 lshift_amg, lshift_ass_amg,
2663 rshift_amg, rshift_ass_amg,
2664 band_amg, band_ass_amg,
2665 bor_amg, bor_ass_amg,
2666 bxor_amg, bxor_ass_amg,
2667 lt_amg, le_amg,
2668 gt_amg, ge_amg,
2669 eq_amg, ne_amg,
2670 ncmp_amg, scmp_amg,
2671 slt_amg, sle_amg,
2672 sgt_amg, sge_amg,
2673 seq_amg, sne_amg,
2674 not_amg, compl_amg,
2675 inc_amg, dec_amg,
2676 atan2_amg, cos_amg,
2677 sin_amg, exp_amg,
2678 log_amg, sqrt_amg,
2679 repeat_amg, repeat_ass_amg,
2680 concat_amg, concat_ass_amg,
2681 copy_amg, neg_amg,
2682 to_sv_amg, to_av_amg,
2683 to_hv_amg, to_gv_amg,
2684 to_cv_amg, iter_amg,
64a0062a
JH
2685 max_amg_code
2686 /* Do not leave a trailing comma here. C9X allows it, C89 doesn't. */
f5284f61
IZ
2687};
2688
2689#define NofAMmeth max_amg_code
2690
a0d0e21e 2691#ifdef DOINIT
22c35a8c 2692EXTCONST char * PL_AMG_names[NofAMmeth] = {
a6006777 2693 "fallback", "abs", /* "fallback" should be the first. */
2694 "bool", "nomethod",
2695 "\"\"", "0+",
2696 "+", "+=",
2697 "-", "-=",
2698 "*", "*=",
2699 "/", "/=",
2700 "%", "%=",
2701 "**", "**=",
2702 "<<", "<<=",
2703 ">>", ">>=",
2704 "&", "&=",
2705 "|", "|=",
2706 "^", "^=",
2707 "<", "<=",
2708 ">", ">=",
2709 "==", "!=",
2710 "<=>", "cmp",
2711 "lt", "le",
2712 "gt", "ge",
2713 "eq", "ne",
2714 "!", "~",
2715 "++", "--",
2716 "atan2", "cos",
2717 "sin", "exp",
2718 "log", "sqrt",
2719 "x", "x=",
2720 ".", ".=",
f5284f61
IZ
2721 "=", "neg",
2722 "${}", "@{}",
2723 "%{}", "*{}",
2724 "&{}", "<>",
a0d0e21e
LW
2725};
2726#else
22c35a8c 2727EXTCONST char * PL_AMG_names[NofAMmeth];
a0d0e21e
LW
2728#endif /* def INITAMAGIC */
2729
a6006777 2730struct am_table {
a0d0e21e
LW
2731 long was_ok_sub;
2732 long was_ok_am;
a6006777 2733 U32 flags;
2734 CV* table[NofAMmeth];
a0d0e21e
LW
2735 long fallback;
2736};
a6006777 2737struct am_table_short {
2738 long was_ok_sub;
2739 long was_ok_am;
2740 U32 flags;
2741};
a0d0e21e 2742typedef struct am_table AMT;
a6006777 2743typedef struct am_table_short AMTS;
a0d0e21e
LW
2744
2745#define AMGfallNEVER 1
2746#define AMGfallNO 2
2747#define AMGfallYES 3
2748
a6006777 2749#define AMTf_AMAGIC 1
2750#define AMT_AMAGIC(amt) ((amt)->flags & AMTf_AMAGIC)
2751#define AMT_AMAGIC_on(amt) ((amt)->flags |= AMTf_AMAGIC)
2752#define AMT_AMAGIC_off(amt) ((amt)->flags &= ~AMTf_AMAGIC)
2753
c0315cdf
JH
2754
2755/*
2756 * some compilers like to redefine cos et alia as faster
2757 * (and less accurate?) versions called F_cos et cetera (Quidquid
2758 * latine dictum sit, altum viditur.) This trick collides with
2759 * the Perl overloading (amg). The following #defines fool both.
2760 */
2761
2762#ifdef _FASTMATH
2763# ifdef atan2
2764# define F_atan2_amg atan2_amg
2765# endif
2766# ifdef cos
2767# define F_cos_amg cos_amg
2768# endif
2769# ifdef exp
2770# define F_exp_amg exp_amg
2771# endif
2772# ifdef log
2773# define F_log_amg log_amg
2774# endif
2775# ifdef pow
2776# define F_pow_amg pow_amg
2777# endif
2778# ifdef sin
2779# define F_sin_amg sin_amg
2780# endif
2781# ifdef sqrt
2782# define F_sqrt_amg sqrt_amg
2783# endif
2784#endif /* _FASTMATH */
2785
491527d0 2786#define PERLDB_ALL 0x3f /* No _NONAME, _GOTO */
84902520
TB
2787#define PERLDBf_SUB 0x01 /* Debug sub enter/exit. */
2788#define PERLDBf_LINE 0x02 /* Keep line #. */
2789#define PERLDBf_NOOPT 0x04 /* Switch off optimizations. */
2790#define PERLDBf_INTER 0x08 /* Preserve more data for
2791 later inspections. */
2792#define PERLDBf_SUBLINE 0x10 /* Keep subr source lines. */
2793#define PERLDBf_SINGLE 0x20 /* Start with single-step on. */
491527d0
GS
2794#define PERLDBf_NONAME 0x40 /* For _SUB: no name of the subr. */
2795#define PERLDBf_GOTO 0x80 /* Report goto: call DB::goto. */
84902520 2796
3280af22
NIS
2797#define PERLDB_SUB (PL_perldb && (PL_perldb & PERLDBf_SUB))
2798#define PERLDB_LINE (PL_perldb && (PL_perldb & PERLDBf_LINE))
2799#define PERLDB_NOOPT (PL_perldb && (PL_perldb & PERLDBf_NOOPT))
2800#define PERLDB_INTER (PL_perldb && (PL_perldb & PERLDBf_INTER))
2801#define PERLDB_SUBLINE (PL_perldb && (PL_perldb & PERLDBf_SUBLINE))
2802#define PERLDB_SINGLE (PL_perldb && (PL_perldb & PERLDBf_SINGLE))
2803#define PERLDB_SUB_NN (PL_perldb && (PL_perldb & (PERLDBf_NONAME)))
2804#define PERLDB_GOTO (PL_perldb && (PL_perldb & PERLDBf_GOTO))
84902520 2805
bbce6d69 2806
36477c24 2807#ifdef USE_LOCALE_NUMERIC
bbce6d69 2808
36477c24 2809#define SET_NUMERIC_STANDARD() \
2810 STMT_START { \
864dbfa3
GS
2811 if (! PL_numeric_standard) \
2812 set_numeric_standard(); \
36477c24 2813 } STMT_END
2814
2815#define SET_NUMERIC_LOCAL() \
2816 STMT_START { \
3280af22 2817 if (! PL_numeric_local) \
864dbfa3 2818 set_numeric_local(); \
36477c24 2819 } STMT_END
bbce6d69 2820
36477c24 2821#else /* !USE_LOCALE_NUMERIC */
bbce6d69 2822
36477c24 2823#define SET_NUMERIC_STANDARD() /**/
2824#define SET_NUMERIC_LOCAL() /**/
bbce6d69 2825
36477c24 2826#endif /* !USE_LOCALE_NUMERIC */
a0d0e21e 2827
e5c9fcd0 2828#if !defined(PERLIO_IS_STDIO) && defined(HASATTRIBUTE)
760ac839
LW
2829/*
2830 * Now we have __attribute__ out of the way
2831 * Remap printf
2832 */
2833#define printf PerlIO_stdoutf
2834#endif
2835
a868473f
NIS
2836#ifndef PERL_SCRIPT_MODE
2837#define PERL_SCRIPT_MODE "r"
2838#endif
2839
fba3b22e
MB
2840/*
2841 * nice_chunk and nice_chunk size need to be set
2842 * and queried under the protection of sv_mutex
2843 */
2844#define offer_nice_chunk(chunk, chunk_size) do { \
940cb80d 2845 LOCK_SV_MUTEX; \
3280af22
NIS
2846 if (!PL_nice_chunk) { \
2847 PL_nice_chunk = (char*)(chunk); \
2848 PL_nice_chunk_size = (chunk_size); \
fba3b22e 2849 } \
fc80cf79
GS
2850 else { \
2851 Safefree(chunk); \
2852 } \
940cb80d 2853 UNLOCK_SV_MUTEX; \
fba3b22e
MB
2854 } while (0)
2855
bd89102f
AD
2856#ifdef HAS_SEM
2857# include <sys/ipc.h>
2858# include <sys/sem.h>
2859# ifndef HAS_UNION_SEMUN /* Provide the union semun. */
2860 union semun {
2861 int val;
2862 struct semid_ds *buf;
2863 unsigned short *array;
2864 };
2865# endif
2866# ifdef USE_SEMCTL_SEMUN
2867# define Semctl(id, num, cmd, semun) semctl(id, num, cmd, semun)
2868# else
2869# ifdef USE_SEMCTL_SEMID_DS
2870# define Semctl(id, num, cmd, semun) semctl(id, num, cmd, semun.buf)
2871# endif
2872# endif
bd89102f 2873#endif
49f531da 2874
ff49bff8
JH
2875/* Mention
2876
2877 INSTALL_USR_BIN_PERL
2878
2879 I_SYS_MMAN
2880 HAS_MMAP
2881 HAS_MUNMAP
2882 HAS_MPROTECT
2883 HAS_MSYNC
2884 HAS_MADVISE
2885 Mmap_t
2886
2887 here so that Configure picks them up. */
104d25b7
JH
2888
2889#ifdef IAMSUID
2890
2891#ifdef I_SYS_STATVFS
32b3cf08
JH
2892# include <sys/statvfs.h> /* for f?statvfs() */
2893#endif
2894#ifdef I_SYS_MOUNT
2895# include <sys/mount.h> /* for *BSD f?statfs() */
2896#endif
2897#ifdef I_MNTENT
2898# include <mntent.h> /* for getmntent() */
104d25b7
JH
2899#endif
2900
2901#endif /* IAMSUID */
2902
4d8076ea 2903/* and finally... */
cceca5ed 2904#define PERL_PATCHLEVEL_H_IMPLICIT
4d8076ea 2905#include "patchlevel.h"
cceca5ed 2906#undef PERL_PATCHLEVEL_H_IMPLICIT
4d8076ea 2907
85e6fe83 2908#endif /* Include guard */