This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
These casts to GV are no longer needed.
[perl5.git] / perl.h
1 /*    perl.h
2  *
3  *    Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4  *    2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, by Larry Wall and others
5  *
6  *    You may distribute under the terms of either the GNU General Public
7  *    License or the Artistic License, as specified in the README file.
8  *
9  */
10
11 #ifndef H_PERL
12 #define H_PERL 1
13
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  */
20 #undef MULTIPLICITY
21 #undef USE_STDIO
22 #define USE_STDIO
23 #endif /* PERL_FOR_X2P */
24
25 #if defined(DGUX)
26 #include <sys/fcntl.h>
27 #endif
28
29 #ifdef VOIDUSED
30 #   undef VOIDUSED
31 #endif 
32 #define VOIDUSED 1
33
34 #ifdef PERL_MICRO
35 #   include "uconfig.h"
36 #else
37 #   ifndef USE_CROSS_COMPILE
38 #       include "config.h"
39 #   else
40 #       include "xconfig.h"
41 #   endif
42 #endif
43
44 /* See L<perlguts/"The Perl API"> for detailed notes on
45  * PERL_IMPLICIT_CONTEXT and PERL_IMPLICIT_SYS */
46
47 /* Note that from here --> to <-- the same logic is
48  * repeated in makedef.pl, so be certain to update
49  * both places when editing. */
50
51 #ifdef PERL_IMPLICIT_SYS
52 /* PERL_IMPLICIT_SYS implies PerlMemShared != PerlMem
53    so use slab allocator to avoid lots of MUTEX overhead
54  */
55 #  ifndef PL_OP_SLAB_ALLOC
56 #    define PL_OP_SLAB_ALLOC
57 #  endif
58 #endif
59
60 #ifdef USE_ITHREADS
61 #  if !defined(MULTIPLICITY)
62 #    define MULTIPLICITY
63 #  endif
64 #endif
65
66 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
67 #  ifndef PERL_GLOBAL_STRUCT
68 #    define PERL_GLOBAL_STRUCT
69 #  endif
70 #endif
71
72 #ifdef PERL_GLOBAL_STRUCT
73 #  ifndef MULTIPLICITY
74 #    define MULTIPLICITY
75 #  endif
76 #endif
77
78 #ifdef MULTIPLICITY
79 #  ifndef PERL_IMPLICIT_CONTEXT
80 #    define PERL_IMPLICIT_CONTEXT
81 #  endif
82 #endif
83
84 /* undef WIN32 when building on Cygwin (for libwin32) - gph */
85 #ifdef __CYGWIN__
86 #   undef WIN32
87 #   undef _WIN32
88 #endif
89
90 #if defined(__SYMBIAN32__) || (defined(__VC32__) && defined(WINS))
91 #   ifndef SYMBIAN
92 #       define SYMBIAN
93 #   endif
94 #endif
95
96 #ifdef __SYMBIAN32__
97 #  include "symbian/symbian_proto.h"
98 #endif
99
100 /* Any stack-challenged places.  The limit varies (and often
101  * is configurable), but using more than a kilobyte of stack
102  * is usually dubious in these systems. */
103 #if defined(EPOC) || defined(__SYMBIAN32__)
104 /* EPOC/Symbian: need to work around the SDK features. *
105  * On WINS: MS VC5 generates calls to _chkstk,         *
106  * if a "large" stack frame is allocated.              *
107  * gcc on MARM does not generate calls like these.     */
108 #   define USE_HEAP_INSTEAD_OF_STACK
109 #endif
110
111 #/* Use the reentrant APIs like localtime_r and getpwent_r */
112 /* Win32 has naturally threadsafe libraries, no need to use any _r variants. */
113 #if defined(USE_ITHREADS) && !defined(USE_REENTRANT_API) && !defined(NETWARE) && !defined(WIN32) && !defined(PERL_DARWIN)
114 #   define USE_REENTRANT_API
115 #endif
116
117 /* <--- here ends the logic shared by perl.h and makedef.pl */
118
119 /*
120  * PERL_DARWIN for MacOSX (__APPLE__ exists but is not officially sanctioned)
121  * (The -DPERL_DARWIN comes from the hints/darwin.sh.)
122  * __bsdi__ for BSD/OS
123  */
124 #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(PERL_DARWIN) || defined(__bsdi__) || defined(BSD41) || defined(BSD42) || defined(BSD43) || defined(BSD44)
125 #   ifndef BSDish
126 #       define BSDish
127 #   endif
128 #endif
129
130 #ifdef PERL_GLOBAL_STRUCT
131 #  ifndef PERL_GET_VARS
132 #    ifdef PERL_GLOBAL_STRUCT_PRIVATE
133        extern struct perl_vars* Perl_GetVarsPrivate();
134 #      define PERL_GET_VARS() Perl_GetVarsPrivate() /* see miniperlmain.c */
135 #      ifndef PERLIO_FUNCS_CONST
136 #        define PERLIO_FUNCS_CONST /* Can't have these lying around. */
137 #      endif
138 #    else
139 #      define PERL_GET_VARS() PL_VarsPtr
140 #    endif
141 #  endif
142 #endif
143
144 #define pVAR    register struct perl_vars* my_vars PERL_UNUSED_DECL
145
146 #ifdef PERL_GLOBAL_STRUCT
147 #  define dVAR          pVAR    = (struct perl_vars*)PERL_GET_VARS()
148 #else
149 #  define dVAR          dNOOP
150 #endif
151
152 #ifdef PERL_IMPLICIT_CONTEXT
153 #  ifndef MULTIPLICITY
154 #    define MULTIPLICITY
155 #  endif
156 #  define tTHX  PerlInterpreter*
157 #  define pTHX  register tTHX my_perl PERL_UNUSED_DECL
158 #  define aTHX  my_perl
159 #  ifdef PERL_GLOBAL_STRUCT
160 #    define dTHXa(a)    dVAR; pTHX = (tTHX)a
161 #  else
162 #    define dTHXa(a)    pTHX = (tTHX)a
163 #  endif
164 #  ifdef PERL_GLOBAL_STRUCT
165 #    define dTHX                dVAR; pTHX = PERL_GET_THX
166 #  else
167 #    define dTHX                pTHX = PERL_GET_THX
168 #  endif
169 #  define pTHX_         pTHX,
170 #  define aTHX_         aTHX,
171 #  define pTHX_1        2
172 #  define pTHX_2        3
173 #  define pTHX_3        4
174 #  define pTHX_4        5
175 #  define pTHX_5        6
176 #  define pTHX_6        7
177 #  define pTHX_7        8
178 #  define pTHX_8        9
179 #  define pTHX_9        10
180 #  if defined(DEBUGGING) && !defined(PERL_TRACK_MEMPOOL)
181 #    define PERL_TRACK_MEMPOOL
182 #  endif
183 #else
184 #  undef PERL_TRACK_MEMPOOL
185 #endif
186
187 #define STATIC static
188 #define CPERLscope(x) x
189 #define CPERLarg void
190 #define CPERLarg_
191 #define _CPERLarg
192 #define PERL_OBJECT_THIS
193 #define _PERL_OBJECT_THIS
194 #define PERL_OBJECT_THIS_
195 #define CALL_FPTR(fptr) (*fptr)
196
197 #define CALLRUNOPS  CALL_FPTR(PL_runops)
198
199 #define CALLREGCOMP(exp, xend, pm) Perl_pregcomp(aTHX_ (exp),(xend),(pm))
200
201 #define CALLREGCOMP_ENG(prog, exp, xend, pm) \
202     CALL_FPTR(((prog)->comp))(aTHX_ exp, xend, pm)
203 #define CALLREGEXEC(prog,stringarg,strend,strbeg,minend,screamer,data,flags) \
204     CALL_FPTR((prog)->engine->exec)(aTHX_ (prog),(stringarg),(strend), \
205         (strbeg),(minend),(screamer),(data),(flags))
206 #define CALLREG_INTUIT_START(prog,sv,strpos,strend,flags,data) \
207     CALL_FPTR((prog)->engine->intuit)(aTHX_ (prog), (sv), (strpos), \
208         (strend),(flags),(data))
209 #define CALLREG_INTUIT_STRING(prog) \
210     CALL_FPTR((prog)->engine->checkstr)(aTHX_ (prog))
211
212 #define CALLREG_AS_STR(mg,lp,flags,haseval) \
213         Perl_reg_stringify(aTHX_ (mg), (lp), (flags), (haseval))
214 #define CALLREG_STRINGIFY(mg,lp,flags) CALLREG_AS_STR(mg,lp,flags,0)
215
216 #define CALLREGFREE(prog) \
217     Perl_pregfree(aTHX_ (prog))
218
219 #define CALLREGFREE_PVT(prog) \
220     if(prog) CALL_FPTR((prog)->engine->free)(aTHX_ (prog))
221
222 #if defined(USE_ITHREADS)         
223 #define CALLREGDUPE(prog,param) \
224     Perl_re_dup(aTHX_ (prog),(param))
225
226 #define CALLREGDUPE_PVT(prog,param) \
227     (prog ? CALL_FPTR((prog)->engine->dupe)(aTHX_ (prog),(param)) \
228           : (REGEXP *)NULL) 
229 #endif
230
231
232
233
234
235 /*
236  * Because of backward compatibility reasons the PERL_UNUSED_DECL
237  * cannot be changed from postfix to PERL_UNUSED_DECL(x).  Sigh.
238  *
239  * Note that there are C compilers such as MetroWerks CodeWarrior
240  * which do not have an "inlined" way (like the gcc __attribute__) of
241  * marking unused variables (they need e.g. a #pragma) and therefore
242  * cpp macros like PERL_UNUSED_DECL cannot work for this purpose, even
243  * if it were PERL_UNUSED_DECL(x), which it cannot be (see above).
244  *
245  */
246
247 #if defined(__SYMBIAN32__) && defined(__GNUC__)
248 #  ifdef __cplusplus
249 #    define PERL_UNUSED_DECL
250 #  else
251 #    define PERL_UNUSED_DECL __attribute__((unused))
252 #  endif
253 #endif
254
255 #ifndef PERL_UNUSED_DECL
256 #  if defined(HASATTRIBUTE_UNUSED) && !defined(__cplusplus)
257 #    define PERL_UNUSED_DECL __attribute__unused__
258 #  else
259 #    define PERL_UNUSED_DECL
260 #  endif
261 #endif
262  
263 /* gcc -Wall:
264  * for silencing unused variables that are actually used most of the time,
265  * but we cannot quite get rid of, such as "ax" in PPCODE+noargs xsubs
266  */
267 #ifndef PERL_UNUSED_ARG
268 #  if defined(lint) && defined(S_SPLINT_S) /* www.splint.org */
269 #    include <note.h>
270 #    define PERL_UNUSED_ARG(x) NOTE(ARGUNUSED(x))
271 #  else
272 #    define PERL_UNUSED_ARG(x) ((void)x)
273 #  endif
274 #endif
275 #ifndef PERL_UNUSED_VAR
276 #  define PERL_UNUSED_VAR(x) ((void)x)
277 #endif
278
279 #ifdef USE_ITHREADS
280 #  define PERL_UNUSED_CONTEXT PERL_UNUSED_ARG(my_perl)
281 #else
282 #  define PERL_UNUSED_CONTEXT
283 #endif
284
285 #define NOOP /*EMPTY*/(void)0
286 #if !defined(HASATTRIBUTE_UNUSED) && defined(__cplusplus)
287 #define dNOOP /*EMPTY*/(void)0 /* Older g++ has no __attribute((unused))__ */
288 #else
289 #define dNOOP extern int /*@unused@*/ Perl___notused PERL_UNUSED_DECL
290 #endif
291
292 #ifndef pTHX
293 /* Don't bother defining tTHX and sTHX; using them outside
294  * code guarded by PERL_IMPLICIT_CONTEXT is an error.
295  */
296 #  define pTHX          void
297 #  define pTHX_
298 #  define aTHX
299 #  define aTHX_
300 #  define dTHXa(a)      dNOOP
301 #  define dTHX          dNOOP
302 #  define pTHX_1        1       
303 #  define pTHX_2        2
304 #  define pTHX_3        3
305 #  define pTHX_4        4
306 #  define pTHX_5        5
307 #  define pTHX_6        6
308 #  define pTHX_7        7
309 #  define pTHX_8        8
310 #  define pTHX_9        9
311 #endif
312
313 #ifndef dVAR
314 #  define dVAR          dNOOP
315 #endif
316
317 /* these are only defined for compatibility; should not be used internally */
318 #if !defined(pTHXo) && !defined(PERL_CORE)
319 #  define pTHXo         pTHX
320 #  define pTHXo_        pTHX_
321 #  define aTHXo         aTHX
322 #  define aTHXo_        aTHX_
323 #  define dTHXo         dTHX
324 #  define dTHXoa(x)     dTHXa(x)
325 #endif
326
327 #ifndef pTHXx
328 #  define pTHXx         register PerlInterpreter *my_perl
329 #  define pTHXx_        pTHXx,
330 #  define aTHXx         my_perl
331 #  define aTHXx_        aTHXx,
332 #  define dTHXx         dTHX
333 #endif
334
335 /* Under PERL_IMPLICIT_SYS (used in Windows for fork emulation)
336  * PerlIO_foo() expands to PL_StdIO->pFOO(PL_StdIO, ...).
337  * dTHXs is therefore needed for all functions using PerlIO_foo(). */
338 #ifdef PERL_IMPLICIT_SYS
339 #  ifdef PERL_GLOBAL_STRUCT_PRIVATE
340 #    define dTHXs               dVAR; dTHX
341 #  else
342 #    define dTHXs               dTHX
343 #  endif
344 #else
345 #  ifdef PERL_GLOBAL_STRUCT_PRIVATE
346 #    define dTHXs               dVAR
347 #  else
348 #    define dTHXs               dNOOP
349 #  endif
350 #endif
351
352 #undef START_EXTERN_C
353 #undef END_EXTERN_C
354 #undef EXTERN_C
355 #ifdef __cplusplus
356 #  define START_EXTERN_C extern "C" {
357 #  define END_EXTERN_C }
358 #  define EXTERN_C extern "C"
359 #else
360 #  define START_EXTERN_C
361 #  define END_EXTERN_C
362 #  define EXTERN_C extern
363 #endif
364
365 /* Some platforms require marking function declarations
366  * for them to be exportable.  Used in perlio.h, proto.h
367  * is handled either by the makedef.pl or by defining the
368  * PERL_CALLCONV to be something special.  See also the
369  * definition of XS() in XSUB.h. */
370 #ifndef PERL_EXPORT_C
371 #  ifdef __cplusplus
372 #    define PERL_EXPORT_C extern "C"
373 #  else
374 #    define PERL_EXPORT_C extern
375 #  endif
376 #endif
377 #ifndef PERL_XS_EXPORT_C
378 #  ifdef __cplusplus
379 #    define PERL_XS_EXPORT_C extern "C"
380 #  else
381 #    define PERL_XS_EXPORT_C
382 #  endif
383 #endif
384
385 #ifdef OP_IN_REGISTER
386 #  ifdef __GNUC__
387 #    define stringify_immed(s) #s
388 #    define stringify(s) stringify_immed(s)
389 register struct op *Perl_op asm(stringify(OP_IN_REGISTER));
390 #  endif
391 #endif
392
393 /* gcc (-ansi) -pedantic doesn't allow gcc statement expressions,
394  * g++ allows them but seems to have problems with them
395  * (insane errors ensue). */
396 #if defined(PERL_GCC_PEDANTIC) || (defined(__GNUC__) && defined(__cplusplus))
397 #  ifndef PERL_GCC_BRACE_GROUPS_FORBIDDEN
398 #    define PERL_GCC_BRACE_GROUPS_FORBIDDEN
399 #  endif
400 #endif
401
402 #if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) && !defined(__cplusplus)
403 #  ifndef PERL_USE_GCC_BRACE_GROUPS
404 #    define PERL_USE_GCC_BRACE_GROUPS
405 #  endif
406 #endif
407
408 /*
409  * STMT_START { statements; } STMT_END;
410  * can be used as a single statement, as in
411  * if (x) STMT_START { ... } STMT_END; else ...
412  *
413  * Trying to select a version that gives no warnings...
414  */
415 #if !(defined(STMT_START) && defined(STMT_END))
416 # ifdef PERL_USE_GCC_BRACE_GROUPS
417 #   define STMT_START   (void)( /* gcc supports "({ STATEMENTS; })" */
418 #   define STMT_END     )
419 # else
420    /* Now which other defined()s do we need here ??? */
421 #  if (VOIDFLAGS) && (defined(sun) || defined(__sun__)) && !defined(__GNUC__)
422 #   define STMT_START   if (1)
423 #   define STMT_END     else (void)0
424 #  else
425 #   define STMT_START   do
426 #   define STMT_END     while (0)
427 #  endif
428 # endif
429 #endif
430
431 #define WITH_THX(s) STMT_START { dTHX; s; } STMT_END
432 #define WITH_THR(s) WITH_THX(s)
433
434 #ifndef BYTEORDER  /* Should never happen -- byteorder is in config.h */
435 #   define BYTEORDER 0x1234
436 #endif
437
438 /* Overall memory policy? */
439 #ifndef CONSERVATIVE
440 #   define LIBERAL 1
441 #endif
442
443 #if 'A' == 65 && 'I' == 73 && 'J' == 74 && 'Z' == 90
444 #define ASCIIish
445 #else
446 #undef  ASCIIish
447 #endif
448
449 /*
450  * The following contortions are brought to you on behalf of all the
451  * standards, semi-standards, de facto standards, not-so-de-facto standards
452  * of the world, as well as all the other botches anyone ever thought of.
453  * The basic theory is that if we work hard enough here, the rest of the
454  * code can be a lot prettier.  Well, so much for theory.  Sorry, Henry...
455  */
456
457 /* define this once if either system, instead of cluttering up the src */
458 #if defined(MSDOS) || defined(atarist) || defined(WIN32) || defined(NETWARE)
459 #define DOSISH 1
460 #endif
461
462 #if defined(__STDC__) || defined(_AIX) || defined(__stdc__) || defined(__cplusplus) || defined(EPOC) || defined(NETWARE) || defined(__SYMBIAN32__)
463 # define STANDARD_C 1
464 #endif
465
466 #if defined(__cplusplus) || defined(WIN32) || defined(__sgi) || defined(__EMX__) || defined(__DGUX) || defined(EPOC) || defined(__QNX__) || defined(NETWARE) || defined(PERL_MICRO)
467 # define DONT_DECLARE_STD 1
468 #endif
469
470 #if defined(HASVOLATILE) || defined(STANDARD_C)
471 #   ifdef __cplusplus
472 #       define VOL              /* to temporarily suppress warnings */
473 #   else
474 #       define VOL volatile
475 #   endif
476 #else
477 #   define VOL
478 #endif
479
480 #define TAINT           (PL_tainted = TRUE)
481 #define TAINT_NOT       (PL_tainted = FALSE)
482 #define TAINT_IF(c)     if (c) { PL_tainted = TRUE; }
483 #define TAINT_ENV()     if (PL_tainting) { taint_env(); }
484 #define TAINT_PROPER(s) if (PL_tainting) { taint_proper(NULL, s); }
485
486 /* XXX All process group stuff is handled in pp_sys.c.  Should these
487    defines move there?  If so, I could simplify this a lot. --AD  9/96.
488 */
489 /* Process group stuff changed from traditional BSD to POSIX.
490    perlfunc.pod documents the traditional BSD-style syntax, so we'll
491    try to preserve that, if possible.
492 */
493 #ifdef HAS_SETPGID
494 #  define BSD_SETPGRP(pid, pgrp)        setpgid((pid), (pgrp))
495 #else
496 #  if defined(HAS_SETPGRP) && defined(USE_BSD_SETPGRP)
497 #    define BSD_SETPGRP(pid, pgrp)      setpgrp((pid), (pgrp))
498 #  else
499 #    ifdef HAS_SETPGRP2  /* DG/UX */
500 #      define BSD_SETPGRP(pid, pgrp)    setpgrp2((pid), (pgrp))
501 #    endif
502 #  endif
503 #endif
504 #if defined(BSD_SETPGRP) && !defined(HAS_SETPGRP)
505 #  define HAS_SETPGRP  /* Well, effectively it does . . . */
506 #endif
507
508 /* getpgid isn't POSIX, but at least Solaris and Linux have it, and it makes
509     our life easier :-) so we'll try it.
510 */
511 #ifdef HAS_GETPGID
512 #  define BSD_GETPGRP(pid)              getpgid((pid))
513 #else
514 #  if defined(HAS_GETPGRP) && defined(USE_BSD_GETPGRP)
515 #    define BSD_GETPGRP(pid)            getpgrp((pid))
516 #  else
517 #    ifdef HAS_GETPGRP2  /* DG/UX */
518 #      define BSD_GETPGRP(pid)          getpgrp2((pid))
519 #    endif
520 #  endif
521 #endif
522 #if defined(BSD_GETPGRP) && !defined(HAS_GETPGRP)
523 #  define HAS_GETPGRP  /* Well, effectively it does . . . */
524 #endif
525
526 /* These are not exact synonyms, since setpgrp() and getpgrp() may
527    have different behaviors, but perl.h used to define USE_BSDPGRP
528    (prior to 5.003_05) so some extension might depend on it.
529 */
530 #if defined(USE_BSD_SETPGRP) || defined(USE_BSD_GETPGRP)
531 #  ifndef USE_BSDPGRP
532 #    define USE_BSDPGRP
533 #  endif
534 #endif
535
536 /* HP-UX 10.X CMA (Common Multithreaded Architecure) insists that
537    pthread.h must be included before all other header files.
538 */
539 #if defined(USE_ITHREADS) && defined(PTHREAD_H_FIRST) && defined(I_PTHREAD)
540 #  include <pthread.h>
541 #endif
542
543 #ifndef _TYPES_         /* If types.h defines this it's easy. */
544 #   ifndef major                /* Does everyone's types.h define this? */
545 #       include <sys/types.h>
546 #   endif
547 #endif
548
549 #ifdef __cplusplus
550 #  ifndef I_STDARG
551 #    define I_STDARG 1
552 #  endif
553 #endif
554
555 #ifdef I_STDARG
556 #  include <stdarg.h>
557 #else
558 #  ifdef I_VARARGS
559 #    include <varargs.h>
560 #  endif
561 #endif
562
563 #ifdef USE_NEXT_CTYPE
564
565 #if NX_CURRENT_COMPILER_RELEASE >= 500
566 #  include <bsd/ctypes.h>
567 #else
568 #  if NX_CURRENT_COMPILER_RELEASE >= 400
569 #    include <objc/NXCType.h>
570 #  else /*  NX_CURRENT_COMPILER_RELEASE < 400 */
571 #    include <appkit/NXCType.h>
572 #  endif /*  NX_CURRENT_COMPILER_RELEASE >= 400 */
573 #endif /*  NX_CURRENT_COMPILER_RELEASE >= 500 */
574
575 #else /* !USE_NEXT_CTYPE */
576 #include <ctype.h>
577 #endif /* USE_NEXT_CTYPE */
578
579 #ifdef METHOD   /* Defined by OSF/1 v3.0 by ctype.h */
580 #undef METHOD
581 #endif
582
583 #ifdef PERL_MICRO
584 #   define NO_LOCALE
585 #endif
586
587 #ifdef I_LOCALE
588 #   include <locale.h>
589 #endif
590
591 #if !defined(NO_LOCALE) && defined(HAS_SETLOCALE)
592 #   define USE_LOCALE
593 #   if !defined(NO_LOCALE_COLLATE) && defined(LC_COLLATE) \
594        && defined(HAS_STRXFRM)
595 #       define USE_LOCALE_COLLATE
596 #   endif
597 #   if !defined(NO_LOCALE_CTYPE) && defined(LC_CTYPE)
598 #       define USE_LOCALE_CTYPE
599 #   endif
600 #   if !defined(NO_LOCALE_NUMERIC) && defined(LC_NUMERIC)
601 #       define USE_LOCALE_NUMERIC
602 #   endif
603 #endif /* !NO_LOCALE && HAS_SETLOCALE */
604
605 #include <setjmp.h>
606
607 #ifdef I_SYS_PARAM
608 #   ifdef PARAM_NEEDS_TYPES
609 #       include <sys/types.h>
610 #   endif
611 #   include <sys/param.h>
612 #endif
613
614 /* Use all the "standard" definitions? */
615 #if defined(STANDARD_C) && defined(I_STDLIB)
616 #   include <stdlib.h>
617 #endif
618
619 /* If this causes problems, set i_unistd=undef in the hint file.  */
620 #ifdef I_UNISTD
621 #   include <unistd.h>
622 #endif
623
624 #ifdef __SYMBIAN32__
625 #   undef _SC_ARG_MAX /* Symbian has _SC_ARG_MAX but no sysconf() */
626 #endif
627
628 #if defined(HAS_SYSCALL) && !defined(HAS_SYSCALL_PROTO) && !defined(PERL_MICRO)
629 EXTERN_C int syscall(int, ...);
630 #endif
631
632 #if defined(HAS_USLEEP) && !defined(HAS_USLEEP_PROTO) && !defined(PERL_MICRO)
633 EXTERN_C int usleep(unsigned int);
634 #endif
635
636 #ifdef PERL_MICRO /* Last chance to export Perl_my_swap */
637 #  define MYSWAP
638 #endif
639
640 #ifdef PERL_CORE
641
642 /* macros for correct constant construction */
643 # if INTSIZE >= 2
644 #  define U16_CONST(x) ((U16)x##U)
645 # else
646 #  define U16_CONST(x) ((U16)x##UL)
647 # endif
648
649 # if INTSIZE >= 4
650 #  define U32_CONST(x) ((U32)x##U)
651 # else
652 #  define U32_CONST(x) ((U32)x##UL)
653 # endif
654
655 # ifdef HAS_QUAD
656 #  if INTSIZE >= 8
657 #   define U64_CONST(x) ((U64)x##U)
658 #  elif LONGSIZE >= 8
659 #   define U64_CONST(x) ((U64)x##UL)
660 #  elif QUADKIND == QUAD_IS_LONG_LONG
661 #   define U64_CONST(x) ((U64)x##ULL)
662 #  else /* best guess we can make */
663 #   define U64_CONST(x) ((U64)x##UL)
664 #  endif
665 # endif
666
667 /* byte-swapping functions for big-/little-endian conversion */
668 # define _swab_16_(x) ((U16)( \
669          (((U16)(x) & U16_CONST(0x00ff)) << 8) | \
670          (((U16)(x) & U16_CONST(0xff00)) >> 8) ))
671
672 # define _swab_32_(x) ((U32)( \
673          (((U32)(x) & U32_CONST(0x000000ff)) << 24) | \
674          (((U32)(x) & U32_CONST(0x0000ff00)) <<  8) | \
675          (((U32)(x) & U32_CONST(0x00ff0000)) >>  8) | \
676          (((U32)(x) & U32_CONST(0xff000000)) >> 24) ))
677
678 # ifdef HAS_QUAD
679 #  define _swab_64_(x) ((U64)( \
680           (((U64)(x) & U64_CONST(0x00000000000000ff)) << 56) | \
681           (((U64)(x) & U64_CONST(0x000000000000ff00)) << 40) | \
682           (((U64)(x) & U64_CONST(0x0000000000ff0000)) << 24) | \
683           (((U64)(x) & U64_CONST(0x00000000ff000000)) <<  8) | \
684           (((U64)(x) & U64_CONST(0x000000ff00000000)) >>  8) | \
685           (((U64)(x) & U64_CONST(0x0000ff0000000000)) >> 24) | \
686           (((U64)(x) & U64_CONST(0x00ff000000000000)) >> 40) | \
687           (((U64)(x) & U64_CONST(0xff00000000000000)) >> 56) ))
688 # endif
689
690 /*----------------------------------------------------------------------------*/
691 # if BYTEORDER == 0x1234 || BYTEORDER == 0x12345678  /*     little-endian     */
692 /*----------------------------------------------------------------------------*/
693 #  define my_htole16(x)         (x)
694 #  define my_letoh16(x)         (x)
695 #  define my_htole32(x)         (x)
696 #  define my_letoh32(x)         (x)
697 #  define my_htobe16(x)         _swab_16_(x)
698 #  define my_betoh16(x)         _swab_16_(x)
699 #  define my_htobe32(x)         _swab_32_(x)
700 #  define my_betoh32(x)         _swab_32_(x)
701 #  ifdef HAS_QUAD
702 #   define my_htole64(x)        (x)
703 #   define my_letoh64(x)        (x)
704 #   define my_htobe64(x)        _swab_64_(x)
705 #   define my_betoh64(x)        _swab_64_(x)
706 #  endif
707 #  define my_htoles(x)          (x)
708 #  define my_letohs(x)          (x)
709 #  define my_htolei(x)          (x)
710 #  define my_letohi(x)          (x)
711 #  define my_htolel(x)          (x)
712 #  define my_letohl(x)          (x)
713 #  if SHORTSIZE == 1
714 #   define my_htobes(x)         (x)
715 #   define my_betohs(x)         (x)
716 #  elif SHORTSIZE == 2
717 #   define my_htobes(x)         _swab_16_(x)
718 #   define my_betohs(x)         _swab_16_(x)
719 #  elif SHORTSIZE == 4
720 #   define my_htobes(x)         _swab_32_(x)
721 #   define my_betohs(x)         _swab_32_(x)
722 #  elif SHORTSIZE == 8
723 #   define my_htobes(x)         _swab_64_(x)
724 #   define my_betohs(x)         _swab_64_(x)
725 #  else
726 #   define PERL_NEED_MY_HTOBES
727 #   define PERL_NEED_MY_BETOHS
728 #  endif
729 #  if INTSIZE == 1
730 #   define my_htobei(x)         (x)
731 #   define my_betohi(x)         (x)
732 #  elif INTSIZE == 2
733 #   define my_htobei(x)         _swab_16_(x)
734 #   define my_betohi(x)         _swab_16_(x)
735 #  elif INTSIZE == 4
736 #   define my_htobei(x)         _swab_32_(x)
737 #   define my_betohi(x)         _swab_32_(x)
738 #  elif INTSIZE == 8
739 #   define my_htobei(x)         _swab_64_(x)
740 #   define my_betohi(x)         _swab_64_(x)
741 #  else
742 #   define PERL_NEED_MY_HTOBEI
743 #   define PERL_NEED_MY_BETOHI
744 #  endif
745 #  if LONGSIZE == 1
746 #   define my_htobel(x)         (x)
747 #   define my_betohl(x)         (x)
748 #  elif LONGSIZE == 2
749 #   define my_htobel(x)         _swab_16_(x)
750 #   define my_betohl(x)         _swab_16_(x)
751 #  elif LONGSIZE == 4
752 #   define my_htobel(x)         _swab_32_(x)
753 #   define my_betohl(x)         _swab_32_(x)
754 #  elif LONGSIZE == 8
755 #   define my_htobel(x)         _swab_64_(x)
756 #   define my_betohl(x)         _swab_64_(x)
757 #  else
758 #   define PERL_NEED_MY_HTOBEL
759 #   define PERL_NEED_MY_BETOHL
760 #  endif
761 #  define my_htolen(p,n)        NOOP
762 #  define my_letohn(p,n)        NOOP
763 #  define my_htoben(p,n)        my_swabn(p,n)
764 #  define my_betohn(p,n)        my_swabn(p,n)
765 /*----------------------------------------------------------------------------*/
766 # elif BYTEORDER == 0x4321 || BYTEORDER == 0x87654321  /*     big-endian      */
767 /*----------------------------------------------------------------------------*/
768 #  define my_htobe16(x)         (x)
769 #  define my_betoh16(x)         (x)
770 #  define my_htobe32(x)         (x)
771 #  define my_betoh32(x)         (x)
772 #  define my_htole16(x)         _swab_16_(x)
773 #  define my_letoh16(x)         _swab_16_(x)
774 #  define my_htole32(x)         _swab_32_(x)
775 #  define my_letoh32(x)         _swab_32_(x)
776 #  ifdef HAS_QUAD
777 #   define my_htobe64(x)        (x)
778 #   define my_betoh64(x)        (x)
779 #   define my_htole64(x)        _swab_64_(x)
780 #   define my_letoh64(x)        _swab_64_(x)
781 #  endif
782 #  define my_htobes(x)          (x)
783 #  define my_betohs(x)          (x)
784 #  define my_htobei(x)          (x)
785 #  define my_betohi(x)          (x)
786 #  define my_htobel(x)          (x)
787 #  define my_betohl(x)          (x)
788 #  if SHORTSIZE == 1
789 #   define my_htoles(x)         (x)
790 #   define my_letohs(x)         (x)
791 #  elif SHORTSIZE == 2
792 #   define my_htoles(x)         _swab_16_(x)
793 #   define my_letohs(x)         _swab_16_(x)
794 #  elif SHORTSIZE == 4
795 #   define my_htoles(x)         _swab_32_(x)
796 #   define my_letohs(x)         _swab_32_(x)
797 #  elif SHORTSIZE == 8
798 #   define my_htoles(x)         _swab_64_(x)
799 #   define my_letohs(x)         _swab_64_(x)
800 #  else
801 #   define PERL_NEED_MY_HTOLES
802 #   define PERL_NEED_MY_LETOHS
803 #  endif
804 #  if INTSIZE == 1
805 #   define my_htolei(x)         (x)
806 #   define my_letohi(x)         (x)
807 #  elif INTSIZE == 2
808 #   define my_htolei(x)         _swab_16_(x)
809 #   define my_letohi(x)         _swab_16_(x)
810 #  elif INTSIZE == 4
811 #   define my_htolei(x)         _swab_32_(x)
812 #   define my_letohi(x)         _swab_32_(x)
813 #  elif INTSIZE == 8
814 #   define my_htolei(x)         _swab_64_(x)
815 #   define my_letohi(x)         _swab_64_(x)
816 #  else
817 #   define PERL_NEED_MY_HTOLEI
818 #   define PERL_NEED_MY_LETOHI
819 #  endif
820 #  if LONGSIZE == 1
821 #   define my_htolel(x)         (x)
822 #   define my_letohl(x)         (x)
823 #  elif LONGSIZE == 2
824 #   define my_htolel(x)         _swab_16_(x)
825 #   define my_letohl(x)         _swab_16_(x)
826 #  elif LONGSIZE == 4
827 #   define my_htolel(x)         _swab_32_(x)
828 #   define my_letohl(x)         _swab_32_(x)
829 #  elif LONGSIZE == 8
830 #   define my_htolel(x)         _swab_64_(x)
831 #   define my_letohl(x)         _swab_64_(x)
832 #  else
833 #   define PERL_NEED_MY_HTOLEL
834 #   define PERL_NEED_MY_LETOHL
835 #  endif
836 #  define my_htolen(p,n)        my_swabn(p,n)
837 #  define my_letohn(p,n)        my_swabn(p,n)
838 #  define my_htoben(p,n)        NOOP
839 #  define my_betohn(p,n)        NOOP
840 /*----------------------------------------------------------------------------*/
841 # else /*                       all other byte-orders                         */
842 /*----------------------------------------------------------------------------*/
843 #  define PERL_NEED_MY_HTOLE16
844 #  define PERL_NEED_MY_LETOH16
845 #  define PERL_NEED_MY_HTOBE16
846 #  define PERL_NEED_MY_BETOH16
847 #  define PERL_NEED_MY_HTOLE32
848 #  define PERL_NEED_MY_LETOH32
849 #  define PERL_NEED_MY_HTOBE32
850 #  define PERL_NEED_MY_BETOH32
851 #  ifdef HAS_QUAD
852 #   define PERL_NEED_MY_HTOLE64
853 #   define PERL_NEED_MY_LETOH64
854 #   define PERL_NEED_MY_HTOBE64
855 #   define PERL_NEED_MY_BETOH64
856 #  endif
857 #  define PERL_NEED_MY_HTOLES
858 #  define PERL_NEED_MY_LETOHS
859 #  define PERL_NEED_MY_HTOBES
860 #  define PERL_NEED_MY_BETOHS
861 #  define PERL_NEED_MY_HTOLEI
862 #  define PERL_NEED_MY_LETOHI
863 #  define PERL_NEED_MY_HTOBEI
864 #  define PERL_NEED_MY_BETOHI
865 #  define PERL_NEED_MY_HTOLEL
866 #  define PERL_NEED_MY_LETOHL
867 #  define PERL_NEED_MY_HTOBEL
868 #  define PERL_NEED_MY_BETOHL
869 /*----------------------------------------------------------------------------*/
870 # endif /*                     end of byte-order macros                       */
871 /*----------------------------------------------------------------------------*/
872
873 /* The old value was hard coded at 1008. (4096-16) seems to be a bit faster,
874    at least on FreeBSD.  YMMV, so experiment.  */
875 #ifndef PERL_ARENA_SIZE
876 #define PERL_ARENA_SIZE 4080
877 #endif
878
879 #endif /* PERL_CORE */
880
881 /* We no longer default to creating a new SV for GvSV.
882    Do this before embed.  */
883 #ifndef PERL_CREATE_GVSV
884 #  ifndef PERL_DONT_CREATE_GVSV
885 #    define PERL_DONT_CREATE_GVSV
886 #  endif
887 #endif
888
889 #if !defined(HAS_WAITPID) && !defined(HAS_WAIT4) || defined(HAS_WAITPID_RUNTIME)
890 #define PERL_USES_PL_PIDSTATUS
891 #endif
892
893 #if !defined(OS2) && !defined(WIN32) && !defined(DJGPP) && !defined(EPOC) && !defined(__SYMBIAN32__) && !defined(MACOS_TRADITIONAL)
894 #define PERL_DEFAULT_DO_EXEC3_IMPLEMENTATION
895 #endif
896
897 /* Cannot include embed.h here on Win32 as win32.h has not 
898    yet been included and defines some config variables e.g. HAVE_INTERP_INTERN
899  */
900 #if !defined(PERL_FOR_X2P) && !(defined(WIN32)||defined(VMS))
901 #  include "embed.h"
902 #  ifndef PERL_MAD
903 #    undef op_getmad
904 #    define op_getmad(arg,pegop,slot) NOOP
905 #  endif
906 #endif
907
908 #define MEM_SIZE Size_t
909
910 /* Round all values passed to malloc up, by default to a multiple of
911    sizeof(size_t)
912 */
913 #ifndef PERL_STRLEN_ROUNDUP_QUANTUM
914 #define PERL_STRLEN_ROUNDUP_QUANTUM Size_t_size
915 #endif
916
917 #if defined(STANDARD_C) && defined(I_STDDEF)
918 #   include <stddef.h>
919 #   define STRUCT_OFFSET(s,m)  offsetof(s,m)
920 #else
921 #   define STRUCT_OFFSET(s,m)  (Size_t)(&(((s *)0)->m))
922 #endif
923
924 #ifndef __SYMBIAN32__
925 #  if defined(I_STRING) || defined(__cplusplus)
926 #     include <string.h>
927 #  else
928 #     include <strings.h>
929 #  endif
930 #endif
931
932 /* This comes after <stdlib.h> so we don't try to change the standard
933  * library prototypes; we'll use our own in proto.h instead. */
934
935 #ifdef MYMALLOC
936 #  ifdef PERL_POLLUTE_MALLOC
937 #   ifndef PERL_EXTMALLOC_DEF
938 #    define Perl_malloc         malloc
939 #    define Perl_calloc         calloc
940 #    define Perl_realloc        realloc
941 #    define Perl_mfree          free
942 #   endif
943 #  else
944 #    define EMBEDMYMALLOC       /* for compatibility */
945 #  endif
946
947 #  define safemalloc  Perl_malloc
948 #  define safecalloc  Perl_calloc
949 #  define saferealloc Perl_realloc
950 #  define safefree    Perl_mfree
951 #  define CHECK_MALLOC_TOO_LATE_FOR_(code)      STMT_START {            \
952         if (!PL_tainting && MallocCfg_ptr[MallocCfg_cfg_env_read])      \
953                 code;                                                   \
954     } STMT_END
955 #  define CHECK_MALLOC_TOO_LATE_FOR(ch)                         \
956         CHECK_MALLOC_TOO_LATE_FOR_(MALLOC_TOO_LATE_FOR(ch))
957 #  define panic_write2(s)               write(2, s, strlen(s))
958 #  define CHECK_MALLOC_TAINT(newval)                            \
959         CHECK_MALLOC_TOO_LATE_FOR_(                             \
960                 if (newval) {                                   \
961                   panic_write2("panic: tainting with $ENV{PERL_MALLOC_OPT}\n");\
962                   exit(1); })
963 #  define MALLOC_CHECK_TAINT(argc,argv,env)     STMT_START {    \
964         if (doing_taint(argc,argv,env)) {                       \
965                 MallocCfg_ptr[MallocCfg_skip_cfg_env] = 1;      \
966     }} STMT_END;
967 #else  /* MYMALLOC */
968 #  define safemalloc  safesysmalloc
969 #  define safecalloc  safesyscalloc
970 #  define saferealloc safesysrealloc
971 #  define safefree    safesysfree
972 #  define CHECK_MALLOC_TOO_LATE_FOR(ch)         ((void)0)
973 #  define CHECK_MALLOC_TAINT(newval)            ((void)0)
974 #  define MALLOC_CHECK_TAINT(argc,argv,env)
975 #endif /* MYMALLOC */
976
977 #define TOO_LATE_FOR_(ch,what)  Perl_croak(aTHX_ "\"-%c\" is on the #! line, it must also be used on the command line%s", (char)(ch), what)
978 #define TOO_LATE_FOR(ch)        TOO_LATE_FOR_(ch, "")
979 #define MALLOC_TOO_LATE_FOR(ch) TOO_LATE_FOR_(ch, " with $ENV{PERL_MALLOC_OPT}")
980 #define MALLOC_CHECK_TAINT2(argc,argv)  MALLOC_CHECK_TAINT(argc,argv,NULL)
981
982 #if !defined(HAS_STRCHR) && defined(HAS_INDEX) && !defined(strchr)
983 #define strchr index
984 #define strrchr rindex
985 #endif
986
987 #ifdef I_MEMORY
988 #  include <memory.h>
989 #endif
990
991 #ifdef HAS_MEMCPY
992 #  if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)
993 #    ifndef memcpy
994         extern char * memcpy (char*, char*, int);
995 #    endif
996 #  endif
997 #else
998 #   ifndef memcpy
999 #       ifdef HAS_BCOPY
1000 #           define memcpy(d,s,l) bcopy(s,d,l)
1001 #       else
1002 #           define memcpy(d,s,l) my_bcopy(s,d,l)
1003 #       endif
1004 #   endif
1005 #endif /* HAS_MEMCPY */
1006
1007 #ifdef HAS_MEMSET
1008 #  if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)
1009 #    ifndef memset
1010         extern char *memset (char*, int, int);
1011 #    endif
1012 #  endif
1013 #else
1014 #  undef  memset
1015 #  define memset(d,c,l) my_memset(d,c,l)
1016 #endif /* HAS_MEMSET */
1017
1018 #if !defined(HAS_MEMMOVE) && !defined(memmove)
1019 #   if defined(HAS_BCOPY) && defined(HAS_SAFE_BCOPY)
1020 #       define memmove(d,s,l) bcopy(s,d,l)
1021 #   else
1022 #       if defined(HAS_MEMCPY) && defined(HAS_SAFE_MEMCPY)
1023 #           define memmove(d,s,l) memcpy(d,s,l)
1024 #       else
1025 #           define memmove(d,s,l) my_bcopy(s,d,l)
1026 #       endif
1027 #   endif
1028 #endif
1029
1030 #if defined(mips) && defined(ultrix) && !defined(__STDC__)
1031 #   undef HAS_MEMCMP
1032 #endif
1033
1034 #if defined(HAS_MEMCMP) && defined(HAS_SANE_MEMCMP)
1035 #  if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)
1036 #    ifndef memcmp
1037         extern int memcmp (char*, char*, int);
1038 #    endif
1039 #  endif
1040 #  ifdef BUGGY_MSC
1041 #    pragma function(memcmp)
1042 #  endif
1043 #else
1044 #   ifndef memcmp
1045 #       define memcmp   my_memcmp
1046 #   endif
1047 #endif /* HAS_MEMCMP && HAS_SANE_MEMCMP */
1048
1049 #ifndef memzero
1050 #   ifdef HAS_MEMSET
1051 #       define memzero(d,l) memset(d,0,l)
1052 #   else
1053 #       ifdef HAS_BZERO
1054 #           define memzero(d,l) bzero(d,l)
1055 #       else
1056 #           define memzero(d,l) my_bzero(d,l)
1057 #       endif
1058 #   endif
1059 #endif
1060
1061 #ifndef PERL_MICRO
1062 #ifndef memchr
1063 #   ifndef HAS_MEMCHR
1064 #       define memchr(s,c,n) ninstr((char*)(s), ((char*)(s)) + n, &(c), &(c) + 1)
1065 #   endif
1066 #endif
1067 #endif
1068
1069 #ifndef HAS_BCMP
1070 #   ifndef bcmp
1071 #       define bcmp(s1,s2,l) memcmp(s1,s2,l)
1072 #   endif
1073 #endif /* !HAS_BCMP */
1074
1075 #ifdef I_NETINET_IN
1076 #   include <netinet/in.h>
1077 #endif
1078
1079 #ifdef I_ARPA_INET
1080 #   include <arpa/inet.h>
1081 #endif
1082
1083 #if defined(SF_APPEND) && defined(USE_SFIO) && defined(I_SFIO)
1084 /* <sfio.h> defines SF_APPEND and <sys/stat.h> might define SF_APPEND
1085  * (the neo-BSD seem to do this).  */
1086 #   undef SF_APPEND
1087 #endif
1088
1089 #ifdef I_SYS_STAT
1090 #   include <sys/stat.h>
1091 #endif
1092
1093 /* The stat macros for Amdahl UTS, Unisoft System V/88 (and derivatives
1094    like UTekV) are broken, sometimes giving false positives.  Undefine
1095    them here and let the code below set them to proper values.
1096
1097    The ghs macro stands for GreenHills Software C-1.8.5 which
1098    is the C compiler for sysV88 and the various derivatives.
1099    This header file bug is corrected in gcc-2.5.8 and later versions.
1100    --Kaveh Ghazi (ghazi@noc.rutgers.edu) 10/3/94.  */
1101
1102 #if defined(uts) || (defined(m88k) && defined(ghs))
1103 #   undef S_ISDIR
1104 #   undef S_ISCHR
1105 #   undef S_ISBLK
1106 #   undef S_ISREG
1107 #   undef S_ISFIFO
1108 #   undef S_ISLNK
1109 #endif
1110
1111 #ifdef I_TIME
1112 #   include <time.h>
1113 #endif
1114
1115 #ifdef I_SYS_TIME
1116 #   ifdef I_SYS_TIME_KERNEL
1117 #       define KERNEL
1118 #   endif
1119 #   include <sys/time.h>
1120 #   ifdef I_SYS_TIME_KERNEL
1121 #       undef KERNEL
1122 #   endif
1123 #endif
1124
1125 #if defined(HAS_TIMES) && defined(I_SYS_TIMES)
1126 #    include <sys/times.h>
1127 #endif
1128
1129 #if defined(HAS_STRERROR) && (!defined(HAS_MKDIR) || !defined(HAS_RMDIR))
1130 #   undef HAS_STRERROR
1131 #endif
1132
1133 #include <errno.h>
1134
1135 #if defined(WIN32) && defined(PERL_IMPLICIT_SYS)
1136 #  define WIN32SCK_IS_STDSCK            /* don't pull in custom wsock layer */
1137 #endif
1138
1139 /* In Tru64 use the 4.4BSD struct msghdr, not the 4.3 one.
1140  * This is important for using IPv6. 
1141  * For OSF/1 3.2, however, defining _SOCKADDR_LEN would be
1142  * a bad idea since it breaks send() and recv(). */
1143 #if defined(__osf__) && defined(__alpha) && !defined(_SOCKADDR_LEN) && !defined(DEC_OSF1_3_X)
1144 #   define _SOCKADDR_LEN
1145 #endif
1146
1147 #if defined(HAS_SOCKET) && !defined(VMS) && !defined(WIN32) /* VMS/WIN32 handle sockets via vmsish.h/win32.h */
1148 # include <sys/socket.h>
1149 # if defined(USE_SOCKS) && defined(I_SOCKS)
1150 #   if !defined(INCLUDE_PROTOTYPES)
1151 #       define INCLUDE_PROTOTYPES /* for <socks.h> */
1152 #       define PERL_SOCKS_NEED_PROTOTYPES
1153 #   endif
1154 #   include <socks.h>
1155 #   ifdef PERL_SOCKS_NEED_PROTOTYPES /* keep cpp space clean */
1156 #       undef INCLUDE_PROTOTYPES
1157 #       undef PERL_SOCKS_NEED_PROTOTYPES
1158 #   endif
1159 # endif
1160 # ifdef I_NETDB
1161 #  ifdef NETWARE
1162 #   include<stdio.h>
1163 #  endif
1164 #  include <netdb.h>
1165 # endif
1166 # ifndef ENOTSOCK
1167 #  ifdef I_NET_ERRNO
1168 #   include <net/errno.h>
1169 #  endif
1170 # endif
1171 #endif
1172
1173 /* sockatmark() is so new (2001) that many places might have it hidden
1174  * behind some -D_BLAH_BLAH_SOURCE guard.  The __THROW magic is required
1175  * e.g. in Gentoo, see http://bugs.gentoo.org/show_bug.cgi?id=12605 */
1176 #if defined(HAS_SOCKATMARK) && !defined(HAS_SOCKATMARK_PROTO)
1177 # if defined(__THROW) && defined(__GLIBC__)
1178 int sockatmark(int) __THROW;
1179 # else
1180 int sockatmark(int);
1181 # endif
1182 #endif
1183
1184 #if defined(__osf__) && defined(__cplusplus) && !defined(_XOPEN_SOURCE_EXTENDED) /* Tru64 "cxx" (C++), see hints/dec_osf.sh for why the _XOPEN_SOURCE_EXTENDED cannot be defined. */
1185 EXTERN_C int fchdir(int);
1186 EXTERN_C int flock(int, int);
1187 EXTERN_C int fseeko(FILE *, off_t, int);
1188 EXTERN_C off_t ftello(FILE *);
1189 #endif
1190
1191 #if defined(__SUNPRO_CC) /* SUNWspro CC (C++) */
1192 EXTERN_C char *crypt(const char *, const char *);
1193 EXTERN_C char **environ;
1194 #endif
1195
1196 #if defined(__OpenBSD__) && defined(__cplusplus)
1197 EXTERN_C char **environ;
1198 #endif
1199
1200 #if defined(__CYGWIN__) && defined(__cplusplus)
1201 EXTERN_C char *crypt(const char *, const char *);
1202 #endif
1203
1204 #ifdef SETERRNO
1205 # undef SETERRNO  /* SOCKS might have defined this */
1206 #endif
1207
1208 #ifdef VMS
1209 #   define SETERRNO(errcode,vmserrcode) \
1210         STMT_START {                    \
1211             set_errno(errcode);         \
1212             set_vaxc_errno(vmserrcode); \
1213         } STMT_END
1214 #   define LIB_INVARG           LIB$_INVARG
1215 #   define RMS_DIR              RMS$_DIR
1216 #   define RMS_FAC              RMS$_FAC
1217 #   define RMS_FEX              RMS$_FEX
1218 #   define RMS_FNF              RMS$_FNF
1219 #   define RMS_IFI              RMS$_IFI
1220 #   define RMS_ISI              RMS$_ISI
1221 #   define RMS_PRV              RMS$_PRV
1222 #   define SS_ACCVIO            SS$_ACCVIO
1223 #   define SS_DEVOFFLINE        SS$_DEVOFFLINE
1224 #   define SS_IVCHAN            SS$_IVCHAN
1225 #   define SS_NORMAL            SS$_NORMAL
1226 #else
1227 #   define SETERRNO(errcode,vmserrcode) (errno = (errcode))
1228 #   define LIB_INVARG           0
1229 #   define RMS_DIR              0
1230 #   define RMS_FAC              0
1231 #   define RMS_FEX              0
1232 #   define RMS_FNF              0
1233 #   define RMS_IFI              0
1234 #   define RMS_ISI              0
1235 #   define RMS_PRV              0
1236 #   define SS_ACCVIO            0
1237 #   define SS_DEVOFFLINE        0
1238 #   define SS_IVCHAN            0
1239 #   define SS_NORMAL            0
1240 #endif
1241
1242 #define ERRSV GvSV(PL_errgv)
1243 /* FIXME? Change the assignments to PL_defgv to instantiate GvSV?  */
1244 #define DEFSV GvSVn(PL_defgv)
1245 #define SAVE_DEFSV SAVESPTR(GvSV(PL_defgv))
1246
1247 #define ERRHV GvHV(PL_errgv)    /* XXX unused, here for compatibility */
1248
1249 #ifndef errno
1250         extern int errno;     /* ANSI allows errno to be an lvalue expr.
1251                                * For example in multithreaded environments
1252                                * something like this might happen:
1253                                * extern int *_errno(void);
1254                                * #define errno (*_errno()) */
1255 #endif
1256
1257 #ifdef HAS_STRERROR
1258 #       ifdef VMS
1259         char *strerror (int,...);
1260 #       else
1261 #ifndef DONT_DECLARE_STD
1262         char *strerror (int);
1263 #endif
1264 #       endif
1265 #       ifndef Strerror
1266 #           define Strerror strerror
1267 #       endif
1268 #else
1269 #    ifdef HAS_SYS_ERRLIST
1270         extern int sys_nerr;
1271         extern char *sys_errlist[];
1272 #       ifndef Strerror
1273 #           define Strerror(e) \
1274                 ((e) < 0 || (e) >= sys_nerr ? "(unknown)" : sys_errlist[e])
1275 #       endif
1276 #   endif
1277 #endif
1278
1279 #ifdef I_SYS_IOCTL
1280 #   ifndef _IOCTL_
1281 #       include <sys/ioctl.h>
1282 #   endif
1283 #endif
1284
1285 #if defined(mc300) || defined(mc500) || defined(mc700) || defined(mc6000)
1286 #   ifdef HAS_SOCKETPAIR
1287 #       undef HAS_SOCKETPAIR
1288 #   endif
1289 #   ifdef I_NDBM
1290 #       undef I_NDBM
1291 #   endif
1292 #endif
1293
1294 #ifndef HAS_SOCKETPAIR
1295 #   ifdef HAS_SOCKET
1296 #       define socketpair Perl_my_socketpair
1297 #   endif
1298 #endif
1299
1300 #if INTSIZE == 2
1301 #   define htoni htons
1302 #   define ntohi ntohs
1303 #else
1304 #   define htoni htonl
1305 #   define ntohi ntohl
1306 #endif
1307
1308 /* Configure already sets Direntry_t */
1309 #if defined(I_DIRENT)
1310 #   include <dirent.h>
1311     /* NeXT needs dirent + sys/dir.h */
1312 #   if  defined(I_SYS_DIR) && (defined(NeXT) || defined(__NeXT__))
1313 #       include <sys/dir.h>
1314 #   endif
1315 #else
1316 #   ifdef I_SYS_NDIR
1317 #       include <sys/ndir.h>
1318 #   else
1319 #       ifdef I_SYS_DIR
1320 #           ifdef hp9000s500
1321 #               include <ndir.h>        /* may be wrong in the future */
1322 #           else
1323 #               include <sys/dir.h>
1324 #           endif
1325 #       endif
1326 #   endif
1327 #endif
1328
1329 #ifdef PERL_MICRO
1330 #   ifndef DIR
1331 #      define DIR void
1332 #   endif
1333 #endif
1334
1335 #ifdef FPUTS_BOTCH
1336 /* work around botch in SunOS 4.0.1 and 4.0.2 */
1337 #   ifndef fputs
1338 #       define fputs(sv,fp) fprintf(fp,"%s",sv)
1339 #   endif
1340 #endif
1341
1342 /*
1343  * The following gobbledygook brought to you on behalf of __STDC__.
1344  * (I could just use #ifndef __STDC__, but this is more bulletproof
1345  * in the face of half-implementations.)
1346  */
1347
1348 #if defined(I_SYSMODE) && !defined(PERL_MICRO)
1349 #include <sys/mode.h>
1350 #endif
1351
1352 #ifndef S_IFMT
1353 #   ifdef _S_IFMT
1354 #       define S_IFMT _S_IFMT
1355 #   else
1356 #       define S_IFMT 0170000
1357 #   endif
1358 #endif
1359
1360 #ifndef S_ISDIR
1361 #   define S_ISDIR(m) ((m & S_IFMT) == S_IFDIR)
1362 #endif
1363
1364 #ifndef S_ISCHR
1365 #   define S_ISCHR(m) ((m & S_IFMT) == S_IFCHR)
1366 #endif
1367
1368 #ifndef S_ISBLK
1369 #   ifdef S_IFBLK
1370 #       define S_ISBLK(m) ((m & S_IFMT) == S_IFBLK)
1371 #   else
1372 #       define S_ISBLK(m) (0)
1373 #   endif
1374 #endif
1375
1376 #ifndef S_ISREG
1377 #   define S_ISREG(m) ((m & S_IFMT) == S_IFREG)
1378 #endif
1379
1380 #ifndef S_ISFIFO
1381 #   ifdef S_IFIFO
1382 #       define S_ISFIFO(m) ((m & S_IFMT) == S_IFIFO)
1383 #   else
1384 #       define S_ISFIFO(m) (0)
1385 #   endif
1386 #endif
1387
1388 #ifndef S_ISLNK
1389 #   ifdef _S_ISLNK
1390 #       define S_ISLNK(m) _S_ISLNK(m)
1391 #   else
1392 #       ifdef _S_IFLNK
1393 #           define S_ISLNK(m) ((m & S_IFMT) == _S_IFLNK)
1394 #       else
1395 #           ifdef S_IFLNK
1396 #               define S_ISLNK(m) ((m & S_IFMT) == S_IFLNK)
1397 #           else
1398 #               define S_ISLNK(m) (0)
1399 #           endif
1400 #       endif
1401 #   endif
1402 #endif
1403
1404 #ifndef S_ISSOCK
1405 #   ifdef _S_ISSOCK
1406 #       define S_ISSOCK(m) _S_ISSOCK(m)
1407 #   else
1408 #       ifdef _S_IFSOCK
1409 #           define S_ISSOCK(m) ((m & S_IFMT) == _S_IFSOCK)
1410 #       else
1411 #           ifdef S_IFSOCK
1412 #               define S_ISSOCK(m) ((m & S_IFMT) == S_IFSOCK)
1413 #           else
1414 #               define S_ISSOCK(m) (0)
1415 #           endif
1416 #       endif
1417 #   endif
1418 #endif
1419
1420 #ifndef S_IRUSR
1421 #   ifdef S_IREAD
1422 #       define S_IRUSR S_IREAD
1423 #       define S_IWUSR S_IWRITE
1424 #       define S_IXUSR S_IEXEC
1425 #   else
1426 #       define S_IRUSR 0400
1427 #       define S_IWUSR 0200
1428 #       define S_IXUSR 0100
1429 #   endif
1430 #endif
1431
1432 #ifndef S_IRGRP
1433 #   ifdef S_IRUSR
1434 #       define S_IRGRP (S_IRUSR>>3)
1435 #       define S_IWGRP (S_IWUSR>>3)
1436 #       define S_IXGRP (S_IXUSR>>3)
1437 #   else
1438 #       define S_IRGRP 0040
1439 #       define S_IWGRP 0020
1440 #       define S_IXGRP 0010
1441 #   endif
1442 #endif
1443
1444 #ifndef S_IROTH
1445 #   ifdef S_IRUSR
1446 #       define S_IROTH (S_IRUSR>>6)
1447 #       define S_IWOTH (S_IWUSR>>6)
1448 #       define S_IXOTH (S_IXUSR>>6)
1449 #   else
1450 #       define S_IROTH 0040
1451 #       define S_IWOTH 0020
1452 #       define S_IXOTH 0010
1453 #   endif
1454 #endif
1455
1456 #ifndef S_ISUID
1457 #   define S_ISUID 04000
1458 #endif
1459
1460 #ifndef S_ISGID
1461 #   define S_ISGID 02000
1462 #endif
1463
1464 #ifndef S_IRWXU
1465 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
1466 #endif
1467
1468 #ifndef S_IRWXG
1469 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
1470 #endif
1471
1472 #ifndef S_IRWXO
1473 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
1474 #endif
1475
1476 /* BeOS 5.0 seems to define S_IREAD and S_IWRITE in <posix/fcntl.h>
1477  * which would get included through <sys/file.h >, but that is 3000
1478  * lines in the future.  --jhi */
1479
1480 #if !defined(S_IREAD) && !defined(__BEOS__)
1481 #   define S_IREAD S_IRUSR
1482 #endif
1483
1484 #if !defined(S_IWRITE) && !defined(__BEOS__)
1485 #   define S_IWRITE S_IWUSR
1486 #endif
1487
1488 #ifndef S_IEXEC
1489 #   define S_IEXEC S_IXUSR
1490 #endif
1491
1492 #ifdef ff_next
1493 #   undef ff_next
1494 #endif
1495
1496 #if defined(cray) || defined(gould) || defined(i860) || defined(pyr)
1497 #   define SLOPPYDIVIDE
1498 #endif
1499
1500 #ifdef UV
1501 #undef UV
1502 #endif
1503
1504 #ifdef  SPRINTF_E_BUG
1505 #  define sprintf UTS_sprintf_wrap
1506 #endif
1507
1508 /* For the times when you want the return value of sprintf, and you want it
1509    to be the length. Can't have a thread variable passed in, because C89 has
1510    no varargs macros.
1511 */
1512 #ifdef SPRINTF_RETURNS_STRLEN
1513 #  define my_sprintf sprintf
1514 #else
1515 #  define my_sprintf Perl_my_sprintf
1516 #endif
1517
1518 /*
1519  * If we have v?snprintf() and the C99 variadic macros, we can just
1520  * use just the v?snprintf().  It is nice to try to trap the buffer
1521  * overflow, however, so if we are DEBUGGING, and we cannot use the
1522  * gcc statement expressions, then use the function wrappers which try
1523  * to trap the overflow.  If we can use the gcc statement expressions,
1524  * we can try that even with the version that uses the C99 variadic
1525  * macros.
1526  */
1527
1528 /* Note that we do not check against snprintf()/vsnprintf() returning
1529  * negative values because that is non-standard behaviour and we use
1530  * snprintf/vsnprintf only iff HAS_VSNPRINTF has been defined, and
1531  * that should be true only if the snprintf()/vsnprintf() are true
1532  * to the standard. */
1533
1534 #if defined(HAS_SNPRINTF) && defined(HAS_C99_VARIADIC_MACROS) && !(defined(DEBUGGING) && !defined(PERL_USE_GCC_BRACE_GROUPS)) && !defined(PERL_GCC_PEDANTIC)
1535 #  ifdef PERL_USE_GCC_BRACE_GROUPS
1536 #      define my_snprintf(buffer, len, ...) ({ int __len__ = snprintf(buffer, len, __VA_ARGS__); if ((len) > 0 && (Size_t)__len__ >= (len)) Perl_croak_nocontext("panic: snprintf buffer overflow"); __len__; })
1537 #      define PERL_MY_SNPRINTF_GUARDED
1538 #  else
1539 #    define my_snprintf(buffer, len, ...) snprintf(buffer, len, __VA_ARGS__)
1540 #  endif
1541 #else
1542 #  define my_snprintf  Perl_my_snprintf
1543 #  define PERL_MY_SNPRINTF_GUARDED
1544 #endif
1545
1546 #if defined(HAS_VSNPRINTF) && defined(HAS_C99_VARIADIC_MACROS) && !(defined(DEBUGGING) && !defined(PERL_USE_GCC_BRACE_GROUPS)) && !defined(PERL_GCC_PEDANTIC)
1547 #  ifdef PERL_USE_GCC_BRACE_GROUPS
1548 #      define my_vsnprintf(buffer, len, ...) ({ int __len__ = vsnprintf(buffer, len, __VA_ARGS__); if ((len) > 0 && (Size_t)__len__ >= (len)) Perl_croak_nocontext("panic: vsnprintf buffer overflow"); __len__; })
1549 #      define PERL_MY_VSNPRINTF_GUARDED
1550 #  else
1551 #    define my_vsnprintf(buffer, len, ...) vsnprintf(buffer, len, __VA_ARGS__)
1552 #  endif
1553 #else
1554 #  define my_vsnprintf Perl_my_vsnprintf
1555 #  define PERL_MY_VSNPRINTF_GUARDED
1556 #endif
1557
1558 #ifdef HAS_STRLCAT
1559 #  define my_strlcat    strlcat
1560 #else
1561 #  define my_strlcat    Perl_my_strlcat
1562 #endif
1563
1564 #ifdef HAS_STRLCPY
1565 #  define my_strlcpy    strlcpy
1566 #else
1567 #  define my_strlcpy    Perl_my_strlcpy
1568 #endif
1569
1570 /* Configure gets this right but the UTS compiler gets it wrong.
1571    -- Hal Morris <hom00@utsglobal.com> */
1572 #ifdef UTS
1573 #  undef  UVTYPE
1574 #  define UVTYPE unsigned
1575 #endif
1576
1577 /*
1578     The IV type is supposed to be long enough to hold any integral
1579     value or a pointer.
1580     --Andy Dougherty    August 1996
1581 */
1582
1583 typedef IVTYPE IV;
1584 typedef UVTYPE UV;
1585
1586 #if defined(USE_64_BIT_INT) && defined(HAS_QUAD)
1587 #  if QUADKIND == QUAD_IS_INT64_T && defined(INT64_MAX)
1588 #    define IV_MAX INT64_MAX
1589 #    define IV_MIN INT64_MIN
1590 #    define UV_MAX UINT64_MAX
1591 #    ifndef UINT64_MIN
1592 #      define UINT64_MIN 0
1593 #    endif
1594 #    define UV_MIN UINT64_MIN
1595 #  else
1596 #    define IV_MAX PERL_QUAD_MAX
1597 #    define IV_MIN PERL_QUAD_MIN
1598 #    define UV_MAX PERL_UQUAD_MAX
1599 #    define UV_MIN PERL_UQUAD_MIN
1600 #  endif
1601 #  define IV_IS_QUAD
1602 #  define UV_IS_QUAD
1603 #else
1604 #  if defined(INT32_MAX) && IVSIZE == 4
1605 #    define IV_MAX INT32_MAX
1606 #    define IV_MIN INT32_MIN
1607 #    ifndef UINT32_MAX_BROKEN /* e.g. HP-UX with gcc messes this up */
1608 #        define UV_MAX UINT32_MAX
1609 #    else
1610 #        define UV_MAX 4294967295U
1611 #    endif
1612 #    ifndef UINT32_MIN
1613 #      define UINT32_MIN 0
1614 #    endif
1615 #    define UV_MIN UINT32_MIN
1616 #  else
1617 #    define IV_MAX PERL_LONG_MAX
1618 #    define IV_MIN PERL_LONG_MIN
1619 #    define UV_MAX PERL_ULONG_MAX
1620 #    define UV_MIN PERL_ULONG_MIN
1621 #  endif
1622 #  if IVSIZE == 8
1623 #    define IV_IS_QUAD
1624 #    define UV_IS_QUAD
1625 #    ifndef HAS_QUAD
1626 #      define HAS_QUAD
1627 #    endif
1628 #  else
1629 #    undef IV_IS_QUAD
1630 #    undef UV_IS_QUAD
1631 #    undef HAS_QUAD
1632 #  endif
1633 #endif
1634
1635 #ifndef HAS_QUAD
1636 # undef PERL_NEED_MY_HTOLE64
1637 # undef PERL_NEED_MY_LETOH64
1638 # undef PERL_NEED_MY_HTOBE64
1639 # undef PERL_NEED_MY_BETOH64
1640 #endif
1641
1642 #if defined(uts) || defined(UTS)
1643 #       undef UV_MAX
1644 #       define UV_MAX (4294967295u)
1645 #endif
1646
1647 #define IV_DIG (BIT_DIGITS(IVSIZE * 8))
1648 #define UV_DIG (BIT_DIGITS(UVSIZE * 8))
1649
1650 #ifndef NO_PERL_PRESERVE_IVUV
1651 #define PERL_PRESERVE_IVUV      /* We like our integers to stay integers. */
1652 #endif
1653
1654 /*
1655  *  The macros INT2PTR and NUM2PTR are (despite their names)
1656  *  bi-directional: they will convert int/float to or from pointers.
1657  *  However the conversion to int/float are named explicitly:
1658  *  PTR2IV, PTR2UV, PTR2NV.
1659  *
1660  *  For int conversions we do not need two casts if pointers are
1661  *  the same size as IV and UV.   Otherwise we need an explicit
1662  *  cast (PTRV) to avoid compiler warnings.
1663  */
1664 #if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE)
1665 #  define PTRV                  UV
1666 #  define INT2PTR(any,d)        (any)(d)
1667 #else
1668 #  if PTRSIZE == LONGSIZE
1669 #    define PTRV                unsigned long
1670 #    define PTR2ul(p)           (unsigned long)(p)
1671 #  else
1672 #    define PTRV                unsigned
1673 #  endif
1674 #endif
1675
1676 #ifndef INT2PTR
1677 #  define INT2PTR(any,d)        (any)(PTRV)(d)
1678 #endif
1679
1680 #ifndef PTR2ul
1681 #  define PTR2ul(p)     INT2PTR(unsigned long,p)        
1682 #endif
1683
1684 #define NUM2PTR(any,d)  (any)(PTRV)(d)
1685 #define PTR2IV(p)       INT2PTR(IV,p)
1686 #define PTR2UV(p)       INT2PTR(UV,p)
1687 #define PTR2NV(p)       NUM2PTR(NV,p)
1688 #define PTR2nat(p)      (PTRV)(p)       /* pointer to integer of PTRSIZE */
1689
1690 /* According to strict ANSI C89 one cannot freely cast between
1691  * data pointers and function (code) pointers.  There are at least
1692  * two ways around this.  One (used below) is to do two casts,
1693  * first the other pointer to an (unsigned) integer, and then
1694  * the integer to the other pointer.  The other way would be
1695  * to use unions to "overlay" the pointers.  For an example of
1696  * the latter technique, see union dirpu in struct xpvio in sv.h.
1697  * The only feasible use is probably temporarily storing
1698  * function pointers in a data pointer (such as a void pointer). */
1699
1700 #define DPTR2FPTR(t,p) ((t)PTR2nat(p))  /* data pointer to function pointer */
1701 #define FPTR2DPTR(t,p) ((t)PTR2nat(p))  /* function pointer to data pointer */
1702
1703 #ifdef USE_LONG_DOUBLE
1704 #  if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE == DOUBLESIZE
1705 #      define LONG_DOUBLE_EQUALS_DOUBLE
1706 #  endif
1707 #  if !(defined(HAS_LONG_DOUBLE) && (LONG_DOUBLESIZE > DOUBLESIZE))
1708 #     undef USE_LONG_DOUBLE /* Ouch! */
1709 #  endif
1710 #endif
1711
1712 #ifdef OVR_DBL_DIG
1713 /* Use an overridden DBL_DIG */
1714 # ifdef DBL_DIG
1715 #  undef DBL_DIG
1716 # endif
1717 # define DBL_DIG OVR_DBL_DIG
1718 #else
1719 /* The following is all to get DBL_DIG, in order to pick a nice
1720    default value for printing floating point numbers in Gconvert
1721    (see config.h). (It also has other uses, such as figuring out if
1722    a given precision of printing can be done with a double instead of
1723    a long double - Allen).
1724 */
1725 #ifdef I_LIMITS
1726 #include <limits.h>
1727 #endif
1728 #ifdef I_FLOAT
1729 #include <float.h>
1730 #endif
1731 #ifndef HAS_DBL_DIG
1732 #define DBL_DIG 15   /* A guess that works lots of places */
1733 #endif
1734 #endif
1735
1736 #ifdef OVR_LDBL_DIG
1737 /* Use an overridden LDBL_DIG */
1738 # ifdef LDBL_DIG
1739 #  undef LDBL_DIG
1740 # endif
1741 # define LDBL_DIG OVR_LDBL_DIG
1742 #else
1743 /* The following is all to get LDBL_DIG, in order to pick a nice
1744    default value for printing floating point numbers in Gconvert.
1745    (see config.h)
1746 */
1747 # ifdef I_LIMITS
1748 #   include <limits.h>
1749 # endif
1750 # ifdef I_FLOAT
1751 #  include <float.h>
1752 # endif
1753 # ifndef HAS_LDBL_DIG
1754 #  if LONG_DOUBLESIZE == 10
1755 #   define LDBL_DIG 18 /* assume IEEE */
1756 #  else
1757 #   if LONG_DOUBLESIZE == 12
1758 #    define LDBL_DIG 18 /* gcc? */
1759 #   else
1760 #    if LONG_DOUBLESIZE == 16
1761 #     define LDBL_DIG 33 /* assume IEEE */
1762 #    else
1763 #     if LONG_DOUBLESIZE == DOUBLESIZE
1764 #      define LDBL_DIG DBL_DIG /* bummer */
1765 #     endif
1766 #    endif
1767 #   endif
1768 #  endif
1769 # endif
1770 #endif
1771
1772 /*
1773  * This is for making sure we have a good DBL_MAX value, if possible,
1774  * either for usage as NV_MAX or for usage in figuring out if we can
1775  * fit a given long double into a double, if bug-fixing makes it
1776  * necessary to do so. - Allen <allens@cpan.org>
1777  */
1778
1779 #ifdef I_LIMITS
1780 #  include <limits.h>
1781 #endif
1782
1783 #ifdef I_VALUES
1784 #  if !(defined(DBL_MIN) && defined(DBL_MAX) && defined(I_LIMITS))
1785 #    include <values.h>
1786 #    if defined(MAXDOUBLE) && !defined(DBL_MAX)
1787 #      define DBL_MAX MAXDOUBLE
1788 #    endif
1789 #    if defined(MINDOUBLE) && !defined(DBL_MIN)
1790 #      define DBL_MIN MINDOUBLE
1791 #    endif
1792 #  endif
1793 #endif /* defined(I_VALUES) */
1794
1795 typedef NVTYPE NV;
1796
1797 #ifdef I_IEEEFP
1798 #   include <ieeefp.h>
1799 #endif
1800
1801 #ifdef USE_LONG_DOUBLE
1802 #   ifdef I_SUNMATH
1803 #       include <sunmath.h>
1804 #   endif
1805 #   define NV_DIG LDBL_DIG
1806 #   ifdef LDBL_MANT_DIG
1807 #       define NV_MANT_DIG LDBL_MANT_DIG
1808 #   endif
1809 #   ifdef LDBL_MIN
1810 #       define NV_MIN LDBL_MIN
1811 #   endif
1812 #   ifdef LDBL_MAX
1813 #       define NV_MAX LDBL_MAX
1814 #   endif
1815 #   ifdef LDBL_MIN_10_EXP
1816 #       define NV_MIN_10_EXP LDBL_MIN_10_EXP
1817 #   endif
1818 #   ifdef LDBL_MAX_10_EXP
1819 #       define NV_MAX_10_EXP LDBL_MAX_10_EXP
1820 #   endif
1821 #   ifdef LDBL_EPSILON
1822 #       define NV_EPSILON LDBL_EPSILON
1823 #   endif
1824 #   ifdef LDBL_MAX
1825 #       define NV_MAX LDBL_MAX
1826 /* Having LDBL_MAX doesn't necessarily mean that we have LDBL_MIN... -Allen */
1827 #   else
1828 #       ifdef HUGE_VALL
1829 #           define NV_MAX HUGE_VALL
1830 #       else
1831 #           ifdef HUGE_VAL
1832 #               define NV_MAX ((NV)HUGE_VAL)
1833 #           endif
1834 #       endif
1835 #   endif
1836 #   ifdef HAS_SQRTL
1837 #       define Perl_cos cosl
1838 #       define Perl_sin sinl
1839 #       define Perl_sqrt sqrtl
1840 #       define Perl_exp expl
1841 #       define Perl_log logl
1842 #       define Perl_atan2 atan2l
1843 #       define Perl_pow powl
1844 #       define Perl_floor floorl
1845 #       define Perl_ceil ceill
1846 #       define Perl_fmod fmodl
1847 #   endif
1848 /* e.g. libsunmath doesn't have modfl and frexpl as of mid-March 2000 */
1849 #   ifdef HAS_MODFL
1850 #       define Perl_modf(x,y) modfl(x,y)
1851 /* eg glibc 2.2 series seems to provide modfl on ppc and arm, but has no
1852    prototype in <math.h> */
1853 #       ifndef HAS_MODFL_PROTO
1854 EXTERN_C long double modfl(long double, long double *);
1855 #       endif
1856 #   else
1857 #       if defined(HAS_AINTL) && defined(HAS_COPYSIGNL)
1858         extern long double Perl_my_modfl(long double x, long double *ip);
1859 #           define Perl_modf(x,y) Perl_my_modfl(x,y)
1860 #       endif
1861 #   endif
1862 #   ifdef HAS_FREXPL
1863 #       define Perl_frexp(x,y) frexpl(x,y)
1864 #   else
1865 #       if defined(HAS_ILOGBL) && defined(HAS_SCALBNL)
1866         extern long double Perl_my_frexpl(long double x, int *e);
1867 #           define Perl_frexp(x,y) Perl_my_frexpl(x,y)
1868 #       endif
1869 #   endif
1870 #   ifndef Perl_isnan
1871 #       ifdef HAS_ISNANL
1872 #           define Perl_isnan(x) isnanl(x)
1873 #       endif
1874 #   endif
1875 #   ifndef Perl_isinf
1876 #       ifdef HAS_FINITEL
1877 #           define Perl_isinf(x) !(finitel(x)||Perl_isnan(x))
1878 #       endif
1879 #   endif
1880 #else
1881 #   define NV_DIG DBL_DIG
1882 #   ifdef DBL_MANT_DIG
1883 #       define NV_MANT_DIG DBL_MANT_DIG
1884 #   endif
1885 #   ifdef DBL_MIN
1886 #       define NV_MIN DBL_MIN
1887 #   endif
1888 #   ifdef DBL_MAX
1889 #       define NV_MAX DBL_MAX
1890 #   endif
1891 #   ifdef DBL_MIN_10_EXP
1892 #       define NV_MIN_10_EXP DBL_MIN_10_EXP
1893 #   endif
1894 #   ifdef DBL_MAX_10_EXP
1895 #       define NV_MAX_10_EXP DBL_MAX_10_EXP
1896 #   endif
1897 #   ifdef DBL_EPSILON
1898 #       define NV_EPSILON DBL_EPSILON
1899 #   endif
1900 #   ifdef DBL_MAX               /* XXX Does DBL_MAX imply having DBL_MIN? */
1901 #       define NV_MAX DBL_MAX
1902 #       define NV_MIN DBL_MIN
1903 #   else
1904 #       ifdef HUGE_VAL
1905 #           define NV_MAX HUGE_VAL
1906 #       endif
1907 #   endif
1908 #   define Perl_cos cos
1909 #   define Perl_sin sin
1910 #   define Perl_sqrt sqrt
1911 #   define Perl_exp exp
1912 #   define Perl_log log
1913 #   define Perl_atan2 atan2
1914 #   define Perl_pow pow
1915 #   define Perl_floor floor
1916 #   define Perl_ceil ceil
1917 #   define Perl_fmod fmod
1918 #   define Perl_modf(x,y) modf(x,y)
1919 #   define Perl_frexp(x,y) frexp(x,y)
1920 #endif
1921
1922 /* rumor has it that Win32 has _fpclass() */
1923
1924 /* SGI has fpclassl... but not with the same result values,
1925  * and it's via a typedef (not via #define), so will need to redo Configure
1926  * to use. Not worth the trouble, IMO, at least until the below is used
1927  * more places. Also has fp_class_l, BTW, via fp_class.h. Feel free to check
1928  * with me for the SGI manpages, SGI testing, etcetera, if you want to
1929  * try getting this to work with IRIX. - Allen <allens@cpan.org> */
1930
1931 #if !defined(Perl_fp_class) && (defined(HAS_FPCLASS)||defined(HAS_FPCLASSL))
1932 #    ifdef I_IEEFP
1933 #        include <ieeefp.h>
1934 #    endif
1935 #    ifdef I_FP
1936 #        include <fp.h>
1937 #    endif
1938 #    if defined(USE_LONG_DOUBLE) && defined(HAS_FPCLASSL)
1939 #        define Perl_fp_class()         fpclassl(x)
1940 #    else
1941 #        define Perl_fp_class()         fpclass(x)
1942 #    endif
1943 #    define Perl_fp_class_snan(x)       (Perl_fp_class(x)==FP_CLASS_SNAN)
1944 #    define Perl_fp_class_qnan(x)       (Perl_fp_class(x)==FP_CLASS_QNAN)
1945 #    define Perl_fp_class_nan(x)        (Perl_fp_class(x)==FP_CLASS_SNAN||Perl_fp_class(x)==FP_CLASS_QNAN)
1946 #    define Perl_fp_class_ninf(x)       (Perl_fp_class(x)==FP_CLASS_NINF)
1947 #    define Perl_fp_class_pinf(x)       (Perl_fp_class(x)==FP_CLASS_PINF)
1948 #    define Perl_fp_class_inf(x)        (Perl_fp_class(x)==FP_CLASS_NINF||Perl_fp_class(x)==FP_CLASS_PINF)
1949 #    define Perl_fp_class_nnorm(x)      (Perl_fp_class(x)==FP_CLASS_NNORM)
1950 #    define Perl_fp_class_pnorm(x)      (Perl_fp_class(x)==FP_CLASS_PNORM)
1951 #    define Perl_fp_class_norm(x)       (Perl_fp_class(x)==FP_CLASS_NNORM||Perl_fp_class(x)==FP_CLASS_PNORM)
1952 #    define Perl_fp_class_ndenorm(x)    (Perl_fp_class(x)==FP_CLASS_NDENORM)
1953 #    define Perl_fp_class_pdenorm(x)    (Perl_fp_class(x)==FP_CLASS_PDENORM)
1954 #    define Perl_fp_class_denorm(x)     (Perl_fp_class(x)==FP_CLASS_NDENORM||Perl_fp_class(x)==FP_CLASS_PDENORM)
1955 #    define Perl_fp_class_nzero(x)      (Perl_fp_class(x)==FP_CLASS_NZERO)
1956 #    define Perl_fp_class_pzero(x)      (Perl_fp_class(x)==FP_CLASS_PZERO)
1957 #    define Perl_fp_class_zero(x)       (Perl_fp_class(x)==FP_CLASS_NZERO||Perl_fp_class(x)==FP_CLASS_PZERO)
1958 #endif
1959
1960 #if !defined(Perl_fp_class) && defined(HAS_FP_CLASS) && !defined(PERL_MICRO)
1961 #    include <math.h>
1962 #    if !defined(FP_SNAN) && defined(I_FP_CLASS)
1963 #        include <fp_class.h>
1964 #    endif
1965 #    define Perl_fp_class(x)            fp_class(x)
1966 #    define Perl_fp_class_snan(x)       (fp_class(x)==FP_SNAN)
1967 #    define Perl_fp_class_qnan(x)       (fp_class(x)==FP_QNAN)
1968 #    define Perl_fp_class_nan(x)        (fp_class(x)==FP_SNAN||fp_class(x)==FP_QNAN)
1969 #    define Perl_fp_class_ninf(x)       (fp_class(x)==FP_NEG_INF)
1970 #    define Perl_fp_class_pinf(x)       (fp_class(x)==FP_POS_INF)
1971 #    define Perl_fp_class_inf(x)        (fp_class(x)==FP_NEG_INF||fp_class(x)==FP_POS_INF)
1972 #    define Perl_fp_class_nnorm(x)      (fp_class(x)==FP_NEG_NORM)
1973 #    define Perl_fp_class_pnorm(x)      (fp_class(x)==FP_POS_NORM)
1974 #    define Perl_fp_class_norm(x)       (fp_class(x)==FP_NEG_NORM||fp_class(x)==FP_POS_NORM)
1975 #    define Perl_fp_class_ndenorm(x)    (fp_class(x)==FP_NEG_DENORM)
1976 #    define Perl_fp_class_pdenorm(x)    (fp_class(x)==FP_POS_DENORM)
1977 #    define Perl_fp_class_denorm(x)     (fp_class(x)==FP_NEG_DENORM||fp_class(x)==FP_POS_DENORM)
1978 #    define Perl_fp_class_nzero(x)      (fp_class(x)==FP_NEG_ZERO)
1979 #    define Perl_fp_class_pzero(x)      (fp_class(x)==FP_POS_ZERO)
1980 #    define Perl_fp_class_zero(x)       (fp_class(x)==FP_NEG_ZERO||fp_class(x)==FP_POS_ZERO)
1981 #endif
1982
1983 #if !defined(Perl_fp_class) && defined(HAS_FPCLASSIFY)
1984 #    include <math.h>
1985 #    define Perl_fp_class(x)            fpclassify(x)
1986 #    define Perl_fp_class_nan(x)        (fp_classify(x)==FP_SNAN||fp_classify(x)==FP_QNAN)
1987 #    define Perl_fp_class_inf(x)        (fp_classify(x)==FP_INFINITE)
1988 #    define Perl_fp_class_norm(x)       (fp_classify(x)==FP_NORMAL)
1989 #    define Perl_fp_class_denorm(x)     (fp_classify(x)==FP_SUBNORMAL)
1990 #    define Perl_fp_class_zero(x)       (fp_classify(x)==FP_ZERO)
1991 #endif
1992
1993 #if !defined(Perl_fp_class) && defined(HAS_CLASS)
1994 #    include <math.h>
1995 #    ifndef _cplusplus
1996 #        define Perl_fp_class(x)        class(x)
1997 #    else
1998 #        define Perl_fp_class(x)        _class(x)
1999 #    endif
2000 #    define Perl_fp_class_snan(x)       (Perl_fp_class(x)==FP_NANS)
2001 #    define Perl_fp_class_qnan(x)       (Perl_fp_class(x)==FP_NANQ)
2002 #    define Perl_fp_class_nan(x)        (Perl_fp_class(x)==FP_SNAN||Perl_fp_class(x)==FP_QNAN)
2003 #    define Perl_fp_class_ninf(x)       (Perl_fp_class(x)==FP_MINUS_INF)
2004 #    define Perl_fp_class_pinf(x)       (Perl_fp_class(x)==FP_PLUS_INF)
2005 #    define Perl_fp_class_inf(x)        (Perl_fp_class(x)==FP_MINUS_INF||Perl_fp_class(x)==FP_PLUS_INF)
2006 #    define Perl_fp_class_nnorm(x)      (Perl_fp_class(x)==FP_MINUS_NORM)
2007 #    define Perl_fp_class_pnorm(x)      (Perl_fp_class(x)==FP_PLUS_NORM)
2008 #    define Perl_fp_class_norm(x)       (Perl_fp_class(x)==FP_MINUS_NORM||Perl_fp_class(x)==FP_PLUS_NORM)
2009 #    define Perl_fp_class_ndenorm(x)    (Perl_fp_class(x)==FP_MINUS_DENORM)
2010 #    define Perl_fp_class_pdenorm(x)    (Perl_fp_class(x)==FP_PLUS_DENORM)
2011 #    define Perl_fp_class_denorm(x)     (Perl_fp_class(x)==FP_MINUS_DENORM||Perl_fp_class(x)==FP_PLUS_DENORM)
2012 #    define Perl_fp_class_nzero(x)      (Perl_fp_class(x)==FP_MINUS_ZERO)
2013 #    define Perl_fp_class_pzero(x)      (Perl_fp_class(x)==FP_PLUS_ZERO)
2014 #    define Perl_fp_class_zero(x)       (Perl_fp_class(x)==FP_MINUS_ZERO||Perl_fp_class(x)==FP_PLUS_ZERO)
2015 #endif
2016
2017 /* rumor has it that Win32 has _isnan() */
2018
2019 #ifndef Perl_isnan
2020 #   ifdef HAS_ISNAN
2021 #       define Perl_isnan(x) isnan((NV)x)
2022 #   else
2023 #       ifdef Perl_fp_class_nan
2024 #           define Perl_isnan(x) Perl_fp_class_nan(x)
2025 #       else
2026 #           ifdef HAS_UNORDERED
2027 #               define Perl_isnan(x) unordered((x), 0.0)
2028 #           else
2029 #               define Perl_isnan(x) ((x)!=(x))
2030 #           endif
2031 #       endif
2032 #   endif
2033 #endif
2034
2035 #ifdef UNDER_CE
2036 int isnan(double d);
2037 #endif
2038
2039 #ifndef Perl_isinf
2040 #   ifdef HAS_ISINF
2041 #       define Perl_isinf(x) isinf((NV)x)
2042 #   else
2043 #       ifdef Perl_fp_class_inf
2044 #           define Perl_isinf(x) Perl_fp_class_inf(x)
2045 #       else
2046 #           define Perl_isinf(x) ((x)==NV_INF)
2047 #       endif
2048 #   endif
2049 #endif
2050
2051 #ifndef Perl_isfinite
2052 #   ifdef HAS_FINITE
2053 #       define Perl_isfinite(x) finite((NV)x)
2054 #   else
2055 #       ifdef HAS_ISFINITE
2056 #           define Perl_isfinite(x) isfinite(x)
2057 #       else
2058 #           ifdef Perl_fp_class_finite
2059 #               define Perl_isfinite(x) Perl_fp_class_finite(x)
2060 #           else
2061 #               define Perl_isfinite(x) !(Perl_is_inf(x)||Perl_is_nan(x))
2062 #           endif
2063 #       endif
2064 #   endif
2065 #endif
2066
2067 /* The default is to use Perl's own atof() implementation (in numeric.c).
2068  * Usually that is the one to use but for some platforms (e.g. UNICOS)
2069  * it is however best to use the native implementation of atof.
2070  * You can experiment with using your native one by -DUSE_PERL_ATOF=0.
2071  * Some good tests to try out with either setting are t/base/num.t,
2072  * t/op/numconvert.t, and t/op/pack.t. Note that if using long doubles
2073  * you may need to be using a different function than atof! */
2074
2075 #ifndef USE_PERL_ATOF
2076 #   ifndef _UNICOS
2077 #       define USE_PERL_ATOF
2078 #   endif
2079 #else
2080 #   if USE_PERL_ATOF == 0
2081 #       undef USE_PERL_ATOF
2082 #   endif
2083 #endif
2084
2085 #ifdef USE_PERL_ATOF
2086 #   define Perl_atof(s) Perl_my_atof(s)
2087 #   define Perl_atof2(s, n) Perl_my_atof2(aTHX_ (s), &(n))
2088 #else
2089 #   define Perl_atof(s) (NV)atof(s)
2090 #   define Perl_atof2(s, n) ((n) = atof(s))
2091 #endif
2092
2093 /* Previously these definitions used hardcoded figures.
2094  * It is hoped these formula are more portable, although
2095  * no data one way or another is presently known to me.
2096  * The "PERL_" names are used because these calculated constants
2097  * do not meet the ANSI requirements for LONG_MAX, etc., which
2098  * need to be constants acceptable to #if - kja
2099  *    define PERL_LONG_MAX        2147483647L
2100  *    define PERL_LONG_MIN        (-LONG_MAX - 1)
2101  *    define PERL ULONG_MAX       4294967295L
2102  */
2103
2104 #ifdef I_LIMITS  /* Needed for cast_xxx() functions below. */
2105 #  include <limits.h>
2106 #endif
2107 /* Included values.h above if necessary; still including limits.h down here,
2108  * despite doing above, because math.h might have overriden... XXX - Allen */
2109
2110 /*
2111  * Try to figure out max and min values for the integral types.  THE CORRECT
2112  * SOLUTION TO THIS MESS: ADAPT enquire.c FROM GCC INTO CONFIGURE.  The
2113  * following hacks are used if neither limits.h or values.h provide them:
2114  * U<TYPE>_MAX: for types >= int: ~(unsigned TYPE)0
2115  *              for types <  int:  (unsigned TYPE)~(unsigned)0
2116  *      The argument to ~ must be unsigned so that later signed->unsigned
2117  *      conversion can't modify the value's bit pattern (e.g. -0 -> +0),
2118  *      and it must not be smaller than int because ~ does integral promotion.
2119  * <type>_MAX: (<type>) (U<type>_MAX >> 1)
2120  * <type>_MIN: -<type>_MAX - <is_twos_complement_architecture: (3 & -1) == 3>.
2121  *      The latter is a hack which happens to work on some machines but
2122  *      does *not* catch any random system, or things like integer types
2123  *      with NaN if that is possible.
2124  *
2125  * All of the types are explicitly cast to prevent accidental loss of
2126  * numeric range, and in the hope that they will be less likely to confuse
2127  * over-eager optimizers.
2128  *
2129  */
2130
2131 #define PERL_UCHAR_MIN ((unsigned char)0)
2132
2133 #ifdef UCHAR_MAX
2134 #  define PERL_UCHAR_MAX ((unsigned char)UCHAR_MAX)
2135 #else
2136 #  ifdef MAXUCHAR
2137 #    define PERL_UCHAR_MAX ((unsigned char)MAXUCHAR)
2138 #  else
2139 #    define PERL_UCHAR_MAX       ((unsigned char)~(unsigned)0)
2140 #  endif
2141 #endif
2142
2143 /*
2144  * CHAR_MIN and CHAR_MAX are not included here, as the (char) type may be
2145  * ambiguous. It may be equivalent to (signed char) or (unsigned char)
2146  * depending on local options. Until Configure detects this (or at least
2147  * detects whether the "signed" keyword is available) the CHAR ranges
2148  * will not be included. UCHAR functions normally.
2149  *                                                           - kja
2150  */
2151
2152 #define PERL_USHORT_MIN ((unsigned short)0)
2153
2154 #ifdef USHORT_MAX
2155 #  define PERL_USHORT_MAX ((unsigned short)USHORT_MAX)
2156 #else
2157 #  ifdef MAXUSHORT
2158 #    define PERL_USHORT_MAX ((unsigned short)MAXUSHORT)
2159 #  else
2160 #    ifdef USHRT_MAX
2161 #      define PERL_USHORT_MAX ((unsigned short)USHRT_MAX)
2162 #    else
2163 #      define PERL_USHORT_MAX       ((unsigned short)~(unsigned)0)
2164 #    endif
2165 #  endif
2166 #endif
2167
2168 #ifdef SHORT_MAX
2169 #  define PERL_SHORT_MAX ((short)SHORT_MAX)
2170 #else
2171 #  ifdef MAXSHORT    /* Often used in <values.h> */
2172 #    define PERL_SHORT_MAX ((short)MAXSHORT)
2173 #  else
2174 #    ifdef SHRT_MAX
2175 #      define PERL_SHORT_MAX ((short)SHRT_MAX)
2176 #    else
2177 #      define PERL_SHORT_MAX      ((short) (PERL_USHORT_MAX >> 1))
2178 #    endif
2179 #  endif
2180 #endif
2181
2182 #ifdef SHORT_MIN
2183 #  define PERL_SHORT_MIN ((short)SHORT_MIN)
2184 #else
2185 #  ifdef MINSHORT
2186 #    define PERL_SHORT_MIN ((short)MINSHORT)
2187 #  else
2188 #    ifdef SHRT_MIN
2189 #      define PERL_SHORT_MIN ((short)SHRT_MIN)
2190 #    else
2191 #      define PERL_SHORT_MIN        (-PERL_SHORT_MAX - ((3 & -1) == 3))
2192 #    endif
2193 #  endif
2194 #endif
2195
2196 #ifdef UINT_MAX
2197 #  define PERL_UINT_MAX ((unsigned int)UINT_MAX)
2198 #else
2199 #  ifdef MAXUINT
2200 #    define PERL_UINT_MAX ((unsigned int)MAXUINT)
2201 #  else
2202 #    define PERL_UINT_MAX       (~(unsigned int)0)
2203 #  endif
2204 #endif
2205
2206 #define PERL_UINT_MIN ((unsigned int)0)
2207
2208 #ifdef INT_MAX
2209 #  define PERL_INT_MAX ((int)INT_MAX)
2210 #else
2211 #  ifdef MAXINT    /* Often used in <values.h> */
2212 #    define PERL_INT_MAX ((int)MAXINT)
2213 #  else
2214 #    define PERL_INT_MAX        ((int)(PERL_UINT_MAX >> 1))
2215 #  endif
2216 #endif
2217
2218 #ifdef INT_MIN
2219 #  define PERL_INT_MIN ((int)INT_MIN)
2220 #else
2221 #  ifdef MININT
2222 #    define PERL_INT_MIN ((int)MININT)
2223 #  else
2224 #    define PERL_INT_MIN        (-PERL_INT_MAX - ((3 & -1) == 3))
2225 #  endif
2226 #endif
2227
2228 #ifdef ULONG_MAX
2229 #  define PERL_ULONG_MAX ((unsigned long)ULONG_MAX)
2230 #else
2231 #  ifdef MAXULONG
2232 #    define PERL_ULONG_MAX ((unsigned long)MAXULONG)
2233 #  else
2234 #    define PERL_ULONG_MAX       (~(unsigned long)0)
2235 #  endif
2236 #endif
2237
2238 #define PERL_ULONG_MIN ((unsigned long)0L)
2239
2240 #ifdef LONG_MAX
2241 #  define PERL_LONG_MAX ((long)LONG_MAX)
2242 #else
2243 #  ifdef MAXLONG    /* Often used in <values.h> */
2244 #    define PERL_LONG_MAX ((long)MAXLONG)
2245 #  else
2246 #    define PERL_LONG_MAX        ((long) (PERL_ULONG_MAX >> 1))
2247 #  endif
2248 #endif
2249
2250 #ifdef LONG_MIN
2251 #  define PERL_LONG_MIN ((long)LONG_MIN)
2252 #else
2253 #  ifdef MINLONG
2254 #    define PERL_LONG_MIN ((long)MINLONG)
2255 #  else
2256 #    define PERL_LONG_MIN        (-PERL_LONG_MAX - ((3 & -1) == 3))
2257 #  endif
2258 #endif
2259
2260 #ifdef UV_IS_QUAD
2261
2262 #    define PERL_UQUAD_MAX      (~(UV)0)
2263 #    define PERL_UQUAD_MIN      ((UV)0)
2264 #    define PERL_QUAD_MAX       ((IV) (PERL_UQUAD_MAX >> 1))
2265 #    define PERL_QUAD_MIN       (-PERL_QUAD_MAX - ((3 & -1) == 3))
2266
2267 #endif
2268
2269 #ifdef MYMALLOC
2270 #  include "malloc_ctl.h"
2271 #endif
2272
2273 struct RExC_state_t;
2274 struct _reg_trie_data;
2275
2276 typedef MEM_SIZE STRLEN;
2277
2278 #ifdef PERL_MAD
2279 typedef struct token TOKEN;
2280 typedef struct madprop MADPROP;
2281 typedef struct nexttoken NEXTTOKE;
2282 #endif
2283 typedef struct op OP;
2284 typedef struct cop COP;
2285 typedef struct unop UNOP;
2286 typedef struct binop BINOP;
2287 typedef struct listop LISTOP;
2288 typedef struct logop LOGOP;
2289 typedef struct pmop PMOP;
2290 typedef struct svop SVOP;
2291 typedef struct padop PADOP;
2292 typedef struct pvop PVOP;
2293 typedef struct loop LOOP;
2294
2295 typedef struct interpreter PerlInterpreter;
2296
2297 /* Amdahl's <ksync.h> has struct sv */
2298 /* SGI's <sys/sema.h> has struct sv */
2299 #if defined(UTS) || defined(__sgi)
2300 #   define STRUCT_SV perl_sv
2301 #else
2302 #   define STRUCT_SV sv
2303 #endif
2304 typedef struct STRUCT_SV SV;
2305 typedef struct av AV;
2306 typedef struct hv HV;
2307 typedef struct cv CV;
2308 typedef struct regexp REGEXP;
2309 typedef struct gp GP;
2310 typedef struct gv GV;
2311 typedef struct io IO;
2312 typedef struct context PERL_CONTEXT;
2313 typedef struct block BLOCK;
2314
2315 typedef struct magic MAGIC;
2316 typedef struct xpv XPV;
2317 typedef struct xpviv XPVIV;
2318 typedef struct xpvuv XPVUV;
2319 typedef struct xpvnv XPVNV;
2320 typedef struct xpvmg XPVMG;
2321 typedef struct xpvlv XPVLV;
2322 typedef struct xpvav XPVAV;
2323 typedef struct xpvhv XPVHV;
2324 typedef struct xpvgv XPVGV;
2325 typedef struct xpvcv XPVCV;
2326 typedef struct xpvbm XPVBM;
2327 typedef struct xpvfm XPVFM;
2328 typedef struct xpvio XPVIO;
2329 typedef struct mgvtbl MGVTBL;
2330 typedef union any ANY;
2331 typedef struct ptr_tbl_ent PTR_TBL_ENT_t;
2332 typedef struct ptr_tbl PTR_TBL_t;
2333 typedef struct clone_params CLONE_PARAMS;
2334
2335 #include "handy.h"
2336
2337 #if defined(USE_LARGE_FILES) && !defined(NO_64_BIT_RAWIO)
2338 #   if LSEEKSIZE == 8 && !defined(USE_64_BIT_RAWIO)
2339 #       define USE_64_BIT_RAWIO /* implicit */
2340 #   endif
2341 #endif
2342
2343 /* Notice the use of HAS_FSEEKO: now we are obligated to always use
2344  * fseeko/ftello if possible.  Don't go #defining ftell to ftello yourself,
2345  * however, because operating systems like to do that themself. */
2346 #ifndef FSEEKSIZE
2347 #   ifdef HAS_FSEEKO
2348 #       define FSEEKSIZE LSEEKSIZE
2349 #   else
2350 #       define FSEEKSIZE LONGSIZE
2351 #   endif
2352 #endif
2353
2354 #if defined(USE_LARGE_FILES) && !defined(NO_64_BIT_STDIO)
2355 #   if FSEEKSIZE == 8 && !defined(USE_64_BIT_STDIO)
2356 #       define USE_64_BIT_STDIO /* implicit */
2357 #   endif
2358 #endif
2359
2360 #ifdef USE_64_BIT_RAWIO
2361 #   ifdef HAS_OFF64_T
2362 #       undef Off_t
2363 #       define Off_t off64_t
2364 #       undef LSEEKSIZE
2365 #       define LSEEKSIZE 8
2366 #   endif
2367 /* Most 64-bit environments have defines like _LARGEFILE_SOURCE that
2368  * will trigger defines like the ones below.  Some 64-bit environments,
2369  * however, do not.  Therefore we have to explicitly mix and match. */
2370 #   if defined(USE_OPEN64)
2371 #       define open open64
2372 #   endif
2373 #   if defined(USE_LSEEK64)
2374 #       define lseek lseek64
2375 #   else
2376 #       if defined(USE_LLSEEK)
2377 #           define lseek llseek
2378 #       endif
2379 #   endif
2380 #   if defined(USE_STAT64)
2381 #       define stat stat64
2382 #   endif
2383 #   if defined(USE_FSTAT64)
2384 #       define fstat fstat64
2385 #   endif
2386 #   if defined(USE_LSTAT64)
2387 #       define lstat lstat64
2388 #   endif
2389 #   if defined(USE_FLOCK64)
2390 #       define flock flock64
2391 #   endif
2392 #   if defined(USE_LOCKF64)
2393 #       define lockf lockf64
2394 #   endif
2395 #   if defined(USE_FCNTL64)
2396 #       define fcntl fcntl64
2397 #   endif
2398 #   if defined(USE_TRUNCATE64)
2399 #       define truncate truncate64
2400 #   endif
2401 #   if defined(USE_FTRUNCATE64)
2402 #       define ftruncate ftruncate64
2403 #   endif
2404 #endif
2405
2406 #ifdef USE_64_BIT_STDIO
2407 #   ifdef HAS_FPOS64_T
2408 #       undef Fpos_t
2409 #       define Fpos_t fpos64_t
2410 #   endif
2411 /* Most 64-bit environments have defines like _LARGEFILE_SOURCE that
2412  * will trigger defines like the ones below.  Some 64-bit environments,
2413  * however, do not. */
2414 #   if defined(USE_FOPEN64)
2415 #       define fopen fopen64
2416 #   endif
2417 #   if defined(USE_FSEEK64)
2418 #       define fseek fseek64 /* don't do fseeko here, see perlio.c */
2419 #   endif
2420 #   if defined(USE_FTELL64)
2421 #       define ftell ftell64 /* don't do ftello here, see perlio.c */
2422 #   endif
2423 #   if defined(USE_FSETPOS64)
2424 #       define fsetpos fsetpos64
2425 #   endif
2426 #   if defined(USE_FGETPOS64)
2427 #       define fgetpos fgetpos64
2428 #   endif
2429 #   if defined(USE_TMPFILE64)
2430 #       define tmpfile tmpfile64
2431 #   endif
2432 #   if defined(USE_FREOPEN64)
2433 #       define freopen freopen64
2434 #   endif
2435 #endif
2436
2437 #if defined(OS2) || defined(MACOS_TRADITIONAL)
2438 #  include "iperlsys.h"
2439 #endif
2440
2441 #if defined(__OPEN_VM)
2442 #   include "vmesa/vmesaish.h"
2443 #   define ISHISH "vmesa"
2444 #endif
2445
2446 #ifdef DOSISH
2447 #   if defined(OS2)
2448 #       include "os2ish.h"
2449 #   else
2450 #       include "dosish.h"
2451 #   endif
2452 #   define ISHISH "dos"
2453 #endif
2454
2455 #if defined(VMS)
2456 #   include "vmsish.h"
2457 #   include "embed.h"
2458 #  ifndef PERL_MAD
2459 #    undef op_getmad
2460 #    define op_getmad(arg,pegop,slot) NOOP
2461 #  endif
2462 #   define ISHISH "vms"
2463 #endif
2464
2465 #if defined(PLAN9)
2466 #   include "./plan9/plan9ish.h"
2467 #   define ISHISH "plan9"
2468 #endif
2469
2470 #if defined(MPE)
2471 #  include "mpeix/mpeixish.h"
2472 #  define ISHISH "mpeix"
2473 #endif
2474
2475 #if defined(__VOS__)
2476 #   ifdef __GNUC__
2477 #     include "./vos/vosish.h"
2478 #   else
2479 #     include "vos/vosish.h"
2480 #   endif
2481 #   define ISHISH "vos"
2482 #endif
2483
2484 #if defined(EPOC)
2485 #   include "epocish.h"
2486 #   define ISHISH "epoc"
2487 #endif
2488
2489 #ifdef __SYMBIAN32__
2490 #   include "symbian/symbianish.h"
2491 #   include "embed.h"
2492 #  ifndef PERL_MAD
2493 #    undef op_getmad
2494 #    define op_getmad(arg,pegop,slot) NOOP
2495 #  endif
2496 #   define ISHISH "symbian"
2497 #endif
2498
2499 #if defined(MACOS_TRADITIONAL)
2500 #   include "macos/macish.h"
2501 #   ifndef NO_ENVIRON_ARRAY
2502 #       define NO_ENVIRON_ARRAY
2503 #   endif
2504 #   define ISHISH "macos classic"
2505 #endif
2506
2507 #if defined(__BEOS__)
2508 #   include "beos/beosish.h"
2509 #   define ISHISH "beos"
2510 #endif
2511
2512 #ifndef ISHISH
2513 #   include "unixish.h"
2514 #   define ISHISH "unix"
2515 #endif
2516
2517 /* NSIG logic from Configure --> */
2518 /* Strange style to avoid deeply-nested #if/#else/#endif */
2519 #ifndef NSIG
2520 #  ifdef _NSIG
2521 #    define NSIG (_NSIG)
2522 #  endif
2523 #endif
2524
2525 #ifndef NSIG
2526 #  ifdef SIGMAX
2527 #    define NSIG (SIGMAX+1)
2528 #  endif
2529 #endif
2530
2531 #ifndef NSIG
2532 #  ifdef SIG_MAX
2533 #    define NSIG (SIG_MAX+1)
2534 #  endif
2535 #endif
2536
2537 #ifndef NSIG
2538 #  ifdef _SIG_MAX
2539 #    define NSIG (_SIG_MAX+1)
2540 #  endif
2541 #endif
2542
2543 #ifndef NSIG
2544 #  ifdef MAXSIG
2545 #    define NSIG (MAXSIG+1)
2546 #  endif
2547 #endif
2548
2549 #ifndef NSIG
2550 #  ifdef MAX_SIG
2551 #    define NSIG (MAX_SIG+1)
2552 #  endif
2553 #endif
2554
2555 #ifndef NSIG
2556 #  ifdef SIGARRAYSIZE
2557 #    define NSIG SIGARRAYSIZE /* Assume ary[SIGARRAYSIZE] */
2558 #  endif
2559 #endif
2560
2561 #ifndef NSIG
2562 #  ifdef _sys_nsig
2563 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
2564 #  endif
2565 #endif
2566
2567 /* Default to some arbitrary number that's big enough to get most
2568    of the common signals.
2569 */
2570 #ifndef NSIG
2571 #    define NSIG 50
2572 #endif
2573 /* <-- NSIG logic from Configure */
2574
2575 #ifndef NO_ENVIRON_ARRAY
2576 #  define USE_ENVIRON_ARRAY
2577 #endif
2578
2579 /*
2580  * initialise to avoid floating-point exceptions from overflow, etc
2581  */
2582 #ifndef PERL_FPU_INIT
2583 #  ifdef HAS_FPSETMASK
2584 #    if HAS_FLOATINGPOINT_H
2585 #      include <floatingpoint.h>
2586 #    endif
2587 #    define PERL_FPU_INIT fpsetmask(0)
2588 #  else
2589 #    if defined(SIGFPE) && defined(SIG_IGN) && !defined(PERL_MICRO)
2590 #      define PERL_FPU_INIT       PL_sigfpe_saved = (Sighandler_t) signal(SIGFPE, SIG_IGN)
2591 #      define PERL_FPU_PRE_EXEC   { Sigsave_t xfpe; rsignal_save(SIGFPE, PL_sigfpe_saved, &xfpe);
2592 #      define PERL_FPU_POST_EXEC    rsignal_restore(SIGFPE, &xfpe); }
2593 #    else
2594 #      define PERL_FPU_INIT
2595
2596 #    endif
2597 #  endif
2598 #endif
2599 #ifndef PERL_FPU_PRE_EXEC
2600 #  define PERL_FPU_PRE_EXEC   {
2601 #  define PERL_FPU_POST_EXEC  }
2602 #endif
2603
2604 #ifndef PERL_SYS_INIT3
2605 #  define PERL_SYS_INIT3(argvp,argcp,envp) PERL_SYS_INIT(argvp,argcp)
2606 #endif
2607
2608 #ifndef PERL_WRITE_MSG_TO_CONSOLE
2609 #  define PERL_WRITE_MSG_TO_CONSOLE(io, msg, len) PerlIO_write(io, msg, len)
2610 #endif
2611
2612 #ifndef MAXPATHLEN
2613 #  ifdef PATH_MAX
2614 #    ifdef _POSIX_PATH_MAX
2615 #       if PATH_MAX > _POSIX_PATH_MAX
2616 /* POSIX 1990 (and pre) was ambiguous about whether PATH_MAX
2617  * included the null byte or not.  Later amendments of POSIX,
2618  * XPG4, the Austin Group, and the Single UNIX Specification
2619  * all explicitly include the null byte in the PATH_MAX.
2620  * Ditto for _POSIX_PATH_MAX. */
2621 #         define MAXPATHLEN PATH_MAX
2622 #       else
2623 #         define MAXPATHLEN _POSIX_PATH_MAX
2624 #       endif
2625 #    else
2626 #      define MAXPATHLEN (PATH_MAX+1)
2627 #    endif
2628 #  else
2629 #    ifdef _POSIX_PATH_MAX
2630 #       define MAXPATHLEN _POSIX_PATH_MAX
2631 #    else
2632 #       define MAXPATHLEN 1024  /* Err on the large side. */
2633 #    endif
2634 #  endif
2635 #endif
2636
2637 /* In case Configure was not used (we are using a "canned config"
2638  * such as Win32, or a cross-compilation setup, for example) try going
2639  * by the gcc major and minor versions.  One useful URL is
2640  * http://www.ohse.de/uwe/articles/gcc-attributes.html,
2641  * but contrary to this information warn_unused_result seems
2642  * not to be in gcc 3.3.5, at least. --jhi
2643  * Also, when building extensions with an installed perl, this allows
2644  * the user to upgrade gcc and get the right attributes, rather than
2645  * relying on the list generated at Configure time.  --AD
2646  * Set these up now otherwise we get confused when some of the <*thread.h>
2647  * includes below indirectly pull in <perlio.h> (which needs to know if we
2648  * have HASATTRIBUTE_FORMAT).
2649  */
2650
2651 #if defined __GNUC__ && !defined(__INTEL_COMPILER)
2652 #  if __GNUC__ >= 3 /* 3.0 -> */ /* XXX Verify this version */
2653 #    define HASATTRIBUTE_FORMAT
2654 #    if defined __MINGW32__
2655 #      define PRINTF_FORMAT_NULL_OK
2656 #    endif
2657 #  endif
2658 #  if __GNUC__ >= 3 /* 3.0 -> */
2659 #    define HASATTRIBUTE_MALLOC
2660 #  endif
2661 #  if __GNUC__ == 3 && __GNUC_MINOR__ >= 3 || __GNUC__ > 3 /* 3.3 -> */
2662 #    define HASATTRIBUTE_NONNULL
2663 #  endif
2664 #  if __GNUC__ == 2 && __GNUC_MINOR__ >= 5 || __GNUC__ > 2 /* 2.5 -> */
2665 #    define HASATTRIBUTE_NORETURN
2666 #  endif
2667 #  if __GNUC__ >= 3 /* gcc 3.0 -> */
2668 #    define HASATTRIBUTE_PURE
2669 #  endif
2670 #  if __GNUC__ == 3 && __GNUC_MINOR__ >= 4 || __GNUC__ > 3 /* 3.4 -> */
2671 #    define HASATTRIBUTE_UNUSED
2672 #  endif
2673 #  if __GNUC__ == 3 && __GNUC_MINOR__ == 3 && !defined(__cplusplus)
2674 #    define HASATTRIBUTE_UNUSED /* gcc-3.3, but not g++-3.3. */
2675 #  endif
2676 #  if __GNUC__ == 3 && __GNUC_MINOR__ >= 4 || __GNUC__ > 3 /* 3.4 -> */
2677 #    define HASATTRIBUTE_WARN_UNUSED_RESULT
2678 #  endif
2679 #endif
2680
2681 /* USE_5005THREADS needs to be after unixish.h as <pthread.h> includes
2682  * <sys/signal.h> which defines NSIG - which will stop inclusion of <signal.h>
2683  * this results in many functions being undeclared which bothers C++
2684  * May make sense to have threads after "*ish.h" anyway
2685  */
2686
2687 #if defined(USE_ITHREADS)
2688 #  ifdef NETWARE
2689 #   include <nw5thread.h>
2690 #  else
2691 #  ifdef FAKE_THREADS
2692 #    include "fakethr.h"
2693 #  else
2694 #    ifdef WIN32
2695 #      include <win32thread.h>
2696 #    else
2697 #      ifdef OS2
2698 #        include "os2thread.h"
2699 #      else
2700 #        ifdef I_MACH_CTHREADS
2701 #          include <mach/cthreads.h>
2702 #          if (defined(NeXT) || defined(__NeXT__)) && defined(PERL_POLLUTE_MALLOC)
2703 #            define MUTEX_INIT_CALLS_MALLOC
2704 #          endif
2705 typedef cthread_t       perl_os_thread;
2706 typedef mutex_t         perl_mutex;
2707 typedef condition_t     perl_cond;
2708 typedef void *          perl_key;
2709 #        else /* Posix threads */
2710 #          ifdef I_PTHREAD
2711 #            include <pthread.h>
2712 #          endif
2713 typedef pthread_t       perl_os_thread;
2714 typedef pthread_mutex_t perl_mutex;
2715 typedef pthread_cond_t  perl_cond;
2716 typedef pthread_key_t   perl_key;
2717 #        endif /* I_MACH_CTHREADS */
2718 #      endif /* OS2 */
2719 #    endif /* WIN32 */
2720 #  endif /* FAKE_THREADS */
2721 #endif  /* NETWARE */
2722 #endif /* USE_ITHREADS */
2723
2724 #if defined(WIN32)
2725 #  include "win32.h"
2726 #endif
2727
2728 #ifdef NETWARE
2729 #  include "netware.h"
2730 #endif
2731
2732 #define STATUS_UNIX     PL_statusvalue
2733 #ifdef VMS
2734 #   define STATUS_NATIVE        PL_statusvalue_vms
2735 /*
2736  * vaxc$errno is only guaranteed to be valid if errno == EVMSERR, otherwise
2737  * its contents can not be trusted.  Unfortunately, Perl seems to check
2738  * it on exit, so it when PL_statusvalue_vms is updated, vaxc$errno should
2739  * be updated also.
2740  */
2741 #  include <stsdef.h>
2742 #  include <ssdef.h>
2743 /* Presume this because if VMS changes it, it will require a new
2744  * set of APIs for waiting on children for binary compatibility.
2745  */
2746 #  define child_offset_bits (8)
2747 #  ifndef C_FAC_POSIX
2748 #  define C_FAC_POSIX 0x35A000
2749 #  endif
2750
2751 /*  STATUS_EXIT - validates and returns a NATIVE exit status code for the
2752  * platform from the existing UNIX or Native status values.
2753  */
2754
2755 #   define STATUS_EXIT \
2756         (((I32)PL_statusvalue_vms == -1 ? SS$_ABORT : PL_statusvalue_vms) | \
2757            (VMSISH_HUSHED ? STS$M_INHIB_MSG : 0))
2758
2759
2760 /* STATUS_NATIVE_CHILD_SET - Calculate UNIX status that matches the child
2761  * exit code and shifts the UNIX value over the correct number of bits to
2762  * be a child status.  Usually the number of bits is 8, but that could be
2763  * platform dependent.  The NATIVE status code is presumed to have either
2764  * from a child process.
2765  */
2766
2767 /* This is complicated.  The child processes return a true native VMS
2768    status which must be saved.  But there is an assumption in Perl that
2769    the UNIX child status has some relationship to errno values, so
2770    Perl tries to translate it to text in some of the tests.  
2771    In order to get the string translation correct, for the error, errno
2772    must be EVMSERR, but that generates a different text message
2773    than what the test programs are expecting.  So an errno value must
2774    be derived from the native status value when an error occurs.
2775    That will hide the true native status message.  With this version of
2776    perl, the true native child status can always be retrieved so that
2777    is not a problem.  But in this case, Pl_statusvalue and errno may
2778    have different values in them.
2779  */
2780
2781 #   define STATUS_NATIVE_CHILD_SET(n) \
2782         STMT_START {                                                    \
2783             I32 evalue = (I32)n;                                        \
2784             if (evalue == EVMSERR) {                                    \
2785               PL_statusvalue_vms = vaxc$errno;                          \
2786               PL_statusvalue = evalue;                                  \
2787             } else {                                                    \
2788               PL_statusvalue_vms = evalue;                              \
2789               if (evalue == -1) {                                       \
2790                 PL_statusvalue = -1;                                    \
2791                 PL_statusvalue_vms = SS$_ABORT; /* Should not happen */ \
2792               } else                                                    \
2793                 PL_statusvalue = Perl_vms_status_to_unix(evalue, 1);    \
2794               set_vaxc_errno(evalue);                                   \
2795               if ((PL_statusvalue_vms & C_FAC_POSIX) == C_FAC_POSIX)    \
2796                   set_errno(EVMSERR);                                   \
2797               else set_errno(Perl_vms_status_to_unix(evalue, 0));       \
2798               PL_statusvalue = PL_statusvalue << child_offset_bits;     \
2799             }                                                           \
2800         } STMT_END
2801
2802 #   ifdef VMSISH_STATUS
2803 #       define STATUS_CURRENT   (VMSISH_STATUS ? STATUS_NATIVE : STATUS_UNIX)
2804 #   else
2805 #       define STATUS_CURRENT   STATUS_UNIX
2806 #   endif
2807
2808   /* STATUS_UNIX_SET - takes a UNIX/POSIX errno value and attempts to update
2809    * the NATIVE status to an equivalent value.  Can not be used to translate
2810    * exit code values as exit code values are not guaranteed to have any
2811    * relationship at all to errno values.
2812    * This is used when Perl is forcing errno to have a specific value.
2813    */
2814 #   define STATUS_UNIX_SET(n)                           \
2815         STMT_START {                                    \
2816             I32 evalue = (I32)n;                        \
2817             PL_statusvalue = evalue;                    \
2818             if (PL_statusvalue != -1) {                 \
2819                 if (PL_statusvalue != EVMSERR) {        \
2820                   PL_statusvalue &= 0xFFFF;             \
2821                   if (MY_POSIX_EXIT)                    \
2822                     PL_statusvalue_vms=PL_statusvalue ? SS$_ABORT : SS$_NORMAL;\
2823                   else PL_statusvalue_vms = Perl_unix_status_to_vms(evalue); \
2824                 }                                       \
2825                 else {                                  \
2826                   PL_statusvalue_vms = vaxc$errno;      \
2827                 }                                       \
2828             }                                           \
2829             else PL_statusvalue_vms = SS$_ABORT;        \
2830             set_vaxc_errno(PL_statusvalue_vms);         \
2831         } STMT_END
2832
2833   /* STATUS_UNIX_EXIT_SET - Takes a UNIX/POSIX exit code and sets
2834    * the NATIVE error status based on it.  It does not assume that
2835    * the UNIX/POSIX exit codes have any relationship to errno, except
2836    * that 0 indicates a success.  When in the default mode to comply
2837    * with the Perl VMS documentation, any other code sets the NATIVE
2838    * status to a failure code of SS$_ABORT.
2839    *
2840    * In the new POSIX EXIT mode, native status will be set so that the
2841    * actual exit code will can be retrieved by the calling program or
2842    * shell.
2843    *
2844    * If the exit code is not clearly a UNIX parent or child exit status,
2845    * it will be passed through as a VMS status.
2846    */
2847
2848 #   define STATUS_UNIX_EXIT_SET(n)                      \
2849         STMT_START {                                    \
2850             I32 evalue = (I32)n;                        \
2851             PL_statusvalue = evalue;                    \
2852             if (evalue != -1) {                         \
2853               if (evalue <= 0xFF00) {                   \
2854                 if (evalue > 0xFF)                      \
2855                   evalue = (evalue >> child_offset_bits) & 0xFF; \
2856                 if (evalue == 0)                        \
2857                   PL_statusvalue_vms == SS$_NORMAL;     \
2858                 else                                    \
2859                   if (MY_POSIX_EXIT)                    \
2860                     PL_statusvalue_vms =        \
2861                        (C_FAC_POSIX | (evalue << 3 ) | (evalue == 1)? \
2862                         (STS$K_ERROR | STS$M_INHIB_MSG) : 1); \
2863                   else                                  \
2864                     PL_statusvalue_vms = SS$_ABORT; \
2865               } else { /* forgive them Perl, for they have sinned */ \
2866                 if (evalue != EVMSERR) PL_statusvalue_vms = evalue; \
2867                 else PL_statusvalue_vms = vaxc$errno;           \
2868                 /* And obviously used a VMS status value instead of UNIX */ \
2869                 PL_statusvalue = EVMSERR;                               \
2870               }                                                 \
2871             }                                                   \
2872             else PL_statusvalue_vms = SS$_ABORT;                \
2873             set_vaxc_errno(PL_statusvalue_vms);                 \
2874         } STMT_END
2875
2876   /* STATUS_EXIT_SET - Takes a NATIVE/UNIX/POSIX exit code
2877    * and sets the NATIVE error status based on it.  This special case
2878    * is needed to maintain compatibility with past VMS behavior.
2879    *
2880    * In the default mode on VMS, this number is passed through as
2881    * both the NATIVE and UNIX status.  Which makes it different
2882    * that the STATUS_UNIX_EXIT_SET.
2883    *
2884    * In the new POSIX EXIT mode, native status will be set so that the
2885    * actual exit code will can be retrieved by the calling program or
2886    * shell.
2887    *
2888    */
2889
2890 #   define STATUS_EXIT_SET(n)                           \
2891         STMT_START {                                    \
2892             I32 evalue = (I32)n;                        \
2893             PL_statusvalue = evalue;                    \
2894             if (MY_POSIX_EXIT)                          \
2895                 PL_statusvalue_vms =                    \
2896                   (C_FAC_POSIX | (evalue << 3 ) | (evalue == 1)? \
2897                    (STS$K_ERROR | STS$M_INHIB_MSG) : 1); \
2898             else                                        \
2899                 PL_statusvalue_vms = evalue ? evalue : SS$_NORMAL; \
2900             set_vaxc_errno(PL_statusvalue_vms);         \
2901         } STMT_END
2902
2903
2904  /* This macro forces a success status */
2905 #   define STATUS_ALL_SUCCESS   \
2906         (PL_statusvalue = 0, PL_statusvalue_vms = SS$_NORMAL)
2907
2908  /* This macro forces a failure status */
2909 #   define STATUS_ALL_FAILURE   (PL_statusvalue = 1, \
2910      vaxc$errno = PL_statusvalue_vms = MY_POSIX_EXIT ? \
2911         (C_FAC_POSIX | (1 << 3) | STS$K_ERROR | STS$M_INHIB_MSG) : SS$_ABORT)
2912
2913 #else
2914 #   define STATUS_NATIVE        PL_statusvalue_posix
2915 #   if defined(WCOREDUMP)
2916 #       define STATUS_NATIVE_CHILD_SET(n)                  \
2917             STMT_START {                                   \
2918                 PL_statusvalue_posix = (n);                \
2919                 if (PL_statusvalue_posix == -1)            \
2920                     PL_statusvalue = -1;                   \
2921                 else {                                     \
2922                     PL_statusvalue =                       \
2923                         (WIFEXITED(PL_statusvalue_posix) ? (WEXITSTATUS(PL_statusvalue_posix) << 8) : 0) |  \
2924                         (WIFSIGNALED(PL_statusvalue_posix) ? (WTERMSIG(PL_statusvalue_posix) & 0x7F) : 0) | \
2925                         (WIFSIGNALED(PL_statusvalue_posix) && WCOREDUMP(PL_statusvalue_posix) ? 0x80 : 0);  \
2926                 }                                          \
2927             } STMT_END
2928 #   elif defined(WIFEXITED)
2929 #       define STATUS_NATIVE_CHILD_SET(n)                  \
2930             STMT_START {                                   \
2931                 PL_statusvalue_posix = (n);                \
2932                 if (PL_statusvalue_posix == -1)            \
2933                     PL_statusvalue = -1;                   \
2934                 else {                                     \
2935                     PL_statusvalue =                       \
2936                         (WIFEXITED(PL_statusvalue_posix) ? (WEXITSTATUS(PL_statusvalue_posix) << 8) : 0) |  \
2937                         (WIFSIGNALED(PL_statusvalue_posix) ? (WTERMSIG(PL_statusvalue_posix) & 0x7F) : 0);  \
2938                 }                                          \
2939             } STMT_END
2940 #   else
2941 #       define STATUS_NATIVE_CHILD_SET(n)                  \
2942             STMT_START {                                   \
2943                 PL_statusvalue_posix = (n);                \
2944                 if (PL_statusvalue_posix == -1)            \
2945                     PL_statusvalue = -1;                   \
2946                 else {                                     \
2947                     PL_statusvalue =                       \
2948                         PL_statusvalue_posix & 0xFFFF;     \
2949                 }                                          \
2950             } STMT_END
2951 #   endif
2952 #   define STATUS_UNIX_SET(n)           \
2953         STMT_START {                    \
2954             PL_statusvalue = (n);               \
2955             if (PL_statusvalue != -1)   \
2956                 PL_statusvalue &= 0xFFFF;       \
2957         } STMT_END
2958 #   define STATUS_UNIX_EXIT_SET(n) STATUS_UNIX_SET(n)
2959 #   define STATUS_EXIT_SET(n) STATUS_UNIX_SET(n)
2960 #   define STATUS_CURRENT STATUS_UNIX
2961 #   define STATUS_EXIT STATUS_UNIX
2962 #   define STATUS_ALL_SUCCESS   (PL_statusvalue = 0, PL_statusvalue_posix = 0)
2963 #   define STATUS_ALL_FAILURE   (PL_statusvalue = 1, PL_statusvalue_posix = 1)
2964 #endif
2965
2966 /* flags in PL_exit_flags for nature of exit() */
2967 #define PERL_EXIT_EXPECTED      0x01
2968 #define PERL_EXIT_DESTRUCT_END  0x02  /* Run END in perl_destruct */
2969
2970 #ifndef MEMBER_TO_FPTR
2971 #  define MEMBER_TO_FPTR(name)          name
2972 #endif
2973
2974 /* format to use for version numbers in file/directory names */
2975 /* XXX move to Configure? */
2976 #ifndef PERL_FS_VER_FMT
2977 #  define PERL_FS_VER_FMT       "%d.%d.%d"
2978 #endif
2979
2980 /* This defines a way to flush all output buffers.  This may be a
2981  * performance issue, so we allow people to disable it.  Also, if
2982  * we are using stdio, there are broken implementations of fflush(NULL)
2983  * out there, Solaris being the most prominent.
2984  */
2985 #ifndef PERL_FLUSHALL_FOR_CHILD
2986 # if defined(USE_PERLIO) || defined(FFLUSH_NULL) || defined(USE_SFIO)
2987 #  define PERL_FLUSHALL_FOR_CHILD       PerlIO_flush((PerlIO*)NULL)
2988 # else
2989 #  ifdef FFLUSH_ALL
2990 #   define PERL_FLUSHALL_FOR_CHILD      my_fflush_all()
2991 #  else
2992 #   define PERL_FLUSHALL_FOR_CHILD      NOOP
2993 #  endif
2994 # endif
2995 #endif
2996
2997 #ifndef PERL_WAIT_FOR_CHILDREN
2998 #  define PERL_WAIT_FOR_CHILDREN        NOOP
2999 #endif
3000
3001 /* the traditional thread-unsafe notion of "current interpreter". */
3002 #ifndef PERL_SET_INTERP
3003 #  define PERL_SET_INTERP(i)            (PL_curinterp = (PerlInterpreter*)(i))
3004 #endif
3005
3006 #ifndef PERL_GET_INTERP
3007 #  define PERL_GET_INTERP               (PL_curinterp)
3008 #endif
3009
3010 #if defined(PERL_IMPLICIT_CONTEXT) && !defined(PERL_GET_THX)
3011 #  ifdef MULTIPLICITY
3012 #    define PERL_GET_THX                ((PerlInterpreter *)PERL_GET_CONTEXT)
3013 #  endif
3014 #  define PERL_SET_THX(t)               PERL_SET_CONTEXT(t)
3015 #endif
3016
3017 /* 
3018     This replaces the previous %_ "hack" by the "%p" hacks.
3019     All that is required is that the perl source does not
3020     use "%-p" or "%-<number>p" or "%<number>p" formats.  
3021     These formats will still work in perl code.   
3022     See comments in sv.c for futher details.
3023
3024         -DvdNUMBER=<number> can be used to redefine VDf
3025
3026         -DvdNUMBER=0 reverts VDf to "vd", as in perl5.8.7,
3027             which works properly but gives compiler warnings
3028
3029     Robin Barker 2005-07-14
3030 */
3031
3032 #ifndef SVf_
3033 #  define SVf_(n) "-" STRINGIFY(n) "p"
3034 #endif
3035
3036 #ifndef SVf
3037 #  define SVf "-p"
3038 #endif
3039
3040 #ifndef SVf32
3041 #  define SVf32 SVf_(32)
3042 #endif
3043
3044 #ifndef SVf256
3045 #  define SVf256 SVf_(256)
3046 #endif
3047
3048 #define SVfARG(p) ((void*)(p))
3049
3050 #ifndef vdNUMBER
3051 #  define vdNUMBER 1
3052 #endif
3053  
3054 #ifndef VDf
3055 #  if vdNUMBER 
3056 #    define VDf STRINGIFY(vdNUMBER) "p"
3057 #  else
3058 #    define VDf "vd"
3059 #  endif
3060 #endif
3061
3062 #ifdef PERL_CORE
3063 /* not used; but needed for backward compatibilty with XS code? - RMB */ 
3064 #  ifndef UVf
3065 #    define UVf UVuf
3066 #  endif
3067 #else
3068 #  undef UVf
3069 #endif
3070
3071 #ifdef HASATTRIBUTE_FORMAT
3072 #  define __attribute__format__(x,y,z)      __attribute__((format(x,y,z)))
3073 #endif
3074 #ifdef HASATTRIBUTE_MALLOC
3075 #  define __attribute__malloc__             __attribute__((__malloc__))
3076 #endif
3077 #ifdef HASATTRIBUTE_NONNULL
3078 #  define __attribute__nonnull__(a)         __attribute__((nonnull(a)))
3079 #endif
3080 #ifdef HASATTRIBUTE_NORETURN
3081 #  define __attribute__noreturn__           __attribute__((noreturn))
3082 #endif
3083 #ifdef HASATTRIBUTE_PURE
3084 #  define __attribute__pure__               __attribute__((pure))
3085 #endif
3086 #ifdef HASATTRIBUTE_UNUSED
3087 #  define __attribute__unused__             __attribute__((unused))
3088 #endif
3089 #ifdef HASATTRIBUTE_WARN_UNUSED_RESULT
3090 #  define __attribute__warn_unused_result__ __attribute__((warn_unused_result))
3091 #endif
3092
3093 /* If we haven't defined the attributes yet, define them to blank. */
3094 #ifndef __attribute__format__
3095 #  define __attribute__format__(x,y,z)
3096 #endif
3097 #ifndef __attribute__malloc__
3098 #  define __attribute__malloc__
3099 #endif
3100 #ifndef __attribute__nonnull__
3101 #  define __attribute__nonnull__(a)
3102 #endif
3103 #ifndef __attribute__noreturn__
3104 #  define __attribute__noreturn__
3105 #endif
3106 #ifndef __attribute__pure__
3107 #  define __attribute__pure__
3108 #endif
3109 #ifndef __attribute__unused__
3110 #  define __attribute__unused__
3111 #endif
3112 #ifndef __attribute__warn_unused_result__
3113 #  define __attribute__warn_unused_result__
3114 #endif
3115
3116 /* For functions that are marked as __attribute__noreturn__, it's not
3117    appropriate to call return.  In either case, include the lint directive.
3118  */
3119 #ifdef HASATTRIBUTE_NORETURN
3120 #  define NORETURN_FUNCTION_END /* NOTREACHED */
3121 #else
3122 #  define NORETURN_FUNCTION_END /* NOTREACHED */ return 0
3123 #endif
3124
3125 /* Some OS warn on NULL format to printf */
3126 #ifdef PRINTF_FORMAT_NULL_OK
3127 #  define __attribute__format__null_ok__(x,y,z)  __attribute__format__(x,y,z)
3128 #else
3129 #  define __attribute__format__null_ok__(x,y,z)  
3130 #endif
3131
3132 #ifdef HAS_BUILTIN_EXPECT
3133 #  define EXPECT(expr,val)                  __builtin_expect(expr,val)
3134 #else
3135 #  define EXPECT(expr,val)                  (expr)
3136 #endif
3137 #define LIKELY(cond)                        EXPECT(cond,1)
3138 #define UNLIKELY(cond)                      EXPECT(cond,0)
3139 #ifdef HAS_BUILTIN_CHOOSE_EXPR
3140 /* placeholder */
3141 #endif
3142
3143 /* Some unistd.h's give a prototype for pause() even though
3144    HAS_PAUSE ends up undefined.  This causes the #define
3145    below to be rejected by the compiler.  Sigh.
3146 */
3147 #ifdef HAS_PAUSE
3148 #define Pause   pause
3149 #else
3150 #define Pause() sleep((32767<<16)+32767)
3151 #endif
3152
3153 #ifndef IOCPARM_LEN
3154 #   ifdef IOCPARM_MASK
3155         /* on BSDish systems we're safe */
3156 #       define IOCPARM_LEN(x)  (((x) >> 16) & IOCPARM_MASK)
3157 #   else
3158 #       if defined(_IOC_SIZE) && defined(__GLIBC__)
3159         /* on Linux systems we're safe; except when we're not [perl #38223] */
3160 #           define IOCPARM_LEN(x) (_IOC_SIZE(x) < 256 ? 256 : _IOC_SIZE(x))
3161 #       else
3162         /* otherwise guess at what's safe */
3163 #           define IOCPARM_LEN(x)       256
3164 #       endif
3165 #   endif
3166 #endif
3167
3168 #if defined(__CYGWIN__)
3169 /* USEMYBINMODE
3170  *   This symbol, if defined, indicates that the program should
3171  *   use the routine my_binmode(FILE *fp, char iotype, int mode) to insure
3172  *   that a file is in "binary" mode -- that is, that no translation
3173  *   of bytes occurs on read or write operations.
3174  */
3175 #  define USEMYBINMODE /**/
3176 #  include <io.h> /* for setmode() prototype */
3177 #  define my_binmode(fp, iotype, mode) \
3178             (PerlLIO_setmode(fileno(fp), mode) != -1 ? TRUE : FALSE)
3179 #endif
3180
3181 #ifdef __CYGWIN__
3182 void init_os_extras(void);
3183 #endif
3184
3185 #ifdef UNION_ANY_DEFINITION
3186 UNION_ANY_DEFINITION;
3187 #else
3188 union any {
3189     void*       any_ptr;
3190     I32         any_i32;
3191     IV          any_iv;
3192     long        any_long;
3193     bool        any_bool;
3194     void        (*any_dptr) (void*);
3195     void        (*any_dxptr) (pTHX_ void*);
3196 };
3197 #endif
3198
3199 typedef I32 (*filter_t) (pTHX_ int, SV *, int);
3200
3201 #define FILTER_READ(idx, sv, len)  filter_read(idx, sv, len)
3202 #define FILTER_DATA(idx)           (AvARRAY(PL_rsfp_filters)[idx])
3203 #define FILTER_ISREADER(idx)       (idx >= AvFILLp(PL_rsfp_filters))
3204
3205 #if defined(_AIX) && !defined(_AIX43)
3206 #if defined(USE_REENTRANT) || defined(_REENTRANT) || defined(_THREAD_SAFE)
3207 /* We cannot include <crypt.h> to get the struct crypt_data
3208  * because of setkey prototype problems when threading */
3209 typedef        struct crypt_data {     /* straight from /usr/include/crypt.h */
3210     /* From OSF, Not needed in AIX
3211        char C[28], D[28];
3212     */
3213     char E[48];
3214     char KS[16][48];
3215     char block[66];
3216     char iobuf[16];
3217 } CRYPTD;
3218 #endif /* threading */
3219 #endif /* AIX */
3220
3221 #if !defined(OS2) && !defined(MACOS_TRADITIONAL)
3222 #  include "iperlsys.h"
3223 #endif
3224
3225 /* [perl #22371] Algorimic Complexity Attack on Perl 5.6.1, 5.8.0.
3226  * Note that the USE_HASH_SEED and USE_HASH_SEED_EXPLICIT are *NOT*
3227  * defined by Configure, despite their names being similar to the
3228  * other defines like USE_ITHREADS.  Configure in fact knows nothing
3229  * about the randomised hashes.  Therefore to enable/disable the hash
3230  * randomisation defines use the Configure -Accflags=... instead. */
3231 #if !defined(NO_HASH_SEED) && !defined(USE_HASH_SEED) && !defined(USE_HASH_SEED_EXPLICIT)
3232 #  define USE_HASH_SEED
3233 #endif
3234
3235 /* Win32 defines a type 'WORD' in windef.h. This conflicts with the enumerator
3236  * 'WORD' defined in perly.h. The yytokentype enum is only a debugging aid, so
3237  * it's not really needed.
3238  */
3239 #if defined(WIN32)
3240 #  define YYTOKENTYPE
3241 #endif
3242 #include "perly.h"
3243
3244 #ifdef PERL_MAD
3245 struct nexttoken {
3246     YYSTYPE next_val;   /* value of next token, if any */
3247     I32 next_type;      /* type of next token */
3248     MADPROP *next_mad;  /* everything else about that token */
3249 };
3250 #endif
3251
3252 #include "regexp.h"
3253 #include "sv.h"
3254 #include "util.h"
3255 #include "form.h"
3256 #include "gv.h"
3257 #include "pad.h"
3258 #include "cv.h"
3259 #include "opnames.h"
3260 #include "op.h"
3261 #include "hv.h"
3262 #include "cop.h"
3263 #include "av.h"
3264 #include "mg.h"
3265 #include "scope.h"
3266 #include "warnings.h"
3267 #include "utf8.h"
3268
3269
3270 typedef struct _sublex_info SUBLEXINFO;
3271 struct _sublex_info {
3272     I32 super_state;    /* lexer state to save */
3273     I32 sub_inwhat;     /* "lex_inwhat" to use */
3274     OP *sub_op;         /* "lex_op" to use */
3275     char *super_bufptr; /* PL_bufptr that was */
3276     char *super_bufend; /* PL_bufend that was */
3277 };
3278
3279 #include "parser.h"
3280
3281 typedef struct magic_state MGS; /* struct magic_state defined in mg.c */
3282
3283 struct scan_data_t;             /* Used in S_* functions in regcomp.c */
3284 struct regnode_charclass_class; /* Used in S_* functions in regcomp.c */
3285
3286 /* Keep next first in this structure, because sv_free_arenas take
3287    advantage of this to share code between the pte arenas and the SV
3288    body arenas  */
3289 struct ptr_tbl_ent {
3290     struct ptr_tbl_ent*         next;
3291     const void*                 oldval;
3292     void*                       newval;
3293 };
3294
3295 struct ptr_tbl {
3296     struct ptr_tbl_ent**        tbl_ary;
3297     UV                          tbl_max;
3298     UV                          tbl_items;
3299 };
3300
3301 #if defined(iAPX286) || defined(M_I286) || defined(I80286)
3302 #   define I286
3303 #endif
3304
3305 #if defined(htonl) && !defined(HAS_HTONL)
3306 #define HAS_HTONL
3307 #endif
3308 #if defined(htons) && !defined(HAS_HTONS)
3309 #define HAS_HTONS
3310 #endif
3311 #if defined(ntohl) && !defined(HAS_NTOHL)
3312 #define HAS_NTOHL
3313 #endif
3314 #if defined(ntohs) && !defined(HAS_NTOHS)
3315 #define HAS_NTOHS
3316 #endif
3317 #ifndef HAS_HTONL
3318 #if (BYTEORDER & 0xffff) != 0x4321
3319 #define HAS_HTONS
3320 #define HAS_HTONL
3321 #define HAS_NTOHS
3322 #define HAS_NTOHL
3323 #define MYSWAP
3324 #define htons my_swap
3325 #define htonl my_htonl
3326 #define ntohs my_swap
3327 #define ntohl my_ntohl
3328 #endif
3329 #else
3330 #if (BYTEORDER & 0xffff) == 0x4321
3331 #undef HAS_HTONS
3332 #undef HAS_HTONL
3333 #undef HAS_NTOHS
3334 #undef HAS_NTOHL
3335 #endif
3336 #endif
3337
3338 /*
3339  * Little-endian byte order functions - 'v' for 'VAX', or 'reVerse'.
3340  * -DWS
3341  */
3342 #if BYTEORDER != 0x1234
3343 # define HAS_VTOHL
3344 # define HAS_VTOHS
3345 # define HAS_HTOVL
3346 # define HAS_HTOVS
3347 # if BYTEORDER == 0x4321 || BYTEORDER == 0x87654321
3348 #  define vtohl(x)      ((((x)&0xFF)<<24)       \
3349                         +(((x)>>24)&0xFF)       \
3350                         +(((x)&0x0000FF00)<<8)  \
3351                         +(((x)&0x00FF0000)>>8)  )
3352 #  define vtohs(x)      ((((x)&0xFF)<<8) + (((x)>>8)&0xFF))
3353 #  define htovl(x)      vtohl(x)
3354 #  define htovs(x)      vtohs(x)
3355 # endif
3356         /* otherwise default to functions in util.c */
3357 #ifndef htovs
3358 short htovs(short n);
3359 short vtohs(short n);
3360 long htovl(long n);
3361 long vtohl(long n);
3362 #endif
3363 #endif
3364
3365 /* *MAX Plus 1. A floating point value.
3366    Hopefully expressed in a way that dodgy floating point can't mess up.
3367    >> 2 rather than 1, so that value is safely less than I32_MAX after 1
3368    is added to it
3369    May find that some broken compiler will want the value cast to I32.
3370    [after the shift, as signed >> may not be as secure as unsigned >>]
3371 */
3372 #define I32_MAX_P1 (2.0 * (1 + (((U32)I32_MAX) >> 1)))
3373 #define U32_MAX_P1 (4.0 * (1 + ((U32_MAX) >> 2)))
3374 /* For compilers that can't correctly cast NVs over 0x7FFFFFFF (or
3375    0x7FFFFFFFFFFFFFFF) to an unsigned integer. In the future, sizeof(UV)
3376    may be greater than sizeof(IV), so don't assume that half max UV is max IV.
3377 */
3378 #define U32_MAX_P1_HALF (2.0 * (1 + ((U32_MAX) >> 2)))
3379
3380 #define UV_MAX_P1 (4.0 * (1 + ((UV_MAX) >> 2)))
3381 #define IV_MAX_P1 (2.0 * (1 + (((UV)IV_MAX) >> 1)))
3382 #define UV_MAX_P1_HALF (2.0 * (1 + ((UV_MAX) >> 2)))
3383
3384 /* This may look like unnecessary jumping through hoops, but converting
3385    out of range floating point values to integers *is* undefined behaviour,
3386    and it is starting to bite.
3387 */
3388 #ifndef CAST_INLINE
3389 #define I_32(what) (cast_i32((NV)(what)))
3390 #define U_32(what) (cast_ulong((NV)(what)))
3391 #define I_V(what) (cast_iv((NV)(what)))
3392 #define U_V(what) (cast_uv((NV)(what)))
3393 #else
3394 #define I_32(n) ((n) < I32_MAX_P1 ? ((n) < I32_MIN ? I32_MIN : (I32) (n)) \
3395                   : ((n) < U32_MAX_P1 ? (I32)(U32) (n) \
3396                      : ((n) > 0 ? (I32) U32_MAX : 0 /* NaN */)))
3397 #define U_32(n) ((n) < 0.0 ? ((n) < I32_MIN ? (UV) I32_MIN : (U32)(I32) (n)) \
3398                   : ((n) < U32_MAX_P1 ? (U32) (n) \
3399                      : ((n) > 0 ? U32_MAX : 0 /* NaN */)))
3400 #define I_V(n) ((n) < IV_MAX_P1 ? ((n) < IV_MIN ? IV_MIN : (IV) (n)) \
3401                   : ((n) < UV_MAX_P1 ? (IV)(UV) (n) \
3402                      : ((n) > 0 ? (IV)UV_MAX : 0 /* NaN */)))
3403 #define U_V(n) ((n) < 0.0 ? ((n) < IV_MIN ? (UV) IV_MIN : (UV)(IV) (n)) \
3404                   : ((n) < UV_MAX_P1 ? (UV) (n) \
3405                      : ((n) > 0 ? UV_MAX : 0 /* NaN */)))
3406 #endif
3407
3408 #define U_S(what) ((U16)U_32(what))
3409 #define U_I(what) ((unsigned int)U_32(what))
3410 #define U_L(what) U_32(what)
3411
3412 #ifdef HAS_SIGNBIT
3413 #  define Perl_signbit signbit
3414 #endif
3415
3416 /* These do not care about the fractional part, only about the range. */
3417 #define NV_WITHIN_IV(nv) (I_V(nv) >= IV_MIN && I_V(nv) <= IV_MAX)
3418 #define NV_WITHIN_UV(nv) ((nv)>=0.0 && U_V(nv) >= UV_MIN && U_V(nv) <= UV_MAX)
3419
3420 /* Used with UV/IV arguments: */
3421                                         /* XXXX: need to speed it up */
3422 #define CLUMP_2UV(iv)   ((iv) < 0 ? 0 : (UV)(iv))
3423 #define CLUMP_2IV(uv)   ((uv) > (UV)IV_MAX ? IV_MAX : (IV)(uv))
3424
3425 #ifndef MAXSYSFD
3426 #   define MAXSYSFD 2
3427 #endif
3428
3429 #ifndef __cplusplus
3430 #if !(defined(UNDER_CE) || defined(SYMBIAN))
3431 Uid_t getuid (void);
3432 Uid_t geteuid (void);
3433 Gid_t getgid (void);
3434 Gid_t getegid (void);
3435 #endif
3436 #endif
3437
3438 #ifndef Perl_debug_log
3439 #  define Perl_debug_log        PerlIO_stderr()
3440 #endif
3441
3442 #ifndef Perl_error_log
3443 #  define Perl_error_log        (PL_stderrgv                    \
3444                                  && isGV(PL_stderrgv)           \
3445                                  && GvIOp(PL_stderrgv)          \
3446                                  && IoOFP(GvIOp(PL_stderrgv))   \
3447                                  ? IoOFP(GvIOp(PL_stderrgv))    \
3448                                  : PerlIO_stderr())
3449 #endif
3450
3451
3452 #define DEBUG_p_FLAG            0x00000001 /*      1 */
3453 #define DEBUG_s_FLAG            0x00000002 /*      2 */
3454 #define DEBUG_l_FLAG            0x00000004 /*      4 */
3455 #define DEBUG_t_FLAG            0x00000008 /*      8 */
3456 #define DEBUG_o_FLAG            0x00000010 /*     16 */
3457 #define DEBUG_c_FLAG            0x00000020 /*     32 */
3458 #define DEBUG_P_FLAG            0x00000040 /*     64 */
3459 #define DEBUG_m_FLAG            0x00000080 /*    128 */
3460 #define DEBUG_f_FLAG            0x00000100 /*    256 */
3461 #define DEBUG_r_FLAG            0x00000200 /*    512 */
3462 #define DEBUG_x_FLAG            0x00000400 /*   1024 */
3463 #define DEBUG_u_FLAG            0x00000800 /*   2048 */
3464 /* U is reserved for Unofficial, exploratory hacking */
3465 #define DEBUG_U_FLAG            0x00001000 /*   4096 */
3466 #define DEBUG_H_FLAG            0x00002000 /*   8192 */
3467 #define DEBUG_X_FLAG            0x00004000 /*  16384 */
3468 #define DEBUG_D_FLAG            0x00008000 /*  32768 */
3469 #define DEBUG_S_FLAG            0x00010000 /*  65536 */
3470 #define DEBUG_T_FLAG            0x00020000 /* 131072 */
3471 #define DEBUG_R_FLAG            0x00040000 /* 262144 */
3472 #define DEBUG_J_FLAG            0x00080000 /* 524288 */
3473 #define DEBUG_v_FLAG            0x00100000 /*1048576 */
3474 #define DEBUG_C_FLAG            0x00200000 /*2097152 */
3475 #define DEBUG_A_FLAG            0x00400000 /*4194304 */
3476 #define DEBUG_q_FLAG            0x00800000 /*8388608 */
3477 #define DEBUG_MASK              0x00FFEFFF /* mask of all the standard flags */
3478
3479 #define DEBUG_DB_RECURSE_FLAG   0x40000000
3480 #define DEBUG_TOP_FLAG          0x80000000 /* XXX what's this for ??? Signal
3481                                               that something was done? */
3482
3483 #  define DEBUG_p_TEST_ (PL_debug & DEBUG_p_FLAG)
3484 #  define DEBUG_s_TEST_ (PL_debug & DEBUG_s_FLAG)
3485 #  define DEBUG_l_TEST_ (PL_debug & DEBUG_l_FLAG)
3486 #  define DEBUG_t_TEST_ (PL_debug & DEBUG_t_FLAG)
3487 #  define DEBUG_o_TEST_ (PL_debug & DEBUG_o_FLAG)
3488 #  define DEBUG_c_TEST_ (PL_debug & DEBUG_c_FLAG)
3489 #  define DEBUG_P_TEST_ (PL_debug & DEBUG_P_FLAG)
3490 #  define DEBUG_m_TEST_ (PL_debug & DEBUG_m_FLAG)
3491 #  define DEBUG_f_TEST_ (PL_debug & DEBUG_f_FLAG)
3492 #  define DEBUG_r_TEST_ (PL_debug & DEBUG_r_FLAG)
3493 #  define DEBUG_x_TEST_ (PL_debug & DEBUG_x_FLAG)
3494 #  define DEBUG_u_TEST_ (PL_debug & DEBUG_u_FLAG)
3495 #  define DEBUG_U_TEST_ (PL_debug & DEBUG_U_FLAG)
3496 #  define DEBUG_H_TEST_ (PL_debug & DEBUG_H_FLAG)
3497 #  define DEBUG_X_TEST_ (PL_debug & DEBUG_X_FLAG)
3498 #  define DEBUG_D_TEST_ (PL_debug & DEBUG_D_FLAG)
3499 #  define DEBUG_S_TEST_ (PL_debug & DEBUG_S_FLAG)
3500 #  define DEBUG_T_TEST_ (PL_debug & DEBUG_T_FLAG)
3501 #  define DEBUG_R_TEST_ (PL_debug & DEBUG_R_FLAG)
3502 #  define DEBUG_J_TEST_ (PL_debug & DEBUG_J_FLAG)
3503 #  define DEBUG_v_TEST_ (PL_debug & DEBUG_v_FLAG)
3504 #  define DEBUG_C_TEST_ (PL_debug & DEBUG_C_FLAG)
3505 #  define DEBUG_A_TEST_ (PL_debug & DEBUG_A_FLAG)
3506 #  define DEBUG_q_TEST_ (PL_debug & DEBUG_q_FLAG)
3507 #  define DEBUG_Xv_TEST_ (DEBUG_X_TEST_ && DEBUG_v_TEST_)
3508
3509 #ifdef DEBUGGING
3510
3511 #  define DEBUG_p_TEST DEBUG_p_TEST_
3512 #  define DEBUG_s_TEST DEBUG_s_TEST_
3513 #  define DEBUG_l_TEST DEBUG_l_TEST_
3514 #  define DEBUG_t_TEST DEBUG_t_TEST_
3515 #  define DEBUG_o_TEST DEBUG_o_TEST_
3516 #  define DEBUG_c_TEST DEBUG_c_TEST_
3517 #  define DEBUG_P_TEST DEBUG_P_TEST_
3518 #  define DEBUG_m_TEST DEBUG_m_TEST_
3519 #  define DEBUG_f_TEST DEBUG_f_TEST_
3520 #  define DEBUG_r_TEST DEBUG_r_TEST_
3521 #  define DEBUG_x_TEST DEBUG_x_TEST_
3522 #  define DEBUG_u_TEST DEBUG_u_TEST_
3523 #  define DEBUG_U_TEST DEBUG_U_TEST_
3524 #  define DEBUG_H_TEST DEBUG_H_TEST_
3525 #  define DEBUG_X_TEST DEBUG_X_TEST_
3526 #  define DEBUG_Xv_TEST DEBUG_Xv_TEST_
3527 #  define DEBUG_D_TEST DEBUG_D_TEST_
3528 #  define DEBUG_S_TEST DEBUG_S_TEST_
3529 #  define DEBUG_T_TEST DEBUG_T_TEST_
3530 #  define DEBUG_R_TEST DEBUG_R_TEST_
3531 #  define DEBUG_J_TEST DEBUG_J_TEST_
3532 #  define DEBUG_v_TEST DEBUG_v_TEST_
3533 #  define DEBUG_C_TEST DEBUG_C_TEST_
3534 #  define DEBUG_A_TEST DEBUG_A_TEST_
3535 #  define DEBUG_q_TEST DEBUG_q_TEST_
3536
3537 #  define PERL_DEB(a)                  a
3538 #  define PERL_DEBUG(a) if (PL_debug)  a
3539 #  define DEBUG_p(a) if (DEBUG_p_TEST) a
3540 #  define DEBUG_s(a) if (DEBUG_s_TEST) a
3541 #  define DEBUG_l(a) if (DEBUG_l_TEST) a
3542 #  define DEBUG_t(a) if (DEBUG_t_TEST) a
3543 #  define DEBUG_o(a) if (DEBUG_o_TEST) a
3544 #  define DEBUG_c(a) if (DEBUG_c_TEST) a
3545 #  define DEBUG_P(a) if (DEBUG_P_TEST) a
3546
3547      /* Temporarily turn off memory debugging in case the a
3548       * does memory allocation, either directly or indirectly. */
3549 #  define DEBUG_m(a)  \
3550     STMT_START {                                                        \
3551         if (PERL_GET_INTERP) { dTHX; if (DEBUG_m_TEST) {PL_debug&=~DEBUG_m_FLAG; a; PL_debug|=DEBUG_m_FLAG;} } \
3552     } STMT_END
3553
3554 #  define DEBUG__(t, a) \
3555         STMT_START { \
3556                 if (t) STMT_START {a;} STMT_END; \
3557         } STMT_END
3558
3559 #  define DEBUG_f(a) DEBUG__(DEBUG_f_TEST, a)
3560 #ifndef PERL_EXT_RE_BUILD
3561 #  define DEBUG_r(a) DEBUG__(DEBUG_r_TEST, a)
3562 #else
3563 #  define DEBUG_r(a) STMT_START {a;} STMT_END
3564 #endif /* PERL_EXT_RE_BUILD */
3565 #  define DEBUG_x(a) DEBUG__(DEBUG_x_TEST, a)
3566 #  define DEBUG_u(a) DEBUG__(DEBUG_u_TEST, a)
3567 #  define DEBUG_U(a) DEBUG__(DEBUG_U_TEST, a)
3568 #  define DEBUG_H(a) DEBUG__(DEBUG_H_TEST, a)
3569 #  define DEBUG_X(a) DEBUG__(DEBUG_X_TEST, a)
3570 #  define DEBUG_Xv(a) DEBUG__(DEBUG_Xv_TEST, a)
3571 #  define DEBUG_D(a) DEBUG__(DEBUG_D_TEST, a)
3572
3573 #  define DEBUG_S(a)
3574
3575 #  define DEBUG_T(a) DEBUG__(DEBUG_T_TEST, a)
3576 #  define DEBUG_R(a) DEBUG__(DEBUG_R_TEST, a)
3577 #  define DEBUG_v(a) DEBUG__(DEBUG_v_TEST, a)
3578 #  define DEBUG_C(a) DEBUG__(DEBUG_C_TEST, a)
3579 #  define DEBUG_A(a) DEBUG__(DEBUG_A_TEST, a)
3580 #  define DEBUG_q(a) DEBUG__(DEBUG_q_TEST, a)
3581
3582 #else /* DEBUGGING */
3583
3584 #  define DEBUG_p_TEST (0)
3585 #  define DEBUG_s_TEST (0)
3586 #  define DEBUG_l_TEST (0)
3587 #  define DEBUG_t_TEST (0)
3588 #  define DEBUG_o_TEST (0)
3589 #  define DEBUG_c_TEST (0)
3590 #  define DEBUG_P_TEST (0)
3591 #  define DEBUG_m_TEST (0)
3592 #  define DEBUG_f_TEST (0)
3593 #  define DEBUG_r_TEST (0)
3594 #  define DEBUG_x_TEST (0)
3595 #  define DEBUG_u_TEST (0)
3596 #  define DEBUG_U_TEST (0)
3597 #  define DEBUG_H_TEST (0)
3598 #  define DEBUG_X_TEST (0)
3599 #  define DEBUG_Xv_TEST (0)
3600 #  define DEBUG_D_TEST (0)
3601 #  define DEBUG_S_TEST (0)
3602 #  define DEBUG_T_TEST (0)
3603 #  define DEBUG_R_TEST (0)
3604 #  define DEBUG_J_TEST (0)
3605 #  define DEBUG_v_TEST (0)
3606 #  define DEBUG_C_TEST (0)
3607 #  define DEBUG_A_TEST (0)
3608 #  define DEBUG_q_TEST (0)
3609
3610 #  define PERL_DEB(a)
3611 #  define PERL_DEBUG(a)
3612 #  define DEBUG_p(a)
3613 #  define DEBUG_s(a)
3614 #  define DEBUG_l(a)
3615 #  define DEBUG_t(a)
3616 #  define DEBUG_o(a)
3617 #  define DEBUG_c(a)
3618 #  define DEBUG_P(a)
3619 #  define DEBUG_m(a)
3620 #  define DEBUG_f(a)
3621 #  define DEBUG_r(a)
3622 #  define DEBUG_x(a)
3623 #  define DEBUG_u(a)
3624 #  define DEBUG_U(a)
3625 #  define DEBUG_H(a)
3626 #  define DEBUG_X(a)
3627 #  define DEBUG_Xv(a)
3628 #  define DEBUG_D(a)
3629 #  define DEBUG_S(a)
3630 #  define DEBUG_T(a)
3631 #  define DEBUG_R(a)
3632 #  define DEBUG_v(a)
3633 #  define DEBUG_C(a)
3634 #  define DEBUG_A(a)
3635 #  define DEBUG_q(a)
3636 #endif /* DEBUGGING */
3637
3638
3639 #define DEBUG_SCOPE(where) \
3640     DEBUG_l(WITH_THR(Perl_deb(aTHX_ "%s scope %ld at %s:%d\n",  \
3641                     where, (long)PL_scopestack_ix, __FILE__, __LINE__)));
3642
3643
3644
3645
3646 /* These constants should be used in preference to raw characters
3647  * when using magic. Note that some perl guts still assume
3648  * certain character properties of these constants, namely that
3649  * isUPPER() and toLOWER() may do useful mappings.
3650  *
3651  * Update the magic_names table in dump.c when adding/amending these
3652  */
3653
3654 #define PERL_MAGIC_sv             '\0' /* Special scalar variable */
3655 #define PERL_MAGIC_overload       'A' /* %OVERLOAD hash */
3656 #define PERL_MAGIC_overload_elem  'a' /* %OVERLOAD hash element */
3657 #define PERL_MAGIC_overload_table 'c' /* Holds overload table (AMT) on stash */
3658 #define PERL_MAGIC_bm             'B' /* Boyer-Moore (fast string search) */
3659 #define PERL_MAGIC_regdata        'D' /* Regex match position data
3660                                         (@+ and @- vars) */
3661 #define PERL_MAGIC_regdatum       'd' /* Regex match position data element */
3662 #define PERL_MAGIC_env            'E' /* %ENV hash */
3663 #define PERL_MAGIC_envelem        'e' /* %ENV hash element */
3664 #define PERL_MAGIC_fm             'f' /* Formline ('compiled' format) */
3665 #define PERL_MAGIC_regex_global   'g' /* m//g target / study()ed string */
3666 #define PERL_MAGIC_hints          'H' /* %^H hash */
3667 #define PERL_MAGIC_hintselem      'h' /* %^H hash element */
3668 #define PERL_MAGIC_isa            'I' /* @ISA array */
3669 #define PERL_MAGIC_isaelem        'i' /* @ISA array element */
3670 #define PERL_MAGIC_nkeys          'k' /* scalar(keys()) lvalue */
3671 #define PERL_MAGIC_dbfile         'L' /* Debugger %_<filename */
3672 #define PERL_MAGIC_dbline         'l' /* Debugger %_<filename element */
3673 #define PERL_MAGIC_mutex          'm' /* for lock op */
3674 #define PERL_MAGIC_shared         'N' /* Shared between threads */
3675 #define PERL_MAGIC_shared_scalar  'n' /* Shared between threads */
3676 #define PERL_MAGIC_collxfrm       'o' /* Locale transformation */
3677 #define PERL_MAGIC_tied           'P' /* Tied array or hash */
3678 #define PERL_MAGIC_tiedelem       'p' /* Tied array or hash element */
3679 #define PERL_MAGIC_tiedscalar     'q' /* Tied scalar or handle */
3680 #define PERL_MAGIC_qr             'r' /* precompiled qr// regex */
3681 #define PERL_MAGIC_sig            'S' /* %SIG hash */
3682 #define PERL_MAGIC_sigelem        's' /* %SIG hash element */
3683 #define PERL_MAGIC_taint          't' /* Taintedness */
3684 #define PERL_MAGIC_uvar           'U' /* Available for use by extensions */
3685 #define PERL_MAGIC_uvar_elem      'u' /* Reserved for use by extensions */
3686 #define PERL_MAGIC_vec            'v' /* vec() lvalue */
3687 #define PERL_MAGIC_vstring        'V' /* SV was vstring literal */
3688 #define PERL_MAGIC_utf8           'w' /* Cached UTF-8 information */
3689 #define PERL_MAGIC_substr         'x' /* substr() lvalue */
3690 #define PERL_MAGIC_defelem        'y' /* Shadow "foreach" iterator variable /
3691                                         smart parameter vivification */
3692 #define PERL_MAGIC_arylen         '#' /* Array length ($#ary) */
3693 #define PERL_MAGIC_pos            '.' /* pos() lvalue */
3694 #define PERL_MAGIC_backref        '<' /* for weak ref data */
3695 #define PERL_MAGIC_symtab         ':' /* extra data for symbol tables */
3696 #define PERL_MAGIC_rhash          '%' /* extra data for restricted hashes */
3697 #define PERL_MAGIC_arylen_p       '@' /* to move arylen out of XPVAV */
3698 #define PERL_MAGIC_ext            '~' /* Available for use by extensions */
3699
3700
3701 #ifndef assert  /* <assert.h> might have been included somehow */
3702 #define assert(what)    PERL_DEB(                                       \
3703         ((what) ? ((void) 0) :                                          \
3704             (Perl_croak_nocontext("Assertion %s failed: file \"" __FILE__ \
3705                         "\", line %d", STRINGIFY(what), __LINE__),      \
3706             (void) 0)))
3707 #endif
3708
3709 struct ufuncs {
3710     I32 (*uf_val)(pTHX_ IV, SV*);
3711     I32 (*uf_set)(pTHX_ IV, SV*);
3712     IV uf_index;
3713 };
3714
3715 /* In pre-5.7-Perls the PERL_MAGIC_uvar magic didn't get the thread context.
3716  * XS code wanting to be backward compatible can do something
3717  * like the following:
3718
3719 #ifndef PERL_MG_UFUNC
3720 #define PERL_MG_UFUNC(name,ix,sv) I32 name(IV ix, SV *sv)
3721 #endif
3722
3723 static PERL_MG_UFUNC(foo_get, index, val)
3724 {
3725     sv_setsv(val, ...);
3726     return TRUE;
3727 }
3728
3729 -- Doug MacEachern
3730
3731 */
3732
3733 #ifndef PERL_MG_UFUNC
3734 #define PERL_MG_UFUNC(name,ix,sv) I32 name(pTHX_ IV ix, SV *sv)
3735 #endif
3736
3737 /* Fix these up for __STDC__ */
3738 #ifndef DONT_DECLARE_STD
3739 char *mktemp (char*);
3740 #ifndef atof
3741 double atof (const char*);
3742 #endif
3743 #endif
3744
3745 #ifndef STANDARD_C
3746 /* All of these are in stdlib.h or time.h for ANSI C */
3747 Time_t time();
3748 struct tm *gmtime(), *localtime();
3749 #if defined(OEMVS) || defined(__OPEN_VM)
3750 char *(strchr)(), *(strrchr)();
3751 char *(strcpy)(), *(strcat)();
3752 #else
3753 char *strchr(), *strrchr();
3754 char *strcpy(), *strcat();
3755 #endif
3756 #endif /* ! STANDARD_C */
3757
3758
3759 #ifdef I_MATH
3760 #    include <math.h>
3761 #else
3762 START_EXTERN_C
3763             double exp (double);
3764             double log (double);
3765             double log10 (double);
3766             double sqrt (double);
3767             double frexp (double,int*);
3768             double ldexp (double,int);
3769             double modf (double,double*);
3770             double sin (double);
3771             double cos (double);
3772             double atan2 (double,double);
3773             double pow (double,double);
3774 END_EXTERN_C
3775 #endif
3776
3777 #if !defined(NV_INF) && defined(USE_LONG_DOUBLE) && defined(LDBL_INFINITY)
3778 #  define NV_INF LDBL_INFINITY
3779 #endif
3780 #if !defined(NV_INF) && defined(DBL_INFINITY)
3781 #  define NV_INF (NV)DBL_INFINITY
3782 #endif
3783 #if !defined(NV_INF) && defined(INFINITY)
3784 #  define NV_INF (NV)INFINITY
3785 #endif
3786 #if !defined(NV_INF) && defined(INF)
3787 #  define NV_INF (NV)INF
3788 #endif
3789 #if !defined(NV_INF) && defined(USE_LONG_DOUBLE) && defined(HUGE_VALL)
3790 #  define NV_INF (NV)HUGE_VALL
3791 #endif
3792 #if !defined(NV_INF) && defined(HUGE_VAL)
3793 #  define NV_INF (NV)HUGE_VAL
3794 #endif
3795
3796 #if !defined(NV_NAN) && defined(USE_LONG_DOUBLE)
3797 #   if !defined(NV_NAN) && defined(LDBL_NAN)
3798 #       define NV_NAN LDBL_NAN
3799 #   endif
3800 #   if !defined(NV_NAN) && defined(LDBL_QNAN)
3801 #       define NV_NAN LDBL_QNAN
3802 #   endif
3803 #   if !defined(NV_NAN) && defined(LDBL_SNAN)
3804 #       define NV_NAN LDBL_SNAN
3805 #   endif
3806 #endif
3807 #if !defined(NV_NAN) && defined(DBL_NAN)
3808 #  define NV_NAN (NV)DBL_NAN
3809 #endif
3810 #if !defined(NV_NAN) && defined(DBL_QNAN)
3811 #  define NV_NAN (NV)DBL_QNAN
3812 #endif
3813 #if !defined(NV_NAN) && defined(DBL_SNAN)
3814 #  define NV_NAN (NV)DBL_SNAN
3815 #endif
3816 #if !defined(NV_NAN) && defined(QNAN)
3817 #  define NV_NAN (NV)QNAN
3818 #endif
3819 #if !defined(NV_NAN) && defined(SNAN)
3820 #  define NV_NAN (NV)SNAN
3821 #endif
3822 #if !defined(NV_NAN) && defined(NAN)
3823 #  define NV_NAN (NV)NAN
3824 #endif
3825
3826 #ifndef __cplusplus
3827 #  if defined(NeXT) || defined(__NeXT__) /* or whatever catches all NeXTs */
3828 char *crypt ();       /* Maybe more hosts will need the unprototyped version */
3829 #  else
3830 #    if !defined(WIN32) && !defined(VMS)
3831 #ifndef crypt
3832 char *crypt (const char*, const char*);
3833 #endif
3834 #    endif /* !WIN32 */
3835 #  endif /* !NeXT && !__NeXT__ */
3836 #  ifndef DONT_DECLARE_STD
3837 #    ifndef getenv
3838 char *getenv (const char*);
3839 #    endif /* !getenv */
3840 #    if !defined(HAS_LSEEK_PROTO) && !defined(EPOC) && !defined(__hpux)
3841 #      ifdef _FILE_OFFSET_BITS
3842 #        if _FILE_OFFSET_BITS == 64
3843 Off_t lseek (int,Off_t,int);
3844 #        endif
3845 #      endif
3846 #    endif
3847 #  endif /* !DONT_DECLARE_STD */
3848 #ifndef getlogin
3849 char *getlogin (void);
3850 #endif
3851 #endif /* !__cplusplus */
3852
3853 /* Fixme on VMS.  This needs to be a run-time, not build time options */
3854 /* Also rename() is affected by this */
3855 #ifdef UNLINK_ALL_VERSIONS /* Currently only makes sense for VMS */
3856 #define UNLINK unlnk
3857 I32 unlnk (pTHX_ const char*);
3858 #else
3859 #define UNLINK PerlLIO_unlink
3860 #endif
3861
3862 /* some versions of glibc are missing the setresuid() proto */
3863 #if defined(HAS_SETRESUID) && !defined(HAS_SETRESUID_PROTO)
3864 int setresuid(uid_t ruid, uid_t euid, uid_t suid);
3865 #endif
3866 /* some versions of glibc are missing the setresgid() proto */
3867 #if defined(HAS_SETRESGID) && !defined(HAS_SETRESGID_PROTO)
3868 int setresgid(gid_t rgid, gid_t egid, gid_t sgid);
3869 #endif
3870
3871 #ifndef HAS_SETREUID
3872 #  ifdef HAS_SETRESUID
3873 #    define setreuid(r,e) setresuid(r,e,(Uid_t)-1)
3874 #    define HAS_SETREUID
3875 #  endif
3876 #endif
3877 #ifndef HAS_SETREGID
3878 #  ifdef HAS_SETRESGID
3879 #    define setregid(r,e) setresgid(r,e,(Gid_t)-1)
3880 #    define HAS_SETREGID
3881 #  endif
3882 #endif
3883
3884 /* Sighandler_t defined in iperlsys.h */
3885
3886 #ifdef HAS_SIGACTION
3887 typedef struct sigaction Sigsave_t;
3888 #else
3889 typedef Sighandler_t Sigsave_t;
3890 #endif
3891
3892 #define SCAN_DEF 0
3893 #define SCAN_TR 1
3894 #define SCAN_REPL 2
3895
3896 #ifdef DEBUGGING
3897 # ifndef register
3898 #  define register
3899 # endif
3900 # define RUNOPS_DEFAULT Perl_runops_debug
3901 #else
3902 # define RUNOPS_DEFAULT Perl_runops_standard
3903 #endif
3904
3905 #ifdef USE_PERLIO
3906 EXTERN_C void PerlIO_teardown(pTHX);
3907 # ifdef USE_ITHREADS
3908 #  define PERLIO_INIT MUTEX_INIT(&PL_perlio_mutex)
3909 #  define PERLIO_TERM                           \
3910         STMT_START {                            \
3911                 PerlIO_teardown(aTHX);          \
3912                 MUTEX_DESTROY(&PL_perlio_mutex);\
3913         } STMT_END
3914 # else
3915 #  define PERLIO_INIT
3916 #  define PERLIO_TERM   PerlIO_teardown(aTHX)
3917 # endif
3918 #else
3919 #  define PERLIO_INIT
3920 #  define PERLIO_TERM
3921 #endif
3922
3923 #ifdef MYMALLOC
3924 #  ifdef MUTEX_INIT_CALLS_MALLOC
3925 #    define MALLOC_INIT                                 \
3926         STMT_START {                                    \
3927                 PL_malloc_mutex = NULL;                 \
3928                 MUTEX_INIT(&PL_malloc_mutex);           \
3929         } STMT_END
3930 #    define MALLOC_TERM                                 \
3931         STMT_START {                                    \
3932                 perl_mutex tmp = PL_malloc_mutex;       \
3933                 PL_malloc_mutex = NULL;                 \
3934                 MUTEX_DESTROY(&tmp);                    \
3935         } STMT_END
3936 #  else
3937 #    define MALLOC_INIT MUTEX_INIT(&PL_malloc_mutex)
3938 #    define MALLOC_TERM MUTEX_DESTROY(&PL_malloc_mutex)
3939 #  endif
3940 #else
3941 #  define MALLOC_INIT
3942 #  define MALLOC_TERM
3943 #endif
3944
3945 #if defined(PERL_IMPLICIT_CONTEXT)
3946
3947 struct perl_memory_debug_header;
3948 struct perl_memory_debug_header {
3949   tTHX  interpreter;
3950 #  ifdef PERL_POISON
3951   MEM_SIZE size;
3952 #  endif
3953   struct perl_memory_debug_header *prev;
3954   struct perl_memory_debug_header *next;
3955 };
3956
3957 #  define sTHX  (sizeof(struct perl_memory_debug_header) + \
3958         (MEM_ALIGNBYTES - sizeof(struct perl_memory_debug_header) \
3959          %MEM_ALIGNBYTES) % MEM_ALIGNBYTES)
3960
3961 #endif
3962
3963 #ifdef PERL_TRACK_MEMPOOL
3964 #  define INIT_TRACK_MEMPOOL(header, interp)                    \
3965         STMT_START {                                            \
3966                 (header).interpreter = (interp);                \
3967                 (header).prev = (header).next = &(header);      \
3968         } STMT_END
3969 #  else
3970 #  define INIT_TRACK_MEMPOOL(header, interp)
3971 #endif
3972
3973
3974 typedef int (CPERLscope(*runops_proc_t)) (pTHX);
3975 typedef void (CPERLscope(*share_proc_t)) (pTHX_ SV *sv);
3976 typedef int  (CPERLscope(*thrhook_proc_t)) (pTHX);
3977 typedef OP* (CPERLscope(*PPADDR_t)[]) (pTHX);
3978
3979 /* _ (for $_) must be first in the following list (DEFSV requires it) */
3980 #define THREADSV_NAMES "_123456789&`'+/.,\\\";^-%=|~:\001\005!@"
3981
3982 /* NeXT has problems with crt0.o globals */
3983 #if defined(__DYNAMIC__) && \
3984     (defined(NeXT) || defined(__NeXT__) || defined(PERL_DARWIN))
3985 #  if defined(NeXT) || defined(__NeXT)
3986 #    include <mach-o/dyld.h>
3987 #    define environ (*environ_pointer)
3988 EXT char *** environ_pointer;
3989 #  else
3990 #    if defined(PERL_DARWIN) && defined(PERL_CORE)
3991 #      include <crt_externs.h>  /* for the env array */
3992 #      define environ (*_NSGetEnviron())
3993 #    endif
3994 #  endif
3995 #else
3996    /* VMS and some other platforms don't use the environ array */
3997 #  ifdef USE_ENVIRON_ARRAY
3998 #    if !defined(DONT_DECLARE_STD) || \
3999         (defined(__svr4__) && defined(__GNUC__) && defined(sun)) || \
4000         defined(__sgi) || \
4001         defined(__DGUX)
4002 extern char **  environ;        /* environment variables supplied via exec */
4003 #    endif
4004 #  endif
4005 #endif
4006
4007 START_EXTERN_C
4008
4009 /* handy constants */
4010 EXTCONST char PL_warn_uninit[]
4011   INIT("Use of uninitialized value%s%s%s");
4012 EXTCONST char PL_warn_nosemi[]
4013   INIT("Semicolon seems to be missing");
4014 EXTCONST char PL_warn_reserved[]
4015   INIT("Unquoted string \"%s\" may clash with future reserved word");
4016 EXTCONST char PL_warn_nl[]
4017   INIT("Unsuccessful %s on filename containing newline");
4018 EXTCONST char PL_no_wrongref[]
4019   INIT("Can't use %s ref as %s ref");
4020 EXTCONST char PL_no_symref[]
4021   INIT("Can't use string (\"%.32s\") as %s ref while \"strict refs\" in use");
4022 EXTCONST char PL_no_symref_sv[]
4023   INIT("Can't use string (\"%" SVf32 "\") as %s ref while \"strict refs\" in use");
4024 EXTCONST char PL_no_usym[]
4025   INIT("Can't use an undefined value as %s reference");
4026 EXTCONST char PL_no_aelem[]
4027   INIT("Modification of non-creatable array value attempted, subscript %d");
4028 EXTCONST char PL_no_helem_sv[]
4029   INIT("Modification of non-creatable hash value attempted, subscript \"%"SVf"\"");
4030 EXTCONST char PL_no_modify[]
4031   INIT("Modification of a read-only value attempted");
4032 EXTCONST char PL_no_mem[]
4033   INIT("Out of memory!\n");
4034 EXTCONST char PL_no_security[]
4035   INIT("Insecure dependency in %s%s");
4036 EXTCONST char PL_no_sock_func[]
4037   INIT("Unsupported socket function \"%s\" called");
4038 EXTCONST char PL_no_dir_func[]
4039   INIT("Unsupported directory function \"%s\" called");
4040 EXTCONST char PL_no_func[]
4041   INIT("The %s function is unimplemented");
4042 EXTCONST char PL_no_myglob[]
4043   INIT("\"%s\" variable %s can't be in a package");
4044 EXTCONST char PL_no_localize_ref[]
4045   INIT("Can't localize through a reference");
4046 EXTCONST char PL_memory_wrap[]
4047   INIT("panic: memory wrap");
4048
4049 EXTCONST char PL_uuemap[65]
4050   INIT("`!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_");
4051
4052
4053 #ifdef DOINIT
4054 EXTCONST char* const PL_sig_name[] = { SIG_NAME };
4055 EXTCONST int         PL_sig_num[]  = { SIG_NUM };
4056 #else
4057 EXTCONST char* const PL_sig_name[];
4058 EXTCONST int         PL_sig_num[];
4059 #endif
4060
4061 /* fast conversion and case folding tables */
4062
4063 #ifdef DOINIT
4064 #ifdef EBCDIC
4065 EXTCONST unsigned char PL_fold[] = { /* fast EBCDIC case folding table */
4066     0,      1,      2,      3,      4,      5,      6,      7,
4067     8,      9,      10,     11,     12,     13,     14,     15,
4068     16,     17,     18,     19,     20,     21,     22,     23,
4069     24,     25,     26,     27,     28,     29,     30,     31,
4070     32,     33,     34,     35,     36,     37,     38,     39,
4071     40,     41,     42,     43,     44,     45,     46,     47,
4072     48,     49,     50,     51,     52,     53,     54,     55,
4073     56,     57,     58,     59,     60,     61,     62,     63,
4074     64,     65,     66,     67,     68,     69,     70,     71,
4075     72,     73,     74,     75,     76,     77,     78,     79,
4076     80,     81,     82,     83,     84,     85,     86,     87,
4077     88,     89,     90,     91,     92,     93,     94,     95,
4078     96,     97,     98,     99,     100,    101,    102,    103,
4079     104,    105,    106,    107,    108,    109,    110,    111,
4080     112,    113,    114,    115,    116,    117,    118,    119,
4081     120,    121,    122,    123,    124,    125,    126,    127,
4082     128,    'A',    'B',    'C',    'D',    'E',    'F',    'G',
4083     'H',    'I',    138,    139,    140,    141,    142,    143,
4084     144,    'J',    'K',    'L',    'M',    'N',    'O',    'P',
4085     'Q',    'R',    154,    155,    156,    157,    158,    159,
4086     160,    161,    'S',    'T',    'U',    'V',    'W',    'X',
4087     'Y',    'Z',    170,    171,    172,    173,    174,    175,
4088     176,    177,    178,    179,    180,    181,    182,    183,
4089     184,    185,    186,    187,    188,    189,    190,    191,
4090     192,    'a',    'b',    'c',    'd',    'e',    'f',    'g',
4091     'h',    'i',    202,    203,    204,    205,    206,    207,
4092     208,    'j',    'k',    'l',    'm',    'n',    'o',    'p',
4093     'q',    'r',    218,    219,    220,    221,    222,    223,
4094     224,    225,    's',    't',    'u',    'v',    'w',    'x',
4095     'y',    'z',    234,    235,    236,    237,    238,    239,
4096     240,    241,    242,    243,    244,    245,    246,    247,
4097     248,    249,    250,    251,    252,    253,    254,    255
4098 };
4099 #else   /* ascii rather than ebcdic */
4100 EXTCONST  unsigned char PL_fold[] = {
4101         0,      1,      2,      3,      4,      5,      6,      7,
4102         8,      9,      10,     11,     12,     13,     14,     15,
4103         16,     17,     18,     19,     20,     21,     22,     23,
4104         24,     25,     26,     27,     28,     29,     30,     31,
4105         32,     33,     34,     35,     36,     37,     38,     39,
4106         40,     41,     42,     43,     44,     45,     46,     47,
4107         48,     49,     50,     51,     52,     53,     54,     55,
4108         56,     57,     58,     59,     60,     61,     62,     63,
4109         64,     'a',    'b',    'c',    'd',    'e',    'f',    'g',
4110         'h',    'i',    'j',    'k',    'l',    'm',    'n',    'o',
4111         'p',    'q',    'r',    's',    't',    'u',    'v',    'w',
4112         'x',    'y',    'z',    91,     92,     93,     94,     95,
4113         96,     'A',    'B',    'C',    'D',    'E',    'F',    'G',
4114         'H',    'I',    'J',    'K',    'L',    'M',    'N',    'O',
4115         'P',    'Q',    'R',    'S',    'T',    'U',    'V',    'W',
4116         'X',    'Y',    'Z',    123,    124,    125,    126,    127,
4117         128,    129,    130,    131,    132,    133,    134,    135,
4118         136,    137,    138,    139,    140,    141,    142,    143,
4119         144,    145,    146,    147,    148,    149,    150,    151,
4120         152,    153,    154,    155,    156,    157,    158,    159,
4121         160,    161,    162,    163,    164,    165,    166,    167,
4122         168,    169,    170,    171,    172,    173,    174,    175,
4123         176,    177,    178,    179,    180,    181,    182,    183,
4124         184,    185,    186,    187,    188,    189,    190,    191,
4125         192,    193,    194,    195,    196,    197,    198,    199,
4126         200,    201,    202,    203,    204,    205,    206,    207,
4127         208,    209,    210,    211,    212,    213,    214,    215,
4128         216,    217,    218,    219,    220,    221,    222,    223,    
4129         224,    225,    226,    227,    228,    229,    230,    231,
4130         232,    233,    234,    235,    236,    237,    238,    239,
4131         240,    241,    242,    243,    244,    245,    246,    247,
4132         248,    249,    250,    251,    252,    253,    254,    255
4133 };
4134 #endif  /* !EBCDIC */
4135 #else
4136 EXTCONST unsigned char PL_fold[];
4137 #endif
4138
4139 #ifndef PERL_GLOBAL_STRUCT /* or perlvars.h */
4140 #ifdef DOINIT
4141 EXT unsigned char PL_fold_locale[] = { /* Unfortunately not EXTCONST. */
4142         0,      1,      2,      3,      4,      5,      6,      7,
4143         8,      9,      10,     11,     12,     13,     14,     15,
4144         16,     17,     18,     19,     20,     21,     22,     23,
4145         24,     25,     26,     27,     28,     29,     30,     31,
4146         32,     33,     34,     35,     36,     37,     38,     39,
4147         40,     41,     42,     43,     44,     45,     46,     47,
4148         48,     49,     50,     51,     52,     53,     54,     55,
4149         56,     57,     58,     59,     60,     61,     62,     63,
4150         64,     'a',    'b',    'c',    'd',    'e',    'f',    'g',
4151         'h',    'i',    'j',    'k',    'l',    'm',    'n',    'o',
4152         'p',    'q',    'r',    's',    't',    'u',    'v',    'w',
4153         'x',    'y',    'z',    91,     92,     93,     94,     95,
4154         96,     'A',    'B',    'C',    'D',    'E',    'F',    'G',
4155         'H',    'I',    'J',    'K',    'L',    'M',    'N',    'O',
4156         'P',    'Q',    'R',    'S',    'T',    'U',    'V',    'W',
4157         'X',    'Y',    'Z',    123,    124,    125,    126,    127,
4158         128,    129,    130,    131,    132,    133,    134,    135,
4159         136,    137,    138,    139,    140,    141,    142,    143,
4160         144,    145,    146,    147,    148,    149,    150,    151,
4161         152,    153,    154,    155,    156,    157,    158,    159,
4162         160,    161,    162,    163,    164,    165,    166,    167,
4163         168,    169,    170,    171,    172,    173,    174,    175,
4164         176,    177,    178,    179,    180,    181,    182,    183,
4165         184,    185,    186,    187,    188,    189,    190,    191,
4166         192,    193,    194,    195,    196,    197,    198,    199,
4167         200,    201,    202,    203,    204,    205,    206,    207,
4168         208,    209,    210,    211,    212,    213,    214,    215,
4169         216,    217,    218,    219,    220,    221,    222,    223,    
4170         224,    225,    226,    227,    228,    229,    230,    231,
4171         232,    233,    234,    235,    236,    237,    238,    239,
4172         240,    241,    242,    243,    244,    245,    246,    247,
4173         248,    249,    250,    251,    252,    253,    254,    255
4174 };
4175 #else
4176 EXT unsigned char PL_fold_locale[]; /* Unfortunately not EXTCONST. */
4177 #endif
4178 #endif /* !PERL_GLOBAL_STRUCT */
4179
4180 #ifdef DOINIT
4181 #ifdef EBCDIC
4182 EXTCONST unsigned char PL_freq[] = {/* EBCDIC frequencies for mixed English/C */
4183     1,      2,      84,     151,    154,    155,    156,    157,
4184     165,    246,    250,    3,      158,    7,      18,     29,
4185     40,     51,     62,     73,     85,     96,     107,    118,
4186     129,    140,    147,    148,    149,    150,    152,    153,
4187     255,      6,      8,      9,     10,     11,     12,     13,
4188      14,     15,     24,     25,     26,     27,     28,    226,
4189      29,     30,     31,     32,     33,     43,     44,     45,
4190      46,     47,     48,     49,     50,     76,     77,     78,
4191      79,     80,     81,     82,     83,     84,     85,     86,
4192      87,     94,     95,    234,    181,    233,    187,    190,
4193     180,     96,     97,     98,     99,    100,    101,    102,
4194     104,    112,    182,    174,    236,    232,    229,    103,
4195     228,    226,    114,    115,    116,    117,    118,    119,
4196     120,    121,    122,    235,    176,    230,    194,    162,
4197     130,    131,    132,    133,    134,    135,    136,    137,
4198     138,    139,    201,    205,    163,    217,    220,    224,
4199     5,      248,    227,    244,    242,    255,    241,    231,
4200     240,    253,    16,     197,    19,     20,     21,     187,
4201     23,     169,    210,    245,    237,    249,    247,    239,
4202     168,    252,    34,     196,    36,     37,     38,     39,
4203     41,     42,     251,    254,    238,    223,    221,    213,
4204     225,    177,    52,     53,     54,     55,     56,     57,
4205     58,     59,     60,     61,     63,     64,     65,     66,
4206     67,     68,     69,     70,     71,     72,     74,     75,
4207     205,    208,    186,    202,    200,    218,    198,    179,
4208     178,    214,    88,     89,     90,     91,     92,     93,
4209     217,    166,    170,    207,    199,    209,    206,    204,
4210     160,    212,    105,    106,    108,    109,    110,    111,
4211     203,    113,    216,    215,    192,    175,    193,    243,
4212     172,    161,    123,    124,    125,    126,    127,    128,
4213     222,    219,    211,    195,    188,    193,    185,    184,
4214     191,    183,    141,    142,    143,    144,    145,    146
4215 };
4216 #else  /* ascii rather than ebcdic */
4217 EXTCONST unsigned char PL_freq[] = {    /* letter frequencies for mixed English/C */
4218         1,      2,      84,     151,    154,    155,    156,    157,
4219         165,    246,    250,    3,      158,    7,      18,     29,
4220         40,     51,     62,     73,     85,     96,     107,    118,
4221         129,    140,    147,    148,    149,    150,    152,    153,
4222         255,    182,    224,    205,    174,    176,    180,    217,
4223         233,    232,    236,    187,    235,    228,    234,    226,
4224         222,    219,    211,    195,    188,    193,    185,    184,
4225         191,    183,    201,    229,    181,    220,    194,    162,
4226         163,    208,    186,    202,    200,    218,    198,    179,
4227         178,    214,    166,    170,    207,    199,    209,    206,
4228         204,    160,    212,    216,    215,    192,    175,    173,
4229         243,    172,    161,    190,    203,    189,    164,    230,
4230         167,    248,    227,    244,    242,    255,    241,    231,
4231         240,    253,    169,    210,    245,    237,    249,    247,
4232         239,    168,    252,    251,    254,    238,    223,    221,
4233         213,    225,    177,    197,    171,    196,    159,    4,
4234         5,      6,      8,      9,      10,     11,     12,     13,
4235         14,     15,     16,     17,     19,     20,     21,     22,
4236         23,     24,     25,     26,     27,     28,     30,     31,
4237         32,     33,     34,     35,     36,     37,     38,     39,
4238         41,     42,     43,     44,     45,     46,     47,     48,
4239         49,     50,     52,     53,     54,     55,     56,     57,
4240         58,     59,     60,     61,     63,     64,     65,     66,
4241         67,     68,     69,     70,     71,     72,     74,     75,
4242         76,     77,     78,     79,     80,     81,     82,     83,
4243         86,     87,     88,     89,     90,     91,     92,     93,
4244         94,     95,     97,     98,     99,     100,    101,    102,
4245         103,    104,    105,    106,    108,    109,    110,    111,
4246         112,    113,    114,    115,    116,    117,    119,    120,
4247         121,    122,    123,    124,    125,    126,    127,    128,
4248         130,    131,    132,    133,    134,    135,    136,    137,
4249         138,    139,    141,    142,    143,    144,    145,    146
4250 };
4251 #endif
4252 #else
4253 EXTCONST unsigned char PL_freq[];
4254 #endif
4255
4256 #ifdef DEBUGGING
4257 #ifdef DOINIT
4258 EXTCONST char* const PL_block_type[] = {
4259         "NULL",
4260         "SUB",
4261         "EVAL",
4262         "LOOP",
4263         "SUBST",
4264         "BLOCK",
4265         "FORMAT",
4266         "GIVEN",
4267         "WHEN"
4268 };
4269 #else
4270 EXTCONST char* PL_block_type[];
4271 #endif
4272 #endif
4273
4274 END_EXTERN_C
4275
4276 /*****************************************************************************/
4277 /* This lexer/parser stuff is currently global since yacc is hard to reenter */
4278 /*****************************************************************************/
4279 /* XXX This needs to be revisited, since BEGIN makes yacc re-enter... */
4280
4281 #ifdef __Lynx__
4282 /* LynxOS defines these in scsi.h which is included via ioctl.h */
4283 #ifdef FORMAT
4284 #undef FORMAT
4285 #endif
4286 #ifdef SPACE
4287 #undef SPACE
4288 #endif
4289 #endif
4290
4291 #define LEX_NOTPARSING          11      /* borrowed from toke.c */
4292
4293 typedef enum {
4294     XOPERATOR,
4295     XTERM,
4296     XREF,
4297     XSTATE,
4298     XBLOCK,
4299     XATTRBLOCK,
4300     XATTRTERM,
4301     XTERMBLOCK,
4302     XTERMORDORDOR /* evil hack */
4303     /* update exp_name[] in toke.c if adding to this enum */
4304 } expectation;
4305
4306 enum {          /* pass one of these to get_vtbl */
4307     want_vtbl_sv,
4308     want_vtbl_env,
4309     want_vtbl_envelem,
4310     want_vtbl_sig,
4311     want_vtbl_sigelem,
4312     want_vtbl_pack,
4313     want_vtbl_packelem,
4314     want_vtbl_dbline,
4315     want_vtbl_isa,
4316     want_vtbl_isaelem,
4317     want_vtbl_arylen,
4318     want_vtbl_glob,
4319     want_vtbl_mglob,
4320     want_vtbl_nkeys,
4321     want_vtbl_taint,
4322     want_vtbl_substr,
4323     want_vtbl_vec,
4324     want_vtbl_pos,
4325     want_vtbl_bm,
4326     want_vtbl_fm,
4327     want_vtbl_uvar,
4328     want_vtbl_defelem,
4329     want_vtbl_regexp,
4330     want_vtbl_collxfrm,
4331     want_vtbl_amagic,
4332     want_vtbl_amagicelem,
4333     want_vtbl_regdata,
4334     want_vtbl_regdatum,
4335     want_vtbl_backref,
4336     want_vtbl_utf8,
4337     want_vtbl_symtab,
4338     want_vtbl_arylen_p,
4339     want_vtbl_hintselem
4340 };
4341
4342
4343 /* Hints are now stored in a dedicated U32, so the bottom 8 bits are no longer
4344    special and there is no need for HINT_PRIVATE_MASK for COPs
4345    However, bitops store HINT_INTEGER in their op_private.  */
4346 #define HINT_INTEGER            0x00000001 /* integer pragma */
4347 #define HINT_STRICT_REFS        0x00000002 /* strict pragma */
4348 #define HINT_LOCALE             0x00000004 /* locale pragma */
4349 #define HINT_BYTES              0x00000008 /* bytes pragma */
4350 #define HINT_ARYBASE            0x00000010 /* $[ is non-zero */
4351                                 /* Note: 20,40,80 used for NATIVE_HINTS */
4352                                 /* currently defined by vms/vmsish.h */
4353
4354 #define HINT_BLOCK_SCOPE        0x00000100
4355 #define HINT_STRICT_SUBS        0x00000200 /* strict pragma */
4356 #define HINT_STRICT_VARS        0x00000400 /* strict pragma */
4357
4358 /* The HINT_NEW_* constants are used by the overload pragma */
4359 #define HINT_NEW_INTEGER        0x00001000
4360 #define HINT_NEW_FLOAT          0x00002000
4361 #define HINT_NEW_BINARY         0x00004000
4362 #define HINT_NEW_STRING         0x00008000
4363 #define HINT_NEW_RE             0x00010000
4364 #define HINT_LOCALIZE_HH        0x00020000 /* %^H needs to be copied */
4365 #define HINT_LEXICAL_IO         0x00040000 /* ${^OPEN} is set */
4366
4367 #define HINT_RE_TAINT           0x00100000 /* re pragma */
4368 #define HINT_RE_EVAL            0x00200000 /* re pragma */
4369
4370 #define HINT_FILETEST_ACCESS    0x00400000 /* filetest pragma */
4371 #define HINT_UTF8               0x00800000 /* utf8 pragma */
4372
4373 /* assertions pragma, stored in $^H{assertions} */
4374 #define HINT_ASSERTING          0x00000001
4375 #define HINT_ASSERTIONSSEEN     0x00000002
4376
4377 /* The following are stored in $^H{sort}, not in PL_hints */
4378 #define HINT_SORT_SORT_BITS     0x000000FF /* allow 256 different ones */
4379 #define HINT_SORT_QUICKSORT     0x00000001
4380 #define HINT_SORT_MERGESORT     0x00000002
4381 #define HINT_SORT_STABLE        0x00000100 /* sort styles (currently one) */
4382
4383 /* Various states of the input record separator SV (rs) */
4384 #define RsSNARF(sv)   (! SvOK(sv))
4385 #define RsSIMPLE(sv)  (SvOK(sv) && (! SvPOK(sv) || SvCUR(sv)))
4386 #define RsPARA(sv)    (SvPOK(sv) && ! SvCUR(sv))
4387 #define RsRECORD(sv)  (SvROK(sv) && (SvIV(SvRV(sv)) > 0))
4388
4389 /* A struct for keeping various DEBUGGING related stuff,
4390  * neatly packed.  Currently only scratch variables for
4391  * constructing debug output are included.  Needed always,
4392  * not just when DEBUGGING, though, because of the re extension. c*/
4393 struct perl_debug_pad {
4394   SV pad[3];
4395 };
4396
4397 #define PERL_DEBUG_PAD(i)       &(PL_debug_pad.pad[i])
4398 #define PERL_DEBUG_PAD_ZERO(i)  (SvPVX(PERL_DEBUG_PAD(i))[0] = 0, \
4399         (((XPV*) SvANY(PERL_DEBUG_PAD(i)))->xpv_cur = 0), \
4400         PERL_DEBUG_PAD(i))
4401
4402 /* Enable variables which are pointers to functions */
4403 typedef void (CPERLscope(*peep_t))(pTHX_ OP* o);
4404 typedef regexp*(CPERLscope(*regcomp_t)) (pTHX_ char* exp, char* xend, PMOP* pm);
4405 typedef I32 (CPERLscope(*regexec_t)) (pTHX_ regexp* prog, char* stringarg,
4406                                       char* strend, char* strbeg, I32 minend,
4407                                       SV* screamer, void* data, U32 flags);
4408 typedef char* (CPERLscope(*re_intuit_start_t)) (pTHX_ regexp *prog, SV *sv,
4409                                                 char *strpos, char *strend,
4410                                                 U32 flags,
4411                                                 struct re_scream_pos_data_s *d);
4412 typedef SV*     (CPERLscope(*re_intuit_string_t)) (pTHX_ regexp *prog);
4413 typedef void    (CPERLscope(*regfree_t)) (pTHX_ struct regexp* r);
4414 typedef regexp*(CPERLscope(*regdupe_t)) (pTHX_ const regexp* r, CLONE_PARAMS *param);
4415
4416 typedef void (*DESTRUCTORFUNC_NOCONTEXT_t) (void*);
4417 typedef void (*DESTRUCTORFUNC_t) (pTHX_ void*);
4418 typedef void (*SVFUNC_t) (pTHX_ SV*);
4419 typedef I32  (*SVCOMPARE_t) (pTHX_ SV*, SV*);
4420 typedef void (*XSINIT_t) (pTHX);
4421 typedef void (*ATEXIT_t) (pTHX_ void*);
4422 typedef void (*XSUBADDR_t) (pTHX_ CV *);
4423
4424 /* Set up PERLVAR macros for populating structs */
4425 #define PERLVAR(var,type) type var;
4426 #define PERLVARA(var,n,type) type var[n];
4427 #define PERLVARI(var,type,init) type var;
4428 #define PERLVARIC(var,type,init) type var;
4429 #define PERLVARISC(var,init) const char var[sizeof(init)];
4430
4431 typedef OP* (CPERLscope(*Perl_ppaddr_t))(pTHX);
4432 typedef OP* (CPERLscope(*Perl_check_t)) (pTHX_ OP*);
4433
4434 /* Interpreter exitlist entry */
4435 typedef struct exitlistentry {
4436     void (*fn) (pTHX_ void*);
4437     void *ptr;
4438 } PerlExitListEntry;
4439
4440 /* if you only have signal() and it resets on each signal, FAKE_PERSISTENT_SIGNAL_HANDLERS fixes */
4441 /* These have to be before perlvars.h */
4442 #if !defined(HAS_SIGACTION) && defined(VMS)
4443 #  define  FAKE_PERSISTENT_SIGNAL_HANDLERS
4444 #endif
4445 /* if we're doing kill() with sys$sigprc on VMS, FAKE_DEFAULT_SIGNAL_HANDLERS */
4446 #if defined(KILL_BY_SIGPRC)
4447 #  define  FAKE_DEFAULT_SIGNAL_HANDLERS
4448 #endif
4449
4450 #ifdef PERL_GLOBAL_STRUCT
4451 struct perl_vars {
4452 #  include "perlvars.h"
4453 };
4454
4455 #  ifdef PERL_CORE
4456 #    ifndef PERL_GLOBAL_STRUCT_PRIVATE
4457 EXT struct perl_vars PL_Vars;
4458 EXT struct perl_vars *PL_VarsPtr INIT(&PL_Vars);
4459 #      undef PERL_GET_VARS
4460 #      define PERL_GET_VARS() PL_VarsPtr
4461 #    endif /* !PERL_GLOBAL_STRUCT_PRIVATE */
4462 #  else /* PERL_CORE */
4463 #    if !defined(__GNUC__) || !defined(WIN32)
4464 EXT
4465 #    endif /* WIN32 */
4466 struct perl_vars *PL_VarsPtr;
4467 #    define PL_Vars (*((PL_VarsPtr) \
4468                        ? PL_VarsPtr : (PL_VarsPtr = Perl_GetVars(aTHX))))
4469 #  endif /* PERL_CORE */
4470 #endif /* PERL_GLOBAL_STRUCT */
4471
4472 #if defined(MULTIPLICITY)
4473 /* If we have multiple interpreters define a struct
4474    holding variables which must be per-interpreter
4475    If we don't have threads anything that would have
4476    be per-thread is per-interpreter.
4477 */
4478
4479 struct interpreter {
4480 #  include "thrdvar.h"
4481 #  include "intrpvar.h"
4482 /*
4483  * The following is a buffer where new variables must
4484  * be defined to maintain binary compatibility with previous versions
4485  */
4486 PERLVARA(object_compatibility,30,       char)
4487 };
4488
4489 #else
4490 struct interpreter {
4491     char broiled;
4492 };
4493 #endif /* MULTIPLICITY */
4494
4495 typedef void *Thread;
4496
4497 /* Done with PERLVAR macros for now ... */
4498 #undef PERLVAR
4499 #undef PERLVARA
4500 #undef PERLVARI
4501 #undef PERLVARIC
4502 #undef PERLVARISC
4503
4504 struct tempsym; /* defined in pp_pack.c */
4505
4506 #include "thread.h"
4507 #include "pp.h"
4508
4509 #ifndef PERL_CALLCONV
4510 #  ifdef __cplusplus
4511 #    define PERL_CALLCONV extern "C"
4512 #  else
4513 #    define PERL_CALLCONV
4514 #  endif
4515 #endif
4516 #undef PERL_CKDEF
4517 #undef PERL_PPDEF
4518 #define PERL_CKDEF(s)   PERL_CALLCONV OP *s (pTHX_ OP *o);
4519 #define PERL_PPDEF(s)   PERL_CALLCONV OP *s (pTHX);
4520
4521 #include "proto.h"
4522
4523 /* this has structure inits, so it cannot be included before here */
4524 #include "opcode.h"
4525
4526 /* The following must follow proto.h as #defines mess up syntax */
4527
4528 #if !defined(PERL_FOR_X2P)
4529 #  include "embedvar.h"
4530 #endif
4531 #ifndef PERL_MAD
4532 #  undef PL_madskills
4533 #  undef PL_xmlfp
4534 #  define PL_madskills 0
4535 #  define PL_xmlfp 0
4536 #endif
4537
4538 /* Now include all the 'global' variables
4539  * If we don't have threads or multiple interpreters
4540  * these include variables that would have been their struct-s
4541  */
4542
4543 #define PERLVAR(var,type) EXT type PL_##var;
4544 #define PERLVARA(var,n,type) EXT type PL_##var[n];
4545 #define PERLVARI(var,type,init) EXT type  PL_##var INIT(init);
4546 #define PERLVARIC(var,type,init) EXTCONST type PL_##var INIT(init);
4547 #define PERLVARISC(var,init) EXTCONST char PL_##var[sizeof(init)] INIT(init);
4548
4549 #if !defined(MULTIPLICITY)
4550 START_EXTERN_C
4551 #  include "intrpvar.h"
4552 #  include "thrdvar.h"
4553 END_EXTERN_C
4554 #endif
4555
4556 #if defined(WIN32)
4557 /* Now all the config stuff is setup we can include embed.h */
4558 #  include "embed.h"
4559 #  ifndef PERL_MAD
4560 #    undef op_getmad
4561 #    define op_getmad(arg,pegop,slot) NOOP
4562 #  endif
4563 #endif
4564
4565 #ifndef PERL_GLOBAL_STRUCT
4566 START_EXTERN_C
4567
4568 #  include "perlvars.h"
4569
4570 END_EXTERN_C
4571 #endif
4572
4573 #undef PERLVAR
4574 #undef PERLVARA
4575 #undef PERLVARI
4576 #undef PERLVARIC
4577
4578 START_EXTERN_C
4579
4580 /* PERL_GLOBAL_STRUCT_PRIVATE wants to keep global data like the
4581  * magic vtables const, but this is incompatible with SWIG which
4582  * does want to modify the vtables. */
4583 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
4584 #  define EXT_MGVTBL EXTCONST MGVTBL
4585 #else
4586 #  define EXT_MGVTBL EXT MGVTBL
4587 #endif
4588
4589 #ifdef DOINIT
4590 #  define MGVTBL_SET(var,a,b,c,d,e,f,g,h) EXT_MGVTBL var = {a,b,c,d,e,f,g,h}
4591 /* Like MGVTBL_SET but with the get magic having a const MG* */
4592 #  define MGVTBL_SET_CONST_MAGIC_GET(var,a,b,c,d,e,f,g,h) EXT_MGVTBL var \
4593     = {(int (*)(pTHX_ SV *, MAGIC *))a,b,c,d,e,f,g,h}
4594 #else
4595 #  define MGVTBL_SET(var,a,b,c,d,e,f,g,h) EXT_MGVTBL var
4596 #  define MGVTBL_SET_CONST_MAGIC_GET(var,a,b,c,d,e,f,g,h) EXT_MGVTBL var
4597 #endif
4598
4599 /* These all need to be 0, not NULL, as NULL can be (void*)0, which is a
4600  * pointer to data, whereas we're assigning pointers to functions, which are
4601  * not the same beast. ANSI doesn't allow the assignment from one to the other.
4602  * (although most, but not all, compilers are prepared to do it)
4603  */
4604 MGVTBL_SET(
4605     PL_vtbl_sv,
4606     MEMBER_TO_FPTR(Perl_magic_get),
4607     MEMBER_TO_FPTR(Perl_magic_set),
4608     MEMBER_TO_FPTR(Perl_magic_len),
4609     0,
4610     0,
4611     0,
4612     0,
4613     0
4614 );
4615
4616 MGVTBL_SET(
4617     PL_vtbl_env,
4618     0,
4619     MEMBER_TO_FPTR(Perl_magic_set_all_env),
4620     0,
4621     MEMBER_TO_FPTR(Perl_magic_clear_all_env),
4622     0,
4623     0,
4624     0,
4625     0
4626 );
4627
4628 MGVTBL_SET(
4629     PL_vtbl_envelem,
4630     0,
4631     MEMBER_TO_FPTR(Perl_magic_setenv),
4632     0,
4633     MEMBER_TO_FPTR(Perl_magic_clearenv),
4634     0,
4635     0,
4636     0,
4637     0
4638 );
4639
4640 /* For now, hints magic will also use vtbl_sig, because it is all 0  */
4641 MGVTBL_SET(
4642     PL_vtbl_sig,
4643     0,
4644     0,
4645     0,
4646     0,
4647     0,
4648     0,
4649     0,
4650     0
4651 );
4652
4653 #ifdef PERL_MICRO
4654 MGVTBL_SET(
4655     PL_vtbl_sigelem,
4656     0,
4657     0,
4658     0,
4659     0,
4660     0,
4661     0,
4662     0,
4663     0
4664 );
4665
4666 #else
4667 MGVTBL_SET(
4668     PL_vtbl_sigelem,
4669     MEMBER_TO_FPTR(Perl_magic_getsig),
4670     MEMBER_TO_FPTR(Perl_magic_setsig),
4671     0,
4672     MEMBER_TO_FPTR(Perl_magic_clearsig),
4673     0,
4674     0,
4675     0,
4676     0
4677 );
4678 #endif
4679
4680 MGVTBL_SET(
4681     PL_vtbl_pack,
4682     0,
4683     0,
4684     MEMBER_TO_FPTR(Perl_magic_sizepack),
4685     MEMBER_TO_FPTR(Perl_magic_wipepack),
4686     0,
4687     0,
4688     0,
4689     0
4690 );
4691
4692 MGVTBL_SET(
4693     PL_vtbl_packelem,
4694     MEMBER_TO_FPTR(Perl_magic_getpack),
4695     MEMBER_TO_FPTR(Perl_magic_setpack),
4696     0,
4697     MEMBER_TO_FPTR(Perl_magic_clearpack),
4698     0,
4699     0,
4700     0,
4701     0
4702 );
4703
4704 MGVTBL_SET(
4705     PL_vtbl_dbline,
4706     0,
4707     MEMBER_TO_FPTR(Perl_magic_setdbline),
4708     0,
4709     0,
4710     0,
4711     0,
4712     0,
4713     0
4714 );
4715
4716 MGVTBL_SET(
4717     PL_vtbl_isa,
4718     0,
4719     MEMBER_TO_FPTR(Perl_magic_setisa),
4720     0,
4721     MEMBER_TO_FPTR(Perl_magic_setisa),
4722     0,
4723     0,
4724     0,
4725     0
4726 );
4727
4728 MGVTBL_SET(
4729     PL_vtbl_isaelem,
4730     0,
4731     MEMBER_TO_FPTR(Perl_magic_setisa),
4732     0,
4733     0,
4734     0,
4735     0,
4736     0,
4737     0
4738 );
4739
4740 MGVTBL_SET_CONST_MAGIC_GET(
4741     PL_vtbl_arylen,
4742     MEMBER_TO_FPTR(Perl_magic_getarylen),
4743     MEMBER_TO_FPTR(Perl_magic_setarylen),
4744     0,
4745     0,
4746     0,
4747     0,
4748     0,
4749     0
4750 );
4751
4752 MGVTBL_SET(
4753     PL_vtbl_arylen_p,
4754     0,
4755     0,
4756     0,
4757     0,
4758     MEMBER_TO_FPTR(Perl_magic_freearylen_p),
4759     0,
4760     0,
4761     0
4762 );
4763
4764 MGVTBL_SET(
4765     PL_vtbl_mglob,
4766     0,
4767     MEMBER_TO_FPTR(Perl_magic_setmglob),
4768     0,
4769     0,
4770     0,
4771     0,
4772     0,
4773     0
4774 );
4775
4776 MGVTBL_SET(
4777     PL_vtbl_nkeys,
4778     MEMBER_TO_FPTR(Perl_magic_getnkeys),
4779     MEMBER_TO_FPTR(Perl_magic_setnkeys),
4780     0,
4781     0,
4782     0,
4783     0,
4784     0,
4785     0
4786 );
4787
4788 MGVTBL_SET(
4789     PL_vtbl_taint,
4790     MEMBER_TO_FPTR(Perl_magic_gettaint),
4791     MEMBER_TO_FPTR(Perl_magic_settaint),
4792     0,
4793     0,
4794     0,
4795     0,
4796     0,
4797     0
4798 );
4799
4800 MGVTBL_SET(
4801     PL_vtbl_substr,
4802     MEMBER_TO_FPTR(Perl_magic_getsubstr),
4803     MEMBER_TO_FPTR(Perl_magic_setsubstr),
4804     0,
4805     0,
4806     0,
4807     0,
4808     0,
4809     0
4810 );
4811
4812 MGVTBL_SET(
4813     PL_vtbl_vec,
4814     MEMBER_TO_FPTR(Perl_magic_getvec),
4815     MEMBER_TO_FPTR(Perl_magic_setvec),
4816     0,
4817     0,
4818     0,
4819     0,
4820     0,
4821     0
4822 );
4823
4824 MGVTBL_SET(
4825     PL_vtbl_pos,
4826     MEMBER_TO_FPTR(Perl_magic_getpos),
4827     MEMBER_TO_FPTR(Perl_magic_setpos),
4828     0,
4829     0,
4830     0,
4831     0,
4832     0,
4833     0
4834 );
4835
4836 MGVTBL_SET(
4837     PL_vtbl_bm,
4838     0,
4839     MEMBER_TO_FPTR(Perl_magic_setbm),
4840     0,
4841     0,
4842     0,
4843     0,
4844     0,
4845     0
4846 );
4847
4848 MGVTBL_SET(
4849     PL_vtbl_fm,
4850     0,
4851     MEMBER_TO_FPTR(Perl_magic_setfm),
4852     0,
4853     0,
4854     0,
4855     0,
4856     0,
4857     0
4858 );
4859
4860 MGVTBL_SET(
4861     PL_vtbl_uvar,
4862     MEMBER_TO_FPTR(Perl_magic_getuvar),
4863     MEMBER_TO_FPTR(Perl_magic_setuvar),
4864     0,
4865     0,
4866     0,
4867     0,
4868     0,
4869     0
4870 );
4871
4872 MGVTBL_SET(
4873     PL_vtbl_defelem,
4874     MEMBER_TO_FPTR(Perl_magic_getdefelem),
4875     MEMBER_TO_FPTR(Perl_magic_setdefelem),
4876     0,
4877     0,
4878     0,
4879     0,
4880     0,
4881     0
4882 );
4883
4884 MGVTBL_SET(
4885     PL_vtbl_regexp,
4886     0,
4887     MEMBER_TO_FPTR(Perl_magic_setregexp),
4888     0,
4889     0,
4890     MEMBER_TO_FPTR(Perl_magic_freeregexp),
4891     0,
4892     0,
4893     0
4894 );
4895
4896 MGVTBL_SET(
4897     PL_vtbl_regdata,
4898     0,
4899     0,
4900     MEMBER_TO_FPTR(Perl_magic_regdata_cnt),
4901     0,
4902     0,
4903     0,
4904     0,
4905     0
4906 );
4907
4908 MGVTBL_SET(
4909     PL_vtbl_regdatum,
4910     MEMBER_TO_FPTR(Perl_magic_regdatum_get),
4911     MEMBER_TO_FPTR(Perl_magic_regdatum_set),
4912     0,
4913     0,
4914     0,
4915     0,
4916     0,
4917     0
4918 );
4919
4920 MGVTBL_SET(
4921     PL_vtbl_amagic,
4922     0,
4923     MEMBER_TO_FPTR(Perl_magic_setamagic),
4924     0,
4925     0,
4926     MEMBER_TO_FPTR(Perl_magic_setamagic),
4927     0,
4928     0,
4929     0
4930 );
4931
4932 MGVTBL_SET(
4933     PL_vtbl_amagicelem,
4934     0,
4935     MEMBER_TO_FPTR(Perl_magic_setamagic),
4936     0,
4937     0,
4938     MEMBER_TO_FPTR(Perl_magic_setamagic),
4939     0,
4940     0,
4941     0
4942 );
4943
4944 MGVTBL_SET(
4945     PL_vtbl_backref,
4946     0,
4947     0,
4948     0,
4949     0,
4950     MEMBER_TO_FPTR(Perl_magic_killbackrefs),
4951     0,
4952     0,
4953     0
4954 );
4955
4956 MGVTBL_SET(
4957     PL_vtbl_ovrld,
4958     0,
4959     0,
4960     0,
4961     0,
4962     MEMBER_TO_FPTR(Perl_magic_freeovrld),
4963     0,
4964     0,
4965     0
4966 );
4967
4968 MGVTBL_SET(
4969     PL_vtbl_utf8,
4970     0,
4971     MEMBER_TO_FPTR(Perl_magic_setutf8),
4972     0,
4973     0,
4974     0,
4975     0,
4976     0,
4977     0
4978 );
4979 #ifdef USE_LOCALE_COLLATE
4980 MGVTBL_SET(
4981     PL_vtbl_collxfrm,
4982     0,
4983     MEMBER_TO_FPTR(Perl_magic_setcollxfrm),
4984     0,
4985     0,
4986     0,
4987     0,
4988     0,
4989     0
4990 );
4991 #endif
4992
4993 MGVTBL_SET(
4994     PL_vtbl_hintselem,
4995     0,
4996     MEMBER_TO_FPTR(Perl_magic_sethint),
4997     0,
4998     MEMBER_TO_FPTR(Perl_magic_clearhint),
4999     0,
5000     0,
5001     0,
5002     0
5003 );
5004
5005 #include "overload.h"
5006
5007 END_EXTERN_C
5008
5009 struct am_table {
5010   U32 flags;
5011   U32 was_ok_sub;
5012   long was_ok_am;
5013   CV* table[NofAMmeth];
5014   long fallback;
5015 };
5016 struct am_table_short {
5017   U32 flags;
5018   U32 was_ok_sub;
5019   long was_ok_am;
5020 };
5021 typedef struct am_table AMT;
5022 typedef struct am_table_short AMTS;
5023
5024 #define AMGfallNEVER    1
5025 #define AMGfallNO       2
5026 #define AMGfallYES      3
5027
5028 #define AMTf_AMAGIC             1
5029 #define AMTf_OVERLOADED         2
5030 #define AMT_AMAGIC(amt)         ((amt)->flags & AMTf_AMAGIC)
5031 #define AMT_AMAGIC_on(amt)      ((amt)->flags |= AMTf_AMAGIC)
5032 #define AMT_AMAGIC_off(amt)     ((amt)->flags &= ~AMTf_AMAGIC)
5033 #define AMT_OVERLOADED(amt)     ((amt)->flags & AMTf_OVERLOADED)
5034 #define AMT_OVERLOADED_on(amt)  ((amt)->flags |= AMTf_OVERLOADED)
5035 #define AMT_OVERLOADED_off(amt) ((amt)->flags &= ~AMTf_OVERLOADED)
5036
5037 #define StashHANDLER(stash,meth)        gv_handler((stash),CAT2(meth,_amg))
5038
5039 /*
5040  * some compilers like to redefine cos et alia as faster
5041  * (and less accurate?) versions called F_cos et cetera (Quidquid
5042  * latine dictum sit, altum viditur.)  This trick collides with
5043  * the Perl overloading (amg).  The following #defines fool both.
5044  */
5045
5046 #ifdef _FASTMATH
5047 #   ifdef atan2
5048 #       define F_atan2_amg  atan2_amg
5049 #   endif
5050 #   ifdef cos
5051 #       define F_cos_amg    cos_amg
5052 #   endif
5053 #   ifdef exp
5054 #       define F_exp_amg    exp_amg
5055 #   endif
5056 #   ifdef log
5057 #       define F_log_amg    log_amg
5058 #   endif
5059 #   ifdef pow
5060 #       define F_pow_amg    pow_amg
5061 #   endif
5062 #   ifdef sin
5063 #       define F_sin_amg    sin_amg
5064 #   endif
5065 #   ifdef sqrt
5066 #       define F_sqrt_amg   sqrt_amg
5067 #   endif
5068 #endif /* _FASTMATH */
5069
5070 #define PERLDB_ALL              (PERLDBf_SUB    | PERLDBf_LINE  |       \
5071                                  PERLDBf_NOOPT  | PERLDBf_INTER |       \
5072                                  PERLDBf_SUBLINE| PERLDBf_SINGLE|       \
5073                                  PERLDBf_NAMEEVAL| PERLDBf_NAMEANON )
5074                                         /* No _NONAME, _GOTO, _ASSERTION */
5075 #define PERLDBf_SUB             0x01    /* Debug sub enter/exit */
5076 #define PERLDBf_LINE            0x02    /* Keep line # */
5077 #define PERLDBf_NOOPT           0x04    /* Switch off optimizations */
5078 #define PERLDBf_INTER           0x08    /* Preserve more data for
5079                                            later inspections  */
5080 #define PERLDBf_SUBLINE         0x10    /* Keep subr source lines */
5081 #define PERLDBf_SINGLE          0x20    /* Start with single-step on */
5082 #define PERLDBf_NONAME          0x40    /* For _SUB: no name of the subr */
5083 #define PERLDBf_GOTO            0x80    /* Report goto: call DB::goto */
5084 #define PERLDBf_NAMEEVAL        0x100   /* Informative names for evals */
5085 #define PERLDBf_NAMEANON        0x200   /* Informative names for anon subs */
5086 #define PERLDBf_ASSERTION       0x400   /* Debug assertion subs enter/exit */
5087
5088 #define PERLDB_SUB      (PL_perldb && (PL_perldb & PERLDBf_SUB))
5089 #define PERLDB_LINE     (PL_perldb && (PL_perldb & PERLDBf_LINE))
5090 #define PERLDB_NOOPT    (PL_perldb && (PL_perldb & PERLDBf_NOOPT))
5091 #define PERLDB_INTER    (PL_perldb && (PL_perldb & PERLDBf_INTER))
5092 #define PERLDB_SUBLINE  (PL_perldb && (PL_perldb & PERLDBf_SUBLINE))
5093 #define PERLDB_SINGLE   (PL_perldb && (PL_perldb & PERLDBf_SINGLE))
5094 #define PERLDB_SUB_NN   (PL_perldb && (PL_perldb & (PERLDBf_NONAME)))
5095 #define PERLDB_GOTO     (PL_perldb && (PL_perldb & PERLDBf_GOTO))
5096 #define PERLDB_NAMEEVAL (PL_perldb && (PL_perldb & PERLDBf_NAMEEVAL))
5097 #define PERLDB_NAMEANON (PL_perldb && (PL_perldb & PERLDBf_NAMEANON))
5098 #define PERLDB_ASSERTION (PL_perldb && (PL_perldb & PERLDBf_ASSERTION))
5099
5100 #ifdef USE_LOCALE_NUMERIC
5101
5102 #define SET_NUMERIC_STANDARD() \
5103         set_numeric_standard();
5104
5105 #define SET_NUMERIC_LOCAL() \
5106         set_numeric_local();
5107
5108 #define IN_LOCALE_RUNTIME       (CopHINTS_get(PL_curcop) & HINT_LOCALE)
5109 #define IN_LOCALE_COMPILETIME   (PL_hints & HINT_LOCALE)
5110
5111 #define IN_LOCALE \
5112         (IN_PERL_COMPILETIME ? IN_LOCALE_COMPILETIME : IN_LOCALE_RUNTIME)
5113
5114 #define STORE_NUMERIC_LOCAL_SET_STANDARD() \
5115         bool was_local = PL_numeric_local && IN_LOCALE; \
5116         if (was_local) SET_NUMERIC_STANDARD();
5117
5118 #define STORE_NUMERIC_STANDARD_SET_LOCAL() \
5119         bool was_standard = PL_numeric_standard && IN_LOCALE; \
5120         if (was_standard) SET_NUMERIC_LOCAL();
5121
5122 #define RESTORE_NUMERIC_LOCAL() \
5123         if (was_local) SET_NUMERIC_LOCAL();
5124
5125 #define RESTORE_NUMERIC_STANDARD() \
5126         if (was_standard) SET_NUMERIC_STANDARD();
5127
5128 #define Atof                            my_atof
5129
5130 #else /* !USE_LOCALE_NUMERIC */
5131
5132 #define SET_NUMERIC_STANDARD()          /**/
5133 #define SET_NUMERIC_LOCAL()             /**/
5134 #define IS_NUMERIC_RADIX(a, b)          (0)
5135 #define STORE_NUMERIC_LOCAL_SET_STANDARD()      /**/
5136 #define STORE_NUMERIC_STANDARD_SET_LOCAL()      /**/
5137 #define RESTORE_NUMERIC_LOCAL()         /**/
5138 #define RESTORE_NUMERIC_STANDARD()      /**/
5139 #define Atof                            my_atof
5140 #define IN_LOCALE_RUNTIME               0
5141
5142 #endif /* !USE_LOCALE_NUMERIC */
5143
5144 #if !defined(Strtol) && defined(USE_64_BIT_INT) && defined(IV_IS_QUAD) && QUADKIND == QUAD_IS_LONG_LONG
5145 #    ifdef __hpux
5146 #        define strtoll __strtoll       /* secret handshake */
5147 #    endif
5148 #    ifdef WIN64
5149 #        define strtoll _strtoi64       /* secret handshake */
5150 #    endif
5151 #   if !defined(Strtol) && defined(HAS_STRTOLL)
5152 #       define Strtol   strtoll
5153 #   endif
5154 #    if !defined(Strtol) && defined(HAS_STRTOQ)
5155 #       define Strtol   strtoq
5156 #    endif
5157 /* is there atoq() anywhere? */
5158 #endif
5159 #if !defined(Strtol) && defined(HAS_STRTOL)
5160 #   define Strtol       strtol
5161 #endif
5162 #ifndef Atol
5163 /* It would be more fashionable to use Strtol() to define atol()
5164  * (as is done for Atoul(), see below) but for backward compatibility
5165  * we just assume atol(). */
5166 #   if defined(USE_64_BIT_INT) && defined(IV_IS_QUAD) && QUADKIND == QUAD_IS_LONG_LONG && defined(HAS_ATOLL)
5167 #    ifdef WIN64
5168 #       define atoll    _atoi64         /* secret handshake */
5169 #    endif
5170 #       define Atol     atoll
5171 #   else
5172 #       define Atol     atol
5173 #   endif
5174 #endif
5175
5176 #if !defined(Strtoul) && defined(USE_64_BIT_INT) && defined(UV_IS_QUAD) && QUADKIND == QUAD_IS_LONG_LONG
5177 #    ifdef __hpux
5178 #        define strtoull __strtoull     /* secret handshake */
5179 #    endif
5180 #    ifdef WIN64
5181 #        define strtoull _strtoui64     /* secret handshake */
5182 #    endif
5183 #    if !defined(Strtoul) && defined(HAS_STRTOULL)
5184 #       define Strtoul  strtoull
5185 #    endif
5186 #    if !defined(Strtoul) && defined(HAS_STRTOUQ)
5187 #       define Strtoul  strtouq
5188 #    endif
5189 /* is there atouq() anywhere? */
5190 #endif
5191 #if !defined(Strtoul) && defined(HAS_STRTOUL)
5192 #   define Strtoul      strtoul
5193 #endif
5194 #if !defined(Strtoul) && defined(HAS_STRTOL) /* Last resort. */
5195 #   define Strtoul(s, e, b)     strchr((s), '-') ? ULONG_MAX : (unsigned long)strtol((s), (e), (b))
5196 #endif
5197 #ifndef Atoul
5198 #   define Atoul(s)     Strtoul(s, NULL, 10)
5199 #endif
5200
5201
5202 /* if these never got defined, they need defaults */
5203 #ifndef PERL_SET_CONTEXT
5204 #  define PERL_SET_CONTEXT(i)           PERL_SET_INTERP(i)
5205 #endif
5206
5207 #ifndef PERL_GET_CONTEXT
5208 #  define PERL_GET_CONTEXT              PERL_GET_INTERP
5209 #endif
5210
5211 #ifndef PERL_GET_THX
5212 #  define PERL_GET_THX                  ((void*)NULL)
5213 #endif
5214
5215 #ifndef PERL_SET_THX
5216 #  define PERL_SET_THX(t)               NOOP
5217 #endif
5218
5219 #ifndef PERL_SCRIPT_MODE
5220 #define PERL_SCRIPT_MODE "r"
5221 #endif
5222
5223 /*
5224  * Some operating systems are stingy with stack allocation,
5225  * so perl may have to guard against stack overflow.
5226  */
5227 #ifndef PERL_STACK_OVERFLOW_CHECK
5228 #define PERL_STACK_OVERFLOW_CHECK()  NOOP
5229 #endif
5230
5231 /*
5232  * Some nonpreemptive operating systems find it convenient to
5233  * check for asynchronous conditions after each op execution.
5234  * Keep this check simple, or it may slow down execution
5235  * massively.
5236  */
5237
5238 #ifndef PERL_MICRO
5239 #       ifndef PERL_ASYNC_CHECK
5240 #               define PERL_ASYNC_CHECK() if (PL_sig_pending) despatch_signals()
5241 #       endif
5242 #endif
5243
5244 #ifndef PERL_ASYNC_CHECK
5245 #   define PERL_ASYNC_CHECK()  NOOP
5246 #endif
5247
5248 /*
5249  * On some operating systems, a memory allocation may succeed,
5250  * but put the process too close to the system's comfort limit.
5251  * In this case, PERL_ALLOC_CHECK frees the pointer and sets
5252  * it to NULL.
5253  */
5254 #ifndef PERL_ALLOC_CHECK
5255 #define PERL_ALLOC_CHECK(p)  NOOP
5256 #endif
5257
5258 #ifdef HAS_SEM
5259 #   include <sys/ipc.h>
5260 #   include <sys/sem.h>
5261 #   ifndef HAS_UNION_SEMUN      /* Provide the union semun. */
5262     union semun {
5263         int             val;
5264         struct semid_ds *buf;
5265         unsigned short  *array;
5266     };
5267 #   endif
5268 #   ifdef USE_SEMCTL_SEMUN
5269 #       ifdef IRIX32_SEMUN_BROKEN_BY_GCC
5270             union gccbug_semun {
5271                 int             val;
5272                 struct semid_ds *buf;
5273                 unsigned short  *array;
5274                 char            __dummy[5];
5275             };
5276 #           define semun gccbug_semun
5277 #       endif
5278 #       define Semctl(id, num, cmd, semun) semctl(id, num, cmd, semun)
5279 #   else
5280 #       ifdef USE_SEMCTL_SEMID_DS
5281 #           ifdef EXTRA_F_IN_SEMUN_BUF
5282 #               define Semctl(id, num, cmd, semun) semctl(id, num, cmd, semun.buff)
5283 #           else
5284 #               define Semctl(id, num, cmd, semun) semctl(id, num, cmd, semun.buf)
5285 #           endif
5286 #       endif
5287 #   endif
5288 #endif
5289
5290 /*
5291  * Boilerplate macros for initializing and accessing interpreter-local
5292  * data from C.  All statics in extensions should be reworked to use
5293  * this, if you want to make the extension thread-safe.  See
5294  * ext/XS/APItest/APItest.xs for an example of the use of these macros,
5295  * and perlxs.pod for more.
5296  *
5297  * Code that uses these macros is responsible for the following:
5298  * 1. #define MY_CXT_KEY to a unique string, e.g.
5299  *    "DynaLoader::_guts" XS_VERSION
5300  *    XXX in the current implementation, this string is ignored.
5301  * 2. Declare a typedef named my_cxt_t that is a structure that contains
5302  *    all the data that needs to be interpreter-local.
5303  * 3. Use the START_MY_CXT macro after the declaration of my_cxt_t.
5304  * 4. Use the MY_CXT_INIT macro such that it is called exactly once
5305  *    (typically put in the BOOT: section).
5306  * 5. Use the members of the my_cxt_t structure everywhere as
5307  *    MY_CXT.member.
5308  * 6. Use the dMY_CXT macro (a declaration) in all the functions that
5309  *    access MY_CXT.
5310  */
5311
5312 #if defined(PERL_IMPLICIT_CONTEXT)
5313
5314 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
5315
5316 /* This must appear in all extensions that define a my_cxt_t structure,
5317  * right after the definition (i.e. at file scope).  The non-threads
5318  * case below uses it to declare the data as static. */
5319 #define START_MY_CXT
5320 #define MY_CXT_INDEX Perl_my_cxt_index(aTHX_ MY_CXT_KEY)
5321
5322 /* Creates and zeroes the per-interpreter data.
5323  * (We allocate my_cxtp in a Perl SV so that it will be released when
5324  * the interpreter goes away.) */
5325 #define MY_CXT_INIT \
5326         my_cxt_t *my_cxtp = \
5327             (my_cxt_t*)Perl_my_cxt_init(aTHX_ MY_CXT_KEY, sizeof(my_cxt_t))
5328 #define MY_CXT_INIT_INTERP(my_perl) \
5329         my_cxt_t *my_cxtp = \
5330             (my_cxt_t*)Perl_my_cxt_init(my_perl, MY_CXT_KEY, sizeof(my_cxt_t))
5331
5332 /* This declaration should be used within all functions that use the
5333  * interpreter-local data. */
5334 #define dMY_CXT \
5335         my_cxt_t *my_cxtp = (my_cxt_t *)PL_my_cxt_list[MY_CXT_INDEX]
5336 #define dMY_CXT_INTERP(my_perl) \
5337         my_cxt_t *my_cxtp = (my_cxt_t *)(my_perl)->Imy_cxt_list[MY_CXT_INDEX]
5338
5339 /* Clones the per-interpreter data. */
5340 #define MY_CXT_CLONE \
5341         my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\
5342         Copy(PL_my_cxt_list[MY_CXT_INDEX], my_cxtp, 1, my_cxt_t);\
5343         PL_my_cxt_list[MY_CXT_INDEX] = my_cxtp                          \
5344
5345 #else /* #ifdef PERL_GLOBAL_STRUCT_PRIVATE */
5346
5347 /* This must appear in all extensions that define a my_cxt_t structure,
5348  * right after the definition (i.e. at file scope).  The non-threads
5349  * case below uses it to declare the data as static. */
5350 #define START_MY_CXT static int my_cxt_index = -1;
5351
5352 /* This declaration should be used within all functions that use the
5353  * interpreter-local data. */
5354 #define dMY_CXT \
5355         my_cxt_t *my_cxtp = (my_cxt_t *)PL_my_cxt_list[my_cxt_index]
5356 #define dMY_CXT_INTERP(my_perl) \
5357         my_cxt_t *my_cxtp = (my_cxt_t *)(my_perl)->Imy_cxt_list[my_cxt_index]
5358
5359 /* Creates and zeroes the per-interpreter data.
5360  * (We allocate my_cxtp in a Perl SV so that it will be released when
5361  * the interpreter goes away.) */
5362 #define MY_CXT_INIT \
5363         my_cxt_t *my_cxtp = \
5364             (my_cxt_t*)Perl_my_cxt_init(aTHX_ &my_cxt_index, sizeof(my_cxt_t))
5365 #define MY_CXT_INIT_INTERP(my_perl) \
5366         my_cxt_t *my_cxtp = \
5367             (my_cxt_t*)Perl_my_cxt_init(my_perl, &my_cxt_index, sizeof(my_cxt_t))
5368
5369 /* Clones the per-interpreter data. */
5370 #define MY_CXT_CLONE \
5371         my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\
5372         Copy(PL_my_cxt_list[my_cxt_index], my_cxtp, 1, my_cxt_t);\
5373         PL_my_cxt_list[my_cxt_index] = my_cxtp                          \
5374
5375 #endif /* #ifdef PERL_GLOBAL_STRUCT_PRIVATE */
5376
5377 /* This macro must be used to access members of the my_cxt_t structure.
5378  * e.g. MYCXT.some_data */
5379 #define MY_CXT          (*my_cxtp)
5380
5381 /* Judicious use of these macros can reduce the number of times dMY_CXT
5382  * is used.  Use is similar to pTHX, aTHX etc. */
5383 #define pMY_CXT         my_cxt_t *my_cxtp
5384 #define pMY_CXT_        pMY_CXT,
5385 #define _pMY_CXT        ,pMY_CXT
5386 #define aMY_CXT         my_cxtp
5387 #define aMY_CXT_        aMY_CXT,
5388 #define _aMY_CXT        ,aMY_CXT
5389
5390 #else /* PERL_IMPLICIT_CONTEXT */
5391
5392 #define START_MY_CXT    static my_cxt_t my_cxt;
5393 #define dMY_CXT_SV      dNOOP
5394 #define dMY_CXT         dNOOP
5395 #define MY_CXT_INIT     NOOP
5396 #define MY_CXT_CLONE    NOOP
5397 #define MY_CXT          my_cxt
5398
5399 #define pMY_CXT         void
5400 #define pMY_CXT_
5401 #define _pMY_CXT
5402 #define aMY_CXT
5403 #define aMY_CXT_
5404 #define _aMY_CXT
5405
5406 #endif /* !defined(PERL_IMPLICIT_CONTEXT) */
5407
5408 #ifdef I_FCNTL
5409 #  include <fcntl.h>
5410 #endif
5411
5412 #ifdef __Lynx__
5413 #  include <fcntl.h>
5414 #endif
5415
5416 #ifdef I_SYS_FILE
5417 #  include <sys/file.h>
5418 #endif
5419
5420 #if defined(HAS_FLOCK) && !defined(HAS_FLOCK_PROTO)
5421 int flock(int fd, int op);
5422 #endif
5423
5424 #ifndef O_RDONLY
5425 /* Assume UNIX defaults */
5426 #    define O_RDONLY    0000
5427 #    define O_WRONLY    0001
5428 #    define O_RDWR      0002
5429 #    define O_CREAT     0100
5430 #endif
5431
5432 #ifndef O_BINARY
5433 #  define O_BINARY 0
5434 #endif
5435
5436 #ifndef O_TEXT
5437 #  define O_TEXT 0
5438 #endif
5439
5440 #if O_TEXT != O_BINARY
5441     /* If you have different O_TEXT and O_BINARY and you are a CLRF shop,
5442      * that is, you are somehow DOSish. */
5443 #   if defined(__BEOS__) || defined(__VOS__) || defined(__CYGWIN__)
5444     /* BeOS has O_TEXT != O_BINARY but O_TEXT and O_BINARY have no effect;
5445      * BeOS is always UNIXoid (LF), not DOSish (CRLF). */
5446     /* VOS has O_TEXT != O_BINARY, and they have effect,
5447      * but VOS always uses LF, never CRLF. */
5448     /* If you have O_TEXT different from your O_BINARY but you still are
5449      * not a CRLF shop. */
5450 #       undef PERLIO_USING_CRLF
5451 #   else
5452     /* If you really are DOSish. */
5453 #      define PERLIO_USING_CRLF 1
5454 #   endif
5455 #endif
5456
5457 #ifdef IAMSUID
5458
5459 #ifdef I_SYS_STATVFS
5460 #   if defined(PERL_SCO) && !defined(_SVID3)
5461 #       define _SVID3
5462 #   endif
5463 #   include <sys/statvfs.h>     /* for f?statvfs() */
5464 #endif
5465 #ifdef I_SYS_MOUNT
5466 #   include <sys/mount.h>       /* for *BSD f?statfs() */
5467 #endif
5468 #ifdef I_MNTENT
5469 #   include <mntent.h>          /* for getmntent() */
5470 #endif
5471 #ifdef I_SYS_STATFS
5472 #   include <sys/statfs.h>      /* for some statfs() */
5473 #endif
5474 #ifdef I_SYS_VFS
5475 #  ifdef __sgi
5476 #    define sv IRIX_sv          /* kludge: IRIX has an sv of its own */
5477 #  endif
5478 #    include <sys/vfs.h>        /* for some statfs() */
5479 #  ifdef __sgi
5480 #    undef IRIX_sv
5481 #  endif
5482 #endif
5483 #ifdef I_USTAT
5484 #   include <ustat.h>           /* for ustat() */
5485 #endif
5486
5487 #if !defined(PERL_MOUNT_NOSUID) && defined(MOUNT_NOSUID)
5488 #    define PERL_MOUNT_NOSUID MOUNT_NOSUID
5489 #endif
5490 #if !defined(PERL_MOUNT_NOSUID) && defined(MNT_NOSUID)
5491 #    define PERL_MOUNT_NOSUID MNT_NOSUID
5492 #endif
5493 #if !defined(PERL_MOUNT_NOSUID) && defined(MS_NOSUID)
5494 #   define PERL_MOUNT_NOSUID MS_NOSUID
5495 #endif
5496 #if !defined(PERL_MOUNT_NOSUID) && defined(M_NOSUID)
5497 #   define PERL_MOUNT_NOSUID M_NOSUID
5498 #endif
5499
5500 #if !defined(PERL_MOUNT_NOEXEC) && defined(MOUNT_NOEXEC)
5501 #    define PERL_MOUNT_NOEXEC MOUNT_NOEXEC
5502 #endif
5503 #if !defined(PERL_MOUNT_NOEXEC) && defined(MNT_NOEXEC)
5504 #    define PERL_MOUNT_NOEXEC MNT_NOEXEC
5505 #endif
5506 #if !defined(PERL_MOUNT_NOEXEC) && defined(MS_NOEXEC)
5507 #   define PERL_MOUNT_NOEXEC MS_NOEXEC
5508 #endif
5509 #if !defined(PERL_MOUNT_NOEXEC) && defined(M_NOEXEC)
5510 #   define PERL_MOUNT_NOEXEC M_NOEXEC
5511 #endif
5512
5513 #endif /* IAMSUID */
5514
5515 #ifdef I_LIBUTIL
5516 #   include <libutil.h>         /* setproctitle() in some FreeBSDs */
5517 #endif
5518
5519 #ifndef EXEC_ARGV_CAST
5520 #define EXEC_ARGV_CAST(x) x
5521 #endif
5522
5523 #define IS_NUMBER_IN_UV               0x01 /* number within UV range (maybe not
5524                                               int).  value returned in pointed-
5525                                               to UV */
5526 #define IS_NUMBER_GREATER_THAN_UV_MAX 0x02 /* pointed to UV undefined */
5527 #define IS_NUMBER_NOT_INT             0x04 /* saw . or E notation */
5528 #define IS_NUMBER_NEG                 0x08 /* leading minus sign */
5529 #define IS_NUMBER_INFINITY            0x10 /* this is big */
5530 #define IS_NUMBER_NAN                 0x20 /* this is not */
5531
5532 #define GROK_NUMERIC_RADIX(sp, send) grok_numeric_radix(sp, send)
5533
5534 /* Input flags: */
5535 #define PERL_SCAN_ALLOW_UNDERSCORES   0x01 /* grok_??? accept _ in numbers */
5536 #define PERL_SCAN_DISALLOW_PREFIX     0x02 /* grok_??? reject 0x in hex etc */
5537 #define PERL_SCAN_SILENT_ILLDIGIT     0x04 /* grok_??? not warn about illegal digits */
5538 /* Output flags: */
5539 #define PERL_SCAN_GREATER_THAN_UV_MAX 0x02 /* should this merge with above? */
5540
5541 /* to let user control profiling */
5542 #ifdef PERL_GPROF_CONTROL
5543 extern void moncontrol(int);
5544 #define PERL_GPROF_MONCONTROL(x) moncontrol(x)
5545 #else
5546 #define PERL_GPROF_MONCONTROL(x)
5547 #endif
5548
5549 #ifdef UNDER_CE
5550 #include "wince.h"
5551 #endif
5552
5553 /* ISO 6429 NEL - C1 control NExt Line */
5554 /* See http://www.unicode.org/unicode/reports/tr13/ */
5555 #ifdef EBCDIC   /* In EBCDIC NEL is just an alias for LF */
5556 #   if '^' == 95        /* CP 1047: MVS OpenEdition - OS/390 - z/OS */
5557 #       define NEXT_LINE_CHAR   0x15
5558 #   else                /* CDRA */
5559 #       define NEXT_LINE_CHAR   0x25
5560 #   endif
5561 #else
5562 #   define NEXT_LINE_CHAR       0x85
5563 #endif
5564
5565 /* The UTF-8 bytes of the Unicode LS and PS, U+2028 and U+2029 */
5566 #define UNICODE_LINE_SEPA_0     0xE2
5567 #define UNICODE_LINE_SEPA_1     0x80
5568 #define UNICODE_LINE_SEPA_2     0xA8
5569 #define UNICODE_PARA_SEPA_0     0xE2
5570 #define UNICODE_PARA_SEPA_1     0x80
5571 #define UNICODE_PARA_SEPA_2     0xA9
5572
5573 #ifndef PIPESOCK_MODE
5574 #  define PIPESOCK_MODE
5575 #endif
5576
5577 #ifndef SOCKET_OPEN_MODE
5578 #  define SOCKET_OPEN_MODE      PIPESOCK_MODE
5579 #endif
5580
5581 #ifndef PIPE_OPEN_MODE
5582 #  define PIPE_OPEN_MODE        PIPESOCK_MODE
5583 #endif
5584
5585 #define PERL_MAGIC_UTF8_CACHESIZE       2
5586
5587 #define PERL_UNICODE_STDIN_FLAG                 0x0001
5588 #define PERL_UNICODE_STDOUT_FLAG                0x0002
5589 #define PERL_UNICODE_STDERR_FLAG                0x0004
5590 #define PERL_UNICODE_IN_FLAG                    0x0008
5591 #define PERL_UNICODE_OUT_FLAG                   0x0010
5592 #define PERL_UNICODE_ARGV_FLAG                  0x0020
5593 #define PERL_UNICODE_LOCALE_FLAG                0x0040
5594 #define PERL_UNICODE_WIDESYSCALLS_FLAG          0x0080 /* for Sarathy */
5595 #define PERL_UNICODE_UTF8CACHEASSERT_FLAG       0x0100
5596
5597 #define PERL_UNICODE_STD_FLAG           \
5598         (PERL_UNICODE_STDIN_FLAG        | \
5599          PERL_UNICODE_STDOUT_FLAG       | \
5600          PERL_UNICODE_STDERR_FLAG)
5601
5602 #define PERL_UNICODE_INOUT_FLAG         \
5603         (PERL_UNICODE_IN_FLAG   | \
5604          PERL_UNICODE_OUT_FLAG)
5605
5606 #define PERL_UNICODE_DEFAULT_FLAGS      \
5607         (PERL_UNICODE_STD_FLAG          | \
5608          PERL_UNICODE_INOUT_FLAG        | \
5609          PERL_UNICODE_LOCALE_FLAG)
5610
5611 #define PERL_UNICODE_ALL_FLAGS                  0x01ff
5612
5613 #define PERL_UNICODE_STDIN                      'I'
5614 #define PERL_UNICODE_STDOUT                     'O'
5615 #define PERL_UNICODE_STDERR                     'E'
5616 #define PERL_UNICODE_STD                        'S'
5617 #define PERL_UNICODE_IN                         'i'
5618 #define PERL_UNICODE_OUT                        'o'
5619 #define PERL_UNICODE_INOUT                      'D'
5620 #define PERL_UNICODE_ARGV                       'A'
5621 #define PERL_UNICODE_LOCALE                     'L'
5622 #define PERL_UNICODE_WIDESYSCALLS               'W'
5623 #define PERL_UNICODE_UTF8CACHEASSERT            'a'
5624
5625 #define PERL_SIGNALS_UNSAFE_FLAG        0x0001
5626
5627 /* From sigaction(2) (FreeBSD man page):
5628  * | Signal routines normally execute with the signal that
5629  * | caused their invocation blocked, but other signals may
5630  * | yet occur.
5631  * Emulation of this behavior (from within Perl) is enabled
5632  * by defining PERL_BLOCK_SIGNALS.
5633  */
5634 #define PERL_BLOCK_SIGNALS
5635
5636 #if defined(HAS_SIGPROCMASK) && defined(PERL_BLOCK_SIGNALS)
5637 #   define PERL_BLOCKSIG_ADD(set,sig) \
5638         sigset_t set; sigemptyset(&(set)); sigaddset(&(set), sig)
5639 #   define PERL_BLOCKSIG_BLOCK(set) \
5640         sigprocmask(SIG_BLOCK, &(set), NULL)
5641 #   define PERL_BLOCKSIG_UNBLOCK(set) \
5642         sigprocmask(SIG_UNBLOCK, &(set), NULL)
5643 #endif /* HAS_SIGPROCMASK && PERL_BLOCK_SIGNALS */
5644
5645 /* How about the old style of sigblock()? */
5646
5647 #ifndef PERL_BLOCKSIG_ADD
5648 #   define PERL_BLOCKSIG_ADD(set, sig)  NOOP
5649 #endif
5650 #ifndef PERL_BLOCKSIG_BLOCK
5651 #   define PERL_BLOCKSIG_BLOCK(set)     NOOP
5652 #endif
5653 #ifndef PERL_BLOCKSIG_UNBLOCK
5654 #   define PERL_BLOCKSIG_UNBLOCK(set)   NOOP
5655 #endif
5656
5657 /* Use instead of abs() since abs() forces its argument to be an int,
5658  * but also beware since this evaluates its argument twice, so no x++. */
5659 #define PERL_ABS(x) ((x) < 0 ? -(x) : (x))
5660
5661 #if defined(__DECC) && defined(__osf__)
5662 #pragma message disable (mainparm) /* Perl uses the envp in main(). */
5663 #endif
5664
5665 #define do_open(g, n, l, a, rm, rp, sf) \
5666         do_openn(g, n, l, a, rm, rp, sf, (SV **) NULL, 0)
5667 #ifdef PERL_DEFAULT_DO_EXEC3_IMPLEMENTATION
5668 #  define do_exec(cmd)                  do_exec3(cmd,0,0)
5669 #endif
5670 #ifdef OS2
5671 #  define do_aexec                      Perl_do_aexec
5672 #else
5673 #  define do_aexec(really, mark,sp)     do_aexec5(really, mark, sp, 0, 0)
5674 #endif
5675
5676 #if defined(OEMVS)
5677 #define NO_ENV_ARRAY_IN_MAIN
5678 #endif
5679
5680 /* and finally... */
5681 #define PERL_PATCHLEVEL_H_IMPLICIT
5682 #include "patchlevel.h"
5683 #undef PERL_PATCHLEVEL_H_IMPLICIT
5684
5685 /* These are used by Perl_pv_escape() and Perl_pv_pretty() 
5686  * are here so that they are available throughout the core 
5687  * NOTE that even though some are for _escape and some for _pretty
5688  * there must not be any clashes as the flags from _pretty are
5689  * passed straight through to _escape.
5690  */
5691
5692 #define PERL_PV_ESCAPE_QUOTE        0x0001
5693 #define PERL_PV_PRETTY_QUOTE        PERL_PV_ESCAPE_QUOTE
5694
5695
5696 #define PERL_PV_PRETTY_ELIPSES      0x0002
5697 #define PERL_PV_PRETTY_LTGT         0x0004
5698
5699 #define PERL_PV_ESCAPE_FIRSTCHAR    0x0008
5700
5701 #define PERL_PV_ESCAPE_UNI          0x0100     
5702 #define PERL_PV_ESCAPE_UNI_DETECT   0x0200
5703
5704 #define PERL_PV_ESCAPE_ALL          0x1000
5705 #define PERL_PV_ESCAPE_NOBACKSLASH  0x2000
5706 #define PERL_PV_ESCAPE_NOCLEAR      0x4000
5707 #define PERL_PV_ESCAPE_RE           0x8000
5708
5709 /* used by pv_display in dump.c*/
5710 #define PERL_PV_PRETTY_DUMP  PERL_PV_PRETTY_ELIPSES|PERL_PV_PRETTY_QUOTE
5711 #define PERL_PV_PRETTY_REGPROP PERL_PV_PRETTY_ELIPSES|PERL_PV_PRETTY_LTGT|PERL_PV_ESCAPE_RE
5712
5713 /*
5714
5715    (KEEP THIS LAST IN perl.h!)
5716
5717    Mention
5718
5719    NV_PRESERVES_UV
5720
5721    HAS_MKSTEMP
5722    HAS_MKSTEMPS
5723    HAS_MKDTEMP
5724
5725    HAS_GETCWD
5726
5727    HAS_MMAP
5728    HAS_MPROTECT
5729    HAS_MSYNC
5730    HAS_MADVISE
5731    HAS_MUNMAP
5732    I_SYSMMAN
5733    Mmap_t
5734
5735    NVef
5736    NVff
5737    NVgf
5738
5739    HAS_UALARM
5740    HAS_USLEEP
5741
5742    HAS_SETITIMER
5743    HAS_GETITIMER
5744
5745    HAS_SENDMSG
5746    HAS_RECVMSG
5747    HAS_READV
5748    HAS_WRITEV
5749    I_SYSUIO
5750    HAS_STRUCT_MSGHDR
5751    HAS_STRUCT_CMSGHDR
5752
5753    HAS_NL_LANGINFO
5754
5755    HAS_DIRFD
5756
5757    so that Configure picks them up.
5758
5759    (KEEP THIS LAST IN perl.h!)
5760
5761 */
5762
5763 #endif /* Include guard */
5764