[patch] small change
[p5sagit/p5-mst-13.2.git] / perl.h
1 /*    perl.h
2  *
3  *    Copyright (c) 1987-2002, Larry Wall
4  *
5  *    You may distribute under the terms of either the GNU General Public
6  *    License or the Artistic License, as specified in the README file.
7  *
8  */
9
10 #ifndef H_PERL
11 #define H_PERL 1
12
13 #ifdef PERL_FOR_X2P
14 /*
15  * This file is being used for x2p stuff.
16  * Above symbol is defined via -D in 'x2p/Makefile.SH'
17  * Decouple x2p stuff from some of perls more extreme eccentricities.
18  */
19 #undef MULTIPLICITY
20 #undef USE_STDIO
21 #define USE_STDIO
22 #endif /* PERL_FOR_X2P */
23
24 #if defined(DGUX)
25 #include <sys/fcntl.h>
26 #endif
27
28 #define VOIDUSED 1
29 #ifdef PERL_MICRO
30 #   include "uconfig.h"
31 #else
32 #   include "config.h"
33 #endif
34
35 #if defined(USE_ITHREADS) && defined(USE_5005THREADS)
36 #  include "error: USE_ITHREADS and USE_5005THREADS are incompatible"
37 #endif
38
39 /* XXX This next guard can disappear if the sources are revised
40    to use USE_5005THREADS throughout. -- A.D  1/6/2000
41 */
42 #if defined(USE_ITHREADS) && defined(USE_5005THREADS)
43 #  include "error: USE_ITHREADS and USE_5005THREADS are incompatible"
44 #endif
45
46 /* See L<perlguts/"The Perl API"> for detailed notes on
47  * PERL_IMPLICIT_CONTEXT and PERL_IMPLICIT_SYS */
48
49 /* Note that from here --> to <-- the same logic is
50  * repeated in makedef.pl, so be certain to update
51  * both places when editing. */
52
53 #ifdef PERL_IMPLICIT_SYS
54 /* PERL_IMPLICIT_SYS implies PerlMemShared != PerlMem
55    so use slab allocator to avoid lots of MUTEX overhead
56  */
57 #  ifndef PL_OP_SLAB_ALLOC
58 #    define PL_OP_SLAB_ALLOC
59 #  endif
60 #endif
61
62 #ifdef USE_ITHREADS
63 #  if !defined(MULTIPLICITY)
64 #    define MULTIPLICITY
65 #  endif
66 #endif
67
68 #ifdef USE_5005THREADS
69 #  ifndef PERL_IMPLICIT_CONTEXT
70 #    define PERL_IMPLICIT_CONTEXT
71 #  endif
72 #endif
73
74 #if defined(MULTIPLICITY)
75 #  ifndef PERL_IMPLICIT_CONTEXT
76 #    define PERL_IMPLICIT_CONTEXT
77 #  endif
78 #endif
79
80 /* Use the reentrant APIs like localtime_r and getpwent_r */
81 /* Win32 has naturally threadsafe libraries, no need to use any _r variants. */
82 #if defined(USE_ITHREADS) && !defined(USE_REENTRANT_API) && !defined(NETWARE) && !defined(WIN32) && !defined(__APPLE__)
83 #   define USE_REENTRANT_API
84 #endif
85
86 /* <--- here ends the logic shared by perl.h and makedef.pl */
87
88 #ifdef PERL_IMPLICIT_CONTEXT
89 #  ifdef USE_5005THREADS
90 struct perl_thread;
91 #    define pTHX        register struct perl_thread *thr PERL_UNUSED_DECL
92 #    define aTHX        thr
93 #    define dTHR        dNOOP /* only backward compatibility */
94 #    define dTHXa(a)    pTHX = (struct perl_thread*)a
95 #  else
96 #    ifndef MULTIPLICITY
97 #      define MULTIPLICITY
98 #    endif
99 #    define pTHX        register PerlInterpreter *my_perl PERL_UNUSED_DECL
100 #    define aTHX        my_perl
101 #    define dTHXa(a)    pTHX = (PerlInterpreter*)a
102 #  endif
103 #  define dTHX          pTHX = PERL_GET_THX
104 #  define pTHX_         pTHX,
105 #  define aTHX_         aTHX,
106 #  define pTHX_1        2       
107 #  define pTHX_2        3
108 #  define pTHX_3        4
109 #  define pTHX_4        5
110 #endif
111
112 #define STATIC static
113 #define CPERLscope(x) x
114 #define CPERLarg void
115 #define CPERLarg_
116 #define _CPERLarg
117 #define PERL_OBJECT_THIS
118 #define _PERL_OBJECT_THIS
119 #define PERL_OBJECT_THIS_
120 #define CALL_FPTR(fptr) (*fptr)
121
122 #define CALLRUNOPS  CALL_FPTR(PL_runops)
123 #define CALLREGCOMP CALL_FPTR(PL_regcompp)
124 #define CALLREGEXEC CALL_FPTR(PL_regexecp)
125 #define CALLREG_INTUIT_START CALL_FPTR(PL_regint_start)
126 #define CALLREG_INTUIT_STRING CALL_FPTR(PL_regint_string)
127 #define CALLREGFREE CALL_FPTR(PL_regfree)
128
129 #ifdef PERL_FLEXIBLE_EXCEPTIONS
130 #  define CALLPROTECT CALL_FPTR(PL_protect)
131 #endif
132
133 #ifdef HASATTRIBUTE
134 #  if defined(__GNUC__) && defined(__cplusplus)
135 #    define PERL_UNUSED_DECL
136 #  else
137 #    define PERL_UNUSED_DECL __attribute__((unused))
138 #  endif
139 #else
140 #  define PERL_UNUSED_DECL
141 #endif
142
143 /* gcc -Wall:
144  * for silencing unused variables that are actually used most of the time,
145  * but we cannot quite get rid of, such `ax' in PPCODE+noargs xsubs
146  */
147 #define PERL_UNUSED_VAR(var) if (0) var = var
148
149 #define NOOP (void)0
150 #define dNOOP extern int Perl___notused PERL_UNUSED_DECL
151
152 #ifndef pTHX
153 #  define pTHX          void
154 #  define pTHX_
155 #  define aTHX
156 #  define aTHX_
157 #  define dTHXa(a)      dNOOP
158 #  define dTHX          dNOOP
159 #  define pTHX_1        1       
160 #  define pTHX_2        2
161 #  define pTHX_3        3
162 #  define pTHX_4        4
163 #endif
164
165 /* these are only defined for compatibility; should not be used internally */
166 #if !defined(pTHXo) && !defined(PERL_CORE)
167 #  define pTHXo         pTHX
168 #  define pTHXo_        pTHX_
169 #  define aTHXo         aTHX
170 #  define aTHXo_        aTHX_
171 #  define dTHXo         dTHX
172 #  define dTHXoa(x)     dTHXa(x)
173 #endif
174
175 #ifndef pTHXx
176 #  define pTHXx         register PerlInterpreter *my_perl
177 #  define pTHXx_        pTHXx,
178 #  define aTHXx         my_perl
179 #  define aTHXx_        aTHXx,
180 #  define dTHXx         dTHX
181 #endif
182
183 /* Under PERL_IMPLICIT_SYS (used in Windows for fork emulation)
184  * PerlIO_foo() expands to PL_StdIO->pFOO(PL_StdIO, ...).
185  * dTHXs is therefore needed for all functions using PerlIO_foo(). */
186 #ifdef PERL_IMPLICIT_SYS
187 #  define dTHXs         dTHX
188 #else
189 #  define dTHXs         dNOOP
190 #endif
191
192 #undef START_EXTERN_C
193 #undef END_EXTERN_C
194 #undef EXTERN_C
195 #ifdef __cplusplus
196 #  define START_EXTERN_C extern "C" {
197 #  define END_EXTERN_C }
198 #  define EXTERN_C extern "C"
199 #else
200 #  define START_EXTERN_C
201 #  define END_EXTERN_C
202 #  define EXTERN_C extern
203 #endif
204
205 #ifdef OP_IN_REGISTER
206 #  ifdef __GNUC__
207 #    define stringify_immed(s) #s
208 #    define stringify(s) stringify_immed(s)
209 register struct op *Perl_op asm(stringify(OP_IN_REGISTER));
210 #  endif
211 #endif
212
213 /*
214  * STMT_START { statements; } STMT_END;
215  * can be used as a single statement, as in
216  * if (x) STMT_START { ... } STMT_END; else ...
217  *
218  * Trying to select a version that gives no warnings...
219  */
220 #if !(defined(STMT_START) && defined(STMT_END))
221 # if defined(__GNUC__) && !defined(__STRICT_ANSI__) && !defined(__cplusplus)
222 #   define STMT_START   (void)( /* gcc supports ``({ STATEMENTS; })'' */
223 #   define STMT_END     )
224 # else
225    /* Now which other defined()s do we need here ??? */
226 #  if (VOIDFLAGS) && (defined(sun) || defined(__sun__))
227 #   define STMT_START   if (1)
228 #   define STMT_END     else (void)0
229 #  else
230 #   define STMT_START   do
231 #   define STMT_END     while (0)
232 #  endif
233 # endif
234 #endif
235
236 #define WITH_THX(s) STMT_START { dTHX; s; } STMT_END
237 #define WITH_THR(s) WITH_THX(s)
238
239 /*
240  * SOFT_CAST can be used for args to prototyped functions to retain some
241  * type checking; it only casts if the compiler does not know prototypes.
242  */
243 #if defined(CAN_PROTOTYPE) && defined(DEBUGGING_COMPILE)
244 #define SOFT_CAST(type) 
245 #else
246 #define SOFT_CAST(type) (type)
247 #endif
248
249 #ifndef BYTEORDER  /* Should never happen -- byteorder is in config.h */
250 #   define BYTEORDER 0x1234
251 #endif
252
253 /* Overall memory policy? */
254 #ifndef CONSERVATIVE
255 #   define LIBERAL 1
256 #endif
257
258 #if 'A' == 65 && 'I' == 73 && 'J' == 74 && 'Z' == 90
259 #define ASCIIish
260 #else
261 #undef  ASCIIish
262 #endif
263
264 /*
265  * The following contortions are brought to you on behalf of all the
266  * standards, semi-standards, de facto standards, not-so-de-facto standards
267  * of the world, as well as all the other botches anyone ever thought of.
268  * The basic theory is that if we work hard enough here, the rest of the
269  * code can be a lot prettier.  Well, so much for theory.  Sorry, Henry...
270  */
271
272 /* define this once if either system, instead of cluttering up the src */
273 #if defined(MSDOS) || defined(atarist) || defined(WIN32) || defined(NETWARE)
274 #define DOSISH 1
275 #endif
276
277 #if defined(__STDC__) || defined(vax11c) || defined(_AIX) || defined(__stdc__) || defined(__cplusplus) || defined( EPOC) || defined(NETWARE)
278 # define STANDARD_C 1
279 #endif
280
281 #if defined(__cplusplus) || defined(WIN32) || defined(__sgi) || defined(OS2) || defined(__DGUX) || defined( EPOC) || defined(__QNX__) || defined(NETWARE)
282 # define DONT_DECLARE_STD 1
283 #endif
284
285 #if defined(HASVOLATILE) || defined(STANDARD_C)
286 #   ifdef __cplusplus
287 #       define VOL              /* to temporarily suppress warnings */
288 #   else
289 #       define VOL volatile
290 #   endif
291 #else
292 #   define VOL
293 #endif
294
295 #define TAINT           (PL_tainted = TRUE)
296 #define TAINT_NOT       (PL_tainted = FALSE)
297 #define TAINT_IF(c)     if (c) { PL_tainted = TRUE; }
298 #define TAINT_ENV()     if (PL_tainting) { taint_env(); }
299 #define TAINT_PROPER(s) if (PL_tainting) { taint_proper(Nullch, s); }
300
301 /* XXX All process group stuff is handled in pp_sys.c.  Should these
302    defines move there?  If so, I could simplify this a lot. --AD  9/96.
303 */
304 /* Process group stuff changed from traditional BSD to POSIX.
305    perlfunc.pod documents the traditional BSD-style syntax, so we'll
306    try to preserve that, if possible.
307 */
308 #ifdef HAS_SETPGID
309 #  define BSD_SETPGRP(pid, pgrp)        setpgid((pid), (pgrp))
310 #else
311 #  if defined(HAS_SETPGRP) && defined(USE_BSD_SETPGRP)
312 #    define BSD_SETPGRP(pid, pgrp)      setpgrp((pid), (pgrp))
313 #  else
314 #    ifdef HAS_SETPGRP2  /* DG/UX */
315 #      define BSD_SETPGRP(pid, pgrp)    setpgrp2((pid), (pgrp))
316 #    endif
317 #  endif
318 #endif
319 #if defined(BSD_SETPGRP) && !defined(HAS_SETPGRP)
320 #  define HAS_SETPGRP  /* Well, effectively it does . . . */
321 #endif
322
323 /* getpgid isn't POSIX, but at least Solaris and Linux have it, and it makes
324     our life easier :-) so we'll try it.
325 */
326 #ifdef HAS_GETPGID
327 #  define BSD_GETPGRP(pid)              getpgid((pid))
328 #else
329 #  if defined(HAS_GETPGRP) && defined(USE_BSD_GETPGRP)
330 #    define BSD_GETPGRP(pid)            getpgrp((pid))
331 #  else
332 #    ifdef HAS_GETPGRP2  /* DG/UX */
333 #      define BSD_GETPGRP(pid)          getpgrp2((pid))
334 #    endif
335 #  endif
336 #endif
337 #if defined(BSD_GETPGRP) && !defined(HAS_GETPGRP)
338 #  define HAS_GETPGRP  /* Well, effectively it does . . . */
339 #endif
340
341 /* These are not exact synonyms, since setpgrp() and getpgrp() may
342    have different behaviors, but perl.h used to define USE_BSDPGRP
343    (prior to 5.003_05) so some extension might depend on it.
344 */
345 #if defined(USE_BSD_SETPGRP) || defined(USE_BSD_GETPGRP)
346 #  ifndef USE_BSDPGRP
347 #    define USE_BSDPGRP
348 #  endif
349 #endif
350
351 /* HP-UX 10.X CMA (Common Multithreaded Architecure) insists that
352    pthread.h must be included before all other header files.
353 */
354 #if (defined(USE_5005THREADS) || defined(USE_ITHREADS)) \
355     && defined(PTHREAD_H_FIRST) && defined(I_PTHREAD)
356 #  include <pthread.h>
357 #endif
358
359 #ifndef _TYPES_         /* If types.h defines this it's easy. */
360 #   ifndef major                /* Does everyone's types.h define this? */
361 #       include <sys/types.h>
362 #   endif
363 #endif
364
365 #ifdef __cplusplus
366 #  ifndef I_STDARG
367 #    define I_STDARG 1
368 #  endif
369 #endif
370
371 #ifdef I_STDARG
372 #  include <stdarg.h>
373 #else
374 #  ifdef I_VARARGS
375 #    include <varargs.h>
376 #  endif
377 #endif
378
379 #ifdef USE_NEXT_CTYPE
380
381 #if NX_CURRENT_COMPILER_RELEASE >= 500
382 #  include <bsd/ctypes.h>
383 #else
384 #  if NX_CURRENT_COMPILER_RELEASE >= 400
385 #    include <objc/NXCType.h>
386 #  else /*  NX_CURRENT_COMPILER_RELEASE < 400 */
387 #    include <appkit/NXCType.h>
388 #  endif /*  NX_CURRENT_COMPILER_RELEASE >= 400 */
389 #endif /*  NX_CURRENT_COMPILER_RELEASE >= 500 */
390
391 #else /* !USE_NEXT_CTYPE */
392 #include <ctype.h>
393 #endif /* USE_NEXT_CTYPE */
394
395 #ifdef METHOD   /* Defined by OSF/1 v3.0 by ctype.h */
396 #undef METHOD
397 #endif
398
399 #ifdef PERL_MICRO
400 #   define NO_LOCALE
401 #endif
402
403 #ifdef I_LOCALE
404 #   include <locale.h>
405 #endif
406
407 #if !defined(NO_LOCALE) && defined(HAS_SETLOCALE)
408 #   define USE_LOCALE
409 #   if !defined(NO_LOCALE_COLLATE) && defined(LC_COLLATE) \
410        && defined(HAS_STRXFRM)
411 #       define USE_LOCALE_COLLATE
412 #   endif
413 #   if !defined(NO_LOCALE_CTYPE) && defined(LC_CTYPE)
414 #       define USE_LOCALE_CTYPE
415 #   endif
416 #   if !defined(NO_LOCALE_NUMERIC) && defined(LC_NUMERIC)
417 #       define USE_LOCALE_NUMERIC
418 #   endif
419 #endif /* !NO_LOCALE && HAS_SETLOCALE */
420
421 #include <setjmp.h>
422
423 #ifdef I_SYS_PARAM
424 #   ifdef PARAM_NEEDS_TYPES
425 #       include <sys/types.h>
426 #   endif
427 #   include <sys/param.h>
428 #endif
429
430 /* Use all the "standard" definitions? */
431 #if defined(STANDARD_C) && defined(I_STDLIB)
432 #   include <stdlib.h>
433 #endif
434
435 /* If this causes problems, set i_unistd=undef in the hint file.  */
436 #ifdef I_UNISTD
437 #   include <unistd.h>
438 #endif
439
440 #if defined(HAS_SYSCALL) && !defined(HAS_SYSCALL_PROTO) && !defined(PERL_MICRO)
441 int syscall(int, ...);
442 #endif
443
444 #if defined(HAS_USLEEP) && !defined(HAS_USLEEP_PROTO) && !defined(PERL_MICRO)
445 int usleep(unsigned int);
446 #endif
447
448 #ifdef PERL_MICRO /* Last chance to export Perl_my_swap */
449 #  define MYSWAP
450 #endif
451
452 /* Cannot include embed.h here on Win32 as win32.h has not 
453    yet been included and defines some config variables e.g. HAVE_INTERP_INTERN
454  */
455 #if !defined(PERL_FOR_X2P) && !(defined(WIN32)||defined(VMS))
456 #  include "embed.h"
457 #endif
458
459 #define MEM_SIZE Size_t
460
461 #if defined(STANDARD_C) && defined(I_STDDEF)
462 #   include <stddef.h>
463 #   define STRUCT_OFFSET(s,m)  offsetof(s,m)
464 #else
465 #   define STRUCT_OFFSET(s,m)  (Size_t)(&(((s *)0)->m))
466 #endif
467
468 #if defined(I_STRING) || defined(__cplusplus)
469 #   include <string.h>
470 #else
471 #   include <strings.h>
472 #endif
473
474 /* This comes after <stdlib.h> so we don't try to change the standard
475  * library prototypes; we'll use our own in proto.h instead. */
476
477 #ifdef MYMALLOC
478 #  ifdef PERL_POLLUTE_MALLOC
479 #   ifndef PERL_EXTMALLOC_DEF
480 #    define Perl_malloc         malloc
481 #    define Perl_calloc         calloc
482 #    define Perl_realloc        realloc
483 #    define Perl_mfree          free
484 #   endif
485 #  else
486 #    define EMBEDMYMALLOC       /* for compatibility */
487 #  endif
488 START_EXTERN_C
489 Malloc_t Perl_malloc (MEM_SIZE nbytes);
490 Malloc_t Perl_calloc (MEM_SIZE elements, MEM_SIZE size);
491 Malloc_t Perl_realloc (Malloc_t where, MEM_SIZE nbytes);
492 /* 'mfree' rather than 'free', since there is already a 'perl_free'
493  * that causes clashes with case-insensitive linkers */
494 Free_t   Perl_mfree (Malloc_t where);
495 END_EXTERN_C
496
497 typedef struct perl_mstats perl_mstats_t;
498
499 #  define safemalloc  Perl_malloc
500 #  define safecalloc  Perl_calloc
501 #  define saferealloc Perl_realloc
502 #  define safefree    Perl_mfree
503 #else  /* MYMALLOC */
504 #  define safemalloc  safesysmalloc
505 #  define safecalloc  safesyscalloc
506 #  define saferealloc safesysrealloc
507 #  define safefree    safesysfree
508 #endif /* MYMALLOC */
509
510 #if !defined(HAS_STRCHR) && defined(HAS_INDEX) && !defined(strchr)
511 #define strchr index
512 #define strrchr rindex
513 #endif
514
515 #ifdef I_MEMORY
516 #  include <memory.h>
517 #endif
518
519 #ifdef HAS_MEMCPY
520 #  if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)
521 #    ifndef memcpy
522         extern char * memcpy (char*, char*, int);
523 #    endif
524 #  endif
525 #else
526 #   ifndef memcpy
527 #       ifdef HAS_BCOPY
528 #           define memcpy(d,s,l) bcopy(s,d,l)
529 #       else
530 #           define memcpy(d,s,l) my_bcopy(s,d,l)
531 #       endif
532 #   endif
533 #endif /* HAS_MEMCPY */
534
535 #ifdef HAS_MEMSET
536 #  if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)
537 #    ifndef memset
538         extern char *memset (char*, int, int);
539 #    endif
540 #  endif
541 #else
542 #  undef  memset
543 #  define memset(d,c,l) my_memset(d,c,l)
544 #endif /* HAS_MEMSET */
545
546 #if !defined(HAS_MEMMOVE) && !defined(memmove)
547 #   if defined(HAS_BCOPY) && defined(HAS_SAFE_BCOPY)
548 #       define memmove(d,s,l) bcopy(s,d,l)
549 #   else
550 #       if defined(HAS_MEMCPY) && defined(HAS_SAFE_MEMCPY)
551 #           define memmove(d,s,l) memcpy(d,s,l)
552 #       else
553 #           define memmove(d,s,l) my_bcopy(s,d,l)
554 #       endif
555 #   endif
556 #endif
557
558 #if defined(mips) && defined(ultrix) && !defined(__STDC__)
559 #   undef HAS_MEMCMP
560 #endif
561
562 #if defined(HAS_MEMCMP) && defined(HAS_SANE_MEMCMP)
563 #  if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)
564 #    ifndef memcmp
565         extern int memcmp (char*, char*, int);
566 #    endif
567 #  endif
568 #  ifdef BUGGY_MSC
569   #  pragma function(memcmp)
570 #  endif
571 #else
572 #   ifndef memcmp
573 #       define memcmp   my_memcmp
574 #   endif
575 #endif /* HAS_MEMCMP && HAS_SANE_MEMCMP */
576
577 #ifndef memzero
578 #   ifdef HAS_MEMSET
579 #       define memzero(d,l) memset(d,0,l)
580 #   else
581 #       ifdef HAS_BZERO
582 #           define memzero(d,l) bzero(d,l)
583 #       else
584 #           define memzero(d,l) my_bzero(d,l)
585 #       endif
586 #   endif
587 #endif
588
589 #ifndef memchr
590 #   ifndef HAS_MEMCHR
591 #       define memchr(s,c,n) ninstr((char*)(s), ((char*)(s)) + n, &(c), &(c) + 1)
592 #   endif
593 #endif
594
595 #ifndef HAS_BCMP
596 #   ifndef bcmp
597 #       define bcmp(s1,s2,l) memcmp(s1,s2,l)
598 #   endif
599 #endif /* !HAS_BCMP */
600
601 #ifdef I_NETINET_IN
602 #   include <netinet/in.h>
603 #endif
604
605 #ifdef I_ARPA_INET
606 #   include <arpa/inet.h>
607 #endif
608
609 #if defined(SF_APPEND) && defined(USE_SFIO) && defined(I_SFIO)
610 /* <sfio.h> defines SF_APPEND and <sys/stat.h> might define SF_APPEND
611  * (the neo-BSD seem to do this).  */
612 #   undef SF_APPEND
613 #endif
614
615 #ifdef I_SYS_STAT
616 #   include <sys/stat.h>
617 #endif
618
619 /* The stat macros for Amdahl UTS, Unisoft System V/88 (and derivatives
620    like UTekV) are broken, sometimes giving false positives.  Undefine
621    them here and let the code below set them to proper values.
622
623    The ghs macro stands for GreenHills Software C-1.8.5 which
624    is the C compiler for sysV88 and the various derivatives.
625    This header file bug is corrected in gcc-2.5.8 and later versions.
626    --Kaveh Ghazi (ghazi@noc.rutgers.edu) 10/3/94.  */
627
628 #if defined(uts) || (defined(m88k) && defined(ghs))
629 #   undef S_ISDIR
630 #   undef S_ISCHR
631 #   undef S_ISBLK
632 #   undef S_ISREG
633 #   undef S_ISFIFO
634 #   undef S_ISLNK
635 #endif
636
637 #ifdef I_TIME
638 #   include <time.h>
639 #endif
640
641 #ifdef I_SYS_TIME
642 #   ifdef I_SYS_TIME_KERNEL
643 #       define KERNEL
644 #   endif
645 #   include <sys/time.h>
646 #   ifdef I_SYS_TIME_KERNEL
647 #       undef KERNEL
648 #   endif
649 #endif
650
651 #if defined(HAS_TIMES) && defined(I_SYS_TIMES)
652 #    include <sys/times.h>
653 #endif
654
655 #if defined(HAS_STRERROR) && (!defined(HAS_MKDIR) || !defined(HAS_RMDIR))
656 #   undef HAS_STRERROR
657 #endif
658
659 #include <errno.h>
660
661 #if defined(WIN32) && defined(PERL_IMPLICIT_SYS)
662 #  define WIN32SCK_IS_STDSCK            /* don't pull in custom wsock layer */
663 #endif
664
665 /* In Tru64 use the 4.4BSD struct msghdr, not the 4.3 one */
666 #if defined(__osf__) && defined(__alpha) && !defined(_SOCKADDR_LEN)
667 #  define _SOCKADDR_LEN
668 #endif
669
670 #if defined(HAS_SOCKET) && !defined(VMS) && !defined(WIN32) /* VMS/WIN32 handle sockets via vmsish.h/win32.h */
671 # include <sys/socket.h>
672 # if defined(USE_SOCKS) && defined(I_SOCKS)
673 #   if !defined(INCLUDE_PROTOTYPES)
674 #       define INCLUDE_PROTOTYPES /* for <socks.h> */
675 #       define PERL_SOCKS_NEED_PROTOTYPES
676 #   endif
677 #   ifdef USE_5005THREADS
678 #       define PERL_USE_THREADS /* store our value */
679 #       undef USE_5005THREADS
680 #   endif
681 #   include <socks.h>
682 #   ifdef USE_5005THREADS
683 #       undef USE_5005THREADS /* socks.h does this on its own */
684 #   endif
685 #   ifdef PERL_USE_THREADS
686 #       define USE_5005THREADS /* restore our value */
687 #       undef PERL_USE_THREADS
688 #   endif
689 #   ifdef PERL_SOCKS_NEED_PROTOTYPES /* keep cpp space clean */
690 #       undef INCLUDE_PROTOTYPES
691 #       undef PERL_SOCKS_NEED_PROTOTYPES
692 #   endif
693 # endif
694 # ifdef I_NETDB
695 #  ifdef NETWARE
696 #   include<stdio.h>
697 #  endif
698 #  include <netdb.h>
699 # endif
700 # ifndef ENOTSOCK
701 #  ifdef I_NET_ERRNO
702 #   include <net/errno.h>
703 #  endif
704 # endif
705 #endif
706
707 /* sockatmark() is so new (2001) that many places might have it hidden
708  * behind some -D_BLAH_BLAH_SOURCE guard. */
709 #if defined(HAS_SOCKATMARK) && !defined(HAS_SOCKATMARK_PROTO)
710 int sockatmark(int);
711 #endif
712
713 #ifdef SETERRNO
714 # undef SETERRNO  /* SOCKS might have defined this */
715 #endif
716
717 #ifdef VMS
718 #   define SETERRNO(errcode,vmserrcode) \
719         STMT_START {                    \
720             set_errno(errcode);         \
721             set_vaxc_errno(vmserrcode); \
722         } STMT_END
723 #else
724 #   define SETERRNO(errcode,vmserrcode) (errno = (errcode))
725 #endif
726
727 #ifdef USE_5005THREADS
728 #  define ERRSV (thr->errsv)
729 #  define DEFSV THREADSV(0)
730 #  define SAVE_DEFSV save_threadsv(0)
731 #else
732 #  define ERRSV GvSV(PL_errgv)
733 #  define DEFSV GvSV(PL_defgv)
734 #  define SAVE_DEFSV SAVESPTR(GvSV(PL_defgv))
735 #endif /* USE_5005THREADS */
736
737 #define ERRHV GvHV(PL_errgv)    /* XXX unused, here for compatibility */
738
739 #ifndef errno
740         extern int errno;     /* ANSI allows errno to be an lvalue expr.
741                                * For example in multithreaded environments
742                                * something like this might happen:
743                                * extern int *_errno(void);
744                                * #define errno (*_errno()) */
745 #endif
746
747 #ifdef HAS_STRERROR
748 #       ifdef VMS
749         char *strerror (int,...);
750 #       else
751 #ifndef DONT_DECLARE_STD
752         char *strerror (int);
753 #endif
754 #       endif
755 #       ifndef Strerror
756 #           define Strerror strerror
757 #       endif
758 #else
759 #    ifdef HAS_SYS_ERRLIST
760         extern int sys_nerr;
761         extern char *sys_errlist[];
762 #       ifndef Strerror
763 #           define Strerror(e) \
764                 ((e) < 0 || (e) >= sys_nerr ? "(unknown)" : sys_errlist[e])
765 #       endif
766 #   endif
767 #endif
768
769 #ifdef I_SYS_IOCTL
770 #   ifndef _IOCTL_
771 #       include <sys/ioctl.h>
772 #   endif
773 #endif
774
775 #if defined(mc300) || defined(mc500) || defined(mc700) || defined(mc6000)
776 #   ifdef HAS_SOCKETPAIR
777 #       undef HAS_SOCKETPAIR
778 #   endif
779 #   ifdef I_NDBM
780 #       undef I_NDBM
781 #   endif
782 #endif
783
784 #ifndef HAS_SOCKETPAIR
785 #   ifdef HAS_SOCKET
786 #       define socketpair Perl_my_socketpair
787 #   endif
788 #endif
789
790 #if INTSIZE == 2
791 #   define htoni htons
792 #   define ntohi ntohs
793 #else
794 #   define htoni htonl
795 #   define ntohi ntohl
796 #endif
797
798 /* Configure already sets Direntry_t */
799 #if defined(I_DIRENT)
800 #   include <dirent.h>
801     /* NeXT needs dirent + sys/dir.h */
802 #   if  defined(I_SYS_DIR) && (defined(NeXT) || defined(__NeXT__))
803 #       include <sys/dir.h>
804 #   endif
805 #else
806 #   ifdef I_SYS_NDIR
807 #       include <sys/ndir.h>
808 #   else
809 #       ifdef I_SYS_DIR
810 #           ifdef hp9000s500
811 #               include <ndir.h>        /* may be wrong in the future */
812 #           else
813 #               include <sys/dir.h>
814 #           endif
815 #       endif
816 #   endif
817 #endif
818
819 #ifdef PERL_MICRO
820 #   ifndef DIR
821 #      define DIR void
822 #   endif
823 #endif
824
825 #ifdef FPUTS_BOTCH
826 /* work around botch in SunOS 4.0.1 and 4.0.2 */
827 #   ifndef fputs
828 #       define fputs(sv,fp) fprintf(fp,"%s",sv)
829 #   endif
830 #endif
831
832 /*
833  * The following gobbledygook brought to you on behalf of __STDC__.
834  * (I could just use #ifndef __STDC__, but this is more bulletproof
835  * in the face of half-implementations.)
836  */
837
838 #if defined(I_SYSMODE) && !defined(PERL_MICRO)
839 #include <sys/mode.h>
840 #endif
841
842 #ifndef S_IFMT
843 #   ifdef _S_IFMT
844 #       define S_IFMT _S_IFMT
845 #   else
846 #       define S_IFMT 0170000
847 #   endif
848 #endif
849
850 #ifndef S_ISDIR
851 #   define S_ISDIR(m) ((m & S_IFMT) == S_IFDIR)
852 #endif
853
854 #ifndef S_ISCHR
855 #   define S_ISCHR(m) ((m & S_IFMT) == S_IFCHR)
856 #endif
857
858 #ifndef S_ISBLK
859 #   ifdef S_IFBLK
860 #       define S_ISBLK(m) ((m & S_IFMT) == S_IFBLK)
861 #   else
862 #       define S_ISBLK(m) (0)
863 #   endif
864 #endif
865
866 #ifndef S_ISREG
867 #   define S_ISREG(m) ((m & S_IFMT) == S_IFREG)
868 #endif
869
870 #ifndef S_ISFIFO
871 #   ifdef S_IFIFO
872 #       define S_ISFIFO(m) ((m & S_IFMT) == S_IFIFO)
873 #   else
874 #       define S_ISFIFO(m) (0)
875 #   endif
876 #endif
877
878 #ifndef S_ISLNK
879 #   ifdef _S_ISLNK
880 #       define S_ISLNK(m) _S_ISLNK(m)
881 #   else
882 #       ifdef _S_IFLNK
883 #           define S_ISLNK(m) ((m & S_IFMT) == _S_IFLNK)
884 #       else
885 #           ifdef S_IFLNK
886 #               define S_ISLNK(m) ((m & S_IFMT) == S_IFLNK)
887 #           else
888 #               define S_ISLNK(m) (0)
889 #           endif
890 #       endif
891 #   endif
892 #endif
893
894 #ifndef S_ISSOCK
895 #   ifdef _S_ISSOCK
896 #       define S_ISSOCK(m) _S_ISSOCK(m)
897 #   else
898 #       ifdef _S_IFSOCK
899 #           define S_ISSOCK(m) ((m & S_IFMT) == _S_IFSOCK)
900 #       else
901 #           ifdef S_IFSOCK
902 #               define S_ISSOCK(m) ((m & S_IFMT) == S_IFSOCK)
903 #           else
904 #               define S_ISSOCK(m) (0)
905 #           endif
906 #       endif
907 #   endif
908 #endif
909
910 #ifndef S_IRUSR
911 #   ifdef S_IREAD
912 #       define S_IRUSR S_IREAD
913 #       define S_IWUSR S_IWRITE
914 #       define S_IXUSR S_IEXEC
915 #   else
916 #       define S_IRUSR 0400
917 #       define S_IWUSR 0200
918 #       define S_IXUSR 0100
919 #   endif
920 #endif
921
922 #ifndef S_IRGRP
923 #   ifdef S_IRUSR
924 #       define S_IRGRP (S_IRUSR>>3)
925 #       define S_IWGRP (S_IWUSR>>3)
926 #       define S_IXGRP (S_IXUSR>>3)
927 #   else
928 #       define S_IRGRP 0040
929 #       define S_IWGRP 0020
930 #       define S_IXGRP 0010
931 #   endif
932 #endif
933
934 #ifndef S_IROTH
935 #   ifdef S_IRUSR
936 #       define S_IROTH (S_IRUSR>>6)
937 #       define S_IWOTH (S_IWUSR>>6)
938 #       define S_IXOTH (S_IXUSR>>6)
939 #   else
940 #       define S_IROTH 0040
941 #       define S_IWOTH 0020
942 #       define S_IXOTH 0010
943 #   endif
944 #endif
945
946 #ifndef S_ISUID
947 #   define S_ISUID 04000
948 #endif
949
950 #ifndef S_ISGID
951 #   define S_ISGID 02000
952 #endif
953
954 #ifndef S_IRWXU
955 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
956 #endif
957
958 #ifndef S_IRWXG
959 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
960 #endif
961
962 #ifndef S_IRWXO
963 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
964 #endif
965
966 /* BeOS 5.0 seems to define S_IREAD and S_IWRITE in <posix/fcntl.h>
967  * which would get included through <sys/file.h >, but that is 3000
968  * lines in the future.  --jhi */
969
970 #if !defined(S_IREAD) && !defined(__BEOS__)
971 #   define S_IREAD S_IRUSR
972 #endif
973
974 #if !defined(S_IWRITE) && !defined(__BEOS__)
975 #   define S_IWRITE S_IWUSR
976 #endif
977
978 #ifndef S_IEXEC
979 #   define S_IEXEC S_IXUSR
980 #endif
981
982 #ifdef ff_next
983 #   undef ff_next
984 #endif
985
986 #if defined(cray) || defined(gould) || defined(i860) || defined(pyr)
987 #   define SLOPPYDIVIDE
988 #endif
989
990 #ifdef UV
991 #undef UV
992 #endif
993
994 #ifdef  SPRINTF_E_BUG
995 #  define sprintf UTS_sprintf_wrap
996 #endif
997
998 /* Configure gets this right but the UTS compiler gets it wrong.
999    -- Hal Morris <hom00@utsglobal.com> */
1000 #ifdef UTS
1001 #  undef  UVTYPE
1002 #  define UVTYPE unsigned
1003 #endif
1004
1005 /*
1006     The IV type is supposed to be long enough to hold any integral
1007     value or a pointer.
1008     --Andy Dougherty    August 1996
1009 */
1010
1011 typedef IVTYPE IV;
1012 typedef UVTYPE UV;
1013
1014 #if defined(USE_64_BIT_INT) && defined(HAS_QUAD)
1015 #  if QUADKIND == QUAD_IS_INT64_T && defined(INT64_MAX)
1016 #    define IV_MAX INT64_MAX
1017 #    define IV_MIN INT64_MIN
1018 #    define UV_MAX UINT64_MAX
1019 #    ifndef UINT64_MIN
1020 #      define UINT64_MIN 0
1021 #    endif
1022 #    define UV_MIN UINT64_MIN
1023 #  else
1024 #    define IV_MAX PERL_QUAD_MAX
1025 #    define IV_MIN PERL_QUAD_MIN
1026 #    define UV_MAX PERL_UQUAD_MAX
1027 #    define UV_MIN PERL_UQUAD_MIN
1028 #  endif
1029 #  define IV_IS_QUAD
1030 #  define UV_IS_QUAD
1031 #else
1032 #  if defined(INT32_MAX) && IVSIZE == 4
1033 #    define IV_MAX INT32_MAX
1034 #    define IV_MIN INT32_MIN
1035 #    ifndef UINT32_MAX_BROKEN /* e.g. HP-UX with gcc messes this up */
1036 #        define UV_MAX UINT32_MAX
1037 #    else
1038 #        define UV_MAX 4294967295U
1039 #    endif
1040 #    ifndef UINT32_MIN
1041 #      define UINT32_MIN 0
1042 #    endif
1043 #    define UV_MIN UINT32_MIN
1044 #  else
1045 #    define IV_MAX PERL_LONG_MAX
1046 #    define IV_MIN PERL_LONG_MIN
1047 #    define UV_MAX PERL_ULONG_MAX
1048 #    define UV_MIN PERL_ULONG_MIN
1049 #  endif
1050 #  if IVSIZE == 8
1051 #    define IV_IS_QUAD
1052 #    define UV_IS_QUAD
1053 #    ifndef HAS_QUAD
1054 #      define HAS_QUAD
1055 #    endif
1056 #  else
1057 #    undef IV_IS_QUAD
1058 #    undef UV_IS_QUAD
1059 #    undef HAS_QUAD
1060 #  endif
1061 #endif
1062
1063 #if defined(uts) || defined(UTS)
1064 #       undef UV_MAX
1065 #       define UV_MAX (4294967295u)
1066 #endif
1067
1068 #define IV_DIG (BIT_DIGITS(IVSIZE * 8))
1069 #define UV_DIG (BIT_DIGITS(UVSIZE * 8))
1070
1071 #ifndef NO_PERL_PRESERVE_IVUV
1072 #define PERL_PRESERVE_IVUV      /* We like our integers to stay integers. */
1073 #endif
1074
1075 /*
1076  *  The macros INT2PTR and NUM2PTR are (despite their names)
1077  *  bi-directional: they will convert int/float to or from pointers.
1078  *  However the conversion to int/float are named explicitly:
1079  *  PTR2IV, PTR2UV, PTR2NV.
1080  *
1081  *  For int conversions we do not need two casts if pointers are
1082  *  the same size as IV and UV.   Otherwise we need an explicit
1083  *  cast (PTRV) to avoid compiler warnings.
1084  */
1085 #if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE)
1086 #  define PTRV                  UV
1087 #  define INT2PTR(any,d)        (any)(d)
1088 #else
1089 #  if PTRSIZE == LONGSIZE
1090 #    define PTRV                unsigned long
1091 #  else
1092 #    define PTRV                unsigned
1093 #  endif
1094 #  define INT2PTR(any,d)        (any)(PTRV)(d)
1095 #endif
1096 #define NUM2PTR(any,d)  (any)(PTRV)(d)
1097 #define PTR2IV(p)       INT2PTR(IV,p)
1098 #define PTR2UV(p)       INT2PTR(UV,p)
1099 #define PTR2NV(p)       NUM2PTR(NV,p)
1100 #if PTRSIZE == LONGSIZE
1101 #  define PTR2ul(p)     (unsigned long)(p)
1102 #else
1103 #  define PTR2ul(p)     INT2PTR(unsigned long,p)        
1104 #endif
1105
1106 #ifdef USE_LONG_DOUBLE
1107 #  if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE == DOUBLESIZE
1108 #      define LONG_DOUBLE_EQUALS_DOUBLE
1109 #  endif
1110 #  if !(defined(HAS_LONG_DOUBLE) && (LONG_DOUBLESIZE > DOUBLESIZE))
1111 #     undef USE_LONG_DOUBLE /* Ouch! */
1112 #  endif
1113 #endif
1114
1115 #ifdef OVR_DBL_DIG
1116 /* Use an overridden DBL_DIG */
1117 # ifdef DBL_DIG
1118 #  undef DBL_DIG
1119 # endif
1120 # define DBL_DIG OVR_DBL_DIG
1121 #else
1122 /* The following is all to get DBL_DIG, in order to pick a nice
1123    default value for printing floating point numbers in Gconvert.
1124    (see config.h)
1125 */
1126 #ifdef I_LIMITS
1127 #include <limits.h>
1128 #endif
1129 #ifdef I_FLOAT
1130 #include <float.h>
1131 #endif
1132 #ifndef HAS_DBL_DIG
1133 #define DBL_DIG 15   /* A guess that works lots of places */
1134 #endif
1135 #endif
1136 #ifdef I_FLOAT
1137 #include <float.h>
1138 #endif
1139 #ifndef HAS_DBL_DIG
1140 #define DBL_DIG 15   /* A guess that works lots of places */
1141 #endif
1142
1143 #ifdef OVR_LDBL_DIG
1144 /* Use an overridden LDBL_DIG */
1145 # ifdef LDBL_DIG
1146 #  undef LDBL_DIG
1147 # endif
1148 # define LDBL_DIG OVR_LDBL_DIG
1149 #else
1150 /* The following is all to get LDBL_DIG, in order to pick a nice
1151    default value for printing floating point numbers in Gconvert.
1152    (see config.h)
1153 */
1154 # ifdef I_LIMITS
1155 #   include <limits.h>
1156 # endif
1157 # ifdef I_FLOAT
1158 #  include <float.h>
1159 # endif
1160 # ifndef HAS_LDBL_DIG
1161 #  if LONG_DOUBLESIZE == 10
1162 #   define LDBL_DIG 18 /* assume IEEE */
1163 #  else
1164 #   if LONG_DOUBLESIZE == 12
1165 #    define LDBL_DIG 18 /* gcc? */
1166 #   else
1167 #    if LONG_DOUBLESIZE == 16
1168 #     define LDBL_DIG 33 /* assume IEEE */
1169 #    else
1170 #     if LONG_DOUBLESIZE == DOUBLESIZE
1171 #      define LDBL_DIG DBL_DIG /* bummer */
1172 #     endif
1173 #    endif
1174 #   endif
1175 #  endif
1176 # endif
1177 #endif
1178
1179 typedef NVTYPE NV;
1180
1181 #ifdef I_IEEEFP
1182 #   include <ieeefp.h>
1183 #endif
1184
1185 #ifdef USE_LONG_DOUBLE
1186 #   ifdef I_SUNMATH
1187 #       include <sunmath.h>
1188 #   endif
1189 #   define NV_DIG LDBL_DIG
1190 #   ifdef LDBL_MANT_DIG
1191 #       define NV_MANT_DIG LDBL_MANT_DIG
1192 #   endif
1193 #   ifdef LDBL_MIN
1194 #       define NV_MIN LDBL_MIN
1195 #   endif
1196 #   ifdef LDBL_MAX
1197 #       define NV_MAX LDBL_MAX
1198 #   endif
1199 #   ifdef LDBL_MIN_10_EXP
1200 #       define NV_MIN_10_EXP LDBL_MIN_10_EXP
1201 #   endif
1202 #   ifdef LDBL_MAX_10_EXP
1203 #       define NV_MAX_10_EXP LDBL_MAX_10_EXP
1204 #   endif
1205 #   ifdef LDBL_EPSILON
1206 #       define NV_EPSILON LDBL_EPSILON
1207 #   endif
1208 #   ifdef LDBL_MAX
1209 #       define NV_MAX LDBL_MAX
1210 #       define NV_MIN LDBL_MIN
1211 #   else
1212 #       ifdef HUGE_VALL
1213 #           define NV_MAX HUGE_VALL
1214 #       else
1215 #           ifdef HUGE_VAL
1216 #               define NV_MAX ((NV)HUGE_VAL)
1217 #           endif
1218 #       endif
1219 #   endif
1220 #   ifdef HAS_SQRTL
1221 #       define Perl_cos cosl
1222 #       define Perl_sin sinl
1223 #       define Perl_sqrt sqrtl
1224 #       define Perl_exp expl
1225 #       define Perl_log logl
1226 #       define Perl_atan2 atan2l
1227 #       define Perl_pow powl
1228 #       define Perl_floor floorl
1229 #       define Perl_fmod fmodl
1230 #   endif
1231 /* e.g. libsunmath doesn't have modfl and frexpl as of mid-March 2000 */
1232 #   ifdef HAS_MODFL
1233 #       define Perl_modf(x,y) modfl(x,y)
1234 #   else
1235 #       define Perl_modf(x,y) ((long double)modf((double)(x),(double*)(y)))
1236 #   endif
1237 #   ifdef HAS_FREXPL
1238 #       define Perl_frexp(x,y) frexpl(x,y)
1239 #   else
1240 #       define Perl_frexp(x,y) ((long double)frexp((double)(x),y))
1241 #   endif
1242 #   ifndef Perl_isnan
1243 #       ifdef HAS_ISNANL
1244 #           define Perl_isnan(x) isnanl(x)
1245 #       endif
1246 #   endif
1247 #   ifndef Perl_isinf
1248 #       ifdef HAS_FINITEL
1249 #           define Perl_isinf(x) !(finitel(x)||Perl_isnan(x))
1250 #       endif
1251 #   endif
1252 #else
1253 #   define NV_DIG DBL_DIG
1254 #   ifdef DBL_MANT_DIG
1255 #       define NV_MANT_DIG DBL_MANT_DIG
1256 #   endif
1257 #   ifdef DBL_MIN
1258 #       define NV_MIN DBL_MIN
1259 #   endif
1260 #   ifdef DBL_MAX
1261 #       define NV_MAX DBL_MAX
1262 #   endif
1263 #   ifdef DBL_MIN_10_EXP
1264 #       define NV_MIN_10_EXP DBL_MIN_10_EXP
1265 #   endif
1266 #   ifdef DBL_MAX_10_EXP
1267 #       define NV_MAX_10_EXP DBL_MAX_10_EXP
1268 #   endif
1269 #   ifdef DBL_EPSILON
1270 #       define NV_EPSILON DBL_EPSILON
1271 #   endif
1272 #   ifdef DBL_MAX
1273 #       define NV_MAX DBL_MAX
1274 #       define NV_MIN DBL_MIN
1275 #   else
1276 #       ifdef HUGE_VAL
1277 #           define NV_MAX HUGE_VAL
1278 #       endif
1279 #   endif
1280 #   define Perl_cos cos
1281 #   define Perl_sin sin
1282 #   define Perl_sqrt sqrt
1283 #   define Perl_exp exp
1284 #   define Perl_log log
1285 #   define Perl_atan2 atan2
1286 #   define Perl_pow pow
1287 #   define Perl_floor floor
1288 #   define Perl_fmod fmod
1289 #   define Perl_modf(x,y) modf(x,y)
1290 #   define Perl_frexp(x,y) frexp(x,y)
1291 #endif
1292
1293 /* rumor has it that Win32 has _fpclass() */
1294
1295 #if !defined(Perl_fp_class) && (defined(HAS_FPCLASS)||defined(HAS_FPCLASSL))
1296 #    ifdef I_IEEFP
1297 #        include <ieeefp.h>
1298 #    endif
1299 #    ifdef I_FP
1300 #        include <fp.h>
1301 #    endif
1302 #    if defined(USE_LONG_DOUBLE) && defined(HAS_FPCLASSL)
1303 #        define Perl_fp_class()         fpclassl(x)
1304 #    else
1305 #        define Perl_fp_class()         fpclass(x)
1306 #    endif
1307 #    define Perl_fp_class_snan(x)       (Perl_fp_class(x)==FP_CLASS_SNAN)
1308 #    define Perl_fp_class_qnan(x)       (Perl_fp_class(x)==FP_CLASS_QNAN)
1309 #    define Perl_fp_class_nan(x)        (Perl_fp_class(x)==FP_CLASS_SNAN||Perl_fp_class(x)==FP_CLASS_QNAN)
1310 #    define Perl_fp_class_ninf(x)       (Perl_fp_class(x)==FP_CLASS_NINF)
1311 #    define Perl_fp_class_pinf(x)       (Perl_fp_class(x)==FP_CLASS_PINF)
1312 #    define Perl_fp_class_inf(x)        (Perl_fp_class(x)==FP_CLASS_NINF||Perl_fp_class(x)==FP_CLASS_PINF)
1313 #    define Perl_fp_class_nnorm(x)      (Perl_fp_class(x)==FP_CLASS_NNORM)
1314 #    define Perl_fp_class_pnorm(x)      (Perl_fp_class(x)==FP_CLASS_PNORM)
1315 #    define Perl_fp_class_norm(x)       (Perl_fp_class(x)==FP_CLASS_NNORM||Perl_fp_class(x)==FP_CLASS_PNORM)
1316 #    define Perl_fp_class_ndenorm(x)    (Perl_fp_class(x)==FP_CLASS_NDENORM)
1317 #    define Perl_fp_class_pdenorm(x)    (Perl_fp_class(x)==FP_CLASS_PDENORM)
1318 #    define Perl_fp_class_denorm(x)     (Perl_fp_class(x)==FP_CLASS_NDENORM||Perl_fp_class(x)==FP_CLASS_PDENORM)
1319 #    define Perl_fp_class_nzero(x)      (Perl_fp_class(x)==FP_CLASS_NZERO)
1320 #    define Perl_fp_class_pzero(x)      (Perl_fp_class(x)==FP_CLASS_PZERO)
1321 #    define Perl_fp_class_zero(x)       (Perl_fp_class(x)==FP_CLASS_NZERO||Perl_fp_class(x)==FP_CLASS_PZERO)
1322 #endif
1323
1324 #if !defined(Perl_fp_class) && defined(HAS_FP_CLASS) && !defined(PERL_MICRO)
1325 #    include <math.h>
1326 #    if !defined(FP_SNAN) && defined(I_FP_CLASS)
1327 #        include <fp_class.h>
1328 #    endif
1329 #    define Perl_fp_class(x)            fp_class(x)
1330 #    define Perl_fp_class_snan(x)       (fp_class(x)==FP_SNAN)
1331 #    define Perl_fp_class_qnan(x)       (fp_class(x)==FP_QNAN)
1332 #    define Perl_fp_class_nan(x)        (fp_class(x)==FP_SNAN||fp_class(x)==FP_QNAN)
1333 #    define Perl_fp_class_ninf(x)       (fp_class(x)==FP_NEG_INF)
1334 #    define Perl_fp_class_pinf(x)       (fp_class(x)==FP_POS_INF)
1335 #    define Perl_fp_class_inf(x)        (fp_class(x)==FP_NEG_INF||fp_class(x)==FP_POS_INF)
1336 #    define Perl_fp_class_nnorm(x)      (fp_class(x)==FP_NEG_NORM)
1337 #    define Perl_fp_class_pnorm(x)      (fp_class(x)==FP_POS_NORM)
1338 #    define Perl_fp_class_norm(x)       (fp_class(x)==FP_NEG_NORM||fp_class(x)==FP_POS_NORM)
1339 #    define Perl_fp_class_ndenorm(x)    (fp_class(x)==FP_NEG_DENORM)
1340 #    define Perl_fp_class_pdenorm(x)    (fp_class(x)==FP_POS_DENORM)
1341 #    define Perl_fp_class_denorm(x)     (fp_class(x)==FP_NEG_DENORM||fp_class(x)==FP_POS_DENORM)
1342 #    define Perl_fp_class_nzero(x)      (fp_class(x)==FP_NEG_ZERO)
1343 #    define Perl_fp_class_pzero(x)      (fp_class(x)==FP_POS_ZERO)
1344 #    define Perl_fp_class_zero(x)       (fp_class(x)==FP_NEG_ZERO||fp_class(x)==FP_POS_ZERO)
1345 #endif
1346
1347 #if !defined(Perl_fp_class) && defined(HAS_FPCLASSIFY)
1348 #    include <math.h>
1349 #    define Perl_fp_class(x)            fpclassify(x)
1350 #    define Perl_fp_class_nan(x)        (fp_classify(x)==FP_SNAN||fp_classify(x)==FP_QNAN)
1351 #    define Perl_fp_class_inf(x)        (fp_classify(x)==FP_INFINITE)
1352 #    define Perl_fp_class_norm(x)       (fp_classify(x)==FP_NORMAL)
1353 #    define Perl_fp_class_denorm(x)     (fp_classify(x)==FP_SUBNORMAL)
1354 #    define Perl_fp_class_zero(x)       (fp_classify(x)==FP_ZERO)
1355 #endif
1356
1357 #if !defined(Perl_fp_class) && defined(HAS_CLASS)
1358 #    include <math.h>
1359 #    ifndef _cplusplus
1360 #        define Perl_fp_class(x)        class(x)
1361 #    else
1362 #        define Perl_fp_class(x)        _class(x)
1363 #    endif
1364 #    define Perl_fp_class_snan(x)       (Perl_fp_class(x)==FP_NANS)
1365 #    define Perl_fp_class_qnan(x)       (Perl_fp_class(x)==FP_NANQ)
1366 #    define Perl_fp_class_nan(x)        (Perl_fp_class(x)==FP_SNAN||Perl_fp_class(x)==FP_QNAN)
1367 #    define Perl_fp_class_ninf(x)       (Perl_fp_class(x)==FP_MINUS_INF)
1368 #    define Perl_fp_class_pinf(x)       (Perl_fp_class(x)==FP_PLUS_INF)
1369 #    define Perl_fp_class_inf(x)        (Perl_fp_class(x)==FP_MINUS_INF||Perl_fp_class(x)==FP_PLUS_INF)
1370 #    define Perl_fp_class_nnorm(x)      (Perl_fp_class(x)==FP_MINUS_NORM)
1371 #    define Perl_fp_class_pnorm(x)      (Perl_fp_class(x)==FP_PLUS_NORM)
1372 #    define Perl_fp_class_norm(x)       (Perl_fp_class(x)==FP_MINUS_NORM||Perl_fp_class(x)==FP_PLUS_NORM)
1373 #    define Perl_fp_class_ndenorm(x)    (Perl_fp_class(x)==FP_MINUS_DENORM)
1374 #    define Perl_fp_class_pdenorm(x)    (Perl_fp_class(x)==FP_PLUS_DENORM)
1375 #    define Perl_fp_class_denorm(x)     (Perl_fp_class(x)==FP_MINUS_DENORM||Perl_fp_class(x)==FP_PLUS_DENORM)
1376 #    define Perl_fp_class_nzero(x)      (Perl_fp_class(x)==FP_MINUS_ZERO)
1377 #    define Perl_fp_class_pzero(x)      (Perl_fp_class(x)==FP_PLUS_ZERO)
1378 #    define Perl_fp_class_zero(x)       (Perl_fp_class(x)==FP_MINUS_ZERO||Perl_fp_class(x)==FP_PLUS_ZERO)
1379 #endif
1380
1381 /* rumor has it that Win32 has _isnan() */
1382
1383 #ifndef Perl_isnan
1384 #   ifdef HAS_ISNAN
1385 #       define Perl_isnan(x) isnan((NV)x)
1386 #   else
1387 #       ifdef Perl_fp_class_nan
1388 #           define Perl_isnan(x) Perl_fp_class_nan(x)
1389 #       else
1390 #           ifdef HAS_UNORDERED
1391 #               define Perl_isnan(x) unordered((x), 0.0)
1392 #           else
1393 #               define Perl_isnan(x) ((x)!=(x))
1394 #           endif
1395 #       endif
1396 #   endif
1397 #endif
1398
1399 #ifdef UNDER_CE
1400 int isnan(double d);
1401 #endif
1402
1403 #ifndef Perl_isinf
1404 #   ifdef HAS_ISINF
1405 #       define Perl_isinf(x) isinf((NV)x)
1406 #   else
1407 #       ifdef Perl_fp_class_inf
1408 #           define Perl_isinf(x) Perl_fp_class_inf(x)
1409 #       else
1410 #           define Perl_isinf(x) ((x)==NV_INF)
1411 #       endif
1412 #   endif
1413 #endif
1414
1415 #ifndef Perl_isfinite
1416 #   ifdef HAS_FINITE
1417 #       define Perl_isfinite(x) finite((NV)x)
1418 #   else
1419 #       ifdef HAS_ISFINITE
1420 #           define Perl_isfinite(x) isfinite(x)
1421 #       else
1422 #           ifdef Perl_fp_class_finite
1423 #               define Perl_isfinite(x) Perl_fp_class_finite(x)
1424 #           else
1425 #               define Perl_isfinite(x) !(Perl_is_inf(x)||Perl_is_nan(x))
1426 #           endif
1427 #       endif
1428 #   endif
1429 #endif
1430
1431 #define Perl_atof(s) Perl_my_atof(s)
1432 #define Perl_atof2(s, np) Perl_my_atof2(s, np)
1433
1434 /* Previously these definitions used hardcoded figures.
1435  * It is hoped these formula are more portable, although
1436  * no data one way or another is presently known to me.
1437  * The "PERL_" names are used because these calculated constants
1438  * do not meet the ANSI requirements for LONG_MAX, etc., which
1439  * need to be constants acceptable to #if - kja
1440  *    define PERL_LONG_MAX        2147483647L
1441  *    define PERL_LONG_MIN        (-LONG_MAX - 1)
1442  *    define PERL ULONG_MAX       4294967295L
1443  */
1444
1445 #ifdef I_LIMITS  /* Needed for cast_xxx() functions below. */
1446 #  include <limits.h>
1447 #else
1448 #ifdef I_VALUES
1449 #  include <values.h>
1450 #endif
1451 #endif
1452
1453 /*
1454  * Try to figure out max and min values for the integral types.  THE CORRECT
1455  * SOLUTION TO THIS MESS: ADAPT enquire.c FROM GCC INTO CONFIGURE.  The
1456  * following hacks are used if neither limits.h or values.h provide them:
1457  * U<TYPE>_MAX: for types >= int: ~(unsigned TYPE)0
1458  *              for types <  int:  (unsigned TYPE)~(unsigned)0
1459  *      The argument to ~ must be unsigned so that later signed->unsigned
1460  *      conversion can't modify the value's bit pattern (e.g. -0 -> +0),
1461  *      and it must not be smaller than int because ~ does integral promotion.
1462  * <type>_MAX: (<type>) (U<type>_MAX >> 1)
1463  * <type>_MIN: -<type>_MAX - <is_twos_complement_architecture: (3 & -1) == 3>.
1464  *      The latter is a hack which happens to work on some machines but
1465  *      does *not* catch any random system, or things like integer types
1466  *      with NaN if that is possible.
1467  *
1468  * All of the types are explicitly cast to prevent accidental loss of
1469  * numeric range, and in the hope that they will be less likely to confuse
1470  * over-eager optimizers.
1471  *
1472  */
1473
1474 #define PERL_UCHAR_MIN ((unsigned char)0)
1475
1476 #ifdef UCHAR_MAX
1477 #  define PERL_UCHAR_MAX ((unsigned char)UCHAR_MAX)
1478 #else
1479 #  ifdef MAXUCHAR
1480 #    define PERL_UCHAR_MAX ((unsigned char)MAXUCHAR)
1481 #  else
1482 #    define PERL_UCHAR_MAX       ((unsigned char)~(unsigned)0)
1483 #  endif
1484 #endif
1485
1486 /*
1487  * CHAR_MIN and CHAR_MAX are not included here, as the (char) type may be
1488  * ambiguous. It may be equivalent to (signed char) or (unsigned char)
1489  * depending on local options. Until Configure detects this (or at least
1490  * detects whether the "signed" keyword is available) the CHAR ranges
1491  * will not be included. UCHAR functions normally.
1492  *                                                           - kja
1493  */
1494
1495 #define PERL_USHORT_MIN ((unsigned short)0)
1496
1497 #ifdef USHORT_MAX
1498 #  define PERL_USHORT_MAX ((unsigned short)USHORT_MAX)
1499 #else
1500 #  ifdef MAXUSHORT
1501 #    define PERL_USHORT_MAX ((unsigned short)MAXUSHORT)
1502 #  else
1503 #    ifdef USHRT_MAX
1504 #      define PERL_USHORT_MAX ((unsigned short)USHRT_MAX)
1505 #    else
1506 #      define PERL_USHORT_MAX       ((unsigned short)~(unsigned)0)
1507 #    endif
1508 #  endif
1509 #endif
1510
1511 #ifdef SHORT_MAX
1512 #  define PERL_SHORT_MAX ((short)SHORT_MAX)
1513 #else
1514 #  ifdef MAXSHORT    /* Often used in <values.h> */
1515 #    define PERL_SHORT_MAX ((short)MAXSHORT)
1516 #  else
1517 #    ifdef SHRT_MAX
1518 #      define PERL_SHORT_MAX ((short)SHRT_MAX)
1519 #    else
1520 #      define PERL_SHORT_MAX      ((short) (PERL_USHORT_MAX >> 1))
1521 #    endif
1522 #  endif
1523 #endif
1524
1525 #ifdef SHORT_MIN
1526 #  define PERL_SHORT_MIN ((short)SHORT_MIN)
1527 #else
1528 #  ifdef MINSHORT
1529 #    define PERL_SHORT_MIN ((short)MINSHORT)
1530 #  else
1531 #    ifdef SHRT_MIN
1532 #      define PERL_SHORT_MIN ((short)SHRT_MIN)
1533 #    else
1534 #      define PERL_SHORT_MIN        (-PERL_SHORT_MAX - ((3 & -1) == 3))
1535 #    endif
1536 #  endif
1537 #endif
1538
1539 #ifdef UINT_MAX
1540 #  define PERL_UINT_MAX ((unsigned int)UINT_MAX)
1541 #else
1542 #  ifdef MAXUINT
1543 #    define PERL_UINT_MAX ((unsigned int)MAXUINT)
1544 #  else
1545 #    define PERL_UINT_MAX       (~(unsigned int)0)
1546 #  endif
1547 #endif
1548
1549 #define PERL_UINT_MIN ((unsigned int)0)
1550
1551 #ifdef INT_MAX
1552 #  define PERL_INT_MAX ((int)INT_MAX)
1553 #else
1554 #  ifdef MAXINT    /* Often used in <values.h> */
1555 #    define PERL_INT_MAX ((int)MAXINT)
1556 #  else
1557 #    define PERL_INT_MAX        ((int)(PERL_UINT_MAX >> 1))
1558 #  endif
1559 #endif
1560
1561 #ifdef INT_MIN
1562 #  define PERL_INT_MIN ((int)INT_MIN)
1563 #else
1564 #  ifdef MININT
1565 #    define PERL_INT_MIN ((int)MININT)
1566 #  else
1567 #    define PERL_INT_MIN        (-PERL_INT_MAX - ((3 & -1) == 3))
1568 #  endif
1569 #endif
1570
1571 #ifdef ULONG_MAX
1572 #  define PERL_ULONG_MAX ((unsigned long)ULONG_MAX)
1573 #else
1574 #  ifdef MAXULONG
1575 #    define PERL_ULONG_MAX ((unsigned long)MAXULONG)
1576 #  else
1577 #    define PERL_ULONG_MAX       (~(unsigned long)0)
1578 #  endif
1579 #endif
1580
1581 #define PERL_ULONG_MIN ((unsigned long)0L)
1582
1583 #ifdef LONG_MAX
1584 #  define PERL_LONG_MAX ((long)LONG_MAX)
1585 #else
1586 #  ifdef MAXLONG    /* Often used in <values.h> */
1587 #    define PERL_LONG_MAX ((long)MAXLONG)
1588 #  else
1589 #    define PERL_LONG_MAX        ((long) (PERL_ULONG_MAX >> 1))
1590 #  endif
1591 #endif
1592
1593 #ifdef LONG_MIN
1594 #  define PERL_LONG_MIN ((long)LONG_MIN)
1595 #else
1596 #  ifdef MINLONG
1597 #    define PERL_LONG_MIN ((long)MINLONG)
1598 #  else
1599 #    define PERL_LONG_MIN        (-PERL_LONG_MAX - ((3 & -1) == 3))
1600 #  endif
1601 #endif
1602
1603 #ifdef UV_IS_QUAD
1604
1605 #    define PERL_UQUAD_MAX      (~(UV)0)
1606 #    define PERL_UQUAD_MIN      ((UV)0)
1607 #    define PERL_QUAD_MAX       ((IV) (PERL_UQUAD_MAX >> 1))
1608 #    define PERL_QUAD_MIN       (-PERL_QUAD_MAX - ((3 & -1) == 3))
1609
1610 #endif
1611
1612 struct perl_mstats {
1613     UV *nfree;
1614     UV *ntotal;
1615     IV topbucket, topbucket_ev, topbucket_odd, totfree, total, total_chain;
1616     IV total_sbrk, sbrks, sbrk_good, sbrk_slack, start_slack, sbrked_remains;
1617     IV minbucket;
1618     /* Level 1 info */
1619     UV *bucket_mem_size;
1620     UV *bucket_available_size;
1621     UV nbuckets;
1622 };
1623 struct RExC_state_t;
1624
1625 typedef MEM_SIZE STRLEN;
1626
1627 typedef struct op OP;
1628 typedef struct cop COP;
1629 typedef struct unop UNOP;
1630 typedef struct binop BINOP;
1631 typedef struct listop LISTOP;
1632 typedef struct logop LOGOP;
1633 typedef struct pmop PMOP;
1634 typedef struct svop SVOP;
1635 typedef struct padop PADOP;
1636 typedef struct pvop PVOP;
1637 typedef struct loop LOOP;
1638
1639 typedef struct interpreter PerlInterpreter;
1640
1641 /* Amdahl's <ksync.h> has struct sv */
1642 /* SGI's <sys/sema.h> has struct sv */
1643 #if defined(UTS) || defined(__sgi)
1644 #   define STRUCT_SV perl_sv
1645 #else
1646 #   define STRUCT_SV sv
1647 #endif
1648 typedef struct STRUCT_SV SV;
1649 typedef struct av AV;
1650 typedef struct hv HV;
1651 typedef struct cv CV;
1652 typedef struct regexp REGEXP;
1653 typedef struct gp GP;
1654 typedef struct gv GV;
1655 typedef struct io IO;
1656 typedef struct context PERL_CONTEXT;
1657 typedef struct block BLOCK;
1658
1659 typedef struct magic MAGIC;
1660 typedef struct xrv XRV;
1661 typedef struct xpv XPV;
1662 typedef struct xpviv XPVIV;
1663 typedef struct xpvuv XPVUV;
1664 typedef struct xpvnv XPVNV;
1665 typedef struct xpvmg XPVMG;
1666 typedef struct xpvlv XPVLV;
1667 typedef struct xpvav XPVAV;
1668 typedef struct xpvhv XPVHV;
1669 typedef struct xpvgv XPVGV;
1670 typedef struct xpvcv XPVCV;
1671 typedef struct xpvbm XPVBM;
1672 typedef struct xpvfm XPVFM;
1673 typedef struct xpvio XPVIO;
1674 typedef struct mgvtbl MGVTBL;
1675 typedef union any ANY;
1676 typedef struct ptr_tbl_ent PTR_TBL_ENT_t;
1677 typedef struct ptr_tbl PTR_TBL_t;
1678 typedef struct clone_params CLONE_PARAMS;
1679
1680
1681 #include "handy.h"
1682
1683 #if defined(USE_LARGE_FILES) && !defined(NO_64_BIT_RAWIO)
1684 #   if LSEEKSIZE == 8 && !defined(USE_64_BIT_RAWIO)
1685 #       define USE_64_BIT_RAWIO /* implicit */
1686 #   endif
1687 #endif
1688
1689 /* Notice the use of HAS_FSEEKO: now we are obligated to always use
1690  * fseeko/ftello if possible.  Don't go #defining ftell to ftello yourself,
1691  * however, because operating systems like to do that themself. */
1692 #ifndef FSEEKSIZE
1693 #   ifdef HAS_FSEEKO
1694 #       define FSEEKSIZE LSEEKSIZE
1695 #   else
1696 #       define FSEEKSIZE LONGSIZE
1697 #   endif
1698 #endif
1699
1700 #if defined(USE_LARGE_FILES) && !defined(NO_64_BIT_STDIO)
1701 #   if FSEEKSIZE == 8 && !defined(USE_64_BIT_STDIO)
1702 #       define USE_64_BIT_STDIO /* implicit */
1703 #   endif
1704 #endif
1705
1706 #ifdef USE_64_BIT_RAWIO
1707 #   ifdef HAS_OFF64_T
1708 #       undef Off_t
1709 #       define Off_t off64_t
1710 #       undef LSEEKSIZE
1711 #       define LSEEKSIZE 8
1712 #   endif
1713 /* Most 64-bit environments have defines like _LARGEFILE_SOURCE that
1714  * will trigger defines like the ones below.  Some 64-bit environments,
1715  * however, do not.  Therefore we have to explicitly mix and match. */
1716 #   if defined(USE_OPEN64)
1717 #       define open open64
1718 #   endif
1719 #   if defined(USE_LSEEK64)
1720 #       define lseek lseek64
1721 #   else
1722 #       if defined(USE_LLSEEK)
1723 #           define lseek llseek
1724 #       endif
1725 #   endif
1726 #   if defined(USE_STAT64)
1727 #       define stat stat64
1728 #   endif
1729 #   if defined(USE_FSTAT64)
1730 #       define fstat fstat64
1731 #   endif
1732 #   if defined(USE_LSTAT64)
1733 #       define lstat lstat64
1734 #   endif
1735 #   if defined(USE_FLOCK64)
1736 #       define flock flock64
1737 #   endif
1738 #   if defined(USE_LOCKF64)
1739 #       define lockf lockf64
1740 #   endif
1741 #   if defined(USE_FCNTL64)
1742 #       define fcntl fcntl64
1743 #   endif
1744 #   if defined(USE_TRUNCATE64)
1745 #       define truncate truncate64
1746 #   endif
1747 #   if defined(USE_FTRUNCATE64)
1748 #       define ftruncate ftruncate64
1749 #   endif
1750 #endif
1751
1752 #ifdef USE_64_BIT_STDIO
1753 #   ifdef HAS_FPOS64_T
1754 #       undef Fpos_t
1755 #       define Fpos_t fpos64_t
1756 #   endif
1757 /* Most 64-bit environments have defines like _LARGEFILE_SOURCE that
1758  * will trigger defines like the ones below.  Some 64-bit environments,
1759  * however, do not. */
1760 #   if defined(USE_FOPEN64)
1761 #       define fopen fopen64
1762 #   endif
1763 #   if defined(USE_FSEEK64)
1764 #       define fseek fseek64 /* don't do fseeko here, see perlio.c */
1765 #   endif
1766 #   if defined(USE_FTELL64)
1767 #       define ftell ftell64 /* don't do ftello here, see perlio.c */
1768 #   endif
1769 #   if defined(USE_FSETPOS64)
1770 #       define fsetpos fsetpos64
1771 #   endif
1772 #   if defined(USE_FGETPOS64)
1773 #       define fgetpos fgetpos64
1774 #   endif
1775 #   if defined(USE_TMPFILE64)
1776 #       define tmpfile tmpfile64
1777 #   endif
1778 #   if defined(USE_FREOPEN64)
1779 #       define freopen freopen64
1780 #   endif
1781 #endif
1782
1783 #if defined(OS2) || defined(MACOS_TRADITIONAL)
1784 #  include "iperlsys.h"
1785 #endif
1786
1787 #if defined(__OPEN_VM)
1788 #   include "vmesa/vmesaish.h"
1789 #   define ISHISH "vmesa"
1790 #endif
1791
1792 #ifdef DOSISH
1793 #   if defined(OS2)
1794 #       include "os2ish.h"
1795 #   else
1796 #       include "dosish.h"
1797 #   endif
1798 #   define ISHISH "dos"
1799 #endif
1800
1801 #if defined(VMS)
1802 #   include "vmsish.h"
1803 #   include "embed.h"
1804 #   define ISHISH "vms"
1805 #endif
1806
1807 #if defined(PLAN9)
1808 #   include "./plan9/plan9ish.h"
1809 #   define ISHISH "plan9"
1810 #endif
1811
1812 #if defined(MPE)
1813 #  include "mpeix/mpeixish.h"
1814 #  define ISHISH "mpeix"
1815 #endif
1816
1817 #if defined(__VOS__)
1818 #   ifdef __GNUC__
1819 #     include "./vos/vosish.h"
1820 #   else
1821 #     include "vos/vosish.h"
1822 #   endif
1823 #   define ISHISH "vos"
1824 #endif
1825
1826 #if defined(EPOC)
1827 #   include "epocish.h"
1828 #   define ISHISH "epoc"
1829 #endif
1830
1831 #if defined(MACOS_TRADITIONAL)
1832 #   include "macos/macish.h"
1833 #   ifndef NO_ENVIRON_ARRAY
1834 #       define NO_ENVIRON_ARRAY
1835 #   endif
1836 #   define ISHISH "macos classic"
1837 #endif
1838
1839 #if defined(__BEOS__)
1840 #   include "beos/beosish.h"
1841 #   define ISHISH "beos"
1842 #endif
1843
1844 #ifndef ISHISH
1845 #   include "unixish.h"
1846 #   define ISHISH "unix"
1847 #endif
1848
1849 #ifndef NO_ENVIRON_ARRAY
1850 #  define USE_ENVIRON_ARRAY
1851 #endif
1852
1853 /*
1854  * initialise to avoid floating-point exceptions from overflow, etc
1855  */
1856 #ifndef PERL_FPU_INIT
1857 #  ifdef HAS_FPSETMASK
1858 #    if HAS_FLOATINGPOINT_H
1859 #      include <floatingpoint.h>
1860 #    endif
1861 #    define PERL_FPU_INIT fpsetmask(0);
1862 #  else
1863 #    if defined(SIGFPE) && defined(SIG_IGN)
1864 #      define PERL_FPU_INIT signal(SIGFPE, SIG_IGN);
1865 #    else
1866 #      define PERL_FPU_INIT
1867 #    endif
1868 #  endif
1869 #endif
1870
1871 #ifndef PERL_SYS_INIT3
1872 #  define PERL_SYS_INIT3(argvp,argcp,envp) PERL_SYS_INIT(argvp,argcp)
1873 #endif
1874
1875 #ifndef PERL_WRITE_MSG_TO_CONSOLE
1876 #  define PERL_WRITE_MSG_TO_CONSOLE(io, msg, len) PerlIO_write(io, msg, len)
1877 #endif
1878
1879 #ifndef MAXPATHLEN
1880 #  ifdef PATH_MAX
1881 #    ifdef _POSIX_PATH_MAX
1882 #       if PATH_MAX > _POSIX_PATH_MAX
1883 /* MAXPATHLEN is supposed to include the final null character,
1884  * as opposed to PATH_MAX and _POSIX_PATH_MAX. */
1885 #         define MAXPATHLEN (PATH_MAX+1)
1886 #       else
1887 #         define MAXPATHLEN (_POSIX_PATH_MAX+1)
1888 #       endif
1889 #    else
1890 #      define MAXPATHLEN (PATH_MAX+1)
1891 #    endif
1892 #  else
1893 #    ifdef _POSIX_PATH_MAX
1894 #       define MAXPATHLEN (_POSIX_PATH_MAX+1)
1895 #    else
1896 #       define MAXPATHLEN 1024  /* Err on the large side. */
1897 #    endif
1898 #  endif
1899 #endif
1900
1901 /*
1902  * USE_5005THREADS needs to be after unixish.h as <pthread.h> includes
1903  * <sys/signal.h> which defines NSIG - which will stop inclusion of <signal.h>
1904  * this results in many functions being undeclared which bothers C++
1905  * May make sense to have threads after "*ish.h" anyway
1906  */
1907
1908 #if defined(USE_5005THREADS) || defined(USE_ITHREADS)
1909 #  if defined(USE_5005THREADS)
1910    /* pending resolution of licensing issues, we avoid the erstwhile
1911     * atomic.h everywhere */
1912 #  define EMULATE_ATOMIC_REFCOUNTS
1913 #  endif
1914 #  ifdef NETWARE
1915 #   include <nw5thread.h>
1916 #  else
1917 #  ifdef FAKE_THREADS
1918 #    include "fakethr.h"
1919 #  else
1920 #    ifdef WIN32
1921 #      include <win32thread.h>
1922 #    else
1923 #      ifdef OS2
1924 #        include "os2thread.h"
1925 #      else
1926 #        ifdef I_MACH_CTHREADS
1927 #          include <mach/cthreads.h>
1928 #          if (defined(NeXT) || defined(__NeXT__)) && defined(PERL_POLLUTE_MALLOC)
1929 #            define MUTEX_INIT_CALLS_MALLOC
1930 #          endif
1931 typedef cthread_t       perl_os_thread;
1932 typedef mutex_t         perl_mutex;
1933 typedef condition_t     perl_cond;
1934 typedef void *          perl_key;
1935 #        else /* Posix threads */
1936 #          ifdef I_PTHREAD
1937 #            include <pthread.h>
1938 #          endif
1939 typedef pthread_t       perl_os_thread;
1940 typedef pthread_mutex_t perl_mutex;
1941 typedef pthread_cond_t  perl_cond;
1942 typedef pthread_key_t   perl_key;
1943 #        endif /* I_MACH_CTHREADS */
1944 #      endif /* OS2 */
1945 #    endif /* WIN32 */
1946 #  endif /* FAKE_THREADS */
1947 #endif  /* NETWARE */
1948 #endif /* USE_5005THREADS || USE_ITHREADS */
1949
1950 #if defined(WIN32)
1951 #  include "win32.h"
1952 #endif
1953
1954 #ifdef NETWARE
1955 #  include "netware.h"
1956 #endif
1957
1958 #ifdef VMS
1959 #   define STATUS_NATIVE        PL_statusvalue_vms
1960 #   define STATUS_NATIVE_EXPORT \
1961         (((I32)PL_statusvalue_vms == -1 ? 44 : PL_statusvalue_vms) | (VMSISH_HUSHED ? 0x10000000 : 0))
1962 #   define STATUS_NATIVE_SET(n)                                         \
1963         STMT_START {                                                    \
1964             PL_statusvalue_vms = (n);                                   \
1965             if ((I32)PL_statusvalue_vms == -1)                          \
1966                 PL_statusvalue = -1;                                    \
1967             else if (PL_statusvalue_vms & STS$M_SUCCESS)                \
1968                 PL_statusvalue = 0;                                     \
1969             else if ((PL_statusvalue_vms & STS$M_SEVERITY) == 0)        \
1970                 PL_statusvalue = 1 << 8;                                \
1971             else                                                        \
1972                 PL_statusvalue = (PL_statusvalue_vms & STS$M_SEVERITY) << 8;    \
1973         } STMT_END
1974 #   define STATUS_POSIX PL_statusvalue
1975 #   ifdef VMSISH_STATUS
1976 #       define STATUS_CURRENT   (VMSISH_STATUS ? STATUS_NATIVE : STATUS_POSIX)
1977 #   else
1978 #       define STATUS_CURRENT   STATUS_POSIX
1979 #   endif
1980 #   define STATUS_POSIX_SET(n)                          \
1981         STMT_START {                                    \
1982             PL_statusvalue = (n);                               \
1983             if (PL_statusvalue != -1) {                 \
1984                 PL_statusvalue &= 0xFFFF;                       \
1985                 PL_statusvalue_vms = PL_statusvalue ? 44 : 1;   \
1986             }                                           \
1987             else PL_statusvalue_vms = -1;                       \
1988         } STMT_END
1989 #   define STATUS_ALL_SUCCESS   (PL_statusvalue = 0, PL_statusvalue_vms = 1)
1990 #   define STATUS_ALL_FAILURE   (PL_statusvalue = 1, PL_statusvalue_vms = 44)
1991 #else
1992 #   define STATUS_NATIVE        STATUS_POSIX
1993 #   define STATUS_NATIVE_EXPORT STATUS_POSIX
1994 #   define STATUS_NATIVE_SET    STATUS_POSIX_SET
1995 #   define STATUS_POSIX         PL_statusvalue
1996 #   define STATUS_POSIX_SET(n)          \
1997         STMT_START {                    \
1998             PL_statusvalue = (n);               \
1999             if (PL_statusvalue != -1)   \
2000                 PL_statusvalue &= 0xFFFF;       \
2001         } STMT_END
2002 #   define STATUS_CURRENT STATUS_POSIX
2003 #   define STATUS_ALL_SUCCESS   (PL_statusvalue = 0)
2004 #   define STATUS_ALL_FAILURE   (PL_statusvalue = 1)
2005 #endif
2006
2007 /* flags in PL_exit_flags for nature of exit() */
2008 #define PERL_EXIT_EXPECTED      0x01
2009 #define PERL_EXIT_DESTRUCT_END  0x02  /* Run END in perl_destruct */
2010
2011 #ifndef MEMBER_TO_FPTR
2012 #  define MEMBER_TO_FPTR(name)          name
2013 #endif
2014
2015 /* format to use for version numbers in file/directory names */
2016 /* XXX move to Configure? */
2017 #ifndef PERL_FS_VER_FMT
2018 #  define PERL_FS_VER_FMT       "%d.%d.%d"
2019 #endif
2020
2021 /* This defines a way to flush all output buffers.  This may be a
2022  * performance issue, so we allow people to disable it.  Also, if
2023  * we are using stdio, there are broken implementations of fflush(NULL)
2024  * out there, Solaris being the most prominent.
2025  */
2026 #ifndef PERL_FLUSHALL_FOR_CHILD
2027 # if defined(USE_PERLIO) || defined(FFLUSH_NULL) || defined(USE_SFIO)
2028 #  define PERL_FLUSHALL_FOR_CHILD       PerlIO_flush((PerlIO*)NULL)
2029 # else
2030 #  ifdef FFLUSH_ALL
2031 #   define PERL_FLUSHALL_FOR_CHILD      my_fflush_all()
2032 #  else
2033 #   define PERL_FLUSHALL_FOR_CHILD      NOOP
2034 #  endif
2035 # endif
2036 #endif
2037
2038 #ifndef PERL_WAIT_FOR_CHILDREN
2039 #  define PERL_WAIT_FOR_CHILDREN        NOOP
2040 #endif
2041
2042 /* the traditional thread-unsafe notion of "current interpreter". */
2043 #ifndef PERL_SET_INTERP
2044 #  define PERL_SET_INTERP(i)            (PL_curinterp = (PerlInterpreter*)(i))
2045 #endif
2046
2047 #ifndef PERL_GET_INTERP
2048 #  define PERL_GET_INTERP               (PL_curinterp)
2049 #endif
2050
2051 #if defined(PERL_IMPLICIT_CONTEXT) && !defined(PERL_GET_THX)
2052 #  ifdef USE_5005THREADS
2053 #    define PERL_GET_THX                ((struct perl_thread *)PERL_GET_CONTEXT)
2054 #  else
2055 #  ifdef MULTIPLICITY
2056 #    define PERL_GET_THX                ((PerlInterpreter *)PERL_GET_CONTEXT)
2057 #  endif
2058 #  endif
2059 #  define PERL_SET_THX(t)               PERL_SET_CONTEXT(t)
2060 #endif
2061
2062 #ifndef SVf
2063 #  ifdef CHECK_FORMAT
2064 #    define SVf "p"
2065 #  else
2066 #    define SVf "_"
2067 #  endif
2068 #endif
2069
2070 #ifndef UVf
2071 #  ifdef CHECK_FORMAT
2072 #    define UVf UVuf
2073 #  else
2074 #    define UVf "Vu"
2075 #  endif
2076 #endif
2077
2078 #ifndef VDf
2079 #  ifdef CHECK_FORMAT
2080 #    define VDf "p"
2081 #  else
2082 #    define VDf "vd"
2083 #  endif
2084 #endif
2085
2086 #ifndef Nullformat
2087 #  ifdef CHECK_FORMAT
2088 #    define Nullformat "%s",""
2089 #  else
2090 #    define Nullformat Nullch
2091 #  endif
2092 #endif
2093
2094 /* Some unistd.h's give a prototype for pause() even though
2095    HAS_PAUSE ends up undefined.  This causes the #define
2096    below to be rejected by the compiler.  Sigh.
2097 */
2098 #ifdef HAS_PAUSE
2099 #define Pause   pause
2100 #else
2101 #define Pause() sleep((32767<<16)+32767)
2102 #endif
2103
2104 #ifndef IOCPARM_LEN
2105 #   ifdef IOCPARM_MASK
2106         /* on BSDish systes we're safe */
2107 #       define IOCPARM_LEN(x)  (((x) >> 16) & IOCPARM_MASK)
2108 #   else
2109         /* otherwise guess at what's safe */
2110 #       define IOCPARM_LEN(x)   256
2111 #   endif
2112 #endif
2113
2114 #if defined(__CYGWIN__)
2115 /* USEMYBINMODE
2116  *   This symbol, if defined, indicates that the program should
2117  *   use the routine my_binmode(FILE *fp, char iotype, int mode) to insure
2118  *   that a file is in "binary" mode -- that is, that no translation
2119  *   of bytes occurs on read or write operations.
2120  */
2121 #  define USEMYBINMODE / **/
2122 #  define my_binmode(fp, iotype, mode) \
2123             (PerlLIO_setmode(PerlIO_fileno(fp), mode) != -1 ? TRUE : FALSE)
2124 #endif
2125
2126 #ifdef UNION_ANY_DEFINITION
2127 UNION_ANY_DEFINITION;
2128 #else
2129 union any {
2130     void*       any_ptr;
2131     I32         any_i32;
2132     IV          any_iv;
2133     long        any_long;
2134     void        (*any_dptr) (void*);
2135     void        (*any_dxptr) (pTHX_ void*);
2136 };
2137 #endif
2138
2139 #ifdef USE_5005THREADS
2140 #define ARGSproto struct perl_thread *thr
2141 #else
2142 #define ARGSproto
2143 #endif /* USE_5005THREADS */
2144
2145 typedef I32 (*filter_t) (pTHX_ int, SV *, int);
2146
2147 #define FILTER_READ(idx, sv, len)  filter_read(idx, sv, len)
2148 #define FILTER_DATA(idx)           (AvARRAY(PL_rsfp_filters)[idx])
2149 #define FILTER_ISREADER(idx)       (idx >= AvFILLp(PL_rsfp_filters))
2150
2151 #if defined(_AIX) && !defined(_AIX43)
2152 #if defined(USE_REENTRANT) || defined(_REENTRANT) || defined(_THREAD_SAFE)
2153 /* We cannot include <crypt.h> to get the struct crypt_data
2154  * because of setkey prototype problems when threading */
2155 typedef        struct crypt_data {     /* straight from /usr/include/crypt.h */
2156     /* From OSF, Not needed in AIX
2157        char C[28], D[28];
2158     */
2159     char E[48];
2160     char KS[16][48];
2161     char block[66];
2162     char iobuf[16];
2163 } CRYPTD;
2164 #endif /* threading */
2165 #endif /* AIX */
2166
2167 #if !defined(OS2) && !defined(MACOS_TRADITIONAL)
2168 #  include "iperlsys.h"
2169 #endif
2170 #include "regexp.h"
2171 #include "sv.h"
2172 #include "util.h"
2173 #include "form.h"
2174 #include "gv.h"
2175 #include "cv.h"
2176 #include "opnames.h"
2177 #include "op.h"
2178 #include "cop.h"
2179 #include "av.h"
2180 #include "hv.h"
2181 #include "mg.h"
2182 #include "scope.h"
2183 #include "warnings.h"
2184 #include "utf8.h"
2185
2186 /* Current curly descriptor */
2187 typedef struct curcur CURCUR;
2188 struct curcur {
2189     int         parenfloor;     /* how far back to strip paren data */
2190     int         cur;            /* how many instances of scan we've matched */
2191     int         min;            /* the minimal number of scans to match */
2192     int         max;            /* the maximal number of scans to match */
2193     int         minmod;         /* whether to work our way up or down */
2194     regnode *   scan;           /* the thing to match */
2195     regnode *   next;           /* what has to match after it */
2196     char *      lastloc;        /* where we started matching this scan */
2197     CURCUR *    oldcc;          /* current curly before we started this one */
2198 };
2199
2200 typedef struct _sublex_info SUBLEXINFO;
2201 struct _sublex_info {
2202     I32 super_state;    /* lexer state to save */
2203     I32 sub_inwhat;     /* "lex_inwhat" to use */
2204     OP *sub_op;         /* "lex_op" to use */
2205     char *super_bufptr; /* PL_bufptr that was */
2206     char *super_bufend; /* PL_bufend that was */
2207 };
2208
2209 typedef struct magic_state MGS; /* struct magic_state defined in mg.c */
2210
2211 struct scan_data_t;             /* Used in S_* functions in regcomp.c */
2212 struct regnode_charclass_class; /* Used in S_* functions in regcomp.c */
2213
2214 typedef I32 CHECKPOINT;
2215
2216 struct ptr_tbl_ent {
2217     struct ptr_tbl_ent*         next;
2218     void*                       oldval;
2219     void*                       newval;
2220 };
2221
2222 struct ptr_tbl {
2223     struct ptr_tbl_ent**        tbl_ary;
2224     UV                          tbl_max;
2225     UV                          tbl_items;
2226 };
2227
2228 #if defined(iAPX286) || defined(M_I286) || defined(I80286)
2229 #   define I286
2230 #endif
2231
2232 #if defined(htonl) && !defined(HAS_HTONL)
2233 #define HAS_HTONL
2234 #endif
2235 #if defined(htons) && !defined(HAS_HTONS)
2236 #define HAS_HTONS
2237 #endif
2238 #if defined(ntohl) && !defined(HAS_NTOHL)
2239 #define HAS_NTOHL
2240 #endif
2241 #if defined(ntohs) && !defined(HAS_NTOHS)
2242 #define HAS_NTOHS
2243 #endif
2244 #ifndef HAS_HTONL
2245 #if (BYTEORDER & 0xffff) != 0x4321
2246 #define HAS_HTONS
2247 #define HAS_HTONL
2248 #define HAS_NTOHS
2249 #define HAS_NTOHL
2250 #define MYSWAP
2251 #define htons my_swap
2252 #define htonl my_htonl
2253 #define ntohs my_swap
2254 #define ntohl my_ntohl
2255 #endif
2256 #else
2257 #if (BYTEORDER & 0xffff) == 0x4321
2258 #undef HAS_HTONS
2259 #undef HAS_HTONL
2260 #undef HAS_NTOHS
2261 #undef HAS_NTOHL
2262 #endif
2263 #endif
2264
2265 /*
2266  * Little-endian byte order functions - 'v' for 'VAX', or 'reVerse'.
2267  * -DWS
2268  */
2269 #if BYTEORDER != 0x1234
2270 # define HAS_VTOHL
2271 # define HAS_VTOHS
2272 # define HAS_HTOVL
2273 # define HAS_HTOVS
2274 # if BYTEORDER == 0x4321 || BYTEORDER == 0x87654321
2275 #  define vtohl(x)      ((((x)&0xFF)<<24)       \
2276                         +(((x)>>24)&0xFF)       \
2277                         +(((x)&0x0000FF00)<<8)  \
2278                         +(((x)&0x00FF0000)>>8)  )
2279 #  define vtohs(x)      ((((x)&0xFF)<<8) + (((x)>>8)&0xFF))
2280 #  define htovl(x)      vtohl(x)
2281 #  define htovs(x)      vtohs(x)
2282 # endif
2283         /* otherwise default to functions in util.c */
2284 #ifndef htovs
2285 short htovs(short n);
2286 short vtohs(short n);
2287 long htovl(long n);
2288 long vtohl(long n);
2289 #endif
2290 #endif
2291
2292 /* *MAX Plus 1. A floating point value.
2293    Hopefully expressed in a way that dodgy floating point can't mess up.
2294    >> 2 rather than 1, so that value is safely less than I32_MAX after 1
2295    is added to it
2296    May find that some broken compiler will want the value cast to I32.
2297    [after the shift, as signed >> may not be as secure as unsigned >>]
2298 */
2299 #define I32_MAX_P1 (2.0 * (1 + (((U32)I32_MAX) >> 1)))
2300 #define U32_MAX_P1 (4.0 * (1 + ((U32_MAX) >> 2)))
2301 /* For compilers that can't correctly cast NVs over 0x7FFFFFFF (or
2302    0x7FFFFFFFFFFFFFFF) to an unsigned integer. In the future, sizeof(UV)
2303    may be greater than sizeof(IV), so don't assume that half max UV is max IV.
2304 */
2305 #define U32_MAX_P1_HALF (2.0 * (1 + ((U32_MAX) >> 2)))
2306
2307 #define UV_MAX_P1 (4.0 * (1 + ((UV_MAX) >> 2)))
2308 #define IV_MAX_P1 (2.0 * (1 + (((UV)IV_MAX) >> 1)))
2309 #define UV_MAX_P1_HALF (2.0 * (1 + ((UV_MAX) >> 2)))
2310
2311 /* This may look like unnecessary jumping through hoops, but converting
2312    out of range floating point values to integers *is* undefined behaviour,
2313    and it is starting to bite.
2314 */
2315 #ifndef CAST_INLINE
2316 #define I_32(what) (cast_i32((NV)(what)))
2317 #define U_32(what) (cast_ulong((NV)(what)))
2318 #define I_V(what) (cast_iv((NV)(what)))
2319 #define U_V(what) (cast_uv((NV)(what)))
2320 #else
2321 #define I_32(n) ((n) < I32_MAX_P1 ? ((n) < I32_MIN ? I32_MIN : (I32) (n)) \
2322                   : ((n) < U32_MAX_P1 ? (I32)(U32) (n) \
2323                      : ((n) > 0 ? (I32) U32_MAX : 0 /* NaN */)))
2324 #define U_32(n) ((n) < 0.0 ? ((n) < I32_MIN ? (UV) I32_MIN : (U32)(I32) (n)) \
2325                   : ((n) < U32_MAX_P1 ? (U32) (n) \
2326                      : ((n) > 0 ? U32_MAX : 0 /* NaN */)))
2327 #define I_V(n) ((n) < IV_MAX_P1 ? ((n) < IV_MIN ? IV_MIN : (IV) (n)) \
2328                   : ((n) < UV_MAX_P1 ? (IV)(UV) (n) \
2329                      : ((n) > 0 ? (IV)UV_MAX : 0 /* NaN */)))
2330 #define U_V(n) ((n) < 0.0 ? ((n) < IV_MIN ? (UV) IV_MIN : (UV)(IV) (n)) \
2331                   : ((n) < UV_MAX_P1 ? (UV) (n) \
2332                      : ((n) > 0 ? UV_MAX : 0 /* NaN */)))
2333 #endif
2334
2335 #define U_S(what) ((U16)U_32(what))
2336 #define U_I(what) ((unsigned int)U_32(what))
2337 #define U_L(what) U_32(what)
2338
2339 /* These do not care about the fractional part, only about the range. */
2340 #define NV_WITHIN_IV(nv) (I_V(nv) >= IV_MIN && I_V(nv) <= IV_MAX)
2341 #define NV_WITHIN_UV(nv) ((nv)>=0.0 && U_V(nv) >= UV_MIN && U_V(nv) <= UV_MAX)
2342
2343 /* Used with UV/IV arguments: */
2344                                         /* XXXX: need to speed it up */
2345 #define CLUMP_2UV(iv)   ((iv) < 0 ? 0 : (UV)(iv))
2346 #define CLUMP_2IV(uv)   ((uv) > (UV)IV_MAX ? IV_MAX : (IV)(uv))
2347
2348 #ifndef MAXSYSFD
2349 #   define MAXSYSFD 2
2350 #endif
2351
2352 #ifndef __cplusplus
2353 #ifndef UNDER_CE
2354 Uid_t getuid (void);
2355 Uid_t geteuid (void);
2356 Gid_t getgid (void);
2357 Gid_t getegid (void);
2358 #endif
2359 #endif
2360
2361 #ifndef Perl_debug_log
2362 #  define Perl_debug_log        PerlIO_stderr()
2363 #endif
2364
2365 #ifndef Perl_error_log
2366 #  define Perl_error_log        (PL_stderrgv                    \
2367                                  && GvIOp(PL_stderrgv)          \
2368                                  && IoOFP(GvIOp(PL_stderrgv))   \
2369                                  ? IoOFP(GvIOp(PL_stderrgv))    \
2370                                  : PerlIO_stderr())
2371 #endif
2372
2373
2374 #define DEBUG_p_FLAG            0x00000001 /*      1 */
2375 #define DEBUG_s_FLAG            0x00000002 /*      2 */
2376 #define DEBUG_l_FLAG            0x00000004 /*      4 */
2377 #define DEBUG_t_FLAG            0x00000008 /*      8 */
2378 #define DEBUG_o_FLAG            0x00000010 /*     16 */
2379 #define DEBUG_c_FLAG            0x00000020 /*     32 */
2380 #define DEBUG_P_FLAG            0x00000040 /*     64 */
2381 #define DEBUG_m_FLAG            0x00000080 /*    128 */
2382 #define DEBUG_f_FLAG            0x00000100 /*    256 */
2383 #define DEBUG_r_FLAG            0x00000200 /*    512 */
2384 #define DEBUG_x_FLAG            0x00000400 /*   1024 */
2385 #define DEBUG_u_FLAG            0x00000800 /*   2048 */
2386 #define DEBUG_L_FLAG            0x00001000 /*   4096 */
2387 #define DEBUG_H_FLAG            0x00002000 /*   8192 */
2388 #define DEBUG_X_FLAG            0x00004000 /*  16384 */
2389 #define DEBUG_D_FLAG            0x00008000 /*  32768 */
2390 #define DEBUG_S_FLAG            0x00010000 /*  65536 */
2391 #define DEBUG_T_FLAG            0x00020000 /* 131072 */
2392 #define DEBUG_R_FLAG            0x00040000 /* 262144 */
2393 #define DEBUG_J_FLAG            0x00080000 /* 524288 */
2394 #define DEBUG_MASK              0x000FFFFF /* mask of all the standard flags */
2395
2396 #define DEBUG_DB_RECURSE_FLAG   0x40000000
2397 #define DEBUG_TOP_FLAG          0x80000000 /* XXX what's this for ??? Signal
2398                                               that something was done? */
2399
2400 #  define DEBUG_p_TEST_ (PL_debug & DEBUG_p_FLAG)
2401 #  define DEBUG_s_TEST_ (PL_debug & DEBUG_s_FLAG)
2402 #  define DEBUG_l_TEST_ (PL_debug & DEBUG_l_FLAG)
2403 #  define DEBUG_t_TEST_ (PL_debug & DEBUG_t_FLAG)
2404 #  define DEBUG_o_TEST_ (PL_debug & DEBUG_o_FLAG)
2405 #  define DEBUG_c_TEST_ (PL_debug & DEBUG_c_FLAG)
2406 #  define DEBUG_P_TEST_ (PL_debug & DEBUG_P_FLAG)
2407 #  define DEBUG_m_TEST_ (PL_debug & DEBUG_m_FLAG)
2408 #  define DEBUG_f_TEST_ (PL_debug & DEBUG_f_FLAG)
2409 #  define DEBUG_r_TEST_ (PL_debug & DEBUG_r_FLAG)
2410 #  define DEBUG_x_TEST_ (PL_debug & DEBUG_x_FLAG)
2411 #  define DEBUG_u_TEST_ (PL_debug & DEBUG_u_FLAG)
2412 #  define DEBUG_L_TEST_ (PL_debug & DEBUG_L_FLAG)
2413 #  define DEBUG_H_TEST_ (PL_debug & DEBUG_H_FLAG)
2414 #  define DEBUG_X_TEST_ (PL_debug & DEBUG_X_FLAG)
2415 #  define DEBUG_D_TEST_ (PL_debug & DEBUG_D_FLAG)
2416 #  define DEBUG_S_TEST_ (PL_debug & DEBUG_S_FLAG)
2417 #  define DEBUG_T_TEST_ (PL_debug & DEBUG_T_FLAG)
2418 #  define DEBUG_R_TEST_ (PL_debug & DEBUG_R_FLAG)
2419 #  define DEBUG_J_TEST_ (PL_debug & DEBUG_J_FLAG)
2420
2421 #ifdef DEBUGGING
2422
2423 #  undef  YYDEBUG
2424 #  define YYDEBUG 1
2425
2426 #  define DEBUG_p_TEST DEBUG_p_TEST_
2427 #  define DEBUG_s_TEST DEBUG_s_TEST_
2428 #  define DEBUG_l_TEST DEBUG_l_TEST_
2429 #  define DEBUG_t_TEST DEBUG_t_TEST_
2430 #  define DEBUG_o_TEST DEBUG_o_TEST_
2431 #  define DEBUG_c_TEST DEBUG_c_TEST_
2432 #  define DEBUG_P_TEST DEBUG_P_TEST_
2433 #  define DEBUG_m_TEST DEBUG_m_TEST_
2434 #  define DEBUG_f_TEST DEBUG_f_TEST_
2435 #  define DEBUG_r_TEST DEBUG_r_TEST_
2436 #  define DEBUG_x_TEST DEBUG_x_TEST_
2437 #  define DEBUG_u_TEST DEBUG_u_TEST_
2438 #  define DEBUG_L_TEST DEBUG_L_TEST_
2439 #  define DEBUG_H_TEST DEBUG_H_TEST_
2440 #  define DEBUG_X_TEST DEBUG_X_TEST_
2441 #  define DEBUG_D_TEST DEBUG_D_TEST_
2442 #  define DEBUG_S_TEST DEBUG_S_TEST_
2443 #  define DEBUG_T_TEST DEBUG_T_TEST_
2444 #  define DEBUG_R_TEST DEBUG_R_TEST_
2445 #  define DEBUG_J_TEST DEBUG_J_TEST_
2446
2447 #  define DEB(a)     a
2448 #  define DEBUG(a)   if (PL_debug)   a
2449 #  define DEBUG_p(a) if (DEBUG_p_TEST) a
2450 #  define DEBUG_s(a) if (DEBUG_s_TEST) a
2451 #  define DEBUG_l(a) if (DEBUG_l_TEST) a
2452 #  define DEBUG_t(a) if (DEBUG_t_TEST) a
2453 #  define DEBUG_o(a) if (DEBUG_o_TEST) a
2454 #  define DEBUG_c(a) if (DEBUG_c_TEST) a
2455 #  define DEBUG_P(a) if (DEBUG_P_TEST) a
2456
2457      /* Temporarily turn off memory debugging in case the a
2458       * does memory allocation, either directly or indirectly. */
2459 #  define DEBUG_m(a)  \
2460     STMT_START {                                                        \
2461         if (PERL_GET_INTERP) { dTHX; if (DEBUG_m_TEST) {PL_debug&=~DEBUG_m_FLAG; a; PL_debug|=DEBUG_m_FLAG;} } \
2462     } STMT_END
2463
2464 #  define DEBUG__(t, a) \
2465         STMT_START { \
2466                 if (t) STMT_START {a;} STMT_END; \
2467         } STMT_END
2468
2469 #  define DEBUG_f(a) DEBUG__(DEBUG_f_TEST, a)
2470 #  define DEBUG_r(a) DEBUG__(DEBUG_r_TEST, a)
2471 #  define DEBUG_x(a) DEBUG__(DEBUG_x_TEST, a)
2472 #  define DEBUG_u(a) DEBUG__(DEBUG_u_TEST, a)
2473 #  define DEBUG_L(a) DEBUG__(DEBUG_L_TEST, a)
2474 #  define DEBUG_H(a) DEBUG__(DEBUG_H_TEST, a)
2475 #  define DEBUG_X(a) DEBUG__(DEBUG_X_TEST, a)
2476 #  define DEBUG_D(a) DEBUG__(DEBUG_D_TEST, a)
2477
2478 #  ifdef USE_5005THREADS
2479 #    define DEBUG_S(a) DEBUG__(DEBUG_S_TEST, a)
2480 #  else
2481 #    define DEBUG_S(a)
2482 #  endif
2483
2484 #  define DEBUG_T(a) DEBUG__(DEBUG_T_TEST, a)
2485 #  define DEBUG_R(a) DEBUG__(DEBUG_R_TEST, a)
2486
2487 #else /* DEBUGGING */
2488
2489 #  define DEBUG_p_TEST (0)
2490 #  define DEBUG_s_TEST (0)
2491 #  define DEBUG_l_TEST (0)
2492 #  define DEBUG_t_TEST (0)
2493 #  define DEBUG_o_TEST (0)
2494 #  define DEBUG_c_TEST (0)
2495 #  define DEBUG_P_TEST (0)
2496 #  define DEBUG_m_TEST (0)
2497 #  define DEBUG_f_TEST (0)
2498 #  define DEBUG_r_TEST (0)
2499 #  define DEBUG_x_TEST (0)
2500 #  define DEBUG_u_TEST (0)
2501 #  define DEBUG_L_TEST (0)
2502 #  define DEBUG_H_TEST (0)
2503 #  define DEBUG_X_TEST (0)
2504 #  define DEBUG_D_TEST (0)
2505 #  define DEBUG_S_TEST (0)
2506 #  define DEBUG_T_TEST (0)
2507 #  define DEBUG_R_TEST (0)
2508 #  define DEBUG_J_TEST (0)
2509
2510 #  define DEB(a)
2511 #  define DEBUG(a)
2512 #  define DEBUG_p(a)
2513 #  define DEBUG_s(a)
2514 #  define DEBUG_l(a)
2515 #  define DEBUG_t(a)
2516 #  define DEBUG_o(a)
2517 #  define DEBUG_c(a)
2518 #  define DEBUG_P(a)
2519 #  define DEBUG_m(a)
2520 #  define DEBUG_f(a)
2521 #  define DEBUG_r(a)
2522 #  define DEBUG_x(a)
2523 #  define DEBUG_u(a)
2524 #  define DEBUG_L(a)
2525 #  define DEBUG_H(a)
2526 #  define DEBUG_X(a)
2527 #  define DEBUG_D(a)
2528 #  define DEBUG_S(a)
2529 #  define DEBUG_T(a)
2530 #  define DEBUG_R(a)
2531 #endif /* DEBUGGING */
2532
2533
2534 /* These constants should be used in preference to raw characters
2535  * when using magic. Note that some perl guts still assume
2536  * certain character properties of these constants, namely that
2537  * isUPPER() and toLOWER() may do useful mappings.
2538  *
2539  * Update the magic_names table in dump.c when adding/amending these
2540  */
2541
2542 #define PERL_MAGIC_sv             '\0' /* Special scalar variable */
2543 #define PERL_MAGIC_overload       'A' /* %OVERLOAD hash */
2544 #define PERL_MAGIC_overload_elem  'a' /* %OVERLOAD hash element */
2545 #define PERL_MAGIC_overload_table 'c' /* Holds overload table (AMT) on stash */
2546 #define PERL_MAGIC_bm             'B' /* Boyer-Moore (fast string search) */
2547 #define PERL_MAGIC_regdata        'D' /* Regex match position data
2548                                         (@+ and @- vars) */
2549 #define PERL_MAGIC_regdatum       'd' /* Regex match position data element */
2550 #define PERL_MAGIC_env            'E' /* %ENV hash */
2551 #define PERL_MAGIC_envelem        'e' /* %ENV hash element */
2552 #define PERL_MAGIC_fm             'f' /* Formline ('compiled' format) */
2553 #define PERL_MAGIC_regex_global   'g' /* m//g target / study()ed string */
2554 #define PERL_MAGIC_isa            'I' /* @ISA array */
2555 #define PERL_MAGIC_isaelem        'i' /* @ISA array element */
2556 #define PERL_MAGIC_nkeys          'k' /* scalar(keys()) lvalue */
2557 #define PERL_MAGIC_dbfile         'L' /* Debugger %_<filename */
2558 #define PERL_MAGIC_dbline         'l' /* Debugger %_<filename element */
2559 #define PERL_MAGIC_mutex          'm' /* for lock op */
2560 #define PERL_MAGIC_shared         'N' /* Shared between threads */
2561 #define PERL_MAGIC_shared_scalar  'n' /* Shared between threads */
2562 #define PERL_MAGIC_collxfrm       'o' /* Locale transformation */
2563 #define PERL_MAGIC_tied           'P' /* Tied array or hash */
2564 #define PERL_MAGIC_tiedelem       'p' /* Tied array or hash element */
2565 #define PERL_MAGIC_tiedscalar     'q' /* Tied scalar or handle */
2566 #define PERL_MAGIC_qr             'r' /* precompiled qr// regex */
2567 #define PERL_MAGIC_sig            'S' /* %SIG hash */
2568 #define PERL_MAGIC_sigelem        's' /* %SIG hash element */
2569 #define PERL_MAGIC_taint          't' /* Taintedness */
2570 #define PERL_MAGIC_uvar           'U' /* Available for use by extensions */
2571 #define PERL_MAGIC_uvar_elem      'u' /* Reserved for use by extensions */
2572 #define PERL_MAGIC_vec            'v' /* vec() lvalue */
2573 #define PERL_MAGIC_substr         'x' /* substr() lvalue */
2574 #define PERL_MAGIC_defelem        'y' /* Shadow "foreach" iterator variable /
2575                                         smart parameter vivification */
2576 #define PERL_MAGIC_glob           '*' /* GV (typeglob) */
2577 #define PERL_MAGIC_arylen         '#' /* Array length ($#ary) */
2578 #define PERL_MAGIC_pos            '.' /* pos() lvalue */
2579 #define PERL_MAGIC_backref        '<' /* for weak ref data */
2580 #define PERL_MAGIC_ext            '~' /* Available for use by extensions */
2581
2582
2583 #define YYMAXDEPTH 300
2584
2585 #ifndef assert  /* <assert.h> might have been included somehow */
2586 #ifdef DEBUGGING
2587 #define assert(what)    DEB( {                                          \
2588         if (!(what)) {                                                  \
2589             Perl_croak(aTHX_ "Assertion " STRINGIFY(what) " failed: file \"%s\", line %d",      \
2590                 __FILE__, __LINE__);                                    \
2591             PerlProc_exit(1);                                           \
2592         }})
2593 #else
2594 #define assert(what)    DEB( {                                          \
2595         if (!(what)) {                                                  \
2596             Perl_croak(aTHX_ "Assertion failed: file \"%s\", line %d",  \
2597                 __FILE__, __LINE__);                                    \
2598             PerlProc_exit(1);                                           \
2599         }})
2600 #endif
2601 #endif
2602
2603 struct ufuncs {
2604     I32 (*uf_val)(pTHX_ IV, SV*);
2605     I32 (*uf_set)(pTHX_ IV, SV*);
2606     IV uf_index;
2607 };
2608
2609 /* In pre-5.7-Perls the PERL_MAGIC_uvar magic didn't get the thread context.
2610  * XS code wanting to be backward compatible can do something
2611  * like the following:
2612
2613 #ifndef PERL_MG_UFUNC
2614 #define PERL_MG_UFUNC(name,ix,sv) I32 name(IV ix, SV *sv)
2615 #endif
2616
2617 static PERL_MG_UFUNC(foo_get, index, val)
2618 {
2619     sv_setsv(val, ...);
2620     return TRUE;
2621 }
2622
2623 -- Doug MacEachern
2624
2625 */
2626
2627 #ifndef PERL_MG_UFUNC
2628 #define PERL_MG_UFUNC(name,ix,sv) I32 name(pTHX_ IV ix, SV *sv)
2629 #endif
2630
2631 /* Fix these up for __STDC__ */
2632 #ifndef DONT_DECLARE_STD
2633 char *mktemp (char*);
2634 #ifndef atof
2635 double atof (const char*);
2636 #endif
2637 #endif
2638
2639 #ifndef STANDARD_C
2640 /* All of these are in stdlib.h or time.h for ANSI C */
2641 Time_t time();
2642 struct tm *gmtime(), *localtime();
2643 #if defined(OEMVS) || defined(__OPEN_VM)
2644 char *(strchr)(), *(strrchr)();
2645 char *(strcpy)(), *(strcat)();
2646 #else
2647 char *strchr(), *strrchr();
2648 char *strcpy(), *strcat();
2649 #endif
2650 #endif /* ! STANDARD_C */
2651
2652
2653 #ifdef I_MATH
2654 #    include <math.h>
2655 #else
2656 START_EXTERN_C
2657             double exp (double);
2658             double log (double);
2659             double log10 (double);
2660             double sqrt (double);
2661             double frexp (double,int*);
2662             double ldexp (double,int);
2663             double modf (double,double*);
2664             double sin (double);
2665             double cos (double);
2666             double atan2 (double,double);
2667             double pow (double,double);
2668 END_EXTERN_C
2669 #endif
2670
2671 #if !defined(NV_INF) && defined(USE_LONG_DOUBLE) && defined(LDBL_INFINITY)
2672 #  define NV_INF LDBL_INFINITY
2673 #endif
2674 #if !defined(NV_INF) && defined(DBL_INFINITY)
2675 #  define NV_INF (NV)DBL_INFINITY
2676 #endif
2677 #if !defined(NV_INF) && defined(INFINITY)
2678 #  define NV_INF (NV)INFINITY
2679 #endif
2680 #if !defined(NV_INF) && defined(INF)
2681 #  define NV_INF (NV)INF
2682 #endif
2683 #if !defined(NV_INF) && defined(USE_LONG_DOUBLE) && defined(HUGE_VALL)
2684 #  define NV_INF (NV)HUGE_VALL
2685 #endif
2686 #if !defined(NV_INF) && defined(HUGE_VAL)
2687 #  define NV_INF (NV)HUGE_VAL
2688 #endif
2689
2690 #if !defined(NV_NAN) && defined(USE_LONG_DOUBLE)
2691 #   if !defined(NV_NAN) && defined(LDBL_NAN)
2692 #       define NV_NAN LDBL_NAN
2693 #   endif
2694 #   if !defined(NV_NAN) && defined(LDBL_QNAN)
2695 #       define NV_NAN LDBL_QNAN
2696 #   endif
2697 #   if !defined(NV_NAN) && defined(LDBL_SNAN)
2698 #       define NV_NAN LDBL_SNAN
2699 #   endif
2700 #endif
2701 #if !defined(NV_NAN) && defined(DBL_NAN)
2702 #  define NV_NAN (NV)DBL_NAN
2703 #endif
2704 #if !defined(NV_NAN) && defined(DBL_QNAN)
2705 #  define NV_NAN (NV)DBL_QNAN
2706 #endif
2707 #if !defined(NV_NAN) && defined(DBL_SNAN)
2708 #  define NV_NAN (NV)DBL_SNAN
2709 #endif
2710 #if !defined(NV_NAN) && defined(QNAN)
2711 #  define NV_NAN (NV)QNAN
2712 #endif
2713 #if !defined(NV_NAN) && defined(SNAN)
2714 #  define NV_NAN (NV)SNAN
2715 #endif
2716 #if !defined(NV_NAN) && defined(NAN)
2717 #  define NV_NAN (NV)NAN
2718 #endif
2719
2720 #ifndef __cplusplus
2721 #  if defined(NeXT) || defined(__NeXT__) /* or whatever catches all NeXTs */
2722 char *crypt ();       /* Maybe more hosts will need the unprototyped version */
2723 #  else
2724 #    if !defined(WIN32) && !defined(VMS)
2725 #ifndef crypt
2726 char *crypt (const char*, const char*);
2727 #endif
2728 #    endif /* !WIN32 */
2729 #  endif /* !NeXT && !__NeXT__ */
2730 #  ifndef DONT_DECLARE_STD
2731 #    ifndef getenv
2732 char *getenv (const char*);
2733 #    endif /* !getenv */
2734 #    if !defined(HAS_LSEEK_PROTO) && !defined(EPOC) && !defined(__hpux)
2735 #      ifdef _FILE_OFFSET_BITS
2736 #        if _FILE_OFFSET_BITS == 64
2737 Off_t lseek (int,Off_t,int);
2738 #        endif
2739 #      endif
2740 #    endif
2741 #  endif /* !DONT_DECLARE_STD */
2742 #ifndef getlogin
2743 char *getlogin (void);
2744 #endif
2745 #endif /* !__cplusplus */
2746
2747 #ifdef UNLINK_ALL_VERSIONS /* Currently only makes sense for VMS */
2748 #define UNLINK unlnk
2749 I32 unlnk (char*);
2750 #else
2751 #define UNLINK PerlLIO_unlink
2752 #endif
2753
2754 /* some versions of glibc are missing the setresuid() proto */
2755 #if defined(HAS_SETRESUID) && !defined(HAS_SETRESUID_PROTO)
2756 int setresuid(uid_t ruid, uid_t euid, uid_t suid);
2757 #endif
2758 /* some versions of glibc are missing the setresgid() proto */
2759 #if defined(HAS_SETRESGID) && !defined(HAS_SETRESGID_PROTO)
2760 int setresgid(gid_t rgid, gid_t egid, gid_t sgid);
2761 #endif
2762
2763 #ifndef HAS_SETREUID
2764 #  ifdef HAS_SETRESUID
2765 #    define setreuid(r,e) setresuid(r,e,(Uid_t)-1)
2766 #    define HAS_SETREUID
2767 #  endif
2768 #endif
2769 #ifndef HAS_SETREGID
2770 #  ifdef HAS_SETRESGID
2771 #    define setregid(r,e) setresgid(r,e,(Gid_t)-1)
2772 #    define HAS_SETREGID
2773 #  endif
2774 #endif
2775
2776 /* Sighandler_t defined in iperlsys.h */
2777
2778 #ifdef HAS_SIGACTION
2779 typedef struct sigaction Sigsave_t;
2780 #else
2781 typedef Sighandler_t Sigsave_t;
2782 #endif
2783
2784 #define SCAN_DEF 0
2785 #define SCAN_TR 1
2786 #define SCAN_REPL 2
2787
2788 #ifdef DEBUGGING
2789 # ifndef register
2790 #  define register
2791 # endif
2792 # define PAD_SV(po) pad_sv(po)
2793 # define RUNOPS_DEFAULT Perl_runops_debug
2794 #else
2795 # define PAD_SV(po) PL_curpad[po]
2796 # define RUNOPS_DEFAULT Perl_runops_standard
2797 #endif
2798
2799 #ifdef MYMALLOC
2800 #  ifdef MUTEX_INIT_CALLS_MALLOC
2801 #    define MALLOC_INIT                                 \
2802         STMT_START {                                    \
2803                 PL_malloc_mutex = NULL;                 \
2804                 MUTEX_INIT(&PL_malloc_mutex);           \
2805         } STMT_END
2806 #    define MALLOC_TERM                                 \
2807         STMT_START {                                    \
2808                 perl_mutex tmp = PL_malloc_mutex;       \
2809                 PL_malloc_mutex = NULL;                 \
2810                 MUTEX_DESTROY(&tmp);                    \
2811         } STMT_END
2812 #  else
2813 #    define MALLOC_INIT MUTEX_INIT(&PL_malloc_mutex)
2814 #    define MALLOC_TERM MUTEX_DESTROY(&PL_malloc_mutex)
2815 #  endif
2816 #else
2817 #  define MALLOC_INIT
2818 #  define MALLOC_TERM
2819 #endif
2820
2821
2822 typedef int (CPERLscope(*runops_proc_t)) (pTHX);
2823 typedef void (CPERLscope(*share_proc_t)) (pTHX_ SV *sv);
2824 typedef int  (CPERLscope(*thrhook_proc_t)) (pTHX);
2825 typedef OP* (CPERLscope(*PPADDR_t)[]) (pTHX);
2826
2827 /* _ (for $_) must be first in the following list (DEFSV requires it) */
2828 #define THREADSV_NAMES "_123456789&`'+/.,\\\";^-%=|~:\001\005!@"
2829
2830 /* NeXT has problems with crt0.o globals */
2831 #if defined(__DYNAMIC__) && \
2832     (defined(NeXT) || defined(__NeXT__) || defined(__APPLE__))
2833 #  if defined(NeXT) || defined(__NeXT)
2834 #    include <mach-o/dyld.h>
2835 #    define environ (*environ_pointer)
2836 EXT char *** environ_pointer;
2837 #  else
2838 #    if defined(__APPLE__) && defined(PERL_CORE)
2839 #      include <crt_externs.h>  /* for the env array */
2840 #      define environ (*_NSGetEnviron())
2841 #    endif
2842 #  endif
2843 #else
2844    /* VMS and some other platforms don't use the environ array */
2845 #  ifdef USE_ENVIRON_ARRAY
2846 #    if !defined(DONT_DECLARE_STD) || \
2847         (defined(__svr4__) && defined(__GNUC__) && defined(sun)) || \
2848         defined(__sgi) || \
2849         defined(__DGUX)
2850 extern char **  environ;        /* environment variables supplied via exec */
2851 #    endif
2852 #  endif
2853 #endif
2854
2855 START_EXTERN_C
2856
2857 /* handy constants */
2858 EXTCONST char PL_warn_uninit[]
2859   INIT("Use of uninitialized value%s%s");
2860 EXTCONST char PL_warn_nosemi[]
2861   INIT("Semicolon seems to be missing");
2862 EXTCONST char PL_warn_reserved[]
2863   INIT("Unquoted string \"%s\" may clash with future reserved word");
2864 EXTCONST char PL_warn_nl[]
2865   INIT("Unsuccessful %s on filename containing newline");
2866 EXTCONST char PL_no_wrongref[]
2867   INIT("Can't use %s ref as %s ref");
2868 EXTCONST char PL_no_symref[]
2869   INIT("Can't use string (\"%.32s\") as %s ref while \"strict refs\" in use");
2870 EXTCONST char PL_no_usym[]
2871   INIT("Can't use an undefined value as %s reference");
2872 EXTCONST char PL_no_aelem[]
2873   INIT("Modification of non-creatable array value attempted, subscript %d");
2874 EXTCONST char PL_no_helem[]
2875   INIT("Modification of non-creatable hash value attempted, subscript \"%s\"");
2876 EXTCONST char PL_no_modify[]
2877   INIT("Modification of a read-only value attempted");
2878 EXTCONST char PL_no_mem[]
2879   INIT("Out of memory!\n");
2880 EXTCONST char PL_no_security[]
2881   INIT("Insecure dependency in %s%s");
2882 EXTCONST char PL_no_sock_func[]
2883   INIT("Unsupported socket function \"%s\" called");
2884 EXTCONST char PL_no_dir_func[]
2885   INIT("Unsupported directory function \"%s\" called");
2886 EXTCONST char PL_no_func[]
2887   INIT("The %s function is unimplemented");
2888 EXTCONST char PL_no_myglob[]
2889   INIT("\"my\" variable %s can't be in a package");
2890
2891 EXTCONST char PL_uuemap[65]
2892   INIT("`!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_");
2893
2894
2895 #ifdef DOINIT
2896 EXT char *PL_sig_name[] = { SIG_NAME };
2897 EXT int   PL_sig_num[]  = { SIG_NUM };
2898 #else
2899 EXT char *PL_sig_name[];
2900 EXT int   PL_sig_num[];
2901 #endif
2902
2903 /* fast conversion and case folding tables */
2904
2905 #ifdef DOINIT
2906 #ifdef EBCDIC
2907 EXT unsigned char PL_fold[] = { /* fast EBCDIC case folding table */
2908     0,      1,      2,      3,      4,      5,      6,      7,
2909     8,      9,      10,     11,     12,     13,     14,     15,
2910     16,     17,     18,     19,     20,     21,     22,     23,
2911     24,     25,     26,     27,     28,     29,     30,     31,
2912     32,     33,     34,     35,     36,     37,     38,     39,
2913     40,     41,     42,     43,     44,     45,     46,     47,
2914     48,     49,     50,     51,     52,     53,     54,     55,
2915     56,     57,     58,     59,     60,     61,     62,     63,
2916     64,     65,     66,     67,     68,     69,     70,     71,
2917     72,     73,     74,     75,     76,     77,     78,     79,
2918     80,     81,     82,     83,     84,     85,     86,     87,
2919     88,     89,     90,     91,     92,     93,     94,     95,
2920     96,     97,     98,     99,     100,    101,    102,    103,
2921     104,    105,    106,    107,    108,    109,    110,    111,
2922     112,    113,    114,    115,    116,    117,    118,    119,
2923     120,    121,    122,    123,    124,    125,    126,    127,
2924     128,    'A',    'B',    'C',    'D',    'E',    'F',    'G',
2925     'H',    'I',    138,    139,    140,    141,    142,    143,
2926     144,    'J',    'K',    'L',    'M',    'N',    'O',    'P',
2927     'Q',    'R',    154,    155,    156,    157,    158,    159,
2928     160,    161,    'S',    'T',    'U',    'V',    'W',    'X',
2929     'Y',    'Z',    170,    171,    172,    173,    174,    175,
2930     176,    177,    178,    179,    180,    181,    182,    183,
2931     184,    185,    186,    187,    188,    189,    190,    191,
2932     192,    'a',    'b',    'c',    'd',    'e',    'f',    'g',
2933     'h',    'i',    202,    203,    204,    205,    206,    207,
2934     208,    'j',    'k',    'l',    'm',    'n',    'o',    'p',
2935     'q',    'r',    218,    219,    220,    221,    222,    223,
2936     224,    225,    's',    't',    'u',    'v',    'w',    'x',
2937     'y',    'z',    234,    235,    236,    237,    238,    239,
2938     240,    241,    242,    243,    244,    245,    246,    247,
2939     248,    249,    250,    251,    252,    253,    254,    255
2940 };
2941 #else   /* ascii rather than ebcdic */
2942 EXTCONST  unsigned char PL_fold[] = {
2943         0,      1,      2,      3,      4,      5,      6,      7,
2944         8,      9,      10,     11,     12,     13,     14,     15,
2945         16,     17,     18,     19,     20,     21,     22,     23,
2946         24,     25,     26,     27,     28,     29,     30,     31,
2947         32,     33,     34,     35,     36,     37,     38,     39,
2948         40,     41,     42,     43,     44,     45,     46,     47,
2949         48,     49,     50,     51,     52,     53,     54,     55,
2950         56,     57,     58,     59,     60,     61,     62,     63,
2951         64,     'a',    'b',    'c',    'd',    'e',    'f',    'g',
2952         'h',    'i',    'j',    'k',    'l',    'm',    'n',    'o',
2953         'p',    'q',    'r',    's',    't',    'u',    'v',    'w',
2954         'x',    'y',    'z',    91,     92,     93,     94,     95,
2955         96,     'A',    'B',    'C',    'D',    'E',    'F',    'G',
2956         'H',    'I',    'J',    'K',    'L',    'M',    'N',    'O',
2957         'P',    'Q',    'R',    'S',    'T',    'U',    'V',    'W',
2958         'X',    'Y',    'Z',    123,    124,    125,    126,    127,
2959         128,    129,    130,    131,    132,    133,    134,    135,
2960         136,    137,    138,    139,    140,    141,    142,    143,
2961         144,    145,    146,    147,    148,    149,    150,    151,
2962         152,    153,    154,    155,    156,    157,    158,    159,
2963         160,    161,    162,    163,    164,    165,    166,    167,
2964         168,    169,    170,    171,    172,    173,    174,    175,
2965         176,    177,    178,    179,    180,    181,    182,    183,
2966         184,    185,    186,    187,    188,    189,    190,    191,
2967         192,    193,    194,    195,    196,    197,    198,    199,
2968         200,    201,    202,    203,    204,    205,    206,    207,
2969         208,    209,    210,    211,    212,    213,    214,    215,
2970         216,    217,    218,    219,    220,    221,    222,    223,    
2971         224,    225,    226,    227,    228,    229,    230,    231,
2972         232,    233,    234,    235,    236,    237,    238,    239,
2973         240,    241,    242,    243,    244,    245,    246,    247,
2974         248,    249,    250,    251,    252,    253,    254,    255
2975 };
2976 #endif  /* !EBCDIC */
2977 #else
2978 EXTCONST unsigned char PL_fold[];
2979 #endif
2980
2981 #ifdef DOINIT
2982 EXT unsigned char PL_fold_locale[] = {
2983         0,      1,      2,      3,      4,      5,      6,      7,
2984         8,      9,      10,     11,     12,     13,     14,     15,
2985         16,     17,     18,     19,     20,     21,     22,     23,
2986         24,     25,     26,     27,     28,     29,     30,     31,
2987         32,     33,     34,     35,     36,     37,     38,     39,
2988         40,     41,     42,     43,     44,     45,     46,     47,
2989         48,     49,     50,     51,     52,     53,     54,     55,
2990         56,     57,     58,     59,     60,     61,     62,     63,
2991         64,     'a',    'b',    'c',    'd',    'e',    'f',    'g',
2992         'h',    'i',    'j',    'k',    'l',    'm',    'n',    'o',
2993         'p',    'q',    'r',    's',    't',    'u',    'v',    'w',
2994         'x',    'y',    'z',    91,     92,     93,     94,     95,
2995         96,     'A',    'B',    'C',    'D',    'E',    'F',    'G',
2996         'H',    'I',    'J',    'K',    'L',    'M',    'N',    'O',
2997         'P',    'Q',    'R',    'S',    'T',    'U',    'V',    'W',
2998         'X',    'Y',    'Z',    123,    124,    125,    126,    127,
2999         128,    129,    130,    131,    132,    133,    134,    135,
3000         136,    137,    138,    139,    140,    141,    142,    143,
3001         144,    145,    146,    147,    148,    149,    150,    151,
3002         152,    153,    154,    155,    156,    157,    158,    159,
3003         160,    161,    162,    163,    164,    165,    166,    167,
3004         168,    169,    170,    171,    172,    173,    174,    175,
3005         176,    177,    178,    179,    180,    181,    182,    183,
3006         184,    185,    186,    187,    188,    189,    190,    191,
3007         192,    193,    194,    195,    196,    197,    198,    199,
3008         200,    201,    202,    203,    204,    205,    206,    207,
3009         208,    209,    210,    211,    212,    213,    214,    215,
3010         216,    217,    218,    219,    220,    221,    222,    223,    
3011         224,    225,    226,    227,    228,    229,    230,    231,
3012         232,    233,    234,    235,    236,    237,    238,    239,
3013         240,    241,    242,    243,    244,    245,    246,    247,
3014         248,    249,    250,    251,    252,    253,    254,    255
3015 };
3016 #else
3017 EXT unsigned char PL_fold_locale[];
3018 #endif
3019
3020 #ifdef DOINIT
3021 #ifdef EBCDIC
3022 EXT unsigned char PL_freq[] = {/* EBCDIC frequencies for mixed English/C */
3023     1,      2,      84,     151,    154,    155,    156,    157,
3024     165,    246,    250,    3,      158,    7,      18,     29,
3025     40,     51,     62,     73,     85,     96,     107,    118,
3026     129,    140,    147,    148,    149,    150,    152,    153,
3027     255,      6,      8,      9,     10,     11,     12,     13,
3028      14,     15,     24,     25,     26,     27,     28,    226,
3029      29,     30,     31,     32,     33,     43,     44,     45,
3030      46,     47,     48,     49,     50,     76,     77,     78,
3031      79,     80,     81,     82,     83,     84,     85,     86,
3032      87,     94,     95,    234,    181,    233,    187,    190,
3033     180,     96,     97,     98,     99,    100,    101,    102,
3034     104,    112,    182,    174,    236,    232,    229,    103,
3035     228,    226,    114,    115,    116,    117,    118,    119,
3036     120,    121,    122,    235,    176,    230,    194,    162,
3037     130,    131,    132,    133,    134,    135,    136,    137,
3038     138,    139,    201,    205,    163,    217,    220,    224,
3039     5,      248,    227,    244,    242,    255,    241,    231,
3040     240,    253,    16,     197,    19,     20,     21,     187,
3041     23,     169,    210,    245,    237,    249,    247,    239,
3042     168,    252,    34,     196,    36,     37,     38,     39,
3043     41,     42,     251,    254,    238,    223,    221,    213,
3044     225,    177,    52,     53,     54,     55,     56,     57,
3045     58,     59,     60,     61,     63,     64,     65,     66,
3046     67,     68,     69,     70,     71,     72,     74,     75,
3047     205,    208,    186,    202,    200,    218,    198,    179,
3048     178,    214,    88,     89,     90,     91,     92,     93,
3049     217,    166,    170,    207,    199,    209,    206,    204,
3050     160,    212,    105,    106,    108,    109,    110,    111,
3051     203,    113,    216,    215,    192,    175,    193,    243,
3052     172,    161,    123,    124,    125,    126,    127,    128,
3053     222,    219,    211,    195,    188,    193,    185,    184,
3054     191,    183,    141,    142,    143,    144,    145,    146
3055 };
3056 #else  /* ascii rather than ebcdic */
3057 EXTCONST unsigned char PL_freq[] = {    /* letter frequencies for mixed English/C */
3058         1,      2,      84,     151,    154,    155,    156,    157,
3059         165,    246,    250,    3,      158,    7,      18,     29,
3060         40,     51,     62,     73,     85,     96,     107,    118,
3061         129,    140,    147,    148,    149,    150,    152,    153,
3062         255,    182,    224,    205,    174,    176,    180,    217,
3063         233,    232,    236,    187,    235,    228,    234,    226,
3064         222,    219,    211,    195,    188,    193,    185,    184,
3065         191,    183,    201,    229,    181,    220,    194,    162,
3066         163,    208,    186,    202,    200,    218,    198,    179,
3067         178,    214,    166,    170,    207,    199,    209,    206,
3068         204,    160,    212,    216,    215,    192,    175,    173,
3069         243,    172,    161,    190,    203,    189,    164,    230,
3070         167,    248,    227,    244,    242,    255,    241,    231,
3071         240,    253,    169,    210,    245,    237,    249,    247,
3072         239,    168,    252,    251,    254,    238,    223,    221,
3073         213,    225,    177,    197,    171,    196,    159,    4,
3074         5,      6,      8,      9,      10,     11,     12,     13,
3075         14,     15,     16,     17,     19,     20,     21,     22,
3076         23,     24,     25,     26,     27,     28,     30,     31,
3077         32,     33,     34,     35,     36,     37,     38,     39,
3078         41,     42,     43,     44,     45,     46,     47,     48,
3079         49,     50,     52,     53,     54,     55,     56,     57,
3080         58,     59,     60,     61,     63,     64,     65,     66,
3081         67,     68,     69,     70,     71,     72,     74,     75,
3082         76,     77,     78,     79,     80,     81,     82,     83,
3083         86,     87,     88,     89,     90,     91,     92,     93,
3084         94,     95,     97,     98,     99,     100,    101,    102,
3085         103,    104,    105,    106,    108,    109,    110,    111,
3086         112,    113,    114,    115,    116,    117,    119,    120,
3087         121,    122,    123,    124,    125,    126,    127,    128,
3088         130,    131,    132,    133,    134,    135,    136,    137,
3089         138,    139,    141,    142,    143,    144,    145,    146
3090 };
3091 #endif
3092 #else
3093 EXTCONST unsigned char PL_freq[];
3094 #endif
3095
3096 #ifdef DEBUGGING
3097 #ifdef DOINIT
3098 EXTCONST char* PL_block_type[] = {
3099         "NULL",
3100         "SUB",
3101         "EVAL",
3102         "LOOP",
3103         "SUBST",
3104         "BLOCK",
3105 };
3106 #else
3107 EXTCONST char* PL_block_type[];
3108 #endif
3109 #endif
3110
3111 END_EXTERN_C
3112
3113 /*****************************************************************************/
3114 /* This lexer/parser stuff is currently global since yacc is hard to reenter */
3115 /*****************************************************************************/
3116 /* XXX This needs to be revisited, since BEGIN makes yacc re-enter... */
3117
3118 #include "perly.h"
3119
3120 #define LEX_NOTPARSING          11      /* borrowed from toke.c */
3121
3122 typedef enum {
3123     XOPERATOR,
3124     XTERM,
3125     XREF,
3126     XSTATE,
3127     XBLOCK,
3128     XATTRBLOCK,
3129     XATTRTERM,
3130     XTERMBLOCK
3131 } expectation;
3132
3133 enum {          /* pass one of these to get_vtbl */
3134     want_vtbl_sv,
3135     want_vtbl_env,
3136     want_vtbl_envelem,
3137     want_vtbl_sig,
3138     want_vtbl_sigelem,
3139     want_vtbl_pack,
3140     want_vtbl_packelem,
3141     want_vtbl_dbline,
3142     want_vtbl_isa,
3143     want_vtbl_isaelem,
3144     want_vtbl_arylen,
3145     want_vtbl_glob,
3146     want_vtbl_mglob,
3147     want_vtbl_nkeys,
3148     want_vtbl_taint,
3149     want_vtbl_substr,
3150     want_vtbl_vec,
3151     want_vtbl_pos,
3152     want_vtbl_bm,
3153     want_vtbl_fm,
3154     want_vtbl_uvar,
3155     want_vtbl_defelem,
3156     want_vtbl_regexp,
3157     want_vtbl_collxfrm,
3158     want_vtbl_amagic,
3159     want_vtbl_amagicelem,
3160 #ifdef USE_5005THREADS
3161     want_vtbl_mutex,
3162 #endif
3163     want_vtbl_regdata,
3164     want_vtbl_regdatum,
3165     want_vtbl_backref
3166 };
3167
3168                                 /* Note: the lowest 8 bits are reserved for
3169                                    stuffing into op->op_private */
3170 #define HINT_PRIVATE_MASK       0x000000ff
3171 #define HINT_INTEGER            0x00000001
3172 #define HINT_STRICT_REFS        0x00000002
3173 #define HINT_LOCALE             0x00000004
3174 #define HINT_BYTES              0x00000008
3175 /* #define HINT_notused10       0x00000010 */
3176                                 /* Note: 20,40,80 used for NATIVE_HINTS */
3177
3178 #define HINT_BLOCK_SCOPE        0x00000100
3179 #define HINT_STRICT_SUBS        0x00000200
3180 #define HINT_STRICT_VARS        0x00000400
3181
3182 #define HINT_NEW_INTEGER        0x00001000
3183 #define HINT_NEW_FLOAT          0x00002000
3184 #define HINT_NEW_BINARY         0x00004000
3185 #define HINT_NEW_STRING         0x00008000
3186 #define HINT_NEW_RE             0x00010000
3187 #define HINT_LOCALIZE_HH        0x00020000 /* %^H needs to be copied */
3188
3189 #define HINT_RE_TAINT           0x00100000
3190 #define HINT_RE_EVAL            0x00200000
3191
3192 #define HINT_FILETEST_ACCESS    0x00400000
3193 #define HINT_UTF8               0x00800000
3194
3195 #define HINT_SORT_SORT_BITS     0x000000FF /* allow 256 different ones */
3196 #define HINT_SORT_QUICKSORT     0x00000001
3197 #define HINT_SORT_MERGESORT     0x00000002
3198 #define HINT_SORT_STABLE        0x00000100 /* sort styles (currently one) */
3199
3200 /* Various states of the input record separator SV (rs) */
3201 #define RsSNARF(sv)   (! SvOK(sv))
3202 #define RsSIMPLE(sv)  (SvOK(sv) && (! SvPOK(sv) || SvCUR(sv)))
3203 #define RsPARA(sv)    (SvPOK(sv) && ! SvCUR(sv))
3204 #define RsRECORD(sv)  (SvROK(sv) && (SvIV(SvRV(sv)) > 0))
3205
3206 /* A struct for keeping various DEBUGGING related stuff,
3207  * neatly packed.  Currently only scratch variables for
3208  * constructing debug output are included.  Needed always,
3209  * not just when DEBUGGING, though, because of the re extension. c*/
3210 struct perl_debug_pad {
3211   SV pad[3];
3212 };
3213
3214 #define PERL_DEBUG_PAD(i)       &(PL_debug_pad.pad[i])
3215 #define PERL_DEBUG_PAD_ZERO(i)  (SvPVX(PERL_DEBUG_PAD(i))[0] = 0, SvCUR(PERL_DEBUG_PAD(i)) = 0, PERL_DEBUG_PAD(i))
3216
3217 /* Enable variables which are pointers to functions */
3218 typedef void (CPERLscope(*peep_t))(pTHX_ OP* o);
3219 typedef regexp*(CPERLscope(*regcomp_t)) (pTHX_ char* exp, char* xend, PMOP* pm);
3220 typedef I32 (CPERLscope(*regexec_t)) (pTHX_ regexp* prog, char* stringarg,
3221                                       char* strend, char* strbeg, I32 minend,
3222                                       SV* screamer, void* data, U32 flags);
3223 typedef char* (CPERLscope(*re_intuit_start_t)) (pTHX_ regexp *prog, SV *sv,
3224                                                 char *strpos, char *strend,
3225                                                 U32 flags,
3226                                                 struct re_scream_pos_data_s *d);
3227 typedef SV*     (CPERLscope(*re_intuit_string_t)) (pTHX_ regexp *prog);
3228 typedef void    (CPERLscope(*regfree_t)) (pTHX_ struct regexp* r);
3229
3230 typedef void (*DESTRUCTORFUNC_NOCONTEXT_t) (void*);
3231 typedef void (*DESTRUCTORFUNC_t) (pTHX_ void*);
3232 typedef void (*SVFUNC_t) (pTHX_ SV*);
3233 typedef I32  (*SVCOMPARE_t) (pTHX_ SV*, SV*);
3234 typedef void (*XSINIT_t) (pTHX);
3235 typedef void (*ATEXIT_t) (pTHX_ void*);
3236 typedef void (*XSUBADDR_t) (pTHX_ CV *);
3237
3238 /* Set up PERLVAR macros for populating structs */
3239 #define PERLVAR(var,type) type var;
3240 #define PERLVARA(var,n,type) type var[n];
3241 #define PERLVARI(var,type,init) type var;
3242 #define PERLVARIC(var,type,init) type var;
3243
3244 /* Interpreter exitlist entry */
3245 typedef struct exitlistentry {
3246     void (*fn) (pTHX_ void*);
3247     void *ptr;
3248 } PerlExitListEntry;
3249
3250 #ifdef PERL_GLOBAL_STRUCT
3251 struct perl_vars {
3252 #  include "perlvars.h"
3253 };
3254
3255 #  ifdef PERL_CORE
3256 EXT struct perl_vars PL_Vars;
3257 EXT struct perl_vars *PL_VarsPtr INIT(&PL_Vars);
3258 #  else /* PERL_CORE */
3259 #    if !defined(__GNUC__) || !defined(WIN32)
3260 EXT
3261 #    endif /* WIN32 */
3262 struct perl_vars *PL_VarsPtr;
3263 #    define PL_Vars (*((PL_VarsPtr) \
3264                        ? PL_VarsPtr : (PL_VarsPtr = Perl_GetVars(aTHX))))
3265 #  endif /* PERL_CORE */
3266 #endif /* PERL_GLOBAL_STRUCT */
3267
3268 #if defined(MULTIPLICITY)
3269 /* If we have multiple interpreters define a struct
3270    holding variables which must be per-interpreter
3271    If we don't have threads anything that would have
3272    be per-thread is per-interpreter.
3273 */
3274
3275 struct interpreter {
3276 #  ifndef USE_5005THREADS
3277 #    include "thrdvar.h"
3278 #  endif
3279 #  include "intrpvar.h"
3280 /*
3281  * The following is a buffer where new variables must
3282  * be defined to maintain binary compatibility with previous versions
3283  */
3284 PERLVARA(object_compatibility,30,       char)
3285 };
3286
3287 #else
3288 struct interpreter {
3289     char broiled;
3290 };
3291 #endif /* MULTIPLICITY */
3292
3293 #ifdef USE_5005THREADS
3294 /* If we have threads define a struct with all the variables
3295  * that have to be per-thread
3296  */
3297
3298
3299 struct perl_thread {
3300 #include "thrdvar.h"
3301 };
3302
3303 typedef struct perl_thread *Thread;
3304
3305 #else
3306 typedef void *Thread;
3307 #endif
3308
3309 /* Done with PERLVAR macros for now ... */
3310 #undef PERLVAR
3311 #undef PERLVARA
3312 #undef PERLVARI
3313 #undef PERLVARIC
3314
3315 #include "thread.h"
3316 #include "pp.h"
3317
3318 #ifndef PERL_CALLCONV
3319 #  define PERL_CALLCONV
3320 #endif
3321
3322 #ifndef NEXT30_NO_ATTRIBUTE
3323 #  ifndef HASATTRIBUTE       /* disable GNU-cc attribute checking? */
3324 #    ifdef  __attribute__      /* Avoid possible redefinition errors */
3325 #      undef  __attribute__
3326 #    endif
3327 #    define __attribute__(attr)
3328 #  endif
3329 #endif
3330
3331 #undef PERL_CKDEF
3332 #undef PERL_PPDEF
3333 #define PERL_CKDEF(s)   OP *s (pTHX_ OP *o);
3334 #define PERL_PPDEF(s)   OP *s (pTHX);
3335
3336 #include "proto.h"
3337
3338 /* this has structure inits, so it cannot be included before here */
3339 #include "opcode.h"
3340
3341 /* The following must follow proto.h as #defines mess up syntax */
3342
3343 #if !defined(PERL_FOR_X2P)
3344 #  include "embedvar.h"
3345 #endif
3346
3347 /* Now include all the 'global' variables
3348  * If we don't have threads or multiple interpreters
3349  * these include variables that would have been their struct-s
3350  */
3351
3352 #define PERLVAR(var,type) EXT type PL_##var;
3353 #define PERLVARA(var,n,type) EXT type PL_##var[n];
3354 #define PERLVARI(var,type,init) EXT type  PL_##var INIT(init);
3355 #define PERLVARIC(var,type,init) EXTCONST type PL_##var INIT(init);
3356
3357 #if !defined(MULTIPLICITY)
3358 START_EXTERN_C
3359 #  include "intrpvar.h"
3360 #  ifndef USE_5005THREADS
3361 #    include "thrdvar.h"
3362 #  endif
3363 END_EXTERN_C
3364 #endif
3365
3366 #if defined(WIN32)
3367 /* Now all the config stuff is setup we can include embed.h */
3368 #  include "embed.h"
3369 #endif
3370
3371 #ifndef PERL_GLOBAL_STRUCT
3372 START_EXTERN_C
3373
3374 #  include "perlvars.h"
3375
3376 END_EXTERN_C
3377 #endif
3378
3379 #undef PERLVAR
3380 #undef PERLVARA
3381 #undef PERLVARI
3382 #undef PERLVARIC
3383
3384 START_EXTERN_C
3385
3386 #ifdef DOINIT
3387
3388 EXT MGVTBL PL_vtbl_sv =         {MEMBER_TO_FPTR(Perl_magic_get),
3389                                 MEMBER_TO_FPTR(Perl_magic_set),
3390                                         MEMBER_TO_FPTR(Perl_magic_len),
3391                                                 0,      0};
3392 EXT MGVTBL PL_vtbl_env =        {0,     MEMBER_TO_FPTR(Perl_magic_set_all_env),
3393                                 0,      MEMBER_TO_FPTR(Perl_magic_clear_all_env),
3394                                                         0};
3395 EXT MGVTBL PL_vtbl_envelem =    {0,     MEMBER_TO_FPTR(Perl_magic_setenv),
3396                                         0,      MEMBER_TO_FPTR(Perl_magic_clearenv),
3397                                                         0};
3398 EXT MGVTBL PL_vtbl_sig =        {0,     0,               0, 0, 0};
3399 #ifdef PERL_MICRO
3400 EXT MGVTBL PL_vtbl_sigelem =    {0,     0,               0, 0, 0};
3401 #else
3402 EXT MGVTBL PL_vtbl_sigelem =    {MEMBER_TO_FPTR(Perl_magic_getsig),
3403                                         MEMBER_TO_FPTR(Perl_magic_setsig),
3404                                         0,      MEMBER_TO_FPTR(Perl_magic_clearsig),
3405                                                         0};
3406 #endif
3407 EXT MGVTBL PL_vtbl_pack =       {0,     0,      
3408                                 MEMBER_TO_FPTR(Perl_magic_sizepack),    
3409                                 MEMBER_TO_FPTR(Perl_magic_wipepack),
3410                                                         0};
3411 EXT MGVTBL PL_vtbl_packelem =   {MEMBER_TO_FPTR(Perl_magic_getpack),
3412                                         MEMBER_TO_FPTR(Perl_magic_setpack),
3413                                         0,      MEMBER_TO_FPTR(Perl_magic_clearpack),
3414                                                         0};
3415 EXT MGVTBL PL_vtbl_dbline =     {0,     MEMBER_TO_FPTR(Perl_magic_setdbline),
3416                                         0,      0,      0};
3417 EXT MGVTBL PL_vtbl_isa =        {0,     MEMBER_TO_FPTR(Perl_magic_setisa),
3418                                         0,      MEMBER_TO_FPTR(Perl_magic_setisa),
3419                                                         0};
3420 EXT MGVTBL PL_vtbl_isaelem =    {0,     MEMBER_TO_FPTR(Perl_magic_setisa),
3421                                         0,      0,      0};
3422 EXT MGVTBL PL_vtbl_arylen =     {MEMBER_TO_FPTR(Perl_magic_getarylen),
3423                                 MEMBER_TO_FPTR(Perl_magic_setarylen),
3424                                         0,      0,      0};
3425 EXT MGVTBL PL_vtbl_glob =       {MEMBER_TO_FPTR(Perl_magic_getglob),
3426                                 MEMBER_TO_FPTR(Perl_magic_setglob),
3427                                         0,      0,      0};
3428 EXT MGVTBL PL_vtbl_mglob =      {0,     MEMBER_TO_FPTR(Perl_magic_setmglob),
3429                                         0,      0,      0};
3430 EXT MGVTBL PL_vtbl_nkeys =      {MEMBER_TO_FPTR(Perl_magic_getnkeys),
3431                                 MEMBER_TO_FPTR(Perl_magic_setnkeys),
3432                                         0,      0,      0};
3433 EXT MGVTBL PL_vtbl_taint =      {MEMBER_TO_FPTR(Perl_magic_gettaint),
3434                                         MEMBER_TO_FPTR(Perl_magic_settaint),
3435                                         0,      0,      0};
3436 EXT MGVTBL PL_vtbl_substr =     {MEMBER_TO_FPTR(Perl_magic_getsubstr),
3437                                         MEMBER_TO_FPTR(Perl_magic_setsubstr),
3438                                         0,      0,      0};
3439 EXT MGVTBL PL_vtbl_vec =        {MEMBER_TO_FPTR(Perl_magic_getvec),
3440                                         MEMBER_TO_FPTR(Perl_magic_setvec),
3441                                         0,      0,      0};
3442 EXT MGVTBL PL_vtbl_pos =        {MEMBER_TO_FPTR(Perl_magic_getpos),
3443                                 MEMBER_TO_FPTR(Perl_magic_setpos),
3444                                         0,      0,      0};
3445 EXT MGVTBL PL_vtbl_bm = {0,     MEMBER_TO_FPTR(Perl_magic_setbm),
3446                                         0,      0,      0};
3447 EXT MGVTBL PL_vtbl_fm = {0,     MEMBER_TO_FPTR(Perl_magic_setfm),
3448                                         0,      0,      0};
3449 EXT MGVTBL PL_vtbl_uvar =       {MEMBER_TO_FPTR(Perl_magic_getuvar),
3450                                 MEMBER_TO_FPTR(Perl_magic_setuvar),
3451                                         0,      0,      0};
3452 #ifdef USE_5005THREADS
3453 EXT MGVTBL PL_vtbl_mutex =      {0,     0,      0,      0,      
3454                                         MEMBER_TO_FPTR(Perl_magic_mutexfree)};
3455 #endif /* USE_5005THREADS */
3456 EXT MGVTBL PL_vtbl_defelem = {MEMBER_TO_FPTR(Perl_magic_getdefelem),
3457                                         MEMBER_TO_FPTR(Perl_magic_setdefelem),
3458                                         0,      0,      0};
3459
3460 EXT MGVTBL PL_vtbl_regexp = {0,0,0,0, MEMBER_TO_FPTR(Perl_magic_freeregexp)};
3461 EXT MGVTBL PL_vtbl_regdata = {0, 0, MEMBER_TO_FPTR(Perl_magic_regdata_cnt), 0, 0};
3462 EXT MGVTBL PL_vtbl_regdatum = {MEMBER_TO_FPTR(Perl_magic_regdatum_get),
3463                                MEMBER_TO_FPTR(Perl_magic_regdatum_set), 0, 0, 0};
3464
3465 #ifdef USE_LOCALE_COLLATE
3466 EXT MGVTBL PL_vtbl_collxfrm = {0,
3467                                 MEMBER_TO_FPTR(Perl_magic_setcollxfrm),
3468                                         0,      0,      0};
3469 #endif
3470
3471 EXT MGVTBL PL_vtbl_amagic =       {0,     MEMBER_TO_FPTR(Perl_magic_setamagic),
3472                                         0,      0,      MEMBER_TO_FPTR(Perl_magic_setamagic)};
3473 EXT MGVTBL PL_vtbl_amagicelem =   {0,     MEMBER_TO_FPTR(Perl_magic_setamagic),
3474                                         0,      0,      MEMBER_TO_FPTR(Perl_magic_setamagic)};
3475
3476 EXT MGVTBL PL_vtbl_backref =      {0,   0,
3477                                         0,      0,      MEMBER_TO_FPTR(Perl_magic_killbackrefs)};
3478
3479 EXT MGVTBL PL_vtbl_ovrld   =      {0,   0,
3480                                         0,      0,      MEMBER_TO_FPTR(Perl_magic_freeovrld)};
3481
3482 #else /* !DOINIT */
3483
3484 EXT MGVTBL PL_vtbl_sv;
3485 EXT MGVTBL PL_vtbl_env;
3486 EXT MGVTBL PL_vtbl_envelem;
3487 EXT MGVTBL PL_vtbl_sig;
3488 EXT MGVTBL PL_vtbl_sigelem;
3489 EXT MGVTBL PL_vtbl_pack;
3490 EXT MGVTBL PL_vtbl_packelem;
3491 EXT MGVTBL PL_vtbl_dbline;
3492 EXT MGVTBL PL_vtbl_isa;
3493 EXT MGVTBL PL_vtbl_isaelem;
3494 EXT MGVTBL PL_vtbl_arylen;
3495 EXT MGVTBL PL_vtbl_glob;
3496 EXT MGVTBL PL_vtbl_mglob;
3497 EXT MGVTBL PL_vtbl_nkeys;
3498 EXT MGVTBL PL_vtbl_taint;
3499 EXT MGVTBL PL_vtbl_substr;
3500 EXT MGVTBL PL_vtbl_vec;
3501 EXT MGVTBL PL_vtbl_pos;
3502 EXT MGVTBL PL_vtbl_bm;
3503 EXT MGVTBL PL_vtbl_fm;
3504 EXT MGVTBL PL_vtbl_uvar;
3505 EXT MGVTBL PL_vtbl_ovrld;
3506
3507 #ifdef USE_5005THREADS
3508 EXT MGVTBL PL_vtbl_mutex;
3509 #endif /* USE_5005THREADS */
3510
3511 EXT MGVTBL PL_vtbl_defelem;
3512 EXT MGVTBL PL_vtbl_regexp;
3513 EXT MGVTBL PL_vtbl_regdata;
3514 EXT MGVTBL PL_vtbl_regdatum;
3515
3516 #ifdef USE_LOCALE_COLLATE
3517 EXT MGVTBL PL_vtbl_collxfrm;
3518 #endif
3519
3520 EXT MGVTBL PL_vtbl_amagic;
3521 EXT MGVTBL PL_vtbl_amagicelem;
3522
3523 EXT MGVTBL PL_vtbl_backref;
3524
3525 #endif /* !DOINIT */
3526
3527 enum {
3528   fallback_amg,        abs_amg,
3529   bool__amg,   nomethod_amg,
3530   string_amg,  numer_amg,
3531   add_amg,     add_ass_amg,
3532   subtr_amg,   subtr_ass_amg,
3533   mult_amg,    mult_ass_amg,
3534   div_amg,     div_ass_amg,
3535   modulo_amg,  modulo_ass_amg,
3536   pow_amg,     pow_ass_amg,
3537   lshift_amg,  lshift_ass_amg,
3538   rshift_amg,  rshift_ass_amg,
3539   band_amg,    band_ass_amg,
3540   bor_amg,     bor_ass_amg,
3541   bxor_amg,    bxor_ass_amg,
3542   lt_amg,      le_amg,
3543   gt_amg,      ge_amg,
3544   eq_amg,      ne_amg,
3545   ncmp_amg,    scmp_amg,
3546   slt_amg,     sle_amg,
3547   sgt_amg,     sge_amg,
3548   seq_amg,     sne_amg,
3549   not_amg,     compl_amg,
3550   inc_amg,     dec_amg,
3551   atan2_amg,   cos_amg,
3552   sin_amg,     exp_amg,
3553   log_amg,     sqrt_amg,
3554   repeat_amg,   repeat_ass_amg,
3555   concat_amg,  concat_ass_amg,
3556   copy_amg,    neg_amg,
3557   to_sv_amg,   to_av_amg,
3558   to_hv_amg,   to_gv_amg,
3559   to_cv_amg,   iter_amg,
3560   int_amg,      DESTROY_amg,
3561   max_amg_code
3562   /* Do not leave a trailing comma here.  C9X allows it, C89 doesn't. */
3563 };
3564
3565 #define NofAMmeth max_amg_code
3566 #define AMG_id2name(id) ((char*)PL_AMG_names[id]+1)
3567
3568 #ifdef DOINIT
3569 EXTCONST char * PL_AMG_names[NofAMmeth] = {
3570   /* Names kept in the symbol table.  fallback => "()", the rest has
3571      "(" prepended.  The only other place in perl which knows about
3572      this convention is AMG_id2name (used for debugging output and
3573      'nomethod' only), the only other place which has it hardwired is
3574      overload.pm.  */
3575   "()",         "(abs",                 /* "fallback" should be the first. */
3576   "(bool",      "(nomethod",
3577   "(\"\"",      "(0+",
3578   "(+",         "(+=",
3579   "(-",         "(-=",
3580   "(*",         "(*=",
3581   "(/",         "(/=",
3582   "(%",         "(%=",
3583   "(**",        "(**=",
3584   "(<<",        "(<<=",
3585   "(>>",        "(>>=",
3586   "(&",         "(&=",
3587   "(|",         "(|=",
3588   "(^",         "(^=",
3589   "(<",         "(<=",
3590   "(>",         "(>=",
3591   "(==",        "(!=",
3592   "(<=>",       "(cmp",
3593   "(lt",        "(le",
3594   "(gt",        "(ge",
3595   "(eq",        "(ne",
3596   "(!",         "(~",
3597   "(++",        "(--",
3598   "(atan2",     "(cos",
3599   "(sin",       "(exp",
3600   "(log",       "(sqrt",
3601   "(x",         "(x=",
3602   "(.",         "(.=",
3603   "(=",         "(neg",
3604   "(${}",       "(@{}",
3605   "(%{}",       "(*{}",
3606   "(&{}",       "(<>",
3607   "(int",       "DESTROY",
3608 };
3609 #else
3610 EXTCONST char * PL_AMG_names[NofAMmeth];
3611 #endif /* def INITAMAGIC */
3612
3613 END_EXTERN_C
3614
3615 struct am_table {
3616   U32 was_ok_sub;
3617   long was_ok_am;
3618   U32 flags;
3619   CV* table[NofAMmeth];
3620   long fallback;
3621 };
3622 struct am_table_short {
3623   U32 was_ok_sub;
3624   long was_ok_am;
3625   U32 flags;
3626 };
3627 typedef struct am_table AMT;
3628 typedef struct am_table_short AMTS;
3629
3630 #define AMGfallNEVER    1
3631 #define AMGfallNO       2
3632 #define AMGfallYES      3
3633
3634 #define AMTf_AMAGIC             1
3635 #define AMTf_OVERLOADED         2
3636 #define AMT_AMAGIC(amt)         ((amt)->flags & AMTf_AMAGIC)
3637 #define AMT_AMAGIC_on(amt)      ((amt)->flags |= AMTf_AMAGIC)
3638 #define AMT_AMAGIC_off(amt)     ((amt)->flags &= ~AMTf_AMAGIC)
3639 #define AMT_OVERLOADED(amt)     ((amt)->flags & AMTf_OVERLOADED)
3640 #define AMT_OVERLOADED_on(amt)  ((amt)->flags |= AMTf_OVERLOADED)
3641 #define AMT_OVERLOADED_off(amt) ((amt)->flags &= ~AMTf_OVERLOADED)
3642
3643 #define StashHANDLER(stash,meth)        gv_handler((stash),CAT2(meth,_amg))
3644
3645 /*
3646  * some compilers like to redefine cos et alia as faster
3647  * (and less accurate?) versions called F_cos et cetera (Quidquid
3648  * latine dictum sit, altum viditur.)  This trick collides with
3649  * the Perl overloading (amg).  The following #defines fool both.
3650  */
3651
3652 #ifdef _FASTMATH
3653 #   ifdef atan2
3654 #       define F_atan2_amg  atan2_amg
3655 #   endif
3656 #   ifdef cos
3657 #       define F_cos_amg    cos_amg
3658 #   endif
3659 #   ifdef exp
3660 #       define F_exp_amg    exp_amg
3661 #   endif
3662 #   ifdef log
3663 #       define F_log_amg    log_amg
3664 #   endif
3665 #   ifdef pow
3666 #       define F_pow_amg    pow_amg
3667 #   endif
3668 #   ifdef sin
3669 #       define F_sin_amg    sin_amg
3670 #   endif
3671 #   ifdef sqrt
3672 #       define F_sqrt_amg   sqrt_amg
3673 #   endif
3674 #endif /* _FASTMATH */
3675
3676 #define PERLDB_ALL              (PERLDBf_SUB    | PERLDBf_LINE  |       \
3677                                  PERLDBf_NOOPT  | PERLDBf_INTER |       \
3678                                  PERLDBf_SUBLINE| PERLDBf_SINGLE|       \
3679                                  PERLDBf_NAMEEVAL| PERLDBf_NAMEANON)
3680                                         /* No _NONAME, _GOTO */
3681 #define PERLDBf_SUB             0x01    /* Debug sub enter/exit */
3682 #define PERLDBf_LINE            0x02    /* Keep line # */
3683 #define PERLDBf_NOOPT           0x04    /* Switch off optimizations */
3684 #define PERLDBf_INTER           0x08    /* Preserve more data for
3685                                            later inspections  */
3686 #define PERLDBf_SUBLINE         0x10    /* Keep subr source lines */
3687 #define PERLDBf_SINGLE          0x20    /* Start with single-step on */
3688 #define PERLDBf_NONAME          0x40    /* For _SUB: no name of the subr */
3689 #define PERLDBf_GOTO            0x80    /* Report goto: call DB::goto */
3690 #define PERLDBf_NAMEEVAL        0x100   /* Informative names for evals */
3691 #define PERLDBf_NAMEANON        0x200   /* Informative names for anon subs */
3692
3693 #define PERLDB_SUB      (PL_perldb && (PL_perldb & PERLDBf_SUB))
3694 #define PERLDB_LINE     (PL_perldb && (PL_perldb & PERLDBf_LINE))
3695 #define PERLDB_NOOPT    (PL_perldb && (PL_perldb & PERLDBf_NOOPT))
3696 #define PERLDB_INTER    (PL_perldb && (PL_perldb & PERLDBf_INTER))
3697 #define PERLDB_SUBLINE  (PL_perldb && (PL_perldb & PERLDBf_SUBLINE))
3698 #define PERLDB_SINGLE   (PL_perldb && (PL_perldb & PERLDBf_SINGLE))
3699 #define PERLDB_SUB_NN   (PL_perldb && (PL_perldb & (PERLDBf_NONAME)))
3700 #define PERLDB_GOTO     (PL_perldb && (PL_perldb & PERLDBf_GOTO))
3701 #define PERLDB_NAMEEVAL (PL_perldb && (PL_perldb & PERLDBf_NAMEEVAL))
3702 #define PERLDB_NAMEANON (PL_perldb && (PL_perldb & PERLDBf_NAMEANON))
3703
3704
3705 #ifdef USE_LOCALE_NUMERIC
3706
3707 #define SET_NUMERIC_STANDARD() \
3708         set_numeric_standard();
3709
3710 #define SET_NUMERIC_LOCAL() \
3711         set_numeric_local();
3712
3713 #define IN_LOCALE_RUNTIME       (PL_curcop->op_private & HINT_LOCALE)
3714 #define IN_LOCALE_COMPILETIME   (PL_hints & HINT_LOCALE)
3715
3716 #define IN_LOCALE \
3717         (PL_curcop == &PL_compiling ? IN_LOCALE_COMPILETIME : IN_LOCALE_RUNTIME)
3718
3719 #define STORE_NUMERIC_LOCAL_SET_STANDARD() \
3720         bool was_local = PL_numeric_local && IN_LOCALE; \
3721         if (was_local) SET_NUMERIC_STANDARD();
3722
3723 #define STORE_NUMERIC_STANDARD_SET_LOCAL() \
3724         bool was_standard = PL_numeric_standard && IN_LOCALE; \
3725         if (was_standard) SET_NUMERIC_LOCAL();
3726
3727 #define RESTORE_NUMERIC_LOCAL() \
3728         if (was_local) SET_NUMERIC_LOCAL();
3729
3730 #define RESTORE_NUMERIC_STANDARD() \
3731         if (was_standard) SET_NUMERIC_STANDARD();
3732
3733 #define Atof                            my_atof
3734
3735 #else /* !USE_LOCALE_NUMERIC */
3736
3737 #define SET_NUMERIC_STANDARD()          /**/
3738 #define SET_NUMERIC_LOCAL()             /**/
3739 #define IS_NUMERIC_RADIX(a, b)          (0)
3740 #define STORE_NUMERIC_LOCAL_SET_STANDARD()      /**/
3741 #define STORE_NUMERIC_STANDARD_SET_LOCAL()      /**/
3742 #define RESTORE_NUMERIC_LOCAL()         /**/
3743 #define RESTORE_NUMERIC_STANDARD()      /**/
3744 #define Atof                            my_atof
3745 #define IN_LOCALE_RUNTIME               0
3746
3747 #endif /* !USE_LOCALE_NUMERIC */
3748
3749 #if !defined(Strtol) && defined(USE_64_BIT_INT) && defined(IV_IS_QUAD) && QUADKIND == QUAD_IS_LONG_LONG
3750 #    ifdef __hpux
3751 #        define strtoll __strtoll       /* secret handshake */
3752 #    endif
3753 #    ifdef WIN64
3754 #        define strtoll _strtoi64       /* secret handshake */
3755 #    endif
3756 #   if !defined(Strtol) && defined(HAS_STRTOLL)
3757 #       define Strtol   strtoll
3758 #   endif
3759 #    if !defined(Strtol) && defined(HAS_STRTOQ)
3760 #       define Strtol   strtoq
3761 #    endif
3762 /* is there atoq() anywhere? */
3763 #endif
3764 #if !defined(Strtol) && defined(HAS_STRTOL)
3765 #   define Strtol       strtol
3766 #endif
3767 #ifndef Atol
3768 /* It would be more fashionable to use Strtol() to define atol()
3769  * (as is done for Atoul(), see below) but for backward compatibility
3770  * we just assume atol(). */
3771 #   if defined(USE_64_BIT_INT) && defined(IV_IS_QUAD) && QUADKIND == QUAD_IS_LONG_LONG && defined(HAS_ATOLL)
3772 #    ifdef WIN64
3773 #       define atoll    _atoi64         /* secret handshake */
3774 #    endif
3775 #       define Atol     atoll
3776 #   else
3777 #       define Atol     atol
3778 #   endif
3779 #endif
3780
3781 #if !defined(Strtoul) && defined(USE_64_BIT_INT) && defined(UV_IS_QUAD) && QUADKIND == QUAD_IS_LONG_LONG
3782 #    ifdef __hpux
3783 #        define strtoull __strtoull     /* secret handshake */
3784 #    endif
3785 #    ifdef WIN64
3786 #        define strtoull _strtoui64     /* secret handshake */
3787 #    endif
3788 #    if !defined(Strtoul) && defined(HAS_STRTOULL)
3789 #       define Strtoul  strtoull
3790 #    endif
3791 #    if !defined(Strtoul) && defined(HAS_STRTOUQ)
3792 #       define Strtoul  strtouq
3793 #    endif
3794 /* is there atouq() anywhere? */
3795 #endif
3796 #if !defined(Strtoul) && defined(HAS_STRTOUL)
3797 #   define Strtoul      strtoul
3798 #endif
3799 #ifndef Atoul
3800 #   define Atoul(s)     Strtoul(s, (char **)NULL, 10)
3801 #endif
3802
3803 #if !defined(PERLIO_IS_STDIO) && defined(HASATTRIBUTE)
3804 /*
3805  * Now we have __attribute__ out of the way
3806  * Remap printf
3807  */
3808 #undef printf
3809 #ifdef __GNUC__
3810 #define printf(fmt,args...) PerlIO_stdoutf(fmt,##args)
3811 #else
3812 #define printf PerlIO_stdoutf
3813 #endif
3814 #endif
3815
3816 /* if these never got defined, they need defaults */
3817 #ifndef PERL_SET_CONTEXT
3818 #  define PERL_SET_CONTEXT(i)           PERL_SET_INTERP(i)
3819 #endif
3820
3821 #ifndef PERL_GET_CONTEXT
3822 #  define PERL_GET_CONTEXT              PERL_GET_INTERP
3823 #endif
3824
3825 #ifndef PERL_GET_THX
3826 #  define PERL_GET_THX                  ((void*)NULL)
3827 #endif
3828
3829 #ifndef PERL_SET_THX
3830 #  define PERL_SET_THX(t)               NOOP
3831 #endif
3832
3833 #ifndef PERL_SCRIPT_MODE
3834 #define PERL_SCRIPT_MODE "r"
3835 #endif
3836
3837 /*
3838  * Some operating systems are stingy with stack allocation,
3839  * so perl may have to guard against stack overflow.
3840  */
3841 #ifndef PERL_STACK_OVERFLOW_CHECK
3842 #define PERL_STACK_OVERFLOW_CHECK()  NOOP
3843 #endif
3844
3845 /*
3846  * Some nonpreemptive operating systems find it convenient to
3847  * check for asynchronous conditions after each op execution.
3848  * Keep this check simple, or it may slow down execution
3849  * massively.
3850  */
3851
3852 #ifndef PERL_MICRO
3853 #   ifndef PERL_OLD_SIGNALS
3854 #               ifndef PERL_ASYNC_CHECK
3855 #                       define PERL_ASYNC_CHECK() if (PL_sig_pending) despatch_signals()
3856 #               endif
3857 #   endif
3858 #endif
3859
3860 #ifndef PERL_ASYNC_CHECK
3861 #   define PERL_ASYNC_CHECK()  NOOP
3862 #endif
3863
3864 /*
3865  * On some operating systems, a memory allocation may succeed,
3866  * but put the process too close to the system's comfort limit.
3867  * In this case, PERL_ALLOC_CHECK frees the pointer and sets
3868  * it to NULL.
3869  */
3870 #ifndef PERL_ALLOC_CHECK
3871 #define PERL_ALLOC_CHECK(p)  NOOP
3872 #endif
3873
3874 /*
3875  * nice_chunk and nice_chunk size need to be set
3876  * and queried under the protection of sv_mutex
3877  */
3878 #define offer_nice_chunk(chunk, chunk_size) STMT_START {  \
3879        void *new_chunk;                                   \
3880        U32 new_chunk_size;                                \
3881        LOCK_SV_MUTEX;                                     \
3882        new_chunk = (void *)(chunk);                       \
3883        new_chunk_size = (chunk_size);                     \
3884        if (new_chunk_size > PL_nice_chunk_size) {         \
3885            if (PL_nice_chunk) Safefree(PL_nice_chunk);    \
3886            PL_nice_chunk = new_chunk;                     \
3887            PL_nice_chunk_size = new_chunk_size;           \
3888        } else {                                           \
3889            Safefree(chunk);                               \
3890        }                                                  \
3891        UNLOCK_SV_MUTEX;                                   \
3892    } STMT_END
3893
3894 #ifdef HAS_SEM
3895 #   include <sys/ipc.h>
3896 #   include <sys/sem.h>
3897 #   ifndef HAS_UNION_SEMUN      /* Provide the union semun. */
3898     union semun {
3899         int             val;
3900         struct semid_ds *buf;
3901         unsigned short  *array;
3902     };
3903 #   endif
3904 #   ifdef USE_SEMCTL_SEMUN
3905 #       ifdef IRIX32_SEMUN_BROKEN_BY_GCC
3906             union gccbug_semun {
3907                 int             val;
3908                 struct semid_ds *buf;
3909                 unsigned short  *array;
3910                 char            __dummy[5];
3911             };
3912 #           define semun gccbug_semun
3913 #       endif
3914 #       define Semctl(id, num, cmd, semun) semctl(id, num, cmd, semun)
3915 #   else
3916 #       ifdef USE_SEMCTL_SEMID_DS
3917 #           ifdef EXTRA_F_IN_SEMUN_BUF
3918 #               define Semctl(id, num, cmd, semun) semctl(id, num, cmd, semun.buff)
3919 #           else
3920 #               define Semctl(id, num, cmd, semun) semctl(id, num, cmd, semun.buf)
3921 #           endif
3922 #       endif
3923 #   endif
3924 #endif
3925
3926 /*
3927  * Boilerplate macros for initializing and accessing interpreter-local
3928  * data from C.  All statics in extensions should be reworked to use
3929  * this, if you want to make the extension thread-safe.  See ext/re/re.xs
3930  * for an example of the use of these macros, and perlxs.pod for more.
3931  *
3932  * Code that uses these macros is responsible for the following:
3933  * 1. #define MY_CXT_KEY to a unique string, e.g.
3934  *    "DynaLoader::_guts" XS_VERSION
3935  * 2. Declare a typedef named my_cxt_t that is a structure that contains
3936  *    all the data that needs to be interpreter-local.
3937  * 3. Use the START_MY_CXT macro after the declaration of my_cxt_t.
3938  * 4. Use the MY_CXT_INIT macro such that it is called exactly once
3939  *    (typically put in the BOOT: section).
3940  * 5. Use the members of the my_cxt_t structure everywhere as
3941  *    MY_CXT.member.
3942  * 6. Use the dMY_CXT macro (a declaration) in all the functions that
3943  *    access MY_CXT.
3944  */
3945
3946 #if defined(PERL_IMPLICIT_CONTEXT)
3947
3948 /* This must appear in all extensions that define a my_cxt_t structure,
3949  * right after the definition (i.e. at file scope).  The non-threads
3950  * case below uses it to declare the data as static. */
3951 #define START_MY_CXT
3952
3953 /* Fetches the SV that keeps the per-interpreter data. */
3954 #define dMY_CXT_SV \
3955         SV *my_cxt_sv = *hv_fetch(PL_modglobal, MY_CXT_KEY,             \
3956                                   sizeof(MY_CXT_KEY)-1, TRUE)
3957
3958 /* This declaration should be used within all functions that use the
3959  * interpreter-local data. */
3960 #define dMY_CXT \
3961         dMY_CXT_SV;                                                     \
3962         my_cxt_t *my_cxtp = INT2PTR(my_cxt_t*, SvUV(my_cxt_sv))
3963
3964 /* Creates and zeroes the per-interpreter data.
3965  * (We allocate my_cxtp in a Perl SV so that it will be released when
3966  * the interpreter goes away.) */
3967 #define MY_CXT_INIT \
3968         dMY_CXT_SV;                                                     \
3969         /* newSV() allocates one more than needed */                    \
3970         my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\
3971         Zero(my_cxtp, 1, my_cxt_t);                                     \
3972         sv_setuv(my_cxt_sv, PTR2UV(my_cxtp))
3973
3974 /* This macro must be used to access members of the my_cxt_t structure.
3975  * e.g. MYCXT.some_data */
3976 #define MY_CXT          (*my_cxtp)
3977
3978 /* Judicious use of these macros can reduce the number of times dMY_CXT
3979  * is used.  Use is similar to pTHX, aTHX etc. */
3980 #define pMY_CXT         my_cxt_t *my_cxtp
3981 #define pMY_CXT_        pMY_CXT,
3982 #define _pMY_CXT        ,pMY_CXT
3983 #define aMY_CXT         my_cxtp
3984 #define aMY_CXT_        aMY_CXT,
3985 #define _aMY_CXT        ,aMY_CXT
3986
3987 #else /* USE_ITHREADS */
3988
3989 #define START_MY_CXT    static my_cxt_t my_cxt;
3990 #define dMY_CXT_SV      dNOOP
3991 #define dMY_CXT         dNOOP
3992 #define MY_CXT_INIT     NOOP
3993 #define MY_CXT          my_cxt
3994
3995 #define pMY_CXT         void
3996 #define pMY_CXT_
3997 #define _pMY_CXT
3998 #define aMY_CXT
3999 #define aMY_CXT_
4000 #define _aMY_CXT
4001
4002 #endif /* !defined(USE_ITHREADS) */
4003
4004 #ifdef I_FCNTL
4005 #  include <fcntl.h>
4006 #endif
4007
4008 #ifdef I_SYS_FILE
4009 #  include <sys/file.h>
4010 #endif
4011
4012 #if defined(HAS_FLOCK) && !defined(HAS_FLOCK_PROTO)
4013 int flock(int fd, int op);
4014 #endif
4015
4016 #ifndef O_RDONLY
4017 /* Assume UNIX defaults */
4018 #    define O_RDONLY    0000
4019 #    define O_WRONLY    0001
4020 #    define O_RDWR      0002
4021 #    define O_CREAT     0100
4022 #endif
4023
4024 #ifndef O_BINARY
4025 #  define O_BINARY 0
4026 #endif
4027
4028 #ifndef O_TEXT
4029 #  define O_TEXT 0
4030 #endif
4031
4032 #if O_TEXT != O_BINARY
4033     /* If you have different O_TEXT and O_BINARY and you are a CLRF shop,
4034      * that is, you are somehow DOSish. */
4035 #   if defined(__BEOS__) || defined(__VOS__)
4036     /* BeOS has O_TEXT != O_BINARY but O_TEXT and O_BINARY have no effect;
4037      * BeOS is always UNIXoid (LF), not DOSish (CRLF). */
4038     /* VOS has O_TEXT != O_BINARY, and they have effect,
4039      * but VOS always uses LF, never CRLF. */
4040     /* If you have O_TEXT different from your O_BINARY but you still are
4041      * not a CRLF shop. */
4042 #       undef PERLIO_USING_CRLF
4043 #   else
4044     /* If you really are DOSish. */
4045 #      define PERLIO_USING_CRLF 1
4046 #   endif
4047 #endif
4048
4049 #ifdef IAMSUID
4050
4051 #ifdef I_SYS_STATVFS
4052 #   if defined(PERL_SCO) && !defined(_SVID3)
4053 #       define _SVID3
4054 #   endif
4055 #   include <sys/statvfs.h>     /* for f?statvfs() */
4056 #endif
4057 #ifdef I_SYS_MOUNT
4058 #   include <sys/mount.h>       /* for *BSD f?statfs() */
4059 #endif
4060 #ifdef I_MNTENT
4061 #   include <mntent.h>          /* for getmntent() */
4062 #endif
4063 #ifdef I_SYS_STATFS
4064 #   include <sys/statfs.h>      /* for some statfs() */
4065 #endif
4066 #ifdef I_SYS_VFS
4067 #  ifdef __sgi
4068 #    define sv IRIX_sv          /* kludge: IRIX has an sv of its own */
4069 #  endif
4070 #    include <sys/vfs.h>        /* for some statfs() */
4071 #  ifdef __sgi
4072 #    undef IRIX_sv
4073 #  endif
4074 #endif
4075 #ifdef I_USTAT
4076 #   include <ustat.h>           /* for ustat() */
4077 #endif
4078
4079 #if !defined(PERL_MOUNT_NOSUID) && defined(MOUNT_NOSUID)
4080 #    define PERL_MOUNT_NOSUID MOUNT_NOSUID
4081 #endif
4082 #if !defined(PERL_MOUNT_NOSUID) && defined(MNT_NOSUID)
4083 #    define PERL_MOUNT_NOSUID MNT_NOSUID
4084 #endif
4085 #if !defined(PERL_MOUNT_NOSUID) && defined(MS_NOSUID)
4086 #   define PERL_MOUNT_NOSUID MS_NOSUID
4087 #endif
4088 #if !defined(PERL_MOUNT_NOSUID) && defined(M_NOSUID)
4089 #   define PERL_MOUNT_NOSUID M_NOSUID
4090 #endif
4091
4092 #endif /* IAMSUID */
4093
4094 #ifdef I_LIBUTIL
4095 #   include <libutil.h>         /* setproctitle() in some FreeBSDs */
4096 #endif
4097
4098 #ifndef EXEC_ARGV_CAST
4099 #define EXEC_ARGV_CAST(x) x
4100 #endif
4101
4102 #define IS_NUMBER_IN_UV               0x01 /* number within UV range (maybe not
4103                                               int).  value returned in pointed-
4104                                               to UV */
4105 #define IS_NUMBER_GREATER_THAN_UV_MAX 0x02 /* pointed to UV undefined */
4106 #define IS_NUMBER_NOT_INT             0x04 /* saw . or E notation */
4107 #define IS_NUMBER_NEG                 0x08 /* leading minus sign */
4108 #define IS_NUMBER_INFINITY            0x10 /* this is big */
4109 #define IS_NUMBER_NAN                 0x20 /* this is not */
4110
4111 #define GROK_NUMERIC_RADIX(sp, send) grok_numeric_radix(sp, send)
4112
4113 /* Input flags: */
4114 #define PERL_SCAN_ALLOW_UNDERSCORES   0x01 /* grok_??? accept _ in numbers */
4115 #define PERL_SCAN_DISALLOW_PREFIX     0x02 /* grok_??? reject 0x in hex etc */
4116 /* Output flags: */
4117 #define PERL_SCAN_GREATER_THAN_UV_MAX 0x02 /* should this merge with above? */
4118
4119 /* to let user control profiling */
4120 #ifdef PERL_GPROF_CONTROL
4121 extern void moncontrol(int);
4122 #define PERL_GPROF_MONCONTROL(x) moncontrol(x)
4123 #else
4124 #define PERL_GPROF_MONCONTROL(x)
4125 #endif
4126
4127 #ifdef UNDER_CE
4128 #include "wince.h"
4129 #endif
4130
4131 /* ISO 6429 NEL - C1 control NExt Line */
4132 /* See http://www.unicode.org/unicode/reports/tr13/ */
4133 #ifdef EBCDIC   /* In EBCDIC NEL is just an alias for LF */
4134 #   if '^' == 95        /* CP 1047: MVS OpenEdition - OS/390 - z/OS */
4135 #       define NEXT_LINE_CHAR   0x15
4136 #   else                /* CDRA */
4137 #       define NEXT_LINE_CHAR   0x25
4138 #   endif
4139 #else
4140 #   define NEXT_LINE_CHAR       0x85
4141 #endif
4142
4143 /* The UTF-8 bytes of the Unicode LS and PS, U+2028 and U+2029 */
4144 #define UNICODE_LINE_SEPA_0     0xE2
4145 #define UNICODE_LINE_SEPA_1     0x80
4146 #define UNICODE_LINE_SEPA_2     0xA8
4147 #define UNICODE_PARA_SEPA_0     0xE2
4148 #define UNICODE_PARA_SEPA_1     0x80
4149 #define UNICODE_PARA_SEPA_2     0xA9
4150
4151 /* and finally... */
4152 #define PERL_PATCHLEVEL_H_IMPLICIT
4153 #include "patchlevel.h"
4154 #undef PERL_PATCHLEVEL_H_IMPLICIT
4155
4156 /* Mention
4157
4158    NV_PRESERVES_UV
4159
4160    HAS_MKSTEMP
4161    HAS_MKSTEMPS
4162    HAS_MKDTEMP
4163
4164    HAS_GETCWD
4165
4166    HAS_MMAP
4167    HAS_MPROTECT
4168    HAS_MSYNC
4169    HAS_MADVISE
4170    HAS_MUNMAP
4171    I_SYSMMAN
4172    Mmap_t
4173
4174    NVef
4175    NVff
4176    NVgf
4177
4178    HAS_USLEEP
4179    HAS_UALARM
4180
4181    HAS_SETITIMER
4182    HAS_GETITIMER
4183
4184    HAS_SENDMSG
4185    HAS_RECVMSG
4186    HAS_READV
4187    HAS_WRITEV
4188    I_SYSUIO
4189    HAS_STRUCT_MSGHDR
4190    HAS_STRUCT_CMSGHDR
4191
4192    HAS_NL_LANGINFO
4193
4194    HAS_DIRFD
4195
4196    so that Configure picks them up. */
4197
4198 #endif /* Include guard */
4199