Incorporate a large list of corrections and updates to module versions
[perl.git] / intrpvar.h
1 /*   intrpvar.h 
2  *
3  *    Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
4  *    2006, 2007, 2008 by Larry Wall and others
5  *
6  *    You may distribute under the terms of either the GNU General Public
7  *    License or the Artistic License, as specified in the README file.
8  *
9  */
10
11 /***********************************************/
12 /* Global only to current interpreter instance */
13 /***********************************************/
14
15 /* Don't forget to re-run embed.pl to propagate changes! */
16
17 /* New variables must be added to the very end for binary compatibility.
18  * XSUB.h provides wrapper functions via perlapi.h that make this
19  * irrelevant, but not all code may be expected to #include XSUB.h. */
20
21 /* Don't forget to add your variable also to perl_clone()! */
22
23 /* The 'I' prefix is only needed for vars that need appropriate #defines
24  * generated when built with or without MULTIPLICITY.  It is also used
25  * to generate the appropriate export list for win32.
26  *
27  * When building without MULTIPLICITY, these variables will be truly global. */
28
29 /* pseudo environmental stuff */
30 PERLVAR(Iorigargc,      int)
31 PERLVAR(Iorigargv,      char **)
32 PERLVAR(Ienvgv,         GV *)
33 PERLVAR(Iincgv,         GV *)
34 PERLVAR(Ihintgv,        GV *)
35 PERLVAR(Iorigfilename,  char *)
36 PERLVAR(Idiehook,       SV *)
37 PERLVAR(Iwarnhook,      SV *)
38
39 /* switches */
40 PERLVAR(Iminus_c,       bool)
41 PERLVAR(Ipatchlevel,    SV *)
42 PERLVAR(Ilocalpatches,  char **)
43 PERLVARI(Isplitstr,     const char *, " ")
44 PERLVAR(Ipreprocess,    bool)
45 PERLVAR(Iminus_n,       bool)
46 PERLVAR(Iminus_p,       bool)
47 PERLVAR(Iminus_l,       bool)
48 PERLVAR(Iminus_a,       bool)
49 PERLVAR(Iminus_F,       bool)
50 PERLVAR(Idoswitches,    bool)
51
52 /*
53 =head1 Global Variables
54
55 =for apidoc mn|bool|PL_dowarn
56
57 The C variable which corresponds to Perl's $^W warning variable.
58
59 =cut
60 */
61
62 PERLVAR(Idowarn,        U8)
63 PERLVAR(Iwidesyscalls,  bool)           /* unused since 5.8.1 */
64 PERLVAR(Idoextract,     bool)
65 PERLVAR(Isawampersand,  bool)           /* must save all match strings */
66 PERLVAR(Iunsafe,        bool)
67 PERLVAR(Iinplace,       char *)
68 PERLVAR(Ie_script,      SV *)
69 PERLVAR(Iperldb,        U32)
70
71 /* This value may be set when embedding for full cleanup  */
72 /* 0=none, 1=full, 2=full with checks */
73 PERLVARI(Iperl_destruct_level,  int,    0)
74
75 /* magical thingies */
76 PERLVAR(Ibasetime,      Time_t)         /* $^T */
77 PERLVAR(Iformfeed,      SV *)           /* $^L */
78
79
80 PERLVARI(Imaxsysfd,     I32,    MAXSYSFD)
81                                         /* top fd to pass to subprocesses */
82 PERLVAR(Imultiline,     int)            /* $*--do strings hold >1 line? */
83 PERLVAR(Istatusvalue,   I32)            /* $? */
84 PERLVAR(Iexit_flags,    U8)             /* was exit() unexpected, etc. */
85 #ifdef VMS
86 PERLVAR(Istatusvalue_vms,U32)
87 #else
88 PERLVAR(Istatusvalue_posix,I32)
89 #endif
90
91 /* shortcuts to various I/O objects */
92 PERLVAR(Istdingv,       GV *)
93 PERLVAR(Istderrgv,      GV *)
94 PERLVAR(Idefgv,         GV *)
95 PERLVAR(Iargvgv,        GV *)
96 PERLVAR(Iargvoutgv,     GV *)
97 PERLVAR(Iargvout_stack, AV *)
98
99 /* shortcuts to regexp stuff */
100 /* this one needs to be moved to thrdvar.h and accessed via
101  * find_threadsv() when USE_5005THREADS */
102 PERLVAR(Ireplgv,        GV *)
103
104 /* shortcuts to misc objects */
105 PERLVAR(Ierrgv,         GV *)
106
107 /* shortcuts to debugging objects */
108 PERLVAR(IDBgv,          GV *)
109 PERLVAR(IDBline,        GV *)
110
111 /*
112 =for apidoc mn|GV *|PL_DBsub
113 When Perl is run in debugging mode, with the B<-d> switch, this GV contains
114 the SV which holds the name of the sub being debugged.  This is the C
115 variable which corresponds to Perl's $DB::sub variable.  See
116 C<PL_DBsingle>.
117
118 =for apidoc mn|SV *|PL_DBsingle
119 When Perl is run in debugging mode, with the B<-d> switch, this SV is a
120 boolean which indicates whether subs are being single-stepped.
121 Single-stepping is automatically turned on after every step.  This is the C
122 variable which corresponds to Perl's $DB::single variable.  See
123 C<PL_DBsub>.
124
125 =for apidoc mn|SV *|PL_DBtrace
126 Trace variable used when Perl is run in debugging mode, with the B<-d>
127 switch.  This is the C variable which corresponds to Perl's $DB::trace
128 variable.  See C<PL_DBsingle>.
129
130 =cut
131 */
132
133 PERLVAR(IDBsub,         GV *)
134 PERLVAR(IDBsingle,      SV *)
135 PERLVAR(IDBtrace,       SV *)
136 PERLVAR(IDBsignal,      SV *)
137 PERLVAR(Ilineary,       AV *)           /* lines of script for debugger */
138 PERLVAR(Idbargs,        AV *)           /* args to call listed by caller function */
139
140 /* symbol tables */
141 PERLVAR(Idebstash,      HV *)           /* symbol table for perldb package */
142 PERLVAR(Iglobalstash,   HV *)           /* global keyword overrides imported here */
143 PERLVAR(Icurstname,     SV *)           /* name of current package */
144 PERLVAR(Ibeginav,       AV *)           /* names of BEGIN subroutines */
145 PERLVAR(Iendav,         AV *)           /* names of END subroutines */
146 PERLVAR(Icheckav,       AV *)           /* names of CHECK subroutines */
147 PERLVAR(Iinitav,        AV *)           /* names of INIT subroutines */
148 PERLVAR(Istrtab,        HV *)           /* shared string table */
149 PERLVARI(Isub_generation,U32,1)         /* incr to invalidate method cache */
150
151 /* memory management */
152 PERLVAR(Isv_count,      I32)            /* how many SV* are currently allocated */
153 PERLVAR(Isv_objcount,   I32)            /* how many objects are currently allocated */
154 PERLVAR(Isv_root,       SV*)            /* storage for SVs belonging to interp */
155 PERLVAR(Isv_arenaroot,  SV*)            /* list of areas for garbage collection */
156
157 /* funky return mechanisms */
158 PERLVAR(Iforkprocess,   int)            /* so do_open |- can return proc# */
159
160 /* subprocess state */
161 PERLVAR(Ifdpid,         AV *)           /* keep fd-to-pid mappings for my_popen */
162
163 /* internal state */
164 PERLVAR(Itainting,      bool)           /* doing taint checks */
165 PERLVARI(Iop_mask,      char *, NULL)   /* masked operations for safe evals */
166
167 /* current interpreter roots */
168 PERLVAR(Imain_cv,       CV *)
169 PERLVAR(Imain_root,     OP *)
170 PERLVAR(Imain_start,    OP *)
171 PERLVAR(Ieval_root,     OP *)
172 PERLVAR(Ieval_start,    OP *)
173
174 /* runtime control stuff */
175 PERLVARI(Icurcopdb,     COP *,  NULL)
176 PERLVARI(Icopline,      line_t, NOLINE)
177
178 /* statics moved here for shared library purposes */
179 PERLVAR(Ifilemode,      int)            /* so nextargv() can preserve mode */
180 PERLVAR(Ilastfd,        int)            /* what to preserve mode on */
181 PERLVAR(Ioldname,       char *)         /* what to preserve mode on */
182 PERLVAR(IArgv,          char **)        /* stuff to free from do_aexec, vfork safe */
183 PERLVAR(ICmd,           char *)         /* stuff to free from do_aexec, vfork safe */
184 PERLVARI(Igensym,       I32,    0)      /* next symbol for getsym() to define */
185 PERLVAR(Ipreambled,     bool)
186 /* Elements in this array have ';' appended and are injected as a single line
187    into the tokeniser. You can't put any (literal) newlines into any program
188    you stuff in into this array, as the point where it's injected is expecting
189    a single physical line. */
190 PERLVAR(Ipreambleav,    AV *)
191 PERLVARI(Ilaststatval,  int,    -1)
192 PERLVARI(Ilaststype,    I32,    OP_STAT)
193 PERLVAR(Imess_sv,       SV *)
194
195 /* XXX shouldn't these be per-thread? --GSAR */
196 PERLVAR(Iors_sv,        SV *)           /* output record separator $\ */
197 PERLVAR(Iofmt,          char *)         /* output format for numbers $# */
198
199 /* interpreter atexit processing */
200 PERLVARI(Iexitlist,     PerlExitListEntry *, NULL)
201                                         /* list of exit functions */
202 PERLVARI(Iexitlistlen,  I32, 0)         /* length of same */
203
204 /*
205 =for apidoc Amn|HV*|PL_modglobal
206
207 C<PL_modglobal> is a general purpose, interpreter global HV for use by
208 extensions that need to keep information on a per-interpreter basis.
209 In a pinch, it can also be used as a symbol table for extensions
210 to share data among each other.  It is a good idea to use keys
211 prefixed by the package name of the extension that owns the data.
212
213 =cut
214 */
215
216 PERLVAR(Imodglobal,     HV *)           /* per-interp module data */
217
218 /* these used to be in global before 5.004_68 */
219 PERLVARI(Iprofiledata,  U32 *,  NULL)   /* table of ops, counts */
220 PERLVARI(Irsfp, PerlIO * VOL,   NULL)   /* current source file pointer */
221 PERLVARI(Irsfp_filters, AV *,   NULL)   /* keeps active source filters */
222
223 PERLVAR(Icompiling,     COP)            /* compiling/done executing marker */
224
225 PERLVAR(Icompcv,        CV *)           /* currently compiling subroutine */
226 PERLVAR(IBINCOMPAT0,    AV *)           /* filler for binary compatibility */
227 PERLVAR(Icomppad_name,  AV *)           /* variable names for "my" variables */
228 PERLVAR(Icomppad_name_fill,     I32)    /* last "introduced" variable offset */
229 PERLVAR(Icomppad_name_floor,    I32)    /* start of vars in innermost block */
230
231 #ifdef HAVE_INTERP_INTERN
232 PERLVAR(Isys_intern,    struct interp_intern)
233                                         /* platform internals */
234 #endif
235
236 /* more statics moved here */
237 PERLVARI(Igeneration,   int,    100)    /* from op.c */
238 PERLVAR(IDBcv,          CV *)           /* from perl.c */
239
240 PERLVARI(Iin_clean_objs,bool,    FALSE) /* from sv.c */
241 PERLVARI(Iin_clean_all, bool,    FALSE) /* from sv.c */
242
243 PERLVAR(Ilinestart,     char *)         /* beg. of most recently read line */
244 PERLVAR(Ipending_ident, char)           /* pending identifier lookup */
245 PERLVAR(Isublex_info,   SUBLEXINFO)     /* from toke.c */
246
247 #ifdef USE_5005THREADS
248 PERLVAR(Ithrsv,         SV *)           /* struct perl_thread for main thread */
249 PERLVARI(Ithreadnum,    U32,    0)      /* incremented each thread creation */
250 PERLVAR(Istrtab_mutex,  perl_mutex)     /* Mutex for string table access */
251 #endif /* USE_5005THREADS */
252
253 PERLVAR(Iuid,           Uid_t)          /* current real user id */
254 PERLVAR(Ieuid,          Uid_t)          /* current effective user id */
255 PERLVAR(Igid,           Gid_t)          /* current real group id */
256 PERLVAR(Iegid,          Gid_t)          /* current effective group id */
257 PERLVAR(Inomemok,       bool)           /* let malloc context handle nomem */
258 PERLVARI(Ian,           U32,    0)      /* malloc sequence number */
259 PERLVARI(Icop_seqmax,   U32,    0)      /* statement sequence number */
260 PERLVARI(Iop_seqmax,    U16,    0)      /* op sequence number */
261 PERLVARI(Ievalseq,      U32,    0)      /* eval sequence number */
262 PERLVAR(Iorigenviron,   char **)
263 PERLVAR(Iorigalen,      U32)
264 PERLVAR(Ipidstatus,     HV *)           /* pid-to-status mappings for waitpid */
265 PERLVARI(Imaxo, int,    MAXO)           /* maximum number of ops */
266 PERLVAR(Iosname,        char *)         /* operating system */
267
268 /* For binary compatibility with older versions only */
269 PERLVARI(Ish_path_compat,       const char *,   SH_PATH)/* full path of shell */
270
271 PERLVAR(Isighandlerp,   Sighandler_t)
272
273 PERLVAR(Ixiv_arenaroot, xiv_allocated*) /* list of allocated xiv areas */
274 PERLVAR(Ixiv_root,      xiv_allocated *)                /* free xiv list */
275 PERLVAR(Ixnv_root,      xnv_allocated *)                /* free xnv list */
276 PERLVAR(Ixrv_root,      XRV *)          /* free xrv list */
277 PERLVAR(Ixpv_root,      xpv_allocated *)        /* free xpv list */
278 PERLVAR(Ixpviv_root,    XPVIV *)        /* free xpviv list */
279 PERLVAR(Ixpvnv_root,    XPVNV *)        /* free xpvnv list */
280 PERLVAR(Ixpvcv_root,    XPVCV *)        /* free xpvcv list */
281 PERLVAR(Ixpvav_root,    xpvav_allocated *)      /* free xpvav list */
282 PERLVAR(Ixpvhv_root,    xpvhv_allocated *)      /* free xpvhv list */
283 PERLVAR(Ixpvmg_root,    XPVMG *)        /* free xpvmg list */
284 PERLVAR(Ixpvlv_root,    XPVLV *)        /* free xpvlv list */
285 PERLVAR(Ixpvbm_root,    XPVBM *)        /* free xpvbm list */
286 PERLVAR(Ihe_root,       HE *)           /* free he list */
287
288 PERLVAR(Inice_chunk,    char *)         /* a nice chunk of memory to reuse */
289 PERLVAR(Inice_chunk_size,       U32)    /* how nice the chunk of memory is */
290
291 PERLVARI(Irunops,       runops_proc_t,  MEMBER_TO_FPTR(RUNOPS_DEFAULT))
292
293 PERLVARA(Itokenbuf,256, char)
294
295 /*
296 =for apidoc Amn|SV|PL_sv_undef
297 This is the C<undef> SV.  Always refer to this as C<&PL_sv_undef>.
298
299 =for apidoc Amn|SV|PL_sv_no
300 This is the C<false> SV.  See C<PL_sv_yes>.  Always refer to this as
301 C<&PL_sv_no>.
302
303 =for apidoc Amn|SV|PL_sv_yes
304 This is the C<true> SV.  See C<PL_sv_no>.  Always refer to this as
305 C<&PL_sv_yes>.
306
307 =cut
308 */
309
310 PERLVAR(Isv_undef,      SV)
311 PERLVAR(Isv_no,         SV)
312 PERLVAR(Isv_yes,        SV)
313
314 #ifdef CSH
315 PERLVARI(Icshname,      const char *,   CSH)
316 PERLVARI(Icshlen,       I32,    (sizeof(CSH "") - 1))
317 #endif
318
319 PERLVAR(Ilex_state,     U32)            /* next token is determined */
320 PERLVAR(Ilex_defer,     U32)            /* state after determined token */
321 PERLVAR(Ilex_expect,    int)            /* expect after determined token */
322 PERLVAR(Ilex_brackets,  I32)            /* bracket count */
323 PERLVAR(Ilex_formbrack, I32)            /* bracket count at outer format level */
324 PERLVAR(Ilex_casemods,  I32)            /* casemod count */
325 PERLVAR(Ilex_dojoin,    I32)            /* doing an array interpolation */
326 PERLVAR(Ilex_starts,    I32)            /* how many interps done on level */
327 PERLVAR(Ilex_stuff,     SV *)           /* runtime pattern from m// or s/// */
328 PERLVAR(Ilex_repl,      SV *)           /* runtime replacement from s/// */
329 PERLVAR(Ilex_op,        OP *)           /* extra info to pass back on op */
330 PERLVAR(Ilex_inpat,     OP *)           /* in pattern $) and $| are special */
331 PERLVAR(Ilex_inwhat,    I32)            /* what kind of quoting are we in */
332 PERLVAR(Ilex_brackstack,char *)         /* what kind of brackets to pop */
333 PERLVAR(Ilex_casestack, char *)         /* what kind of case mods in effect */
334
335 /* What we know when we're in LEX_KNOWNEXT state. */
336 PERLVARA(Inextval,5,    YYSTYPE)        /* value of next token, if any */
337 PERLVARA(Inexttype,5,   I32)            /* type of next token */
338 PERLVAR(Inexttoke,      I32)
339
340 PERLVAR(Ilinestr,       SV *)
341 PERLVAR(Ibufptr,        char *)
342 PERLVAR(Ioldbufptr,     char *)
343 PERLVAR(Ioldoldbufptr,  char *)
344 PERLVAR(Ibufend,        char *)
345 PERLVARI(Iexpect,int,   XSTATE)         /* how to interpret ambiguous tokens */
346
347 PERLVAR(Imulti_start,   I32)            /* 1st line of multi-line string */
348 PERLVAR(Imulti_end,     I32)            /* last line of multi-line string */
349 PERLVAR(Imulti_open,    I32)            /* delimiter of said string */
350 PERLVAR(Imulti_close,   I32)            /* delimiter of said string */
351
352 PERLVAR(Ierror_count,   I32)            /* how many errors so far, max 10 */
353 PERLVAR(Isubline,       I32)            /* line this subroutine began on */
354 PERLVAR(Isubname,       SV *)           /* name of current subroutine */
355
356 PERLVAR(Imin_intro_pending,     I32)    /* start of vars to introduce */
357 PERLVAR(Imax_intro_pending,     I32)    /* end of vars to introduce */
358 PERLVAR(Ipadix,         I32)            /* max used index in current "register" pad */
359 PERLVAR(Ipadix_floor,   I32)            /* how low may inner block reset padix */
360 PERLVAR(Ipad_reset_pending,     I32)    /* reset pad on next attempted alloc */
361
362 PERLVAR(Ilast_uni,      char *)         /* position of last named-unary op */
363 PERLVAR(Ilast_lop,      char *)         /* position of last list operator */
364 PERLVAR(Ilast_lop_op,   OPCODE)         /* last list operator */
365 PERLVAR(Iin_my,         I32)            /* we're compiling a "my" (or "our") declaration */
366 PERLVAR(Iin_my_stash,   HV *)           /* declared class of this "my" declaration */
367 #ifdef FCRYPT
368 PERLVARI(Icryptseen,    bool,   FALSE)  /* has fast crypt() been initialized? */
369 #endif
370
371 PERLVAR(Ihints,         U32)            /* pragma-tic compile-time flags */
372
373 PERLVAR(Idebug,         VOL U32)        /* flags given to -D switch */
374
375 PERLVARI(Iamagic_generation,    long,   0)
376
377 #ifdef USE_LOCALE_COLLATE
378 PERLVARI(Icollation_ix, U32,    0)      /* Collation generation index */
379 PERLVAR(Icollation_name,char *)         /* Name of current collation */
380 PERLVARI(Icollation_standard, bool,     TRUE)
381                                         /* Assume simple collation */
382 PERLVAR(Icollxfrm_base, Size_t)         /* Basic overhead in *xfrm() */
383 PERLVARI(Icollxfrm_mult,Size_t, 2)      /* Expansion factor in *xfrm() */
384 #endif /* USE_LOCALE_COLLATE */
385
386 #ifdef USE_LOCALE_NUMERIC
387
388 PERLVAR(Inumeric_name,  char *)         /* Name of current numeric locale */
389 PERLVARI(Inumeric_standard,     bool,   TRUE)
390                                         /* Assume simple numerics */
391 PERLVARI(Inumeric_local,        bool,   TRUE)
392                                         /* Assume local numerics */
393
394 PERLVAR(Inumeric_compat1,               char)
395                                         /* Used to be numeric_radix */
396 #endif /* !USE_LOCALE_NUMERIC */
397
398 /* utf8 character classes */
399 PERLVAR(Iutf8_alnum,    SV *)
400 PERLVAR(Iutf8_alnumc,   SV *)
401 PERLVAR(Iutf8_ascii,    SV *)
402 PERLVAR(Iutf8_alpha,    SV *)
403 PERLVAR(Iutf8_space,    SV *)
404 PERLVAR(Iutf8_cntrl,    SV *)
405 PERLVAR(Iutf8_graph,    SV *)
406 PERLVAR(Iutf8_digit,    SV *)
407 PERLVAR(Iutf8_upper,    SV *)
408 PERLVAR(Iutf8_lower,    SV *)
409 PERLVAR(Iutf8_print,    SV *)
410 PERLVAR(Iutf8_punct,    SV *)
411 PERLVAR(Iutf8_xdigit,   SV *)
412 PERLVAR(Iutf8_mark,     SV *)
413 PERLVAR(Iutf8_toupper,  SV *)
414 PERLVAR(Iutf8_totitle,  SV *)
415 PERLVAR(Iutf8_tolower,  SV *)
416 PERLVAR(Iutf8_tofold,   SV *)
417 PERLVAR(Ilast_swash_hv, HV *)
418 PERLVAR(Ilast_swash_klen,       U32)
419 PERLVARA(Ilast_swash_key,10,    U8)
420 PERLVAR(Ilast_swash_tmps,       U8 *)
421 PERLVAR(Ilast_swash_slen,       STRLEN)
422
423 /* perly.c globals */
424 PERLVAR(Iyydebug,       int)
425 PERLVAR(Iyynerrs,       int)
426 PERLVAR(Iyyerrflag,     int)
427 PERLVAR(Iyychar,        int)
428 PERLVAR(Iyyval,         YYSTYPE)
429 PERLVAR(Iyylval,        YYSTYPE)
430
431 PERLVARI(Iglob_index,   int,    0)
432 PERLVAR(Isrand_called,  bool)
433 PERLVARA(Iuudmap,256,   char)
434 PERLVAR(Ibitcount,      char *)
435
436 #ifdef USE_5005THREADS
437 PERLVAR(Isv_mutex,      perl_mutex)     /* Mutex for allocating SVs in sv.c */
438 PERLVAR(Ieval_mutex,    perl_mutex)     /* Mutex for doeval */
439 PERLVAR(Ieval_cond,     perl_cond)      /* Condition variable for doeval */
440 PERLVAR(Ieval_owner,    struct perl_thread *)
441                                         /* Owner thread for doeval */
442 PERLVAR(Inthreads,      int)            /* Number of threads currently */
443 PERLVAR(Ithreads_mutex, perl_mutex)     /* Mutex for nthreads and thread list */
444 PERLVAR(Inthreads_cond, perl_cond)      /* Condition variable for nthreads */
445 PERLVAR(Isvref_mutex,   perl_mutex)     /* Mutex for SvREFCNT_{inc,dec} */
446 PERLVARI(Ithreadsv_names,char *,        THREADSV_NAMES)
447 #ifdef FAKE_THREADS
448 PERLVAR(Icurthr,        struct perl_thread *)
449                                         /* Currently executing (fake) thread */
450 #endif
451
452 PERLVAR(Icred_mutex,    perl_mutex)     /* altered credentials in effect */
453
454 #endif /* USE_5005THREADS */
455
456 PERLVAR(Ipsig_ptr, SV**)
457 PERLVAR(Ipsig_name, SV**)
458
459 #if defined(PERL_IMPLICIT_SYS)
460 PERLVAR(IMem,           struct IPerlMem*)
461 PERLVAR(IMemShared,     struct IPerlMem*)
462 PERLVAR(IMemParse,      struct IPerlMem*)
463 PERLVAR(IEnv,           struct IPerlEnv*)
464 PERLVAR(IStdIO,         struct IPerlStdIO*)
465 PERLVAR(ILIO,           struct IPerlLIO*)
466 PERLVAR(IDir,           struct IPerlDir*)
467 PERLVAR(ISock,          struct IPerlSock*)
468 PERLVAR(IProc,          struct IPerlProc*)
469 #endif
470
471 #if defined(USE_THREADS)
472 PERLVAR(Iptr_table,     PTR_TBL_t*)
473 #else
474 /* Can't make that variable appear here in the interpreter structure for 5.8.9,
475    as it would break binary compatibility.  */
476 #endif
477
478 PERLVARI(Ibeginav_save, AV*, NULL)      /* save BEGIN{}s when compiling */
479
480 #ifdef USE_5005THREADS
481 PERLVAR(Ifdpid_mutex,   perl_mutex)     /* mutex for fdpid array */
482 PERLVAR(Isv_lock_mutex, perl_mutex)     /* mutex for SvLOCK macro */
483 #endif
484
485 PERLVAR(Inullstash,     HV *)           /* illegal symbols end up here */
486
487 PERLVAR(Ixnv_arenaroot, xnv_allocated*) /* list of allocated xnv areas */
488 PERLVAR(Ixrv_arenaroot, XPV*)           /* list of allocated xrv areas */
489 PERLVAR(Ixpv_arenaroot, xpv_allocated *)        /* list of allocated xpv areas */
490 PERLVAR(Ixpviv_arenaroot,XPVIV*)        /* list of allocated xpviv areas */
491 PERLVAR(Ixpvnv_arenaroot,XPVNV*)        /* list of allocated xpvnv areas */
492 PERLVAR(Ixpvcv_arenaroot,XPVCV*)        /* list of allocated xpvcv areas */
493 PERLVAR(Ixpvav_arenaroot,xpvav_allocated*)      /* list of allocated xpvav areas */
494 PERLVAR(Ixpvhv_arenaroot,xpvhv_allocated*)      /* list of allocated xpvhv areas */
495 PERLVAR(Ixpvmg_arenaroot,XPVMG*)        /* list of allocated xpvmg areas */
496 PERLVAR(Ixpvlv_arenaroot,XPVLV*)        /* list of allocated xpvlv areas */
497 PERLVAR(Ixpvbm_arenaroot,XPVBM*)        /* list of allocated xpvbm areas */
498 PERLVAR(Ihe_arenaroot,  XPV*)           /* list of allocated he areas */
499
500      /* 5.6.0 stopped here */
501
502 PERLVAR(Ipsig_pend, int *)              /* per-signal "count" of pending */
503 PERLVARI(Isig_pending, int,0)           /* Number if highest signal pending */
504
505 #ifdef USE_LOCALE_NUMERIC
506
507 PERLVAR(Inumeric_radix_sv,      SV *)   /* The radix separator if not '.' */
508
509 #endif
510
511 #if defined(USE_ITHREADS)
512 PERLVAR(Iregex_pad,     SV**)           /* Shortcut into the array of
513                                            regex_padav */
514 PERLVAR(Iregex_padav,   AV*)            /* All regex objects, indexed via the
515                                            values in op_pmoffset of pmop.
516                                            Entry 0 is an array of IVs listing
517                                            the now-free slots in the array */
518 #endif
519
520 #ifdef USE_REENTRANT_API
521 PERLVAR(Ireentrant_buffer, REENTR*)     /* here we store the _r buffers */
522 #endif
523
524 PERLVARI(Isavebegin,     bool,  FALSE)  /* save BEGINs for compiler     */
525
526 PERLVAR(Icustom_op_names, HV*)  /* Names of user defined ops */
527 PERLVAR(Icustom_op_descs, HV*)  /* Descriptions of user defined ops */
528
529 #ifdef PERLIO_LAYERS
530 PERLVARI(Iperlio, PerlIO *,NULL)
531 PERLVARI(Iknown_layers, PerlIO_list_t *,NULL)
532 PERLVARI(Idef_layerlist, PerlIO_list_t *,NULL)
533 #endif
534
535 PERLVARI(Iencoding,     SV*, NULL)              /* character encoding */
536
537 PERLVAR(Idebug_pad,     struct perl_debug_pad)  /* always needed because of the re extension */
538
539 PERLVAR(Itaint_warn, bool)      /* taint warns instead of dying */
540
541 #ifdef PL_OP_SLAB_ALLOC
542 PERLVAR(IOpPtr,I32 **)
543 PERLVARI(IOpSpace,I32,0)
544 PERLVAR(IOpSlab,I32 *)
545 #endif
546
547 PERLVAR(Iutf8locale,    bool)           /* utf8 locale detected */
548
549 PERLVAR(Iutf8_idstart,  SV *)
550 PERLVAR(Iutf8_idcont,   SV *)
551
552 PERLVAR(Isort_RealCmp,  SVCOMPARE_t)
553
554 PERLVARI(Icheckav_save, AV*, NULL)      /* save CHECK{}s when compiling */
555
556 PERLVARI(Iclocktick, long, 0)   /* this many times() ticks in a second */
557
558 PERLVARI(Iin_load_module, int, 0)       /* to prevent recursions in PerlIO_find_layer */
559
560 PERLVAR(Iunicode, U32)  /* Unicode features: $ENV{PERL_UNICODE} or -C */
561
562 PERLVAR(Isignals, U32)  /* Using which pre-5.8 signals */
563
564 PERLVAR(Istashcache,    HV *)           /* Cache to speed up S_method_common */
565
566 PERLVAR(Ireentrant_retint, int) /* Integer return value from reentrant functions */
567
568 /* Hooks to shared SVs and locks. */
569 PERLVARI(Isharehook,    share_proc_t,   MEMBER_TO_FPTR(Perl_sv_nosharing))
570 PERLVARI(Ilockhook,     share_proc_t,   MEMBER_TO_FPTR(Perl_sv_nosharing))
571 #ifdef NO_MATHOMS
572 #  define PERL_UNLOCK_HOOK Perl_sv_nosharing
573 #else
574 /* This reference ensures that the mathoms are linked with perl */
575 #  define PERL_UNLOCK_HOOK Perl_sv_nounlocking
576 #endif
577 PERLVARI(Iunlockhook,   share_proc_t,   MEMBER_TO_FPTR(PERL_UNLOCK_HOOK))
578
579 PERLVARI(Ithreadhook,   thrhook_proc_t, MEMBER_TO_FPTR(Perl_nothreadhook))
580
581 /* Force inclusion of both runops options */
582 PERLVARI(Irunops_std,   runops_proc_t,  MEMBER_TO_FPTR(Perl_runops_standard))
583 PERLVARI(Irunops_dbg,   runops_proc_t,  MEMBER_TO_FPTR(Perl_runops_debug))
584
585 /* Stores the PPID */
586 #ifdef THREADS_HAVE_PIDS
587 PERLVARI(Ippid,         IV,             0)
588 #endif
589
590 PERLVARI(Ihash_seed, UV, 0)             /* Hash initializer */
591
592 PERLVARI(Ihash_seed_set, bool, FALSE)           /* Hash initialized? */
593
594 PERLVARI(Irehash_seed, UV, 0)           /* 582 hash initializer */
595
596 PERLVARI(Irehash_seed_set, bool, FALSE) /* 582 hash initialized? */
597
598 /* These two variables aren't used any more, but need to be kept for bincompat.
599    The irony is that they were added to avoid changing the prototypes of static
600    functions, which actualy could have been changed quite safely without
601    breaking bincompat.  */
602 PERLVARI(Ifdscript, int, -1)    /* fd for script */
603 PERLVARI(Isuidscript, int, -1)  /* fd for suid script */
604
605 #if defined(USE_ITHREADS)
606 PERLVAR(Ipte_root,      struct ptr_tbl_ent *)   /* free ptr_tbl_ent list */
607 PERLVAR(Ipte_arenaroot, XPV*)           /* list of allocated pte areas */
608 #endif
609
610 #ifdef PERL_UTF8_CACHE_ASSERT
611 PERLVARI(Iutf8cache, I8, -1)    /* Is the utf8 caching code enabled? */
612 #else
613 PERLVARI(Iutf8cache, I8, 1)     /* Is the utf8 caching code enabled? */
614 #endif
615
616 #ifdef PERL_TRACK_MEMPOOL
617 /* For use with the memory debugging code in util.c  */
618 PERLVAR(Imemory_debug_header, struct perl_memory_debug_header)
619 #endif
620
621 /* New variables must be added to the very end, before this comment,
622  * for binary compatibility (the offsets of the old members must not change).
623  * (Don't forget to add your variable also to perl_clone()!)
624  * XSUB.h provides wrapper functions via perlapi.h that make this
625  * irrelevant, but not all code may be expected to #include XSUB.h.
626  */
627
628 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
629 /* File descriptor to talk to the child which dumps scalars.  */
630 PERLVARI(Idumper_fd, int, -1)
631 #endif
632
633 PERLVARA(Ibody_roots, PERL_ARENA_ROOTS_SIZE, void*) /* array of body roots */
634 PERLVAR(Ibody_arenas, void*) /* pointer to list of body-arenas */
635
636 /* Can shared object be destroyed */
637 PERLVARI(Idestroyhook, destroyable_proc_t, MEMBER_TO_FPTR(Perl_sv_destroyable))
638
639 /* The last unconditional member of the interpreter structure when 5.8.9 was
640    released. The offset of the end of this is baked into a global variable in 
641    any shared perl library which will allow a sanity test in future perl
642    releases.  */
643 #define PERL_LAST_5_8_9_INTERP_MEMBER   Idestroyhook
644
645 #if !defined(USE_THREADS)
646 PERLVAR(Iptr_table,     PTR_TBL_t*)
647 #endif
648
649 #if defined(USE_ITHREADS)
650 PERLVARI(Iregdupe,      regdupe_t, MEMBER_TO_FPTR(Perl_regdupe))
651                                         /* Pointer to REx dupe()er */
652 #endif