This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perl 5.0 alpha 5
[perl5.git] / perl.h
CommitLineData
79072805 1/* $RCSfile: perl.h,v $$Revision: 4.1 $$Date: 92/08/07 18:25:56 $
a687059c 2 *
352d5a3a 3 * Copyright (c) 1991, Larry Wall
a687059c 4 *
352d5a3a
LW
5 * You may distribute under the terms of either the GNU General Public
6 * License or the Artistic License, as specified in the README file.
8d063cd8
LW
7 *
8 * $Log: perl.h,v $
79072805
LW
9 * Revision 4.1 92/08/07 18:25:56 lwall
10 *
ee0007ab
LW
11 * Revision 4.0.1.6 92/06/08 14:55:10 lwall
12 * patch20: added Atari ST portability
13 * patch20: bcopy() and memcpy() now tested for overlap safety
14 * patch20: Perl now distinguishes overlapped copies from non-overlapped
15 * patch20: removed implicit int declarations on functions
16 *
988174c1
LW
17 * Revision 4.0.1.5 91/11/11 16:41:07 lwall
18 * patch19: uts wrongly defines S_ISDIR() et al
19 * patch19: too many preprocessors can't expand a macro right in #if
20 * patch19: added little-endian pack/unpack options
21 *
45d8adaa
LW
22 * Revision 4.0.1.4 91/11/05 18:06:10 lwall
23 * patch11: various portability fixes
24 * patch11: added support for dbz
25 * patch11: added some support for 64-bit integers
26 * patch11: hex() didn't understand leading 0x
27 *
1462b684
LW
28 * Revision 4.0.1.3 91/06/10 01:25:10 lwall
29 * patch10: certain pattern optimizations were botched
30 *
352d5a3a
LW
31 * Revision 4.0.1.2 91/06/07 11:28:33 lwall
32 * patch4: new copyright notice
33 * patch4: made some allowances for "semi-standard" C
34 * patch4: many, many itty-bitty portability fixes
35 *
35c8bce7
LW
36 * Revision 4.0.1.1 91/04/11 17:49:51 lwall
37 * patch1: hopefully straightened out some of the Xenix mess
38 *
fe14fcc3
LW
39 * Revision 4.0 91/03/20 01:37:56 lwall
40 * 4.0 baseline.
8d063cd8
LW
41 *
42 */
43
79072805
LW
44#include "embed.h"
45
35c8bce7 46#define VOIDWANT 1
79072805
LW
47#ifdef __cplusplus
48#include "config_c++.h"
49#else
ac58e20f 50#include "config.h"
79072805
LW
51#endif
52
53#ifndef BYTEORDER
54# define BYTEORDER 0x1234
55#endif
56
57/* Overall memory policy? */
58#ifndef CONSERVATIVE
59# define LIBERAL 1
60#endif
61
62/*
63 * The following contortions are brought to you on behalf of all the
64 * standards, semi-standards, de facto standards, not-so-de-facto standards
65 * of the world, as well as all the other botches anyone ever thought of.
66 * The basic theory is that if we work hard enough here, the rest of the
67 * code can be a lot prettier. Well, so much for theory. Sorry, Henry...
68 */
ac58e20f 69
45d8adaa
LW
70#ifdef MYMALLOC
71# ifdef HIDEMYMALLOC
72# define malloc Mymalloc
73# define realloc Myremalloc
74# define free Myfree
75# endif
76# define safemalloc malloc
77# define saferealloc realloc
78# define safefree free
79#endif
80
81/* work around some libPW problems */
45d8adaa
LW
82#ifdef DOINIT
83char Error[1];
84#endif
85
ee0007ab
LW
86/* define this once if either system, instead of cluttering up the src */
87#if defined(MSDOS) || defined(atarist)
88#define DOSISH 1
89#endif
90
79072805 91#if defined(__STDC__) || defined(_AIX) || defined(__stdc__) || defined(__cplusplus)
352d5a3a
LW
92# define STANDARD_C 1
93#endif
94
79072805
LW
95#if defined(STANDARD_C)
96# define P(args) args
97#else
98# define P(args) ()
99#endif
100
352d5a3a 101#if defined(HASVOLATILE) || defined(STANDARD_C)
79072805
LW
102# ifdef __cplusplus
103# define VOL // to temporarily suppress warnings
104# else
105# define VOL volatile
106# endif
663a0e37 107#else
79072805 108# define VOL
663a0e37
LW
109#endif
110
463ee0b2
LW
111#define TAINT_IF(c) (tainted |= (c))
112#define TAINT_NOT (tainted = 0)
113#define TAINT_PROPER(s) if (tainting) taint_proper(no_security, s)
114#define TAINT_ENV() if (tainting) taint_env()
a687059c 115
fe14fcc3 116#ifndef HAS_VFORK
03a14243
LW
117# define vfork fork
118#endif
119
fe14fcc3
LW
120#ifdef HAS_GETPGRP2
121# ifndef HAS_GETPGRP
122# define HAS_GETPGRP
663a0e37
LW
123# endif
124# define getpgrp getpgrp2
125#endif
126
fe14fcc3
LW
127#ifdef HAS_SETPGRP2
128# ifndef HAS_SETPGRP
129# define HAS_SETPGRP
663a0e37
LW
130# endif
131# define setpgrp setpgrp2
132#endif
133
fe14fcc3
LW
134#include <stdio.h>
135#include <ctype.h>
136#include <setjmp.h>
79072805 137
fe14fcc3 138#ifndef MSDOS
79072805
LW
139# ifdef PARAM_NEEDS_TYPES
140# include <sys/types.h>
141# endif
142# include <sys/param.h>
352d5a3a 143#endif
79072805
LW
144
145
146/* Use all the "standard" definitions? */
352d5a3a 147#ifdef STANDARD_C
79072805
LW
148# include <stdlib.h>
149# include <string.h>
150# define MEM_SIZE size_t
ee0007ab 151#else
79072805 152 typedef unsigned int MEM_SIZE;
352d5a3a 153#endif /* STANDARD_C */
03a14243 154
ee0007ab 155#if defined(HAS_MEMCMP) && defined(mips) && defined(ultrix)
79072805 156# undef HAS_MEMCMP
663a0e37 157#endif
fe14fcc3
LW
158
159#ifdef HAS_MEMCPY
352d5a3a 160# ifndef STANDARD_C
fe14fcc3 161# ifndef memcpy
79072805 162 extern char * memcpy P((char*, char*, int));
ee0007ab
LW
163# endif
164# endif
165#else
166# ifndef memcpy
167# ifdef HAS_BCOPY
168# define memcpy(d,s,l) bcopy(s,d,l)
169# else
170# define memcpy(d,s,l) my_bcopy(s,d,l)
171# endif
172# endif
173#endif /* HAS_MEMCPY */
fe14fcc3 174
ee0007ab
LW
175#ifdef HAS_MEMSET
176# ifndef STANDARD_C
177# ifndef memset
79072805 178 extern char *memset P((char*, int, int));
ee0007ab
LW
179# endif
180# endif
181# define memzero(d,l) memset(d,0,l)
182#else
183# ifndef memzero
184# ifdef HAS_BZERO
185# define memzero(d,l) bzero(d,l)
186# else
187# define memzero(d,l) my_bzero(d,l)
188# endif
352d5a3a 189# endif
ee0007ab
LW
190#endif /* HAS_MEMSET */
191
192#ifdef HAS_MEMCMP
193# ifndef STANDARD_C
194# ifndef memcmp
79072805 195 extern int memcmp P((char*, char*, int));
ee0007ab
LW
196# endif
197# endif
198#else
199# ifndef memcmp
200# define memcmp(s1,s2,l) my_memcmp(s1,s2,l)
352d5a3a 201# endif
ee0007ab 202#endif /* HAS_MEMCMP */
8d063cd8 203
ee0007ab
LW
204/* we prefer bcmp slightly for comparisons that don't care about ordering */
205#ifndef HAS_BCMP
352d5a3a
LW
206# ifndef bcmp
207# define bcmp(s1,s2,l) memcmp(s1,s2,l)
208# endif
ee0007ab
LW
209#endif /* HAS_BCMP */
210
211#ifndef HAS_MEMMOVE
79072805
LW
212# if defined(HAS_BCOPY) && defined(SAFE_BCOPY)
213# define memmove(d,s,l) bcopy(s,d,l)
214# else
215# if defined(HAS_MEMCPY) && defined(SAFE_MEMCPY)
216# define memmove(d,s,l) memcpy(d,s,l)
217# else
218# define memmove(d,s,l) my_bcopy(s,d,l)
219# endif
220# endif
d9d8d8de 221#endif
378cc40b
LW
222
223#ifndef _TYPES_ /* If types.h defines this it's easy. */
79072805
LW
224# ifndef major /* Does everyone's types.h define this? */
225# include <sys/types.h>
226# endif
378cc40b
LW
227#endif
228
ae986130 229#ifdef I_NETINET_IN
79072805 230# include <netinet/in.h>
ae986130
LW
231#endif
232
8d063cd8 233#include <sys/stat.h>
79072805 234
ee0007ab 235#if defined(uts) || defined(UTekV)
79072805
LW
236# undef S_ISDIR
237# undef S_ISCHR
238# undef S_ISBLK
239# undef S_ISREG
240# undef S_ISFIFO
241# undef S_ISLNK
242# define S_ISDIR(P) (((P)&S_IFMT)==S_IFDIR)
243# define S_ISCHR(P) (((P)&S_IFMT)==S_IFCHR)
244# define S_ISBLK(P) (((P)&S_IFMT)==S_IFBLK)
245# define S_ISREG(P) (((P)&S_IFMT)==S_IFREG)
246# define S_ISFIFO(P) (((P)&S_IFMT)==S_IFIFO)
247# ifdef S_IFLNK
248# define S_ISLNK(P) (((P)&S_IFMT)==S_IFLNK)
249# endif
ee0007ab 250#endif
135863df 251
663a0e37
LW
252#ifdef I_TIME
253# include <time.h>
ffed7fef 254#endif
663a0e37 255
fe14fcc3 256#ifdef I_SYS_TIME
663a0e37
LW
257# ifdef SYSTIMEKERNEL
258# define KERNEL
259# endif
260# include <sys/time.h>
261# ifdef SYSTIMEKERNEL
262# undef KERNEL
263# endif
a687059c 264#endif
135863df 265
d9d8d8de 266#ifndef MSDOS
8d063cd8 267#include <sys/times.h>
d9d8d8de 268#endif
8d063cd8 269
fe14fcc3 270#if defined(HAS_STRERROR) && (!defined(HAS_MKDIR) || !defined(HAS_RMDIR))
79072805 271# undef HAS_STRERROR
663a0e37
LW
272#endif
273
274#include <errno.h>
ed6116ce
LW
275#ifdef HAS_SOCKET
276# ifndef ENOTSOCK
277# include <net/errno.h>
278# endif
279#endif
280
d9d8d8de 281#ifndef MSDOS
79072805
LW
282# ifndef errno
283 extern int errno; /* ANSI allows errno to be an lvalue expr */
284# endif
d9d8d8de 285#endif
663a0e37 286
35c8bce7 287#ifndef strerror
79072805
LW
288# ifdef HAS_STRERROR
289 char *strerror P((int));
290# else
291 extern int sys_nerr;
292 extern char *sys_errlist[];
293# define strerror(e) \
294 ((e) < 0 || (e) >= sys_nerr ? "(unknown)" : sys_errlist[e])
295# endif
35c8bce7 296#endif
663a0e37 297
a687059c 298#ifdef I_SYSIOCTL
79072805
LW
299# ifndef _IOCTL_
300# include <sys/ioctl.h>
301# endif
a687059c
LW
302#endif
303
ee0007ab 304#if defined(mc300) || defined(mc500) || defined(mc700) || defined(mc6000)
79072805
LW
305# ifdef HAS_SOCKETPAIR
306# undef HAS_SOCKETPAIR
307# endif
308# ifdef HAS_NDBM
309# undef HAS_NDBM
310# endif
a687059c
LW
311#endif
312
a687059c 313#if INTSIZE == 2
79072805
LW
314# define htoni htons
315# define ntohi ntohs
a687059c 316#else
79072805
LW
317# define htoni htonl
318# define ntohi ntohl
a687059c
LW
319#endif
320
35c8bce7 321#if defined(I_DIRENT)
663a0e37
LW
322# include <dirent.h>
323# define DIRENT dirent
ae986130 324#else
fe14fcc3 325# ifdef I_SYS_NDIR
79a0689e 326# include <sys/ndir.h>
663a0e37
LW
327# define DIRENT direct
328# else
fe14fcc3 329# ifdef I_SYS_DIR
79a0689e
LW
330# ifdef hp9000s500
331# include <ndir.h> /* may be wrong in the future */
332# else
333# include <sys/dir.h>
334# endif
663a0e37
LW
335# define DIRENT direct
336# endif
337# endif
a687059c
LW
338#endif
339
352d5a3a
LW
340#ifdef FPUTS_BOTCH
341/* work around botch in SunOS 4.0.1 and 4.0.2 */
342# ifndef fputs
79072805 343# define fputs(sv,fp) fprintf(fp,"%s",sv)
352d5a3a
LW
344# endif
345#endif
346
c623bd54
LW
347/*
348 * The following gobbledygook brought to you on behalf of __STDC__.
349 * (I could just use #ifndef __STDC__, but this is more bulletproof
350 * in the face of half-implementations.)
351 */
352
353#ifndef S_IFMT
354# ifdef _S_IFMT
355# define S_IFMT _S_IFMT
356# else
357# define S_IFMT 0170000
358# endif
359#endif
360
361#ifndef S_ISDIR
362# define S_ISDIR(m) ((m & S_IFMT) == S_IFDIR)
363#endif
364
365#ifndef S_ISCHR
366# define S_ISCHR(m) ((m & S_IFMT) == S_IFCHR)
367#endif
368
369#ifndef S_ISBLK
fe14fcc3
LW
370# ifdef S_IFBLK
371# define S_ISBLK(m) ((m & S_IFMT) == S_IFBLK)
372# else
373# define S_ISBLK(m) (0)
374# endif
c623bd54
LW
375#endif
376
377#ifndef S_ISREG
378# define S_ISREG(m) ((m & S_IFMT) == S_IFREG)
379#endif
380
381#ifndef S_ISFIFO
fe14fcc3
LW
382# ifdef S_IFIFO
383# define S_ISFIFO(m) ((m & S_IFMT) == S_IFIFO)
384# else
385# define S_ISFIFO(m) (0)
386# endif
c623bd54
LW
387#endif
388
389#ifndef S_ISLNK
390# ifdef _S_ISLNK
391# define S_ISLNK(m) _S_ISLNK(m)
392# else
393# ifdef _S_IFLNK
394# define S_ISLNK(m) ((m & S_IFMT) == _S_IFLNK)
395# else
396# ifdef S_IFLNK
397# define S_ISLNK(m) ((m & S_IFMT) == S_IFLNK)
398# else
399# define S_ISLNK(m) (0)
400# endif
401# endif
402# endif
403#endif
404
405#ifndef S_ISSOCK
406# ifdef _S_ISSOCK
407# define S_ISSOCK(m) _S_ISSOCK(m)
408# else
409# ifdef _S_IFSOCK
410# define S_ISSOCK(m) ((m & S_IFMT) == _S_IFSOCK)
411# else
412# ifdef S_IFSOCK
413# define S_ISSOCK(m) ((m & S_IFMT) == S_IFSOCK)
414# else
415# define S_ISSOCK(m) (0)
416# endif
417# endif
418# endif
419#endif
420
421#ifndef S_IRUSR
422# ifdef S_IREAD
423# define S_IRUSR S_IREAD
424# define S_IWUSR S_IWRITE
425# define S_IXUSR S_IEXEC
426# else
427# define S_IRUSR 0400
428# define S_IWUSR 0200
429# define S_IXUSR 0100
430# endif
431# define S_IRGRP (S_IRUSR>>3)
432# define S_IWGRP (S_IWUSR>>3)
433# define S_IXGRP (S_IXUSR>>3)
434# define S_IROTH (S_IRUSR>>6)
435# define S_IWOTH (S_IWUSR>>6)
436# define S_IXOTH (S_IXUSR>>6)
437#endif
438
439#ifndef S_ISUID
440# define S_ISUID 04000
441#endif
442
443#ifndef S_ISGID
444# define S_ISGID 02000
445#endif
446
79072805
LW
447#ifdef ff_next
448# undef ff_next
352d5a3a
LW
449#endif
450
ee0007ab 451#if defined(cray) || defined(gould) || defined(i860)
45d8adaa
LW
452# define SLOPPYDIVIDE
453#endif
454
988174c1 455#if defined(cray) || defined(convex) || defined (uts) || BYTEORDER > 0xffff
45d8adaa
LW
456# define QUAD
457#endif
458
459#ifdef QUAD
460# ifdef cray
461# define quad int
462# else
988174c1 463# if defined(convex) || defined (uts)
45d8adaa
LW
464# define quad long long
465# else
466# define quad long
467# endif
468# endif
469#endif
470
79072805
LW
471#ifdef VOIDSIG
472# define VOIDRET void
473#else
474# define VOIDRET int
475#endif
476
477#ifdef DOSISH
478# include "dosish.h"
479#else
480# include "unixish.h"
481#endif
482
483#ifndef HAS_PAUSE
484#define pause() sleep((32767<<16)+32767)
485#endif
486
487#ifndef IOCPARM_LEN
488# ifdef IOCPARM_MASK
489 /* on BSDish systes we're safe */
490# define IOCPARM_LEN(x) (((x) >> 16) & IOCPARM_MASK)
491# else
492 /* otherwise guess at what's safe */
493# define IOCPARM_LEN(x) 256
494# endif
495#endif
496
ee0007ab 497typedef MEM_SIZE STRLEN;
450a55e4 498
79072805
LW
499typedef struct op OP;
500typedef struct cop COP;
501typedef struct unop UNOP;
502typedef struct binop BINOP;
503typedef struct listop LISTOP;
504typedef struct logop LOGOP;
505typedef struct condop CONDOP;
506typedef struct pmop PMOP;
507typedef struct svop SVOP;
508typedef struct gvop GVOP;
509typedef struct pvop PVOP;
510typedef struct cvop CVOP;
511typedef struct loop LOOP;
512
513typedef struct Outrec Outrec;
514typedef struct lstring Lstring;
93a17b20 515typedef struct interpreter PerlInterpreter;
79072805
LW
516typedef struct ff FF;
517typedef struct io IO;
518typedef struct sv SV;
519typedef struct av AV;
520typedef struct hv HV;
521typedef struct cv CV;
378cc40b 522typedef struct regexp REGEXP;
79072805
LW
523typedef struct gp GP;
524typedef struct sv GV;
525typedef struct context CONTEXT;
526typedef struct block BLOCK;
527
528typedef struct magic MAGIC;
ed6116ce 529typedef struct xrv XRV;
79072805
LW
530typedef struct xpv XPV;
531typedef struct xpviv XPVIV;
532typedef struct xpvnv XPVNV;
533typedef struct xpvmg XPVMG;
534typedef struct xpvlv XPVLV;
535typedef struct xpvav XPVAV;
536typedef struct xpvhv XPVHV;
537typedef struct xpvgv XPVGV;
538typedef struct xpvcv XPVCV;
539typedef struct xpvbm XPVBM;
540typedef struct xpvfm XPVFM;
541typedef struct mgvtbl MGVTBL;
542typedef union any ANY;
8d063cd8 543
378cc40b 544#include "handy.h"
79072805
LW
545union any {
546 void* any_ptr;
547 I32 any_i32;
548};
549
378cc40b 550#include "regexp.h"
79072805 551#include "sv.h"
378cc40b 552#include "util.h"
8d063cd8 553#include "form.h"
79072805
LW
554#include "gv.h"
555#include "cv.h"
556#include "opcode.h"
557#include "op.h"
558#include "cop.h"
559#include "av.h"
560#include "hv.h"
561#include "mg.h"
562#include "scope.h"
8d063cd8 563
450a55e4 564#if defined(iAPX286) || defined(M_I286) || defined(I80286)
a687059c
LW
565# define I286
566#endif
567
352d5a3a 568#ifndef STANDARD_C
79072805
LW
569# ifdef CHARSPRINTF
570 char *sprintf P((char *, ...));
571# else
572 int sprintf P((char *, ...));
573# endif
a687059c
LW
574#endif
575
fe14fcc3
LW
576#if defined(htonl) && !defined(HAS_HTONL)
577#define HAS_HTONL
ae986130 578#endif
fe14fcc3
LW
579#if defined(htons) && !defined(HAS_HTONS)
580#define HAS_HTONS
ae986130 581#endif
fe14fcc3
LW
582#if defined(ntohl) && !defined(HAS_NTOHL)
583#define HAS_NTOHL
ae986130 584#endif
fe14fcc3
LW
585#if defined(ntohs) && !defined(HAS_NTOHS)
586#define HAS_NTOHS
ae986130 587#endif
fe14fcc3 588#ifndef HAS_HTONL
d9d8d8de 589#if (BYTEORDER & 0xffff) != 0x4321
fe14fcc3
LW
590#define HAS_HTONS
591#define HAS_HTONL
592#define HAS_NTOHS
593#define HAS_NTOHL
a687059c
LW
594#define MYSWAP
595#define htons my_swap
596#define htonl my_htonl
597#define ntohs my_swap
598#define ntohl my_ntohl
599#endif
600#else
d9d8d8de 601#if (BYTEORDER & 0xffff) == 0x4321
fe14fcc3
LW
602#undef HAS_HTONS
603#undef HAS_HTONL
604#undef HAS_NTOHS
605#undef HAS_NTOHL
a687059c
LW
606#endif
607#endif
608
988174c1
LW
609/*
610 * Little-endian byte order functions - 'v' for 'VAX', or 'reVerse'.
611 * -DWS
612 */
613#if BYTEORDER != 0x1234
614# define HAS_VTOHL
615# define HAS_VTOHS
616# define HAS_HTOVL
617# define HAS_HTOVS
618# if BYTEORDER == 0x4321
619# define vtohl(x) ((((x)&0xFF)<<24) \
620 +(((x)>>24)&0xFF) \
621 +(((x)&0x0000FF00)<<8) \
622 +(((x)&0x00FF0000)>>8) )
623# define vtohs(x) ((((x)&0xFF)<<8) + (((x)>>8)&0xFF))
624# define htovl(x) vtohl(x)
625# define htovs(x) vtohs(x)
626# endif
627 /* otherwise default to functions in util.c */
628#endif
629
0f85fab0 630#ifdef CASTNEGFLOAT
79072805 631#define U_S(what) ((U16)(what))
0f85fab0 632#define U_I(what) ((unsigned int)(what))
79072805 633#define U_L(what) ((U32)(what))
0f85fab0 634#else
79072805
LW
635U32 cast_ulong P((double));
636#define U_S(what) ((U16)cast_ulong(what))
637#define U_I(what) ((unsigned int)cast_ulong(what))
638#define U_L(what) (cast_ulong(what))
ee0007ab
LW
639#endif
640
ed6116ce
LW
641#ifdef CASTI32
642#define I_32(what) ((I32)(what))
643#else
644I32 cast_i32 P((double));
645#define I_32(what) (cast_i32(what))
646#endif
647
79072805
LW
648struct Outrec {
649 I32 o_lines;
d9d8d8de 650 char *o_str;
79072805 651 U32 o_len;
8d063cd8
LW
652};
653
352d5a3a
LW
654#ifndef MAXSYSFD
655# define MAXSYSFD 2
656#endif
ee0007ab
LW
657
658#ifndef DOSISH
378cc40b 659#define TMPPATH "/tmp/perl-eXXXXXX"
450a55e4 660#else
57ebbfd0 661#define TMPPATH "plXXXXXX"
450a55e4 662#endif /* MSDOS */
79072805
LW
663
664#ifndef __cplusplus
665UIDTYPE getuid P(());
666UIDTYPE geteuid P(());
667GIDTYPE getgid P(());
668GIDTYPE getegid P(());
669#endif
8d063cd8
LW
670
671#ifdef DEBUGGING
d96024cf 672#define YYDEBUG 1
79072805
LW
673#define DEB(a) a
674#define DEBUG(a) if (debug) a
675#define DEBUG_p(a) if (debug & 1) a
676#define DEBUG_s(a) if (debug & 2) a
677#define DEBUG_l(a) if (debug & 4) a
678#define DEBUG_t(a) if (debug & 8) a
679#define DEBUG_o(a) if (debug & 16) a
680#define DEBUG_c(a) if (debug & 32) a
681#define DEBUG_P(a) if (debug & 64) a
682#define DEBUG_m(a) if (debug & 128) a
683#define DEBUG_f(a) if (debug & 256) a
684#define DEBUG_r(a) if (debug & 512) a
685#define DEBUG_x(a) if (debug & 1024) a
686#define DEBUG_u(a) if (debug & 2048) a
687#define DEBUG_L(a) if (debug & 4096) a
688#define DEBUG_H(a) if (debug & 8192) a
689#define DEBUG_X(a) if (debug & 16384) a
690#else
691#define DEB(a)
692#define DEBUG(a)
693#define DEBUG_p(a)
694#define DEBUG_s(a)
695#define DEBUG_l(a)
696#define DEBUG_t(a)
697#define DEBUG_o(a)
698#define DEBUG_c(a)
699#define DEBUG_P(a)
700#define DEBUG_m(a)
701#define DEBUG_f(a)
702#define DEBUG_r(a)
703#define DEBUG_x(a)
704#define DEBUG_u(a)
705#define DEBUG_L(a)
706#define DEBUG_H(a)
707#define DEBUG_X(a)
8d063cd8 708#endif
fe14fcc3 709#define YYMAXDEPTH 300
8d063cd8 710
79072805
LW
711#define assert(what) DEB( { \
712 if (!(what)) { \
463ee0b2 713 croak("Assertion failed: file \"%s\", line %d", \
79072805
LW
714 __FILE__, __LINE__); \
715 exit(1); \
716 }})
8d063cd8 717
450a55e4 718struct ufuncs {
79072805
LW
719 I32 (*uf_val)P((I32, SV*));
720 I32 (*uf_set)P((I32, SV*));
721 I32 uf_index;
450a55e4
LW
722};
723
fe14fcc3 724/* Fix these up for __STDC__ */
79072805
LW
725char *mktemp P((char*));
726double atof P((const char*));
727
352d5a3a 728#ifndef STANDARD_C
fe14fcc3 729/* All of these are in stdlib.h or time.h for ANSI C */
a687059c 730long time();
8d063cd8 731struct tm *gmtime(), *localtime();
93a17b20 732char *strchr(), *strrchr();
378cc40b 733char *strcpy(), *strcat();
352d5a3a 734#endif /* ! STANDARD_C */
8d063cd8 735
79072805
LW
736
737#ifdef I_MATH
738# include <math.h>
739#else
740# ifdef __cplusplus
741 extern "C" {
742# endif
743 double exp P((double));
744 double log P((double));
745 double sqrt P((double));
746 double modf P((double,int*));
747 double sin P((double));
748 double cos P((double));
749 double atan2 P((double,double));
750 double pow P((double,double));
751# ifdef __cplusplus
752 };
753# endif
754#endif
755
756
757char *crypt P((const char*, const char*));
758char *getenv P((const char*));
759long lseek P((int,int,int));
760char *getlogin P((void));
761
8d063cd8 762#ifdef EUNICE
378cc40b 763#define UNLINK unlnk
79072805 764int unlnk P((char*));
8d063cd8
LW
765#else
766#define UNLINK unlink
767#endif
a687059c 768
fe14fcc3
LW
769#ifndef HAS_SETREUID
770#ifdef HAS_SETRESUID
a687059c 771#define setreuid(r,e) setresuid(r,e,-1)
fe14fcc3 772#define HAS_SETREUID
a687059c
LW
773#endif
774#endif
fe14fcc3
LW
775#ifndef HAS_SETREGID
776#ifdef HAS_SETRESGID
a687059c 777#define setregid(r,e) setresgid(r,e,-1)
fe14fcc3 778#define HAS_SETREGID
a687059c
LW
779#endif
780#endif
ee0007ab
LW
781
782#define SCAN_DEF 0
783#define SCAN_TR 1
784#define SCAN_REPL 2
79072805
LW
785
786#ifdef DEBUGGING
787#define PAD_SV(po) pad_sv(po)
788#else
789#define PAD_SV(po) curpad[po]
790#endif
791
792/****************/
793/* Truly global */
794/****************/
795
796/* global state */
93a17b20 797EXT PerlInterpreter *curinterp; /* currently running interpreter */
79072805
LW
798extern char ** environ; /* environment variables supplied via exec */
799EXT int uid; /* current real user id */
800EXT int euid; /* current effective user id */
801EXT int gid; /* current real group id */
802EXT int egid; /* current effective group id */
803EXT bool nomemok; /* let malloc context handle nomem */
804EXT U32 an; /* malloc sequence number */
463ee0b2
LW
805EXT U32 cop_seqmax; /* statement sequence number */
806EXT U32 op_seqmax; /* op sequence number */
807EXT U32 sub_generation; /* inc to force methods to be looked up again */
79072805
LW
808EXT char ** origenviron;
809EXT U32 origalen;
810
811/* Stack for currently executing thread--context switch must handle this. */
812EXT SV ** stack_base; /* stack->array_ary */
813EXT SV ** stack_sp; /* stack pointer now */
814EXT SV ** stack_max; /* stack->array_ary + stack->array_max */
815
816/* likewise for these */
817
818EXT OP * op; /* current op--oughta be in a global register */
819
820EXT I32 * scopestack; /* blocks we've entered */
821EXT I32 scopestack_ix;
822EXT I32 scopestack_max;
823
824EXT ANY* savestack; /* to save non-local values on */
825EXT I32 savestack_ix;
826EXT I32 savestack_max;
827
828EXT OP ** retstack; /* returns we've pushed */
829EXT I32 retstack_ix;
830EXT I32 retstack_max;
831
832EXT I32 * markstack; /* stackmarks we're remembering */
833EXT I32 * markstack_ptr; /* stackmarks we're remembering */
834EXT I32 * markstack_max; /* stackmarks we're remembering */
835
836EXT SV ** curpad;
837
838/* temp space */
839EXT SV * Sv;
840EXT XPV * Xpv;
841EXT char buf[1024];
842EXT char tokenbuf[256];
843EXT struct stat statbuf;
844#ifndef MSDOS
845EXT struct tms timesbuf;
846#endif
463ee0b2 847EXT STRLEN na; /* for use in SvPV when length is Not Applicable */
79072805
LW
848
849/* for tmp use in stupid debuggers */
850EXT int * di;
851EXT short * ds;
852EXT char * dc;
853
854/* handy constants */
855EXT char * Yes INIT("1");
856EXT char * No INIT("");
857EXT char * hexdigit INIT("0123456789abcdef0123456789ABCDEFx");
79072805
LW
858EXT char * patleave INIT("\\.^$@dDwWsSbB+*?|()-nrtfeaxc0123456789[{]}");
859EXT char * vert INIT("|");
860
463ee0b2
LW
861EXT char warn_nosemi[]
862 INIT("Semicolon seems to be missing");
863EXT char warn_reserved[]
864 INIT("Unquoted string \"%s\" may clash with future reserved word");
865EXT char warn_nl[]
93a17b20
LW
866 INIT("Unsuccessful %s on filename containing newline");
867EXT char no_usym[]
868 INIT("Can't use an undefined value to create a symbol");
869EXT char no_aelem[]
870 INIT("Modification of non-creatable array value attempted, subscript %d");
871EXT char no_helem[]
872 INIT("Modification of non-creatable hash value attempted, subscript \"%s\"");
873EXT char no_modify[]
874 INIT("Modification of a read-only value attempted");
875EXT char no_mem[]
876 INIT("Out of memory!\n");
877EXT char no_security[]
463ee0b2 878 INIT("Insecure dependency in %s%s");
93a17b20
LW
879EXT char no_sock_func[]
880 INIT("Unsupported socket function \"%s\" called");
881EXT char no_dir_func[]
882 INIT("Unsupported directory function \"%s\" called");
883EXT char no_func[]
884 INIT("The %s function is unimplemented");
885
79072805
LW
886EXT SV sv_undef;
887EXT SV sv_no;
888EXT SV sv_yes;
889#ifdef CSH
890 EXT char * cshname INIT(CSH);
891 EXT I32 cshlen;
892#endif
893
894#ifdef DOINIT
895EXT char *sig_name[] = {
896 SIG_NAME,0
897};
898#else
899EXT char *sig_name[];
900#endif
901
902#ifdef DOINIT
79072805
LW
903EXT unsigned char fold[] = { /* fast case folding table */
904 0, 1, 2, 3, 4, 5, 6, 7,
905 8, 9, 10, 11, 12, 13, 14, 15,
906 16, 17, 18, 19, 20, 21, 22, 23,
907 24, 25, 26, 27, 28, 29, 30, 31,
908 32, 33, 34, 35, 36, 37, 38, 39,
909 40, 41, 42, 43, 44, 45, 46, 47,
910 48, 49, 50, 51, 52, 53, 54, 55,
911 56, 57, 58, 59, 60, 61, 62, 63,
912 64, 'a', 'b', 'c', 'd', 'e', 'f', 'g',
913 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
914 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
915 'x', 'y', 'z', 91, 92, 93, 94, 95,
916 96, 'A', 'B', 'C', 'D', 'E', 'F', 'G',
917 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
918 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
919 'X', 'Y', 'Z', 123, 124, 125, 126, 127,
920 128, 129, 130, 131, 132, 133, 134, 135,
921 136, 137, 138, 139, 140, 141, 142, 143,
922 144, 145, 146, 147, 148, 149, 150, 151,
923 152, 153, 154, 155, 156, 157, 158, 159,
924 160, 161, 162, 163, 164, 165, 166, 167,
925 168, 169, 170, 171, 172, 173, 174, 175,
926 176, 177, 178, 179, 180, 181, 182, 183,
927 184, 185, 186, 187, 188, 189, 190, 191,
928 192, 193, 194, 195, 196, 197, 198, 199,
929 200, 201, 202, 203, 204, 205, 206, 207,
930 208, 209, 210, 211, 212, 213, 214, 215,
931 216, 217, 218, 219, 220, 221, 222, 223,
932 224, 225, 226, 227, 228, 229, 230, 231,
933 232, 233, 234, 235, 236, 237, 238, 239,
934 240, 241, 242, 243, 244, 245, 246, 247,
935 248, 249, 250, 251, 252, 253, 254, 255
936};
937#else
938EXT unsigned char fold[];
939#endif
940
941#ifdef DOINIT
942EXT unsigned char freq[] = { /* letter frequencies for mixed English/C */
943 1, 2, 84, 151, 154, 155, 156, 157,
944 165, 246, 250, 3, 158, 7, 18, 29,
945 40, 51, 62, 73, 85, 96, 107, 118,
946 129, 140, 147, 148, 149, 150, 152, 153,
947 255, 182, 224, 205, 174, 176, 180, 217,
948 233, 232, 236, 187, 235, 228, 234, 226,
949 222, 219, 211, 195, 188, 193, 185, 184,
950 191, 183, 201, 229, 181, 220, 194, 162,
951 163, 208, 186, 202, 200, 218, 198, 179,
952 178, 214, 166, 170, 207, 199, 209, 206,
953 204, 160, 212, 216, 215, 192, 175, 173,
954 243, 172, 161, 190, 203, 189, 164, 230,
955 167, 248, 227, 244, 242, 255, 241, 231,
956 240, 253, 169, 210, 245, 237, 249, 247,
957 239, 168, 252, 251, 254, 238, 223, 221,
958 213, 225, 177, 197, 171, 196, 159, 4,
959 5, 6, 8, 9, 10, 11, 12, 13,
960 14, 15, 16, 17, 19, 20, 21, 22,
961 23, 24, 25, 26, 27, 28, 30, 31,
962 32, 33, 34, 35, 36, 37, 38, 39,
963 41, 42, 43, 44, 45, 46, 47, 48,
964 49, 50, 52, 53, 54, 55, 56, 57,
965 58, 59, 60, 61, 63, 64, 65, 66,
966 67, 68, 69, 70, 71, 72, 74, 75,
967 76, 77, 78, 79, 80, 81, 82, 83,
968 86, 87, 88, 89, 90, 91, 92, 93,
969 94, 95, 97, 98, 99, 100, 101, 102,
970 103, 104, 105, 106, 108, 109, 110, 111,
971 112, 113, 114, 115, 116, 117, 119, 120,
972 121, 122, 123, 124, 125, 126, 127, 128,
973 130, 131, 132, 133, 134, 135, 136, 137,
974 138, 139, 141, 142, 143, 144, 145, 146
975};
976#else
977EXT unsigned char freq[];
978#endif
979
980/*****************************************************************************/
981/* This lexer/parser stuff is currently global since yacc is hard to reenter */
982/*****************************************************************************/
983
984typedef enum {
985 XOPERATOR,
986 XTERM,
987 XBLOCK,
988 XREF,
989} expectation;
990
991EXT FILE * VOL rsfp INIT(Nullfp);
992EXT SV * linestr;
993EXT char * bufptr;
994EXT char * oldbufptr;
995EXT char * oldoldbufptr;
996EXT char * bufend;
997EXT expectation expect INIT(XBLOCK); /* how to interpret ambiguous tokens */
998
999EXT I32 multi_start; /* 1st line of multi-line string */
1000EXT I32 multi_end; /* last line of multi-line string */
1001EXT I32 multi_open; /* delimiter of said string */
1002EXT I32 multi_close; /* delimiter of said string */
1003
1004EXT GV * scrgv;
1005EXT I32 error_count; /* how many errors so far, max 10 */
1006EXT I32 subline; /* line this subroutine began on */
1007EXT SV * subname; /* name of current subroutine */
1008
93a17b20
LW
1009EXT AV * comppad; /* storage for lexically scoped temporaries */
1010EXT AV * comppadname; /* variable names for "my" variables */
1011EXT I32 comppadnamefill;/* last "introduced" variable offset */
79072805
LW
1012EXT I32 padix; /* max used index in current "register" pad */
1013EXT COP compiling;
1014
1015EXT SV * evstr; /* op_fold_const() temp string cache */
1016EXT I32 thisexpr; /* name id for nothing_in_common() */
1017EXT char * last_uni; /* position of last named-unary operator */
1018EXT char * last_lop; /* position of last list operator */
1019EXT bool in_format; /* we're compiling a run_format */
93a17b20 1020EXT bool in_my; /* we're compiling a "my" declaration */
463ee0b2 1021EXT I32 needblockscope INIT(TRUE); /* block overhead needed? */
79072805
LW
1022#ifdef FCRYPT
1023EXT I32 cryptseen; /* has fast crypt() been initialized? */
1024#endif
1025
1026/**************************************************************************/
1027/* This regexp stuff is global since it always happens within 1 expr eval */
1028/**************************************************************************/
1029
1030EXT char * regprecomp; /* uncompiled string. */
1031EXT char * regparse; /* Input-scan pointer. */
1032EXT char * regxend; /* End of input for compile */
1033EXT I32 regnpar; /* () count. */
1034EXT char * regcode; /* Code-emit pointer; &regdummy = don't. */
1035EXT I32 regsize; /* Code size. */
1036EXT I32 regfold; /* are we folding? */
1037EXT I32 regsawbracket; /* Did we do {d,d} trick? */
1038EXT I32 regsawback; /* Did we see \1, ...? */
1039
1040EXT char * reginput; /* String-input pointer. */
1041EXT char regprev; /* char before regbol, \n if none */
1042EXT char * regbol; /* Beginning of input, for ^ check. */
1043EXT char * regeol; /* End of input, for $ check. */
1044EXT char ** regstartp; /* Pointer to startp array. */
1045EXT char ** regendp; /* Ditto for endp. */
1046EXT char * reglastparen; /* Similarly for lastparen. */
1047EXT char * regtill; /* How far we are required to go. */
1048EXT I32 regmyp_size;
1049EXT char ** regmystartp;
1050EXT char ** regmyendp;
1051
1052/***********************************************/
1053/* Global only to current interpreter instance */
1054/***********************************************/
1055
1056#ifdef EMBEDDED
1057#define IEXT
1058#define IINIT(x)
1059struct interpreter {
1060#else
1061#define IEXT EXT
1062#define IINIT(x) INIT(x)
1063#endif
1064
1065/* pseudo environmental stuff */
1066IEXT int Iorigargc;
1067IEXT char ** Iorigargv;
1068IEXT GV * Ienvgv;
1069IEXT GV * Isiggv;
1070IEXT GV * Iincgv;
1071IEXT char * Iorigfilename;
1072
1073/* switches */
1074IEXT char * Icddir;
1075IEXT bool Iminus_c;
1076IEXT char Ipatchlevel[6];
1077IEXT char * Inrs IINIT("\n");
1078IEXT U32 Inrschar IINIT('\n'); /* final char of rs, or 0777 if none */
1079IEXT I32 Inrslen IINIT(1);
1080IEXT bool Ipreprocess;
1081IEXT bool Iminus_n;
1082IEXT bool Iminus_p;
1083IEXT bool Iminus_l;
1084IEXT bool Iminus_a;
1085IEXT bool Idoswitches;
1086IEXT bool Idowarn;
1087IEXT bool Idoextract;
79072805
LW
1088IEXT bool Isawampersand; /* must save all match strings */
1089IEXT bool Isawstudy; /* do fbm_instr on all strings */
1090IEXT bool Isawi; /* study must assume case insensitive */
1091IEXT bool Isawvec;
1092IEXT bool Iunsafe;
1093IEXT bool Ido_undump; /* -u or dump seen? */
1094IEXT char * Iinplace;
1095IEXT char * Ie_tmpname;
1096IEXT FILE * Ie_fp;
1097IEXT VOL U32 Idebug;
1098IEXT U32 Iperldb;
1099
1100/* magical thingies */
1101IEXT time_t Ibasetime; /* $^T */
1102IEXT I32 Iarybase; /* $[ */
1103IEXT SV * Iformfeed; /* $^L */
1104IEXT char * Ichopset IINIT(" \n-"); /* $: */
1105IEXT char * Irs IINIT("\n"); /* $/ */
1106IEXT U32 Irschar IINIT('\n'); /* final char of rs, or 0777 if none */
1107IEXT I32 Irslen IINIT(1);
1108IEXT bool Irspara;
1109IEXT char * Iofs; /* $, */
1110IEXT I32 Iofslen;
1111IEXT char * Iors; /* $\ */
1112IEXT I32 Iorslen;
1113IEXT char * Iofmt; /* $# */
1114IEXT I32 Imaxsysfd IINIT(MAXSYSFD); /* top fd to pass to subprocesses */
1115IEXT int Imultiline; /* $*--do strings hold >1 line? */
1116IEXT U16 Istatusvalue; /* $? */
1117
1118IEXT struct stat Istatcache; /* _ */
1119IEXT GV * Istatgv;
1120IEXT SV * Istatname IINIT(Nullsv);
1121
1122/* shortcuts to various I/O objects */
1123IEXT GV * Istdingv;
1124IEXT GV * Ilast_in_gv;
1125IEXT GV * Idefgv;
1126IEXT GV * Iargvgv;
1127IEXT GV * Idefoutgv;
1128IEXT GV * Icuroutgv;
1129IEXT GV * Iargvoutgv;
1130
1131/* shortcuts to regexp stuff */
1132IEXT GV * Ileftgv;
1133IEXT GV * Iampergv;
1134IEXT GV * Irightgv;
1135IEXT PMOP * Icurpm; /* what to do \ interps from */
79072805
LW
1136IEXT I32 * Iscreamfirst;
1137IEXT I32 * Iscreamnext;
1138IEXT I32 Imaxscream IINIT(-1);
1139IEXT SV * Ilastscream;
1140
1141/* shortcuts to debugging objects */
1142IEXT GV * IDBgv;
1143IEXT GV * IDBline;
1144IEXT GV * IDBsub;
1145IEXT SV * IDBsingle;
1146IEXT SV * IDBtrace;
1147IEXT SV * IDBsignal;
1148IEXT AV * Ilineary; /* lines of script for debugger */
1149IEXT AV * Idbargs; /* args to call listed by caller function */
1150
1151/* symbol tables */
1152IEXT HV * Idefstash; /* main symbol table */
1153IEXT HV * Icurstash; /* symbol table for current package */
1154IEXT HV * Idebstash; /* symbol table for perldb package */
1155IEXT SV * Icurstname; /* name of current package */
93a17b20
LW
1156IEXT AV * Ibeginav; /* names of BEGIN subroutines */
1157IEXT AV * Iendav; /* names of END subroutines */
1158IEXT AV * Ipad; /* storage for lexically scoped temporaries */
1159IEXT AV * Ipadname; /* variable names for "my" variables */
79072805
LW
1160
1161/* memory management */
1162IEXT SV * Ifreestrroot;
1163IEXT SV ** Itmps_stack;
1164IEXT I32 Itmps_ix IINIT(-1);
1165IEXT I32 Itmps_floor IINIT(-1);
1166IEXT I32 Itmps_max IINIT(-1);
1167
1168/* funky return mechanisms */
1169IEXT I32 Ilastspbase;
1170IEXT I32 Ilastsize;
1171IEXT int Iforkprocess; /* so do_open |- can return proc# */
1172
1173/* subprocess state */
1174IEXT AV * Ifdpid; /* keep fd-to-pid mappings for my_popen */
1175IEXT HV * Ipidstatus; /* keep pid-to-status mappings for waitpid */
1176
1177/* internal state */
463ee0b2
LW
1178IEXT VOL int Iin_eval; /* trap "fatal" errors? */
1179IEXT OP * Irestartop; /* Are we propagating an error from croak? */
79072805
LW
1180IEXT int Idelaymagic; /* ($<,$>) = ... */
1181IEXT bool Idirty; /* clean before rerunning */
1182IEXT bool Ilocalizing; /* are we processing a local() list? */
79072805 1183IEXT bool Itainted; /* using variables controlled by $< */
463ee0b2 1184IEXT bool Itainting; /* doing taint checks */
79072805
LW
1185
1186/* trace state */
1187IEXT I32 Idlevel;
1188IEXT I32 Idlmax IINIT(128);
1189IEXT char * Idebname;
1190IEXT char * Idebdelim;
1191
1192/* current interpreter roots */
463ee0b2
LW
1193IEXT OP * Imain_root;
1194IEXT OP * Imain_start;
1195IEXT OP * Ieval_root;
1196IEXT OP * Ieval_start;
79072805
LW
1197
1198/* runtime control stuff */
1199IEXT COP * VOL Icurcop IINIT(&compiling);
1200IEXT line_t Icopline IINIT(NOLINE);
1201IEXT CONTEXT * Icxstack;
1202IEXT I32 Icxstack_ix IINIT(-1);
1203IEXT I32 Icxstack_max IINIT(128);
1204IEXT jmp_buf Itop_env;
1205
1206/* stack stuff */
1207IEXT AV * Istack; /* THE STACK */
1208IEXT AV * Imainstack; /* the stack when nothing funny is happening */
1209IEXT SV ** Imystack_base; /* stack->array_ary */
1210IEXT SV ** Imystack_sp; /* stack pointer now */
1211IEXT SV ** Imystack_max; /* stack->array_ary + stack->array_max */
1212
1213/* format accumulators */
463ee0b2
LW
1214IEXT SV * Iformtarget;
1215IEXT SV * Ibodytarget;
1216IEXT SV * Itoptarget;
79072805
LW
1217
1218/* statics moved here for shared library purposes */
93a17b20 1219IEXT SV Istrchop; /* return value from chop */
79072805
LW
1220IEXT int Ifilemode; /* so nextargv() can preserve mode */
1221IEXT int Ilastfd; /* what to preserve mode on */
1222IEXT char * Ioldname; /* what to preserve mode on */
1223IEXT char ** IArgv; /* stuff to free from do_aexec, vfork safe */
1224IEXT char * ICmd; /* stuff to free from do_aexec, vfork safe */
1225IEXT OP * Isortcop; /* user defined sort routine */
1226IEXT HV * Isortstash; /* which is in some package or other */
1227IEXT GV * Ifirstgv; /* $a */
1228IEXT GV * Isecondgv; /* $b */
1229IEXT AV * Isortstack; /* temp stack during pp_sort() */
1230IEXT AV * Isignalstack; /* temp stack during sighandler() */
1231IEXT SV * Imystrk; /* temp key string for do_each() */
1232IEXT I32 Idumplvl; /* indentation level on syntax tree dump */
79072805
LW
1233IEXT PMOP * Ioldlastpm; /* for saving regexp context during debugger */
1234IEXT I32 Igensym; /* next symbol for getsym() to define */
1235IEXT bool Ipreambled;
1236IEXT int Ilaststatval IINIT(-1);
1237IEXT I32 Ilaststype IINIT(OP_STAT);
1238
1239#undef IEXT
1240#undef IINIT
1241
1242#ifdef EMBEDDED
1243};
1244#else
1245struct interpreter {
1246 char broiled;
1247};
1248#endif
1249
1250#include "pp.h"
1251
1252#ifdef __cplusplus
1253extern "C" {
1254#endif
1255
1256#include "proto.h"
1257
1258#ifdef __cplusplus
1259};
1260#endif
1261
93a17b20 1262/* The following must follow proto.h */
79072805
LW
1263
1264#ifdef DOINIT
463ee0b2
LW
1265MGVTBL vtbl_sv = {magic_get,
1266 magic_set,
1267 magic_len,
1268 0, 0};
1269MGVTBL vtbl_env = {0, 0, 0, 0, 0};
1270MGVTBL vtbl_envelem = {0, magic_setenv,
1271 0, 0, 0};
1272MGVTBL vtbl_sig = {0, 0, 0, 0, 0};
1273MGVTBL vtbl_sigelem = {0, magic_setsig,
1274 0, 0, 0};
1275MGVTBL vtbl_pack = {0, 0,
1276 0, 0, 0};
1277MGVTBL vtbl_packelem = {magic_getpack,
1278 magic_setpack,
1279 0, magic_clearpack,
1280 0};
1281MGVTBL vtbl_dbline = {0, magic_setdbline,
1282 0, 0, 0};
1283MGVTBL vtbl_isa = {0, magic_setisa,
1284 0, 0, 0};
1285MGVTBL vtbl_isaelem = {0, magic_setisa,
1286 0, 0, 0};
1287MGVTBL vtbl_arylen = {magic_getarylen,
1288 magic_setarylen,
1289 0, 0, 0};
1290MGVTBL vtbl_glob = {magic_getglob,
1291 magic_setglob,
1292 0, 0, 0};
1293MGVTBL vtbl_mglob = {0, magic_setmglob,
1294 0, 0, 0};
1295MGVTBL vtbl_taint = {magic_gettaint,magic_settaint,
1296 0, 0, 0};
1297MGVTBL vtbl_substr = {0, magic_setsubstr,
1298 0, 0, 0};
1299MGVTBL vtbl_vec = {0, magic_setvec,
1300 0, 0, 0};
1301MGVTBL vtbl_bm = {0, magic_setbm,
1302 0, 0, 0};
1303MGVTBL vtbl_uvar = {magic_getuvar,
1304 magic_setuvar,
1305 0, 0, 0};
79072805
LW
1306#else
1307EXT MGVTBL vtbl_sv;
1308EXT MGVTBL vtbl_env;
1309EXT MGVTBL vtbl_envelem;
1310EXT MGVTBL vtbl_sig;
1311EXT MGVTBL vtbl_sigelem;
463ee0b2
LW
1312EXT MGVTBL vtbl_pack;
1313EXT MGVTBL vtbl_packelem;
79072805 1314EXT MGVTBL vtbl_dbline;
463ee0b2
LW
1315EXT MGVTBL vtbl_isa;
1316EXT MGVTBL vtbl_isaelem;
79072805
LW
1317EXT MGVTBL vtbl_arylen;
1318EXT MGVTBL vtbl_glob;
93a17b20 1319EXT MGVTBL vtbl_mglob;
463ee0b2 1320EXT MGVTBL vtbl_taint;
79072805
LW
1321EXT MGVTBL vtbl_substr;
1322EXT MGVTBL vtbl_vec;
1323EXT MGVTBL vtbl_bm;
1324EXT MGVTBL vtbl_uvar;
1325#endif