Mention the Safe extension.
[p5sagit/p5-mst-13.2.git] / perl.h
1 /*    perl.h
2  *
3  *    Copyright (c) 1987-1994, 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 #ifndef H_PERL
10 #define H_PERL 1
11 #define OVERLOAD
12 #define STRANGE_MALLOC
13
14 #include "embed.h"
15
16 #define VOIDUSED 1
17 #include "config.h"
18
19 #ifndef BYTEORDER
20 #   define BYTEORDER 0x1234
21 #endif
22
23 /* Overall memory policy? */
24 #ifndef CONSERVATIVE
25 #   define LIBERAL 1
26 #endif
27
28 /*
29  * The following contortions are brought to you on behalf of all the
30  * standards, semi-standards, de facto standards, not-so-de-facto standards
31  * of the world, as well as all the other botches anyone ever thought of.
32  * The basic theory is that if we work hard enough here, the rest of the
33  * code can be a lot prettier.  Well, so much for theory.  Sorry, Henry...
34  */
35
36 /* define this once if either system, instead of cluttering up the src */
37 #if defined(MSDOS) || defined(atarist)
38 #define DOSISH 1
39 #endif
40
41 #if defined(__STDC__) || defined(vax11c) || defined(_AIX) || defined(__stdc__) || defined(__cplusplus)
42 # define STANDARD_C 1
43 #endif
44
45 #if defined(HASVOLATILE) || defined(STANDARD_C)
46 #   ifdef __cplusplus
47 #       define VOL              // to temporarily suppress warnings
48 #   else
49 #       define VOL volatile
50 #   endif
51 #else
52 #   define VOL
53 #endif
54
55 #define TAINT_IF(c)     (tainted |= (c))
56 #define TAINT_NOT       (tainted = 0)
57 #define TAINT_PROPER(s) if (tainting) taint_proper(no_security, s)
58 #define TAINT_ENV()     if (tainting) taint_env()
59
60 #ifdef HAS_GETPGRP2
61 #   ifndef HAS_GETPGRP
62 #       define HAS_GETPGRP
63 #   endif
64 #endif
65
66 #ifdef HAS_SETPGRP2
67 #   ifndef HAS_SETPGRP
68 #       define HAS_SETPGRP
69 #   endif
70 #endif
71
72 #include <stdio.h>
73 #ifdef USE_NEXT_CTYPE
74 #include <appkit/NXCType.h>
75 #else
76 #include <ctype.h>
77 #endif
78
79 #ifdef I_LOCALE
80 #include <locale.h>
81 #endif
82
83 #ifdef METHOD   /* Defined by OSF/1 v3.0 by ctype.h */
84 #undef METHOD
85 #endif
86
87 #include <setjmp.h>
88
89 #ifdef I_SYS_PARAM
90 #   ifdef PARAM_NEEDS_TYPES
91 #       include <sys/types.h>
92 #   endif
93 #   include <sys/param.h>
94 #endif
95
96
97 /* Use all the "standard" definitions? */
98 #if defined(STANDARD_C) && defined(I_STDLIB)
99 #   include <stdlib.h>
100 #endif /* STANDARD_C */
101
102 /* Maybe this comes after <stdlib.h> so we don't try to change 
103    the standard library prototypes?.  We'll use our own in 
104    proto.h instead.  I guess.  The patch had no explanation.
105 */
106 #ifdef MYMALLOC
107 #   ifdef HIDEMYMALLOC
108 #       define malloc Mymalloc
109 #       define realloc Myremalloc
110 #       define free Myfree
111 #   endif
112 #   define safemalloc malloc
113 #   define saferealloc realloc
114 #   define safefree free
115 #endif
116
117 #define MEM_SIZE Size_t
118
119 #if defined(I_STRING) || defined(__cplusplus)
120 #   include <string.h>
121 #else
122 #   include <strings.h>
123 #endif
124
125 #if !defined(HAS_STRCHR) && defined(HAS_INDEX) && !defined(strchr)
126 #define strchr index
127 #define strrchr rindex
128 #endif
129
130 #if defined(mips) && defined(ultrix) && !defined(__STDC__)
131 #   undef HAS_MEMCMP
132 #endif
133
134 #ifdef I_MEMORY
135 #  include <memory.h>
136 #endif
137
138 #ifdef HAS_MEMCPY
139 #  if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)
140 #    ifndef memcpy
141         extern char * memcpy _((char*, char*, int));
142 #    endif
143 #  endif
144 #else
145 #   ifndef memcpy
146 #       ifdef HAS_BCOPY
147 #           define memcpy(d,s,l) bcopy(s,d,l)
148 #       else
149 #           define memcpy(d,s,l) my_bcopy(s,d,l)
150 #       endif
151 #   endif
152 #endif /* HAS_MEMCPY */
153
154 #ifdef HAS_MEMSET
155 #  if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)
156 #    ifndef memset
157         extern char *memset _((char*, int, int));
158 #    endif
159 #  endif
160 #  define memzero(d,l) memset(d,0,l)
161 #else
162 #   ifndef memzero
163 #       ifdef HAS_BZERO
164 #           define memzero(d,l) bzero(d,l)
165 #       else
166 #           define memzero(d,l) my_bzero(d,l)
167 #       endif
168 #   endif
169 #endif /* HAS_MEMSET */
170
171 #ifdef HAS_MEMCMP
172 #  if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)
173 #    ifndef memcmp
174         extern int memcmp _((char*, char*, int));
175 #    endif
176 #  endif
177 #else
178 #   ifndef memcmp
179 #       define memcmp   my_memcmp
180 #   endif
181 #endif /* HAS_MEMCMP */
182
183 /* we prefer bcmp slightly for comparisons that don't care about ordering */
184 #ifndef HAS_BCMP
185 #   ifndef bcmp
186 #       define bcmp(s1,s2,l) memcmp(s1,s2,l)
187 #   endif
188 #endif /* HAS_BCMP */
189
190 #if !defined(HAS_MEMMOVE) && !defined(memmove)
191 #   if defined(HAS_BCOPY) && defined(HAS_SAFE_BCOPY)
192 #       define memmove(d,s,l) bcopy(s,d,l)
193 #   else
194 #       if defined(HAS_MEMCPY) && defined(HAS_SAFE_MEMCPY)
195 #           define memmove(d,s,l) memcpy(d,s,l)
196 #       else
197 #           define memmove(d,s,l) my_bcopy(s,d,l)
198 #       endif
199 #   endif
200 #endif
201
202 #ifndef _TYPES_         /* If types.h defines this it's easy. */
203 #   ifndef major                /* Does everyone's types.h define this? */
204 #       include <sys/types.h>
205 #   endif
206 #endif
207
208 #ifdef I_NETINET_IN
209 #   include <netinet/in.h>
210 #endif
211
212 #ifdef I_SYS_STAT
213 #include <sys/stat.h>
214 #endif
215
216 /* The stat macros for Amdahl UTS, Unisoft System V/88 (and derivatives
217    like UTekV) are broken, sometimes giving false positives.  Undefine
218    them here and let the code below set them to proper values.
219
220    The ghs macro stands for GreenHills Software C-1.8.5 which
221    is the C compiler for sysV88 and the various derivatives.
222    This header file bug is corrected in gcc-2.5.8 and later versions.
223    --Kaveh Ghazi (ghazi@noc.rutgers.edu) 10/3/94.  */
224
225 #if defined(uts) || (defined(m88k) && defined(ghs))
226 #   undef S_ISDIR
227 #   undef S_ISCHR
228 #   undef S_ISBLK
229 #   undef S_ISREG
230 #   undef S_ISFIFO
231 #   undef S_ISLNK
232 #endif
233
234 #ifdef I_TIME
235 #   include <time.h>
236 #endif
237
238 #ifdef I_SYS_TIME
239 #   ifdef I_SYS_TIME_KERNEL
240 #       define KERNEL
241 #   endif
242 #   include <sys/time.h>
243 #   ifdef I_SYS_TIME_KERNEL
244 #       undef KERNEL
245 #   endif
246 #endif
247
248 #ifndef MSDOS
249 #  if defined(HAS_TIMES) && defined(I_SYS_TIMES)
250 #    include <sys/times.h>
251 #  endif
252 #endif
253
254 #if defined(HAS_STRERROR) && (!defined(HAS_MKDIR) || !defined(HAS_RMDIR))
255 #   undef HAS_STRERROR
256 #endif
257
258 #ifndef HAS_MKFIFO
259 #  ifndef mkfifo
260 #    define mkfifo(path, mode) (mknod((path), (mode) | S_IFIFO, 0))
261 #  endif
262 #endif /* !HAS_MKFIFO */
263
264 #include <errno.h>
265 #ifdef HAS_SOCKET
266 #   ifdef I_NET_ERRNO
267 #     include <net/errno.h>
268 #   endif
269 #endif
270 #ifndef VMS
271 #   define FIXSTATUS(sts)  (U_L((sts) & 0xffff))
272 #   define SHIFTSTATUS(sts) ((sts) >> 8)
273 #   define SETERRNO(errcode,vmserrcode) errno = (errcode)
274 #else
275 #   define FIXSTATUS(sts)  (U_L(sts))
276 #   define SHIFTSTATUS(sts) (sts)
277 #   define SETERRNO(errcode,vmserrcode) {set_errno(errcode); set_vaxc_errno(vmserrcode);}
278 #endif
279
280 #ifndef MSDOS
281 #   ifndef errno
282         extern int errno;     /* ANSI allows errno to be an lvalue expr */
283 #   endif
284 #endif
285
286 #ifdef HAS_STRERROR
287 #       ifdef VMS
288         char *strerror _((int,...));
289 #       else
290         char *strerror _((int));
291 #       endif
292 #       ifndef Strerror
293 #           define Strerror strerror
294 #       endif
295 #else
296 #    ifdef HAS_SYS_ERRLIST
297         extern int sys_nerr;
298         extern char *sys_errlist[];
299 #       ifndef Strerror
300 #           define Strerror(e) \
301                 ((e) < 0 || (e) >= sys_nerr ? "(unknown)" : sys_errlist[e])
302 #       endif
303 #   endif
304 #endif
305
306 #ifdef I_SYS_IOCTL
307 #   ifndef _IOCTL_
308 #       include <sys/ioctl.h>
309 #   endif
310 #endif
311
312 #if defined(mc300) || defined(mc500) || defined(mc700) || defined(mc6000)
313 #   ifdef HAS_SOCKETPAIR
314 #       undef HAS_SOCKETPAIR
315 #   endif
316 #   ifdef I_NDBM
317 #       undef I_NDBM
318 #   endif
319 #endif
320
321 #if INTSIZE == 2
322 #   define htoni htons
323 #   define ntohi ntohs
324 #else
325 #   define htoni htonl
326 #   define ntohi ntohl
327 #endif
328
329 /* Configure already sets Direntry_t */
330 #if defined(I_DIRENT)
331 #   include <dirent.h>
332 #   if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
333 #       include <sys/dir.h>
334 #   endif
335 #else
336 #   ifdef I_SYS_NDIR
337 #       include <sys/ndir.h>
338 #   else
339 #       ifdef I_SYS_DIR
340 #           ifdef hp9000s500
341 #               include <ndir.h>        /* may be wrong in the future */
342 #           else
343 #               include <sys/dir.h>
344 #           endif
345 #       endif
346 #   endif
347 #endif
348
349 #ifdef FPUTS_BOTCH
350 /* work around botch in SunOS 4.0.1 and 4.0.2 */
351 #   ifndef fputs
352 #       define fputs(sv,fp) fprintf(fp,"%s",sv)
353 #   endif
354 #endif
355
356 /*
357  * The following gobbledygook brought to you on behalf of __STDC__.
358  * (I could just use #ifndef __STDC__, but this is more bulletproof
359  * in the face of half-implementations.)
360  */
361
362 #ifndef S_IFMT
363 #   ifdef _S_IFMT
364 #       define S_IFMT _S_IFMT
365 #   else
366 #       define S_IFMT 0170000
367 #   endif
368 #endif
369
370 #ifndef S_ISDIR
371 #   define S_ISDIR(m) ((m & S_IFMT) == S_IFDIR)
372 #endif
373
374 #ifndef S_ISCHR
375 #   define S_ISCHR(m) ((m & S_IFMT) == S_IFCHR)
376 #endif
377
378 #ifndef S_ISBLK
379 #   ifdef S_IFBLK
380 #       define S_ISBLK(m) ((m & S_IFMT) == S_IFBLK)
381 #   else
382 #       define S_ISBLK(m) (0)
383 #   endif
384 #endif
385
386 #ifndef S_ISREG
387 #   define S_ISREG(m) ((m & S_IFMT) == S_IFREG)
388 #endif
389
390 #ifndef S_ISFIFO
391 #   ifdef S_IFIFO
392 #       define S_ISFIFO(m) ((m & S_IFMT) == S_IFIFO)
393 #   else
394 #       define S_ISFIFO(m) (0)
395 #   endif
396 #endif
397
398 #ifndef S_ISLNK
399 #   ifdef _S_ISLNK
400 #       define S_ISLNK(m) _S_ISLNK(m)
401 #   else
402 #       ifdef _S_IFLNK
403 #           define S_ISLNK(m) ((m & S_IFMT) == _S_IFLNK)
404 #       else
405 #           ifdef S_IFLNK
406 #               define S_ISLNK(m) ((m & S_IFMT) == S_IFLNK)
407 #           else
408 #               define S_ISLNK(m) (0)
409 #           endif
410 #       endif
411 #   endif
412 #endif
413
414 #ifndef S_ISSOCK
415 #   ifdef _S_ISSOCK
416 #       define S_ISSOCK(m) _S_ISSOCK(m)
417 #   else
418 #       ifdef _S_IFSOCK
419 #           define S_ISSOCK(m) ((m & S_IFMT) == _S_IFSOCK)
420 #       else
421 #           ifdef S_IFSOCK
422 #               define S_ISSOCK(m) ((m & S_IFMT) == S_IFSOCK)
423 #           else
424 #               define S_ISSOCK(m) (0)
425 #           endif
426 #       endif
427 #   endif
428 #endif
429
430 #ifndef S_IRUSR
431 #   ifdef S_IREAD
432 #       define S_IRUSR S_IREAD
433 #       define S_IWUSR S_IWRITE
434 #       define S_IXUSR S_IEXEC
435 #   else
436 #       define S_IRUSR 0400
437 #       define S_IWUSR 0200
438 #       define S_IXUSR 0100
439 #   endif
440 #   define S_IRGRP (S_IRUSR>>3)
441 #   define S_IWGRP (S_IWUSR>>3)
442 #   define S_IXGRP (S_IXUSR>>3)
443 #   define S_IROTH (S_IRUSR>>6)
444 #   define S_IWOTH (S_IWUSR>>6)
445 #   define S_IXOTH (S_IXUSR>>6)
446 #endif
447
448 #ifndef S_ISUID
449 #   define S_ISUID 04000
450 #endif
451
452 #ifndef S_ISGID
453 #   define S_ISGID 02000
454 #endif
455
456 #ifdef ff_next
457 #   undef ff_next
458 #endif
459
460 #if defined(cray) || defined(gould) || defined(i860) || defined(pyr)
461 #   define SLOPPYDIVIDE
462 #endif
463
464 #if defined(cray) || defined(convex) || defined (uts) || BYTEORDER > 0xffff
465 #   define HAS_QUAD
466 #endif
467
468 #ifdef UV
469 #undef UV
470 #endif
471
472 #ifdef HAS_QUAD
473 #   ifdef cray
474 #       define Quad_t int
475 #   else
476 #       if defined(convex) || defined (uts)
477 #           define Quad_t long long
478 #       else
479 #           define Quad_t long
480 #       endif
481 #   endif
482     typedef Quad_t IV;
483     typedef unsigned Quad_t UV;
484 #else
485     typedef long IV;
486     typedef unsigned long UV;
487 #endif
488
489 typedef MEM_SIZE STRLEN;
490
491 typedef struct op OP;
492 typedef struct cop COP;
493 typedef struct unop UNOP;
494 typedef struct binop BINOP;
495 typedef struct listop LISTOP;
496 typedef struct logop LOGOP;
497 typedef struct condop CONDOP;
498 typedef struct pmop PMOP;
499 typedef struct svop SVOP;
500 typedef struct gvop GVOP;
501 typedef struct pvop PVOP;
502 typedef struct cvop CVOP;
503 typedef struct loop LOOP;
504
505 typedef struct Outrec Outrec;
506 typedef struct interpreter PerlInterpreter;
507 typedef struct ff FF;
508 typedef struct sv SV;
509 typedef struct av AV;
510 typedef struct hv HV;
511 typedef struct cv CV;
512 typedef struct regexp REGEXP;
513 typedef struct gp GP;
514 typedef struct sv GV;
515 typedef struct io IO;
516 typedef struct context CONTEXT;
517 typedef struct block BLOCK;
518
519 typedef struct magic MAGIC;
520 typedef struct xrv XRV;
521 typedef struct xpv XPV;
522 typedef struct xpviv XPVIV;
523 typedef struct xpvnv XPVNV;
524 typedef struct xpvmg XPVMG;
525 typedef struct xpvlv XPVLV;
526 typedef struct xpvav XPVAV;
527 typedef struct xpvhv XPVHV;
528 typedef struct xpvgv XPVGV;
529 typedef struct xpvcv XPVCV;
530 typedef struct xpvbm XPVBM;
531 typedef struct xpvfm XPVFM;
532 typedef struct xpvio XPVIO;
533 typedef struct mgvtbl MGVTBL;
534 typedef union any ANY;
535
536 #include "handy.h"
537
538 typedef I32 (*filter_t) _((int, SV *, int));
539 #define FILTER_READ(idx, sv, len)  filter_read(idx, sv, len)
540 #define FILTER_DATA(idx)           (AvARRAY(rsfp_filters)[idx])
541 #define FILTER_ISREADER(idx)       (idx >= AvFILL(rsfp_filters))
542
543 #ifdef DOSISH
544 # if defined(OS2)
545 #   include "os2ish.h"
546 # else
547 #   include "dosish.h"
548 # endif
549 #else
550 # if defined(VMS)
551 #   include "vmsish.h"
552 # else
553 #   include "unixish.h"
554 # endif
555 #endif
556
557 #ifndef HAS_PAUSE
558 #define pause() sleep((32767<<16)+32767)
559 #endif
560
561 #ifndef IOCPARM_LEN
562 #   ifdef IOCPARM_MASK
563         /* on BSDish systes we're safe */
564 #       define IOCPARM_LEN(x)  (((x) >> 16) & IOCPARM_MASK)
565 #   else
566         /* otherwise guess at what's safe */
567 #       define IOCPARM_LEN(x)   256
568 #   endif
569 #endif
570
571 union any {
572     void*       any_ptr;
573     I32         any_i32;
574     IV          any_iv;
575     long        any_long;
576     void        (*any_dptr) _((void*));
577 };
578
579 #include "regexp.h"
580 #include "sv.h"
581 #include "util.h"
582 #include "form.h"
583 #include "gv.h"
584 #include "cv.h"
585 #include "opcode.h"
586 #include "op.h"
587 #include "cop.h"
588 #include "av.h"
589 #include "hv.h"
590 #include "mg.h"
591 #include "scope.h"
592
593 /* work around some libPW problems */
594 #ifdef DOINIT
595 EXT char Error[1];
596 #endif
597
598 #if defined(iAPX286) || defined(M_I286) || defined(I80286)
599 #   define I286
600 #endif
601
602 #if defined(htonl) && !defined(HAS_HTONL)
603 #define HAS_HTONL
604 #endif
605 #if defined(htons) && !defined(HAS_HTONS)
606 #define HAS_HTONS
607 #endif
608 #if defined(ntohl) && !defined(HAS_NTOHL)
609 #define HAS_NTOHL
610 #endif
611 #if defined(ntohs) && !defined(HAS_NTOHS)
612 #define HAS_NTOHS
613 #endif
614 #ifndef HAS_HTONL
615 #if (BYTEORDER & 0xffff) != 0x4321
616 #define HAS_HTONS
617 #define HAS_HTONL
618 #define HAS_NTOHS
619 #define HAS_NTOHL
620 #define MYSWAP
621 #define htons my_swap
622 #define htonl my_htonl
623 #define ntohs my_swap
624 #define ntohl my_ntohl
625 #endif
626 #else
627 #if (BYTEORDER & 0xffff) == 0x4321
628 #undef HAS_HTONS
629 #undef HAS_HTONL
630 #undef HAS_NTOHS
631 #undef HAS_NTOHL
632 #endif
633 #endif
634
635 /*
636  * Little-endian byte order functions - 'v' for 'VAX', or 'reVerse'.
637  * -DWS
638  */
639 #if BYTEORDER != 0x1234
640 # define HAS_VTOHL
641 # define HAS_VTOHS
642 # define HAS_HTOVL
643 # define HAS_HTOVS
644 # if BYTEORDER == 0x4321
645 #  define vtohl(x)      ((((x)&0xFF)<<24)       \
646                         +(((x)>>24)&0xFF)       \
647                         +(((x)&0x0000FF00)<<8)  \
648                         +(((x)&0x00FF0000)>>8)  )
649 #  define vtohs(x)      ((((x)&0xFF)<<8) + (((x)>>8)&0xFF))
650 #  define htovl(x)      vtohl(x)
651 #  define htovs(x)      vtohs(x)
652 # endif
653         /* otherwise default to functions in util.c */
654 #endif
655
656 #ifdef CASTNEGFLOAT
657 #define U_S(what) ((U16)(what))
658 #define U_I(what) ((unsigned int)(what))
659 #define U_L(what) ((U32)(what))
660 #else
661 U32 cast_ulong _((double));
662 #define U_S(what) ((U16)cast_ulong((double)(what)))
663 #define U_I(what) ((unsigned int)cast_ulong((double)(what)))
664 #define U_L(what) (cast_ulong((double)(what)))
665 #endif
666
667 #ifdef CASTI32
668 #define I_32(what) ((I32)(what))
669 #define I_V(what) ((IV)(what))
670 #define U_V(what) ((UV)(what))
671 #else
672 I32 cast_i32 _((double));
673 #define I_32(what) (cast_i32((double)(what)))
674 IV cast_iv _((double));
675 #define I_V(what) (cast_iv((double)(what)))
676 UV cast_uv _((double));
677 #define U_V(what) (cast_uv((double)(what)))
678 #endif
679
680 struct Outrec {
681     I32         o_lines;
682     char        *o_str;
683     U32         o_len;
684 };
685
686 #ifndef MAXSYSFD
687 #   define MAXSYSFD 2
688 #endif
689
690 #ifdef DOSISH
691 #define TMPPATH "plXXXXXX"
692 #else
693 #ifdef VMS
694 #define TMPPATH "sys$scratch:perl-eXXXXXX"
695 #else
696 #define TMPPATH "/tmp/perl-eXXXXXX"
697 #endif
698 #endif
699
700 #ifndef __cplusplus
701 Uid_t getuid _((void));
702 Uid_t geteuid _((void));
703 Gid_t getgid _((void));
704 Gid_t getegid _((void));
705 #endif
706
707 #ifdef DEBUGGING
708 #define YYDEBUG 1
709 #define DEB(a)                          a
710 #define DEBUG(a)   if (debug)           a
711 #define DEBUG_p(a) if (debug & 1)       a
712 #define DEBUG_s(a) if (debug & 2)       a
713 #define DEBUG_l(a) if (debug & 4)       a
714 #define DEBUG_t(a) if (debug & 8)       a
715 #define DEBUG_o(a) if (debug & 16)      a
716 #define DEBUG_c(a) if (debug & 32)      a
717 #define DEBUG_P(a) if (debug & 64)      a
718 #define DEBUG_m(a) if (debug & 128)     a
719 #define DEBUG_f(a) if (debug & 256)     a
720 #define DEBUG_r(a) if (debug & 512)     a
721 #define DEBUG_x(a) if (debug & 1024)    a
722 #define DEBUG_u(a) if (debug & 2048)    a
723 #define DEBUG_L(a) if (debug & 4096)    a
724 #define DEBUG_H(a) if (debug & 8192)    a
725 #define DEBUG_X(a) if (debug & 16384)   a
726 #define DEBUG_D(a) if (debug & 32768)   a
727 #else
728 #define DEB(a)
729 #define DEBUG(a)
730 #define DEBUG_p(a)
731 #define DEBUG_s(a)
732 #define DEBUG_l(a)
733 #define DEBUG_t(a)
734 #define DEBUG_o(a)
735 #define DEBUG_c(a)
736 #define DEBUG_P(a)
737 #define DEBUG_m(a)
738 #define DEBUG_f(a)
739 #define DEBUG_r(a)
740 #define DEBUG_x(a)
741 #define DEBUG_u(a)
742 #define DEBUG_L(a)
743 #define DEBUG_H(a)
744 #define DEBUG_X(a)
745 #define DEBUG_D(a)
746 #endif
747 #define YYMAXDEPTH 300
748
749 #define assert(what)    DEB( {                                          \
750         if (!(what)) {                                                  \
751             croak("Assertion failed: file \"%s\", line %d",             \
752                 __FILE__, __LINE__);                                    \
753             exit(1);                                                    \
754         }})
755
756 struct ufuncs {
757     I32 (*uf_val)_((IV, SV*));
758     I32 (*uf_set)_((IV, SV*));
759     IV uf_index;
760 };
761
762 /* Fix these up for __STDC__ */
763 #ifndef __cplusplus
764 char *mktemp _((char*));
765 double atof _((const char*));
766 #endif
767
768 #ifndef STANDARD_C
769 /* All of these are in stdlib.h or time.h for ANSI C */
770 Time_t time();
771 struct tm *gmtime(), *localtime();
772 char *strchr(), *strrchr();
773 char *strcpy(), *strcat();
774 #endif /* ! STANDARD_C */
775
776
777 #ifdef I_MATH
778 #    include <math.h>
779 #else
780 #   ifdef __cplusplus
781         extern "C" {
782 #   endif
783             double exp _((double));
784             double log _((double));
785             double sqrt _((double));
786             double modf _((double,double*));
787             double sin _((double));
788             double cos _((double));
789             double atan2 _((double,double));
790             double pow _((double,double));
791 #   ifdef __cplusplus
792         };
793 #   endif
794 #endif
795
796 #ifndef __cplusplus
797 char *crypt _((const char*, const char*));
798 char *getenv _((const char*));
799 Off_t lseek _((int,Off_t,int));
800 char *getlogin _((void));
801 #endif
802
803 #ifdef UNLINK_ALL_VERSIONS /* Currently only makes sense for VMS */
804 #define UNLINK unlnk
805 I32 unlnk _((char*));
806 #else
807 #define UNLINK unlink
808 #endif
809
810 #ifndef HAS_SETREUID
811 #  ifdef HAS_SETRESUID
812 #    define setreuid(r,e) setresuid(r,e,(Uid_t)-1)
813 #    define HAS_SETREUID
814 #  endif
815 #endif
816 #ifndef HAS_SETREGID
817 #  ifdef HAS_SETRESGID
818 #    define setregid(r,e) setresgid(r,e,(Gid_t)-1)
819 #    define HAS_SETREGID
820 #  endif
821 #endif
822
823 #define SCAN_DEF 0
824 #define SCAN_TR 1
825 #define SCAN_REPL 2
826
827 #ifdef DEBUGGING
828 # ifndef register
829 #  define register
830 # endif
831 # define PAD_SV(po) pad_sv(po)
832 #else
833 # define PAD_SV(po) curpad[po]
834 #endif
835
836 /****************/
837 /* Truly global */
838 /****************/
839
840 /* global state */
841 EXT PerlInterpreter *   curinterp;      /* currently running interpreter */
842 #ifndef VMS  /* VMS doesn't use environ array */
843 extern char **  environ;        /* environment variables supplied via exec */
844 #endif
845 EXT int         uid;            /* current real user id */
846 EXT int         euid;           /* current effective user id */
847 EXT int         gid;            /* current real group id */
848 EXT int         egid;           /* current effective group id */
849 EXT bool        nomemok;        /* let malloc context handle nomem */
850 EXT U32         an;             /* malloc sequence number */
851 EXT U32         cop_seqmax;     /* statement sequence number */
852 EXT U32         op_seqmax;      /* op sequence number */
853 EXT U32         evalseq;        /* eval sequence number */
854 EXT U32         sub_generation; /* inc to force methods to be looked up again */
855 EXT char **     origenviron;
856 EXT U32         origalen;
857 EXT U32 *       profiledata;
858 EXT int         maxo INIT(MAXO);/* Number of ops */
859
860 EXT XPV*        xiv_arenaroot;  /* list of allocated xiv areas */
861 EXT IV **       xiv_root;       /* free xiv list--shared by interpreters */
862 EXT double *    xnv_root;       /* free xnv list--shared by interpreters */
863 EXT XRV *       xrv_root;       /* free xrv list--shared by interpreters */
864 EXT XPV *       xpv_root;       /* free xpv list--shared by interpreters */
865 EXT HE *        he_root;        /* free he list--shared by interpreters */
866
867 /* Stack for currently executing thread--context switch must handle this.     */
868 EXT SV **       stack_base;     /* stack->array_ary */
869 EXT SV **       stack_sp;       /* stack pointer now */
870 EXT SV **       stack_max;      /* stack->array_ary + stack->array_max */
871
872 /* likewise for these */
873
874 EXT OP *        op;             /* current op--oughta be in a global register */
875
876 EXT I32 *       scopestack;     /* blocks we've entered */
877 EXT I32         scopestack_ix;
878 EXT I32         scopestack_max;
879
880 EXT ANY*        savestack;      /* to save non-local values on */
881 EXT I32         savestack_ix;
882 EXT I32         savestack_max;
883
884 EXT OP **       retstack;       /* returns we've pushed */
885 EXT I32         retstack_ix;
886 EXT I32         retstack_max;
887
888 EXT I32 *       markstack;      /* stackmarks we're remembering */
889 EXT I32 *       markstack_ptr;  /* stackmarks we're remembering */
890 EXT I32 *       markstack_max;  /* stackmarks we're remembering */
891
892 EXT SV **       curpad;
893
894 /* temp space */
895 EXT SV *        Sv;
896 EXT XPV *       Xpv;
897 EXT char        buf[1024];
898 EXT char        tokenbuf[256];
899 EXT struct stat statbuf;
900 #ifdef HAS_TIMES
901 EXT struct tms  timesbuf;
902 #endif
903 EXT STRLEN na;          /* for use in SvPV when length is Not Applicable */
904
905 /* for tmp use in stupid debuggers */
906 EXT int *       di;
907 EXT short *     ds;
908 EXT char *      dc;
909
910 /* handy constants */
911 EXT char *      Yes INIT("1");
912 EXT char *      No INIT("");
913 EXT char *      hexdigit INIT("0123456789abcdef0123456789ABCDEFx");
914 EXT char *      patleave INIT("\\.^$@dDwWsSbB+*?|()-nrtfeaxc0123456789[{]}");
915 EXT char *      vert INIT("|");
916
917 EXT char        warn_uninit[]
918   INIT("Use of uninitialized value");
919 EXT char        warn_nosemi[]
920   INIT("Semicolon seems to be missing");
921 EXT char        warn_reserved[]
922   INIT("Unquoted string \"%s\" may clash with future reserved word");
923 EXT char        warn_nl[]
924   INIT("Unsuccessful %s on filename containing newline");
925 EXT char        no_wrongref[]
926   INIT("Can't use %s ref as %s ref");
927 EXT char        no_symref[]
928   INIT("Can't use string (\"%.32s\") as %s ref while \"strict refs\" in use");
929 EXT char        no_usym[]
930   INIT("Can't use an undefined value as %s reference");
931 EXT char        no_aelem[]
932   INIT("Modification of non-creatable array value attempted, subscript %d");
933 EXT char        no_helem[]
934   INIT("Modification of non-creatable hash value attempted, subscript \"%s\"");
935 EXT char        no_modify[]
936   INIT("Modification of a read-only value attempted");
937 EXT char        no_mem[]
938   INIT("Out of memory!\n");
939 EXT char        no_security[]
940   INIT("Insecure dependency in %s%s");
941 EXT char        no_sock_func[]
942   INIT("Unsupported socket function \"%s\" called");
943 EXT char        no_dir_func[]
944   INIT("Unsupported directory function \"%s\" called");
945 EXT char        no_func[]
946   INIT("The %s function is unimplemented");
947 EXT char        no_myglob[]
948   INIT("\"my\" variable %s can't be in a package");
949
950 EXT SV          sv_undef;
951 EXT SV          sv_no;
952 EXT SV          sv_yes;
953 #ifdef CSH
954     EXT char *  cshname INIT(CSH);
955     EXT I32     cshlen;
956 #endif
957
958 #ifdef DOINIT
959 EXT char *sig_name[] = { SIG_NAME };
960 EXT int   sig_num[]  = { SIG_NUM };
961 #else
962 EXT char *sig_name[];
963 EXT int   sig_num[];
964 #endif
965
966 #ifdef DOINIT
967 EXT unsigned char fold[] = {    /* fast case folding table */
968         0,      1,      2,      3,      4,      5,      6,      7,
969         8,      9,      10,     11,     12,     13,     14,     15,
970         16,     17,     18,     19,     20,     21,     22,     23,
971         24,     25,     26,     27,     28,     29,     30,     31,
972         32,     33,     34,     35,     36,     37,     38,     39,
973         40,     41,     42,     43,     44,     45,     46,     47,
974         48,     49,     50,     51,     52,     53,     54,     55,
975         56,     57,     58,     59,     60,     61,     62,     63,
976         64,     'a',    'b',    'c',    'd',    'e',    'f',    'g',
977         'h',    'i',    'j',    'k',    'l',    'm',    'n',    'o',
978         'p',    'q',    'r',    's',    't',    'u',    'v',    'w',
979         'x',    'y',    'z',    91,     92,     93,     94,     95,
980         96,     'A',    'B',    'C',    'D',    'E',    'F',    'G',
981         'H',    'I',    'J',    'K',    'L',    'M',    'N',    'O',
982         'P',    'Q',    'R',    'S',    'T',    'U',    'V',    'W',
983         'X',    'Y',    'Z',    123,    124,    125,    126,    127,
984         128,    129,    130,    131,    132,    133,    134,    135,
985         136,    137,    138,    139,    140,    141,    142,    143,
986         144,    145,    146,    147,    148,    149,    150,    151,
987         152,    153,    154,    155,    156,    157,    158,    159,
988         160,    161,    162,    163,    164,    165,    166,    167,
989         168,    169,    170,    171,    172,    173,    174,    175,
990         176,    177,    178,    179,    180,    181,    182,    183,
991         184,    185,    186,    187,    188,    189,    190,    191,
992         192,    193,    194,    195,    196,    197,    198,    199,
993         200,    201,    202,    203,    204,    205,    206,    207,
994         208,    209,    210,    211,    212,    213,    214,    215,
995         216,    217,    218,    219,    220,    221,    222,    223,    
996         224,    225,    226,    227,    228,    229,    230,    231,
997         232,    233,    234,    235,    236,    237,    238,    239,
998         240,    241,    242,    243,    244,    245,    246,    247,
999         248,    249,    250,    251,    252,    253,    254,    255
1000 };
1001 #else
1002 EXT unsigned char fold[];
1003 #endif
1004
1005 #ifdef DOINIT
1006 EXT unsigned char freq[] = {    /* letter frequencies for mixed English/C */
1007         1,      2,      84,     151,    154,    155,    156,    157,
1008         165,    246,    250,    3,      158,    7,      18,     29,
1009         40,     51,     62,     73,     85,     96,     107,    118,
1010         129,    140,    147,    148,    149,    150,    152,    153,
1011         255,    182,    224,    205,    174,    176,    180,    217,
1012         233,    232,    236,    187,    235,    228,    234,    226,
1013         222,    219,    211,    195,    188,    193,    185,    184,
1014         191,    183,    201,    229,    181,    220,    194,    162,
1015         163,    208,    186,    202,    200,    218,    198,    179,
1016         178,    214,    166,    170,    207,    199,    209,    206,
1017         204,    160,    212,    216,    215,    192,    175,    173,
1018         243,    172,    161,    190,    203,    189,    164,    230,
1019         167,    248,    227,    244,    242,    255,    241,    231,
1020         240,    253,    169,    210,    245,    237,    249,    247,
1021         239,    168,    252,    251,    254,    238,    223,    221,
1022         213,    225,    177,    197,    171,    196,    159,    4,
1023         5,      6,      8,      9,      10,     11,     12,     13,
1024         14,     15,     16,     17,     19,     20,     21,     22,
1025         23,     24,     25,     26,     27,     28,     30,     31,
1026         32,     33,     34,     35,     36,     37,     38,     39,
1027         41,     42,     43,     44,     45,     46,     47,     48,
1028         49,     50,     52,     53,     54,     55,     56,     57,
1029         58,     59,     60,     61,     63,     64,     65,     66,
1030         67,     68,     69,     70,     71,     72,     74,     75,
1031         76,     77,     78,     79,     80,     81,     82,     83,
1032         86,     87,     88,     89,     90,     91,     92,     93,
1033         94,     95,     97,     98,     99,     100,    101,    102,
1034         103,    104,    105,    106,    108,    109,    110,    111,
1035         112,    113,    114,    115,    116,    117,    119,    120,
1036         121,    122,    123,    124,    125,    126,    127,    128,
1037         130,    131,    132,    133,    134,    135,    136,    137,
1038         138,    139,    141,    142,    143,    144,    145,    146
1039 };
1040 #else
1041 EXT unsigned char freq[];
1042 #endif
1043
1044 #ifdef DEBUGGING
1045 #ifdef DOINIT
1046 EXT char* block_type[] = {
1047         "NULL",
1048         "SUB",
1049         "EVAL",
1050         "LOOP",
1051         "SUBST",
1052         "BLOCK",
1053 };
1054 #else
1055 EXT char* block_type[];
1056 #endif
1057 #endif
1058
1059 /*****************************************************************************/
1060 /* This lexer/parser stuff is currently global since yacc is hard to reenter */
1061 /*****************************************************************************/
1062 /* XXX This needs to be revisited, since BEGIN makes yacc re-enter... */
1063
1064 #include "perly.h"
1065
1066 typedef enum {
1067     XOPERATOR,
1068     XTERM,
1069     XREF,
1070     XSTATE,
1071     XBLOCK,
1072     XTERMBLOCK
1073 } expectation;
1074
1075 EXT U32         lex_state;      /* next token is determined */
1076 EXT U32         lex_defer;      /* state after determined token */
1077 EXT expectation lex_expect;     /* expect after determined token */
1078 EXT I32         lex_brackets;   /* bracket count */
1079 EXT I32         lex_formbrack;  /* bracket count at outer format level */
1080 EXT I32         lex_fakebrack;  /* outer bracket is mere delimiter */
1081 EXT I32         lex_casemods;   /* casemod count */
1082 EXT I32         lex_dojoin;     /* doing an array interpolation */
1083 EXT I32         lex_starts;     /* how many interps done on level */
1084 EXT SV *        lex_stuff;      /* runtime pattern from m// or s/// */
1085 EXT SV *        lex_repl;       /* runtime replacement from s/// */
1086 EXT OP *        lex_op;         /* extra info to pass back on op */
1087 EXT OP *        lex_inpat;      /* in pattern $) and $| are special */
1088 EXT I32         lex_inwhat;     /* what kind of quoting are we in */
1089 EXT char *      lex_brackstack; /* what kind of brackets to pop */
1090 EXT char *      lex_casestack;  /* what kind of case mods in effect */
1091
1092 /* What we know when we're in LEX_KNOWNEXT state. */
1093 EXT YYSTYPE     nextval[5];     /* value of next token, if any */
1094 EXT I32         nexttype[5];    /* type of next token */
1095 EXT I32         nexttoke;
1096
1097 EXT FILE * VOL  rsfp INIT(Nullfp);
1098 EXT SV *        linestr;
1099 EXT char *      bufptr;
1100 EXT char *      oldbufptr;
1101 EXT char *      oldoldbufptr;
1102 EXT char *      bufend;
1103 EXT expectation expect INIT(XSTATE);    /* how to interpret ambiguous tokens */
1104 EXT char *      autoboot_preamble INIT(Nullch);
1105 EXT AV *        rsfp_filters;
1106
1107 EXT I32         multi_start;    /* 1st line of multi-line string */
1108 EXT I32         multi_end;      /* last line of multi-line string */
1109 EXT I32         multi_open;     /* delimiter of said string */
1110 EXT I32         multi_close;    /* delimiter of said string */
1111
1112 EXT GV *        scrgv;
1113 EXT I32         error_count;    /* how many errors so far, max 10 */
1114 EXT I32         subline;        /* line this subroutine began on */
1115 EXT SV *        subname;        /* name of current subroutine */
1116
1117 EXT CV *        compcv;         /* currently compiling subroutine */
1118 EXT AV *        comppad;        /* storage for lexically scoped temporaries */
1119 EXT AV *        comppad_name;   /* variable names for "my" variables */
1120 EXT I32         comppad_name_fill;/* last "introduced" variable offset */
1121 EXT I32         min_intro_pending;/* start of vars to introduce */
1122 EXT I32         max_intro_pending;/* end of vars to introduce */
1123 EXT I32         padix;          /* max used index in current "register" pad */
1124 EXT I32         padix_floor;    /* how low may inner block reset padix */
1125 EXT I32         pad_reset_pending; /* reset pad on next attempted alloc */
1126 EXT COP         compiling;
1127
1128 EXT I32         thisexpr;       /* name id for nothing_in_common() */
1129 EXT char *      last_uni;       /* position of last named-unary operator */
1130 EXT char *      last_lop;       /* position of last list operator */
1131 EXT OPCODE      last_lop_op;    /* last list operator */
1132 EXT bool        in_my;          /* we're compiling a "my" declaration */
1133 #ifdef FCRYPT
1134 EXT I32         cryptseen;      /* has fast crypt() been initialized? */
1135 #endif
1136
1137 EXT U32         hints;          /* various compilation flags */
1138
1139                                 /* Note: the lowest 8 bits are reserved for
1140                                    stuffing into op->op_private */
1141 #define HINT_INTEGER            0x00000001
1142 #define HINT_STRICT_REFS        0x00000002
1143
1144 #define HINT_BLOCK_SCOPE        0x00000100
1145 #define HINT_STRICT_SUBS        0x00000200
1146 #define HINT_STRICT_VARS        0x00000400
1147
1148 /**************************************************************************/
1149 /* This regexp stuff is global since it always happens within 1 expr eval */
1150 /**************************************************************************/
1151
1152 EXT char *      regprecomp;     /* uncompiled string. */
1153 EXT char *      regparse;       /* Input-scan pointer. */
1154 EXT char *      regxend;        /* End of input for compile */
1155 EXT I32         regnpar;        /* () count. */
1156 EXT char *      regcode;        /* Code-emit pointer; &regdummy = don't. */
1157 EXT I32         regsize;        /* Code size. */
1158 EXT I32         regnaughty;     /* How bad is this pattern? */
1159 EXT I32         regsawback;     /* Did we see \1, ...? */
1160
1161 EXT char *      reginput;       /* String-input pointer. */
1162 EXT char *      regbol;         /* Beginning of input, for ^ check. */
1163 EXT char *      regeol;         /* End of input, for $ check. */
1164 EXT char **     regstartp;      /* Pointer to startp array. */
1165 EXT char **     regendp;        /* Ditto for endp. */
1166 EXT U32 *       reglastparen;   /* Similarly for lastparen. */
1167 EXT char *      regtill;        /* How far we are required to go. */
1168 EXT U16         regflags;       /* are we folding, multilining? */
1169 EXT char        regprev;        /* char before regbol, \n if none */
1170
1171 /***********************************************/
1172 /* Global only to current interpreter instance */
1173 /***********************************************/
1174
1175 #ifdef MULTIPLICITY
1176 #define IEXT
1177 #define IINIT(x)
1178 struct interpreter {
1179 #else
1180 #define IEXT EXT
1181 #define IINIT(x) INIT(x)
1182 #endif
1183
1184 /* pseudo environmental stuff */
1185 IEXT int        Iorigargc;
1186 IEXT char **    Iorigargv;
1187 IEXT GV *       Ienvgv;
1188 IEXT GV *       Isiggv;
1189 IEXT GV *       Iincgv;
1190 IEXT char *     Iorigfilename;
1191 IEXT SV *       Idiehook;
1192 IEXT SV *       Iwarnhook;
1193 IEXT SV *       Iparsehook;
1194
1195 /* switches */
1196 IEXT char *     Icddir;
1197 IEXT bool       Iminus_c;
1198 IEXT char       Ipatchlevel[6];
1199 IEXT char *     Inrs IINIT("\n");
1200 IEXT U32        Inrschar IINIT('\n');   /* final char of rs, or 0777 if none */
1201 IEXT I32        Inrslen IINIT(1);
1202 IEXT char *     Isplitstr IINIT(" ");
1203 IEXT bool       Ipreprocess;
1204 IEXT bool       Iminus_n;
1205 IEXT bool       Iminus_p;
1206 IEXT bool       Iminus_l;
1207 IEXT bool       Iminus_a;
1208 IEXT bool       Iminus_F;
1209 IEXT bool       Idoswitches;
1210 IEXT bool       Idowarn;
1211 IEXT bool       Idoextract;
1212 IEXT bool       Isawampersand;  /* must save all match strings */
1213 IEXT bool       Isawstudy;      /* do fbm_instr on all strings */
1214 IEXT bool       Isawi;          /* study must assume case insensitive */
1215 IEXT bool       Isawvec;
1216 IEXT bool       Iunsafe;
1217 IEXT bool       Ido_undump;             /* -u or dump seen? */
1218 IEXT char *     Iinplace;
1219 IEXT char *     Ie_tmpname;
1220 IEXT FILE *     Ie_fp;
1221 IEXT VOL U32    Idebug;
1222 IEXT U32        Iperldb;
1223         /* This value may be raised by extensions for testing purposes */
1224 IEXT int        Iperl_destruct_level;   /* 0=none, 1=full, 2=full with checks */
1225
1226 /* magical thingies */
1227 IEXT Time_t     Ibasetime;              /* $^T */
1228 IEXT SV *       Iformfeed;              /* $^L */
1229 IEXT char *     Ichopset IINIT(" \n-"); /* $: */
1230 IEXT char *     Irs IINIT("\n");        /* $/ */
1231 IEXT U32        Irschar IINIT('\n');    /* final char of rs, or 0777 if none */
1232 IEXT STRLEN     Irslen IINIT(1);
1233 IEXT bool       Irspara;
1234 IEXT char *     Iofs;                   /* $, */
1235 IEXT STRLEN     Iofslen;
1236 IEXT char *     Iors;                   /* $\ */
1237 IEXT STRLEN     Iorslen;
1238 IEXT char *     Iofmt;                  /* $# */
1239 IEXT I32        Imaxsysfd IINIT(MAXSYSFD); /* top fd to pass to subprocesses */
1240 IEXT int        Imultiline;       /* $*--do strings hold >1 line? */
1241 IEXT U32        Istatusvalue;   /* $? */
1242
1243 IEXT struct stat Istatcache;            /* _ */
1244 IEXT GV *       Istatgv;
1245 IEXT SV *       Istatname IINIT(Nullsv);
1246
1247 /* shortcuts to various I/O objects */
1248 IEXT GV *       Istdingv;
1249 IEXT GV *       Ilast_in_gv;
1250 IEXT GV *       Idefgv;
1251 IEXT GV *       Iargvgv;
1252 IEXT GV *       Idefoutgv;
1253 IEXT GV *       Iargvoutgv;
1254
1255 /* shortcuts to regexp stuff */
1256 IEXT GV *       Ileftgv;
1257 IEXT GV *       Iampergv;
1258 IEXT GV *       Irightgv;
1259 IEXT PMOP *     Icurpm;         /* what to do \ interps from */
1260 IEXT I32 *      Iscreamfirst;
1261 IEXT I32 *      Iscreamnext;
1262 IEXT I32        Imaxscream IINIT(-1);
1263 IEXT SV *       Ilastscream;
1264
1265 /* shortcuts to misc objects */
1266 IEXT GV *       Ierrgv;
1267
1268 /* shortcuts to debugging objects */
1269 IEXT GV *       IDBgv;
1270 IEXT GV *       IDBline;
1271 IEXT GV *       IDBsub;
1272 IEXT SV *       IDBsingle;
1273 IEXT SV *       IDBtrace;
1274 IEXT SV *       IDBsignal;
1275 IEXT AV *       Ilineary;       /* lines of script for debugger */
1276 IEXT AV *       Idbargs;        /* args to call listed by caller function */
1277
1278 /* symbol tables */
1279 IEXT HV *       Idefstash;      /* main symbol table */
1280 IEXT HV *       Icurstash;      /* symbol table for current package */
1281 IEXT HV *       Idebstash;      /* symbol table for perldb package */
1282 IEXT SV *       Icurstname;     /* name of current package */
1283 IEXT AV *       Ibeginav;       /* names of BEGIN subroutines */
1284 IEXT AV *       Iendav;         /* names of END subroutines */
1285 IEXT AV *       Ipad;           /* storage for lexically scoped temporaries */
1286 IEXT AV *       Ipadname;       /* variable names for "my" variables */
1287
1288 /* memory management */
1289 IEXT SV **      Itmps_stack;
1290 IEXT I32        Itmps_ix IINIT(-1);
1291 IEXT I32        Itmps_floor IINIT(-1);
1292 IEXT I32        Itmps_max;
1293 IEXT I32        Isv_count;      /* how many SV* are currently allocated */
1294 IEXT I32        Isv_objcount;   /* how many objects are currently allocated */
1295 IEXT SV*        Isv_root;       /* storage for SVs belonging to interp */
1296 IEXT SV*        Isv_arenaroot;  /* list of areas for garbage collection */
1297
1298 /* funky return mechanisms */
1299 IEXT I32        Ilastspbase;
1300 IEXT I32        Ilastsize;
1301 IEXT int        Iforkprocess;   /* so do_open |- can return proc# */
1302
1303 /* subprocess state */
1304 IEXT AV *       Ifdpid;         /* keep fd-to-pid mappings for my_popen */
1305 IEXT HV *       Ipidstatus;     /* keep pid-to-status mappings for waitpid */
1306
1307 /* internal state */
1308 IEXT VOL int    Iin_eval;       /* trap "fatal" errors? */
1309 IEXT OP *       Irestartop;     /* Are we propagating an error from croak? */
1310 IEXT int        Idelaymagic;    /* ($<,$>) = ... */
1311 IEXT bool       Idirty;         /* In the middle of tearing things down? */
1312 IEXT U8         Ilocalizing;    /* are we processing a local() list? */
1313 IEXT bool       Itainted;       /* using variables controlled by $< */
1314 IEXT bool       Itainting;      /* doing taint checks */
1315 IEXT char *     Iop_mask IINIT(NULL);   /* masked operations for safe evals */
1316
1317 /* trace state */
1318 IEXT I32        Idlevel;
1319 IEXT I32        Idlmax IINIT(128);
1320 IEXT char *     Idebname;
1321 IEXT char *     Idebdelim;
1322
1323 /* current interpreter roots */
1324 IEXT CV *       Imain_cv;
1325 IEXT OP *       Imain_root;
1326 IEXT OP *       Imain_start;
1327 IEXT OP *       Ieval_root;
1328 IEXT OP *       Ieval_start;
1329
1330 /* runtime control stuff */
1331 IEXT COP * VOL  Icurcop IINIT(&compiling);
1332 IEXT line_t     Icopline IINIT(NOLINE);
1333 IEXT CONTEXT *  Icxstack;
1334 IEXT I32        Icxstack_ix IINIT(-1);
1335 IEXT I32        Icxstack_max IINIT(128);
1336 IEXT jmp_buf    Itop_env;
1337 IEXT I32        Irunlevel;
1338
1339 /* stack stuff */
1340 IEXT AV *       Istack;         /* THE STACK */
1341 IEXT AV *       Imainstack;     /* the stack when nothing funny is happening */
1342 IEXT SV **      Imystack_base;  /* stack->array_ary */
1343 IEXT SV **      Imystack_sp;    /* stack pointer now */
1344 IEXT SV **      Imystack_max;   /* stack->array_ary + stack->array_max */
1345
1346 /* format accumulators */
1347 IEXT SV *       Iformtarget;
1348 IEXT SV *       Ibodytarget;
1349 IEXT SV *       Itoptarget;
1350
1351 /* statics moved here for shared library purposes */
1352 IEXT SV         Istrchop;       /* return value from chop */
1353 IEXT int        Ifilemode;      /* so nextargv() can preserve mode */
1354 IEXT int        Ilastfd;        /* what to preserve mode on */
1355 IEXT char *     Ioldname;       /* what to preserve mode on */
1356 IEXT char **    IArgv;          /* stuff to free from do_aexec, vfork safe */
1357 IEXT char *     ICmd;           /* stuff to free from do_aexec, vfork safe */
1358 IEXT OP *       Isortcop;       /* user defined sort routine */
1359 IEXT HV *       Isortstash;     /* which is in some package or other */
1360 IEXT GV *       Ifirstgv;       /* $a */
1361 IEXT GV *       Isecondgv;      /* $b */
1362 IEXT AV *       Isortstack;     /* temp stack during pp_sort() */
1363 IEXT AV *       Isignalstack;   /* temp stack during sighandler() */
1364 IEXT SV *       Imystrk;        /* temp key string for do_each() */
1365 IEXT I32        Idumplvl;       /* indentation level on syntax tree dump */
1366 IEXT PMOP *     Ioldlastpm;     /* for saving regexp context during debugger */
1367 IEXT I32        Igensym;        /* next symbol for getsym() to define */
1368 IEXT bool       Ipreambled;
1369 IEXT int        Ilaststatval IINIT(-1);
1370 IEXT I32        Ilaststype IINIT(OP_STAT);
1371
1372 #undef IEXT
1373 #undef IINIT
1374
1375 #ifdef MULTIPLICITY
1376 };
1377 #else
1378 struct interpreter {
1379     char broiled;
1380 };
1381 #endif
1382
1383 #include "pp.h"
1384
1385 #ifdef __cplusplus
1386 extern "C" {
1387 #endif
1388
1389 #ifdef __cplusplus
1390 #  ifndef I_STDARG
1391 #    define I_STDARG 1
1392 #  endif
1393 #endif
1394
1395 #ifdef I_STDARG
1396 #  include <stdarg.h>
1397 #else
1398 #  ifdef I_VARARGS
1399 #    include <varargs.h>
1400 #  endif
1401 #endif
1402
1403 #include "proto.h"
1404
1405 #ifdef EMBED
1406 #define Perl_sv_setptrobj(rv,ptr,name) Perl_sv_setref_iv(rv,name,(IV)ptr)
1407 #define Perl_sv_setptrref(rv,ptr) Perl_sv_setref_iv(rv,Nullch,(IV)ptr)
1408 #else
1409 #define sv_setptrobj(rv,ptr,name) sv_setref_iv(rv,name,(IV)ptr)
1410 #define sv_setptrref(rv,ptr) sv_setref_iv(rv,Nullch,(IV)ptr)
1411 #endif
1412
1413 #ifdef __cplusplus
1414 };
1415 #endif
1416
1417 /* The following must follow proto.h */
1418
1419 #ifdef DOINIT
1420 EXT MGVTBL vtbl_sv =    {magic_get,
1421                                 magic_set,
1422                                         magic_len,
1423                                                 0,      0};
1424 EXT MGVTBL vtbl_env =   {0,     0,      0,      0,      0};
1425 EXT MGVTBL vtbl_envelem =       {0,     magic_setenv,
1426                                         0,      magic_clearenv,
1427                                                         0};
1428 EXT MGVTBL vtbl_sig =   {0,     0,               0, 0, 0};
1429 EXT MGVTBL vtbl_sigelem =       {0,     magic_setsig,
1430                                         0,      0,      0};
1431 EXT MGVTBL vtbl_pack =  {0,     0,      0,      magic_wipepack,
1432                                                         0};
1433 EXT MGVTBL vtbl_packelem =      {magic_getpack,
1434                                 magic_setpack,
1435                                         0,      magic_clearpack,
1436                                                         0};
1437 EXT MGVTBL vtbl_dbline =        {0,     magic_setdbline,
1438                                         0,      0,      0};
1439 EXT MGVTBL vtbl_isa =   {0,     magic_setisa,
1440                                         0,      0,      0};
1441 EXT MGVTBL vtbl_isaelem =       {0,     magic_setisa,
1442                                         0,      0,      0};
1443 EXT MGVTBL vtbl_arylen =        {magic_getarylen,
1444                                 magic_setarylen,
1445                                         0,      0,      0};
1446 EXT MGVTBL vtbl_glob =  {magic_getglob,
1447                                 magic_setglob,
1448                                         0,      0,      0};
1449 EXT MGVTBL vtbl_mglob = {0,     magic_setmglob,
1450                                         0,      0,      0};
1451 EXT MGVTBL vtbl_taint = {magic_gettaint,magic_settaint,
1452                                         0,      0,      0};
1453 EXT MGVTBL vtbl_substr =        {0,     magic_setsubstr,
1454                                         0,      0,      0};
1455 EXT MGVTBL vtbl_vec =   {0,     magic_setvec,
1456                                         0,      0,      0};
1457 EXT MGVTBL vtbl_pos =   {magic_getpos,
1458                                 magic_setpos,
1459                                         0,      0,      0};
1460 EXT MGVTBL vtbl_bm =    {0,     magic_setbm,
1461                                         0,      0,      0};
1462 EXT MGVTBL vtbl_uvar =  {magic_getuvar,
1463                                 magic_setuvar,
1464                                         0,      0,      0};
1465
1466 #ifdef OVERLOAD
1467 EXT MGVTBL vtbl_amagic =       {0,     magic_setamagic,
1468                                         0,      0,      magic_setamagic};
1469 EXT MGVTBL vtbl_amagicelem =   {0,     magic_setamagic,
1470                                         0,      0,      magic_setamagic};
1471 #endif /* OVERLOAD */
1472
1473 #else
1474 EXT MGVTBL vtbl_sv;
1475 EXT MGVTBL vtbl_env;
1476 EXT MGVTBL vtbl_envelem;
1477 EXT MGVTBL vtbl_sig;
1478 EXT MGVTBL vtbl_sigelem;
1479 EXT MGVTBL vtbl_pack;
1480 EXT MGVTBL vtbl_packelem;
1481 EXT MGVTBL vtbl_dbline;
1482 EXT MGVTBL vtbl_isa;
1483 EXT MGVTBL vtbl_isaelem;
1484 EXT MGVTBL vtbl_arylen;
1485 EXT MGVTBL vtbl_glob;
1486 EXT MGVTBL vtbl_mglob;
1487 EXT MGVTBL vtbl_taint;
1488 EXT MGVTBL vtbl_substr;
1489 EXT MGVTBL vtbl_vec;
1490 EXT MGVTBL vtbl_pos;
1491 EXT MGVTBL vtbl_bm;
1492 EXT MGVTBL vtbl_uvar;
1493
1494 #ifdef OVERLOAD
1495 EXT MGVTBL vtbl_amagic;
1496 EXT MGVTBL vtbl_amagicelem;
1497 #endif /* OVERLOAD */
1498
1499 #endif
1500
1501 #ifdef OVERLOAD
1502 EXT long amagic_generation;
1503
1504 #define NofAMmeth 29
1505 #ifdef DOINIT
1506 EXT char * AMG_names[NofAMmeth][2] = {
1507   {"fallback","abs"},
1508   {"bool", "nomethod"},
1509   {"\"\"", "0+"},
1510   {"+","+="},
1511   {"-","-="},
1512   {"*", "*="},
1513   {"/", "/="},
1514   {"%", "%="},
1515   {"**", "**="},
1516   {"<<", "<<="},
1517   {">>", ">>="},
1518   {"&", "&="},
1519   {"|", "|="},
1520   {"^", "^="},
1521   {"<", "<="},
1522   {">", ">="},
1523   {"==", "!="},
1524   {"<=>", "cmp"},
1525   {"lt", "le"},
1526   {"gt", "ge"},
1527   {"eq", "ne"},
1528   {"!", "~"},
1529   {"++", "--"},
1530   {"atan2", "cos"},
1531   {"sin", "exp"},
1532   {"log", "sqrt"},
1533   {"x","x="},
1534   {".",".="},
1535   {"=","neg"}
1536 };
1537 #else
1538 EXT char * AMG_names[NofAMmeth][2];
1539 #endif /* def INITAMAGIC */
1540
1541 struct  am_table        {
1542   long was_ok_sub;
1543   long was_ok_am;
1544   CV* table[NofAMmeth*2];
1545   long fallback;
1546 };
1547 typedef struct am_table AMT;
1548
1549 #define AMGfallNEVER    1
1550 #define AMGfallNO       2
1551 #define AMGfallYES      3
1552
1553 enum {
1554   fallback_amg, abs_amg,
1555   bool__amg,    nomethod_amg,
1556   string_amg,   numer_amg,
1557   add_amg,      add_ass_amg,
1558   subtr_amg,    subtr_ass_amg,
1559   mult_amg,     mult_ass_amg,
1560   div_amg,      div_ass_amg,
1561   mod_amg,      mod_ass_amg,
1562   pow_amg,      pow_ass_amg,
1563   lshift_amg,   lshift_ass_amg,
1564   rshift_amg,   rshift_ass_amg,
1565   band_amg,     band_ass_amg,
1566   bor_amg,      bor_ass_amg,
1567   bxor_amg,     bxor_ass_amg,
1568   lt_amg,       le_amg,
1569   gt_amg,       ge_amg,
1570   eq_amg,       ne_amg,
1571   ncmp_amg,     scmp_amg,
1572   slt_amg,      sle_amg,
1573   sgt_amg,      sge_amg,
1574   seq_amg,      sne_amg,
1575   not_amg,      compl_amg,
1576   inc_amg,      dec_amg,
1577   atan2_amg,    cos_amg,
1578   sin_amg,      exp_amg,
1579   log_amg,      sqrt_amg,
1580   repeat_amg,   repeat_ass_amg,
1581   concat_amg,   concat_ass_amg,
1582   copy_amg,     neg_amg
1583 };
1584 #endif /* OVERLOAD */
1585
1586 #endif /* Include guard */