This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
0c7659acefa447431797c9eff2381b8f91a102a1
[perl5.git] / intrpvar.h
1 /*   intrpvar.h 
2  *
3  *    Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
4  *    2006, 2007
5  *    by Larry Wall and others
6  *
7  *    You may distribute under the terms of either the GNU General Public
8  *    License or the Artistic License, as specified in the README file.
9  *
10  */
11
12 /*
13 =head1 Per-Interpreter Variables
14 */
15
16 /* These variables are per-interpreter in threaded/multiplicity builds,
17  * global otherwise.
18
19  * Don't forget to re-run embed.pl to propagate changes! */
20
21 /* New variables must be added to the very end for binary compatibility.
22  * XSUB.h provides wrapper functions via perlapi.h that make this
23  * irrelevant, but not all code may be expected to #include XSUB.h. */
24
25 /* Don't forget to add your variable also to perl_clone()! */
26
27 /* The 'I' prefix is only needed for vars that need appropriate #defines
28  * generated when built with or without MULTIPLICITY.  It is also used
29  * to generate the appropriate export list for win32.
30  *
31  * When building without MULTIPLICITY, these variables will be truly global.
32  *
33  * Important ones in the first cache line (if alignment is done right) */
34
35 PERLVAR(Istack_sp,      SV **)          /* top of the stack */
36 #ifdef OP_IN_REGISTER
37 PERLVAR(Iopsave,        OP *)
38 #else
39 PERLVAR(Iop,            OP *)           /* currently executing op */
40 #endif
41 PERLVAR(Icurpad,        SV **)          /* active pad (lexicals+tmps) */
42
43 PERLVAR(Istack_base,    SV **)
44 PERLVAR(Istack_max,     SV **)
45
46 PERLVAR(Iscopestack,    I32 *)          /* scopes we've ENTERed */
47 PERLVAR(Iscopestack_ix, I32)
48 PERLVAR(Iscopestack_max,I32)
49
50 PERLVAR(Isavestack,     ANY *)          /* items that need to be restored when
51                                            LEAVEing scopes we've ENTERed */
52 PERLVAR(Isavestack_ix,  I32)
53 PERLVAR(Isavestack_max, I32)
54
55 PERLVAR(Itmps_stack,    SV **)          /* mortals we've made */
56 PERLVARI(Itmps_ix,      I32,    -1)
57 PERLVARI(Itmps_floor,   I32,    -1)
58 PERLVAR(Itmps_max,      I32)
59 PERLVAR(Imodcount,      I32)            /* how much mod()ification in
60                                            assignment? */
61
62 PERLVAR(Imarkstack,     I32 *)          /* stack_sp locations we're
63                                            remembering */
64 PERLVAR(Imarkstack_ptr, I32 *)
65 PERLVAR(Imarkstack_max, I32 *)
66
67 PERLVAR(ISv,            SV *)           /* used to hold temporary values */
68 PERLVAR(IXpv,           XPV *)          /* used to hold temporary values */
69
70 /*
71 =for apidoc Amn|STRLEN|PL_na
72
73 A convenience variable which is typically used with C<SvPV> when one
74 doesn't care about the length of the string.  It is usually more efficient
75 to either declare a local variable and use that instead or to use the
76 C<SvPV_nolen> macro.
77
78 =cut
79 */
80
81 PERLVAR(Ina,            STRLEN)         /* for use in SvPV when length is
82                                            Not Applicable */
83
84 /* stat stuff */
85 PERLVAR(Istatbuf,       Stat_t)
86 PERLVAR(Istatcache,     Stat_t)         /* _ */
87 PERLVAR(Istatgv,        GV *)
88 PERLVARI(Istatname,     SV *,   NULL)
89
90 #ifdef HAS_TIMES
91 PERLVAR(Itimesbuf,      struct tms)
92 #endif
93
94 /* Fields used by magic variables such as $@, $/ and so on */
95 PERLVAR(Icurpm,         PMOP *)         /* what to do \ interps in REs from */
96
97 /*
98 =for apidoc mn|SV*|PL_rs
99
100 The input record separator - C<$/> in Perl space.
101
102 =for apidoc mn|GV*|PL_last_in_gv
103
104 The GV which was last used for a filehandle input operation. (C<< <FH> >>)
105
106 =for apidoc mn|SV*|PL_ofs_sv
107
108 The output field separator - C<$,> in Perl space.
109
110 =cut
111 */
112
113 PERLVAR(Irs,            SV *)           /* input record separator $/ */
114 PERLVAR(Ilast_in_gv,    GV *)           /* GV used in last <FH> */
115 PERLVAR(Iofs_sv,        SV *)           /* output field separator $, */
116 PERLVAR(Idefoutgv,      GV *)           /* default FH for output */
117 PERLVARI(Ichopset,      const char *, " \n-")   /* $: */
118 PERLVAR(Iformtarget,    SV *)
119 PERLVAR(Ibodytarget,    SV *)
120 PERLVAR(Itoptarget,     SV *)
121
122 /* Stashes */
123 PERLVAR(Idefstash,      HV *)           /* main symbol table */
124 PERLVAR(Icurstash,      HV *)           /* symbol table for current package */
125
126 PERLVAR(Irestartop,     OP *)           /* propagating an error from croak? */
127 PERLVAR(Icurcop,        COP * VOL)
128 PERLVAR(Icurstack,      AV *)           /* THE STACK */
129 PERLVAR(Icurstackinfo,  PERL_SI *)      /* current stack + context */
130 PERLVAR(Imainstack,     AV *)           /* the stack when nothing funny is
131                                            happening */
132
133 PERLVAR(Itop_env,       JMPENV *)       /* ptr to current sigjmp environment */
134 PERLVAR(Istart_env,     JMPENV)         /* empty startup sigjmp environment */
135 PERLVARI(Ierrors,       SV *,   NULL)   /* outstanding queued errors */
136
137 /* statics "owned" by various functions */
138 PERLVAR(Ihv_fetch_ent_mh, HE*)          /* owned by hv_fetch_ent() */
139
140 PERLVAR(Ilastgotoprobe, OP*)            /* from pp_ctl.c */
141
142 /* sort stuff */
143 PERLVAR(Isortcop,       OP *)           /* user defined sort routine */
144 PERLVAR(Isortstash,     HV *)           /* which is in some package or other */
145 PERLVAR(Ifirstgv,       GV *)           /* $a */
146 PERLVAR(Isecondgv,      GV *)           /* $b */
147
148 /* float buffer */
149 PERLVAR(Iefloatbuf,     char *)
150 PERLVAR(Iefloatsize,    STRLEN)
151
152 /* regex stuff */
153
154 PERLVAR(Iscreamfirst,   I32 *)
155 PERLVAR(Iscreamnext,    I32 *)
156 PERLVAR(Ilastscream,    SV *)
157
158 PERLVAR(Ireg_state,     struct re_save_state)
159
160 PERLVAR(Iregdummy,      regnode)        /* from regcomp.c */
161
162 PERLVARI(Idumpindent,   U16,    4)      /* number of blanks per dump
163                                            indentation level */
164
165 PERLVARI(Iv_string_ok,  bool, FALSE)    /* use/require v_string OK */
166
167 /* This would be space for U8 here without increasing the structure size
168    so name the space, so that the first post 5.10 need for a bool can use this
169    rather than padding at the end.  */
170
171 PERLVARI(Ispare_510,    bool, FALSE)    /*  */
172
173 PERLVARA(Icolors,6,     char *)         /* from regcomp.c */
174
175 PERLVARI(Ipeepp,        peep_t, MEMBER_TO_FPTR(Perl_peep))
176                                         /* Pointer to peephole optimizer */
177
178 PERLVARI(Imaxscream,    I32,    -1)
179 PERLVARI(Ireginterp_cnt,I32,     0)     /* Whether "Regexp" was interpolated. */
180 PERLVARI(Iwatchaddr,    char **, 0)
181 PERLVAR(Iwatchok,       char *)
182
183 /* the currently active slab in a chain of slabs of regmatch states,
184  * and the currently active state within that slab */
185
186 PERLVARI(Iregmatch_slab, regmatch_slab *,       NULL)
187 PERLVAR(Iregmatch_state, regmatch_state *)
188
189 /* Put anything new that is pointer aligned here. */
190
191 PERLVAR(Idelaymagic,    U16)            /* ($<,$>) = ... */
192 PERLVAR(Ilocalizing,    U8)             /* are we processing a local() list? */
193 PERLVAR(Icolorset,      bool)           /* from regcomp.c */
194 PERLVARI(Idirty,        bool, FALSE)    /* in the middle of tearing things
195                                            down? */
196 PERLVAR(Iin_eval,       VOL U8)         /* trap "fatal" errors? */
197 PERLVAR(Itainted,       bool)           /* using variables controlled by $< */
198
199 /* This value may be set when embedding for full cleanup  */
200 /* 0=none, 1=full, 2=full with checks */
201 PERLVARI(Iperl_destruct_level,  U8,     0)
202
203 PERLVAR(Iperldb,        U32)
204
205 /* pseudo environmental stuff */
206 PERLVAR(Iorigargc,      int)
207 PERLVAR(Iorigargv,      char **)
208 PERLVAR(Ienvgv,         GV *)
209 PERLVAR(Iincgv,         GV *)
210 PERLVAR(Ihintgv,        GV *)
211 PERLVAR(Iorigfilename,  char *)
212 PERLVAR(Idiehook,       SV *)
213 PERLVAR(Iwarnhook,      SV *)
214
215 /* switches */
216 PERLVAR(Ipatchlevel,    SV *)
217 PERLVAR(Ilocalpatches,  const char * const *)
218 PERLVARI(Isplitstr,     const char *, " ")
219
220 PERLVAR(Iminus_c,       bool)
221 PERLVAR(Ipreprocess,    bool)
222 PERLVAR(Iminus_n,       bool)
223 PERLVAR(Iminus_p,       bool)
224 PERLVAR(Iminus_l,       bool)
225 PERLVAR(Iminus_a,       bool)
226 PERLVAR(Iminus_F,       bool)
227 PERLVAR(Idoswitches,    bool)
228
229 PERLVAR(Iminus_E,       bool)
230
231 /*
232
233 =for apidoc mn|bool|PL_dowarn
234
235 The C variable which corresponds to Perl's $^W warning variable.
236
237 =cut
238 */
239
240 PERLVAR(Idowarn,        U8)
241 PERLVAR(Idoextract,     bool)
242 PERLVAR(Isawampersand,  bool)           /* must save all match strings */
243 PERLVAR(Iunsafe,        bool)
244 PERLVAR(Iexit_flags,    U8)             /* was exit() unexpected, etc. */
245 PERLVAR(Isrand_called,  bool)
246 /* Part of internal state, but makes the 16th 1 byte variable in a row.  */
247 PERLVAR(Itainting,      bool)           /* doing taint checks */
248 PERLVAR(Iinplace,       char *)
249 PERLVAR(Ie_script,      SV *)
250
251 /* magical thingies */
252 PERLVAR(Ibasetime,      Time_t)         /* $^T */
253 PERLVAR(Iformfeed,      SV *)           /* $^L */
254
255
256 PERLVARI(Imaxsysfd,     I32,    MAXSYSFD)
257                                         /* top fd to pass to subprocesses */
258 PERLVAR(Istatusvalue,   I32)            /* $? */
259 #ifdef VMS
260 PERLVAR(Istatusvalue_vms,U32)
261 #else
262 PERLVAR(Istatusvalue_posix,I32)
263 #endif
264
265 #ifdef CSH
266 PERLVARI(Icshlen,       I32,    0)
267 PERLVARI(Icshname,      const char *,   CSH)
268 #endif
269
270 /* shortcuts to various I/O objects */
271 PERLVAR(Istdingv,       GV *)
272 PERLVAR(Istderrgv,      GV *)
273 PERLVAR(Idefgv,         GV *)
274 PERLVAR(Iargvgv,        GV *)
275 PERLVAR(Iargvoutgv,     GV *)
276 PERLVAR(Iargvout_stack, AV *)
277
278 /* shortcuts to regexp stuff */
279 PERLVAR(Ireplgv,        GV *)
280
281 /* shortcuts to misc objects */
282 PERLVAR(Ierrgv,         GV *)
283
284 /* shortcuts to debugging objects */
285 PERLVAR(IDBgv,          GV *)
286 PERLVAR(IDBline,        GV *)
287
288 /*
289 =for apidoc mn|GV *|PL_DBsub
290 When Perl is run in debugging mode, with the B<-d> switch, this GV contains
291 the SV which holds the name of the sub being debugged.  This is the C
292 variable which corresponds to Perl's $DB::sub variable.  See
293 C<PL_DBsingle>.
294
295 =for apidoc mn|SV *|PL_DBsingle
296 When Perl is run in debugging mode, with the B<-d> switch, this SV is a
297 boolean which indicates whether subs are being single-stepped.
298 Single-stepping is automatically turned on after every step.  This is the C
299 variable which corresponds to Perl's $DB::single variable.  See
300 C<PL_DBsub>.
301
302 =for apidoc mn|SV *|PL_DBtrace
303 Trace variable used when Perl is run in debugging mode, with the B<-d>
304 switch.  This is the C variable which corresponds to Perl's $DB::trace
305 variable.  See C<PL_DBsingle>.
306
307 =cut
308 */
309
310 PERLVAR(IDBsub,         GV *)
311 PERLVAR(IDBsingle,      SV *)
312 PERLVAR(IDBtrace,       SV *)
313 PERLVAR(IDBsignal,      SV *)
314 PERLVAR(Idbargs,        AV *)           /* args to call listed by caller function */
315
316 /* symbol tables */
317 PERLVAR(Idebstash,      HV *)           /* symbol table for perldb package */
318 PERLVAR(Iglobalstash,   HV *)           /* global keyword overrides imported here */
319 PERLVAR(Icurstname,     SV *)           /* name of current package */
320 PERLVAR(Ibeginav,       AV *)           /* names of BEGIN subroutines */
321 PERLVAR(Iendav,         AV *)           /* names of END subroutines */
322 PERLVAR(Iunitcheckav,   AV *)           /* names of UNITCHECK subroutines */
323 PERLVAR(Icheckav,       AV *)           /* names of CHECK subroutines */
324 PERLVAR(Iinitav,        AV *)           /* names of INIT subroutines */
325 PERLVAR(Istrtab,        HV *)           /* shared string table */
326 PERLVARI(Isub_generation,U32,1)         /* incr to invalidate method cache */
327
328 /* funky return mechanisms */
329 PERLVAR(Iforkprocess,   int)            /* so do_open |- can return proc# */
330
331 /* memory management */
332 PERLVAR(Isv_count,      I32)            /* how many SV* are currently allocated */
333 PERLVAR(Isv_objcount,   I32)            /* how many objects are currently allocated */
334 PERLVAR(Isv_root,       SV*)            /* storage for SVs belonging to interp */
335 PERLVAR(Isv_arenaroot,  SV*)            /* list of areas for garbage collection */
336
337 /* subprocess state */
338 PERLVAR(Ifdpid,         AV *)           /* keep fd-to-pid mappings for my_popen */
339
340 /* internal state */
341 PERLVARI(Iop_mask,      char *, NULL)   /* masked operations for safe evals */
342
343 /* current interpreter roots */
344 PERLVAR(Imain_cv,       CV *)
345 PERLVAR(Imain_root,     OP *)
346 PERLVAR(Imain_start,    OP *)
347 PERLVAR(Ieval_root,     OP *)
348 PERLVAR(Ieval_start,    OP *)
349
350 /* runtime control stuff */
351 PERLVARI(Icurcopdb,     COP *,  NULL)
352
353 PERLVAR(Ifilemode,      int)            /* so nextargv() can preserve mode */
354 PERLVAR(Ilastfd,        int)            /* what to preserve mode on */
355 PERLVAR(Ioldname,       char *)         /* what to preserve mode on */
356 PERLVAR(IArgv,          char **)        /* stuff to free from do_aexec, vfork safe */
357 PERLVAR(ICmd,           char *)         /* stuff to free from do_aexec, vfork safe */
358 /* Elements in this array have ';' appended and are injected as a single line
359    into the tokeniser. You can't put any (literal) newlines into any program
360    you stuff in into this array, as the point where it's injected is expecting
361    a single physical line. */
362 PERLVAR(Ipreambleav,    AV *)
363 PERLVAR(Imess_sv,       SV *)
364 PERLVAR(Iors_sv,        SV *)           /* output record separator $\ */
365 /* statics moved here for shared library purposes */
366 PERLVARI(Igensym,       I32,    0)      /* next symbol for getsym() to define */
367 PERLVARI(Icv_has_eval, bool, FALSE) /* PL_compcv includes an entereval or similar */
368 PERLVARI(Ilaststype,    U16,    OP_STAT)
369 PERLVARI(Ilaststatval,  int,    -1)
370
371 /* interpreter atexit processing */
372 PERLVARI(Iexitlistlen,  I32, 0)         /* length of same */
373 PERLVARI(Iexitlist,     PerlExitListEntry *, NULL)
374                                         /* list of exit functions */
375
376 /*
377 =for apidoc Amn|HV*|PL_modglobal
378
379 C<PL_modglobal> is a general purpose, interpreter global HV for use by
380 extensions that need to keep information on a per-interpreter basis.
381 In a pinch, it can also be used as a symbol table for extensions
382 to share data among each other.  It is a good idea to use keys
383 prefixed by the package name of the extension that owns the data.
384
385 =cut
386 */
387
388 PERLVAR(Imodglobal,     HV *)           /* per-interp module data */
389
390 /* these used to be in global before 5.004_68 */
391 PERLVARI(Iprofiledata,  U32 *,  NULL)   /* table of ops, counts */
392
393 PERLVAR(Icompiling,     COP)            /* compiling/done executing marker */
394
395 PERLVAR(Icompcv,        CV *)           /* currently compiling subroutine */
396 PERLVAR(Icomppad,       AV *)           /* storage for lexically scoped temporaries */
397 PERLVAR(Icomppad_name,  AV *)           /* variable names for "my" variables */
398 PERLVAR(Icomppad_name_fill,     I32)    /* last "introduced" variable offset */
399 PERLVAR(Icomppad_name_floor,    I32)    /* start of vars in innermost block */
400
401 #ifdef HAVE_INTERP_INTERN
402 PERLVAR(Isys_intern,    struct interp_intern)
403                                         /* platform internals */
404 #endif
405
406 /* more statics moved here */
407 PERLVAR(IDBcv,          CV *)           /* from perl.c */
408 PERLVARI(Igeneration,   int,    100)    /* from op.c */
409
410 PERLVARI(Iin_clean_objs,bool,    FALSE) /* from sv.c */
411 PERLVARI(Iin_clean_all, bool,    FALSE) /* from sv.c */
412 PERLVAR(Inomemok,       bool)           /* let malloc context handle nomem */
413 PERLVARI(Isavebegin,     bool,  FALSE)  /* save BEGINs for compiler     */
414
415 PERLVAR(Iuid,           Uid_t)          /* current real user id */
416 PERLVAR(Ieuid,          Uid_t)          /* current effective user id */
417 PERLVAR(Igid,           Gid_t)          /* current real group id */
418 PERLVAR(Iegid,          Gid_t)          /* current effective group id */
419 PERLVARI(Ian,           U32,    0)      /* malloc sequence number */
420 PERLVARI(Icop_seqmax,   U32,    0)      /* statement sequence number */
421 PERLVARI(Ievalseq,      U32,    0)      /* eval sequence number */
422 PERLVAR(Iorigalen,      U32)
423 PERLVAR(Iorigenviron,   char **)
424 #ifdef PERL_USES_PL_PIDSTATUS
425 PERLVAR(Ipidstatus,     HV *)           /* pid-to-status mappings for waitpid */
426 #endif
427 PERLVAR(Iosname,        char *)         /* operating system */
428
429 PERLVAR(Isighandlerp,   Sighandler_t)
430
431 PERLVARA(Ibody_roots,   PERL_ARENA_ROOTS_SIZE, void*) /* array of body roots */
432
433 PERLVAR(Inice_chunk,    char *)         /* a nice chunk of memory to reuse */
434 PERLVAR(Inice_chunk_size,       U32)    /* how nice the chunk of memory is */
435
436 PERLVARI(Imaxo, int,    MAXO)           /* maximum number of ops */
437
438 PERLVARI(Irunops,       runops_proc_t,  MEMBER_TO_FPTR(RUNOPS_DEFAULT))
439
440 /*
441 =for apidoc Amn|SV|PL_sv_undef
442 This is the C<undef> SV.  Always refer to this as C<&PL_sv_undef>.
443
444 =for apidoc Amn|SV|PL_sv_no
445 This is the C<false> SV.  See C<PL_sv_yes>.  Always refer to this as
446 C<&PL_sv_no>.
447
448 =for apidoc Amn|SV|PL_sv_yes
449 This is the C<true> SV.  See C<PL_sv_no>.  Always refer to this as
450 C<&PL_sv_yes>.
451
452 =cut
453 */
454
455 PERLVAR(Isv_undef,      SV)
456 PERLVAR(Isv_no,         SV)
457 PERLVAR(Isv_yes,        SV)
458
459 PERLVAR(Isubname,       SV *)           /* name of current subroutine */
460
461 PERLVAR(Isubline,       I32)            /* line this subroutine began on */
462 PERLVAR(Imin_intro_pending,     I32)    /* start of vars to introduce */
463
464 PERLVAR(Imax_intro_pending,     I32)    /* end of vars to introduce */
465 PERLVAR(Ipadix,         I32)            /* max used index in current "register" pad */
466
467 PERLVAR(Ipadix_floor,   I32)            /* how low may inner block reset padix */
468 PERLVAR(Ipad_reset_pending,     I32)    /* reset pad on next attempted alloc */
469
470 PERLVAR(Ihints,         U32)            /* pragma-tic compile-time flags */
471
472 PERLVAR(Idebug,         VOL U32)        /* flags given to -D switch */
473
474 PERLVARI(Iamagic_generation,    long,   0)
475
476 #ifdef USE_LOCALE_COLLATE
477 PERLVAR(Icollation_name,char *)         /* Name of current collation */
478 PERLVAR(Icollxfrm_base, Size_t)         /* Basic overhead in *xfrm() */
479 PERLVARI(Icollxfrm_mult,Size_t, 2)      /* Expansion factor in *xfrm() */
480 PERLVARI(Icollation_ix, U32,    0)      /* Collation generation index */
481 PERLVARI(Icollation_standard, bool,     TRUE)
482                                         /* Assume simple collation */
483 #endif /* USE_LOCALE_COLLATE */
484
485
486 #if defined (PERL_UTF8_CACHE_ASSERT) || defined (DEBUGGING)
487 #  define PERL___I -1
488 #else
489 #  define PERL___I 1
490 #endif
491 PERLVARI(Iutf8cache, I8, PERL___I)      /* Is the utf8 caching code enabled? */
492 #undef PERL___I
493
494
495 #ifdef USE_LOCALE_NUMERIC
496
497 PERLVARI(Inumeric_standard,     bool,   TRUE)
498                                         /* Assume simple numerics */
499 PERLVARI(Inumeric_local,        bool,   TRUE)
500                                         /* Assume local numerics */
501 PERLVAR(Inumeric_name,  char *)         /* Name of current numeric locale */
502 #endif /* !USE_LOCALE_NUMERIC */
503
504 /* utf8 character classes */
505 PERLVAR(Iutf8_alnum,    SV *)
506 PERLVAR(Iutf8_alnumc,   SV *)
507 PERLVAR(Iutf8_ascii,    SV *)
508 PERLVAR(Iutf8_alpha,    SV *)
509 PERLVAR(Iutf8_space,    SV *)
510 PERLVAR(Iutf8_cntrl,    SV *)
511 PERLVAR(Iutf8_graph,    SV *)
512 PERLVAR(Iutf8_digit,    SV *)
513 PERLVAR(Iutf8_upper,    SV *)
514 PERLVAR(Iutf8_lower,    SV *)
515 PERLVAR(Iutf8_print,    SV *)
516 PERLVAR(Iutf8_punct,    SV *)
517 PERLVAR(Iutf8_xdigit,   SV *)
518 PERLVAR(Iutf8_mark,     SV *)
519 PERLVAR(Iutf8_toupper,  SV *)
520 PERLVAR(Iutf8_totitle,  SV *)
521 PERLVAR(Iutf8_tolower,  SV *)
522 PERLVAR(Iutf8_tofold,   SV *)
523 PERLVAR(Ilast_swash_hv, HV *)
524 PERLVAR(Ilast_swash_tmps,       U8 *)
525 PERLVAR(Ilast_swash_slen,       STRLEN)
526 PERLVARA(Ilast_swash_key,10,    U8)
527 PERLVAR(Ilast_swash_klen,       U8)     /* Only needs to store 0-10  */
528
529 #ifdef FCRYPT
530 PERLVARI(Icryptseen,    bool,   FALSE)  /* has fast crypt() been initialized? */
531 #endif
532
533 PERLVARI(Iglob_index,   int,    0)
534
535
536 PERLVAR(Iparser,        yy_parser *)    /* current parser state */
537
538 PERLVAR(Ibitcount,      char *)
539
540 PERLVAR(Ipsig_ptr, SV**)
541 PERLVAR(Ipsig_name, SV**)
542
543 #if defined(PERL_IMPLICIT_SYS)
544 PERLVAR(IMem,           struct IPerlMem*)
545 PERLVAR(IMemShared,     struct IPerlMem*)
546 PERLVAR(IMemParse,      struct IPerlMem*)
547 PERLVAR(IEnv,           struct IPerlEnv*)
548 PERLVAR(IStdIO,         struct IPerlStdIO*)
549 PERLVAR(ILIO,           struct IPerlLIO*)
550 PERLVAR(IDir,           struct IPerlDir*)
551 PERLVAR(ISock,          struct IPerlSock*)
552 PERLVAR(IProc,          struct IPerlProc*)
553 #endif
554
555 PERLVAR(Iptr_table,     PTR_TBL_t*)
556 PERLVARI(Ibeginav_save, AV*, NULL)      /* save BEGIN{}s when compiling */
557
558 PERLVAR(Ibody_arenas, void*) /* pointer to list of body-arenas */
559
560 PERLVAR(Ipsig_pend, int *)              /* per-signal "count" of pending */
561 PERLVARI(Isig_pending, int,0)           /* Number if highest signal pending */
562
563
564 PERLVAR(Itaint_warn,    bool)      /* taint warns instead of dying */
565 PERLVAR(Iutf8locale,    bool)           /* utf8 locale detected */
566 PERLVARI(Irehash_seed_set, bool, FALSE) /* 582 hash initialized? */
567
568 #ifdef USE_LOCALE_NUMERIC
569
570 PERLVAR(Inumeric_radix_sv,      SV *)   /* The radix separator if not '.' */
571
572 #endif
573
574 #if defined(USE_ITHREADS)
575 PERLVAR(Iregex_pad,     SV**)           /* All regex objects */
576 PERLVAR(Iregex_padav,   AV*)            /* All regex objects */
577
578 #endif
579
580 #ifdef USE_REENTRANT_API
581 PERLVAR(Ireentrant_buffer, REENTR*)     /* here we store the _r buffers */
582 #endif
583
584
585 #ifdef PERL_MAD
586 PERLVARI(Imadskills,    bool, FALSE)    /* preserve all syntactic info */
587                                         /* (MAD = Misc Attribute Decoration) */
588 PERLVARI(Ixmlfp, PerlIO *,NULL)
589 #endif
590
591 PERLVAR(Icustom_op_names, HV*)  /* Names of user defined ops */
592 PERLVAR(Icustom_op_descs, HV*)  /* Descriptions of user defined ops */
593
594 #ifdef PERLIO_LAYERS
595 PERLVARI(Iperlio, PerlIO *,NULL)
596 PERLVARI(Iknown_layers, PerlIO_list_t *,NULL)
597 PERLVARI(Idef_layerlist, PerlIO_list_t *,NULL)
598 #endif
599
600 PERLVARI(Iencoding,     SV*, NULL)              /* character encoding */
601
602 PERLVAR(Idebug_pad,     struct perl_debug_pad)  /* always needed because of the re extension */
603
604 #ifdef PL_OP_SLAB_ALLOC
605 PERLVAR(IOpPtr,I32 **)
606 PERLVARI(IOpSpace,I32,0)
607 PERLVAR(IOpSlab,I32 *)
608 #endif
609
610 PERLVAR(Iutf8_idstart,  SV *)
611 PERLVAR(Iutf8_idcont,   SV *)
612
613 PERLVAR(Isort_RealCmp,  SVCOMPARE_t)
614
615 PERLVARI(Icheckav_save, AV*, NULL)      /* save CHECK{}s when compiling */
616 PERLVARI(Iunitcheckav_save, AV*, NULL)  /* save UNITCHECK{}s when compiling */
617
618 PERLVARI(Iclocktick, long, 0)   /* this many times() ticks in a second */
619
620 PERLVARI(Iin_load_module, int, 0)       /* to prevent recursions in PerlIO_find_layer */
621
622 PERLVAR(Iunicode, U32)  /* Unicode features: $ENV{PERL_UNICODE} or -C */
623
624 PERLVAR(Isignals, U32)  /* Using which pre-5.8 signals */
625
626 PERLVAR(Ireentrant_retint, int) /* Integer return value from reentrant functions */
627
628 PERLVAR(Istashcache,    HV *)           /* Cache to speed up S_method_common */
629
630 /* Hooks to shared SVs and locks. */
631 PERLVARI(Isharehook,    share_proc_t,   MEMBER_TO_FPTR(Perl_sv_nosharing))
632 PERLVARI(Ilockhook,     share_proc_t,   MEMBER_TO_FPTR(Perl_sv_nosharing))
633 #ifdef NO_MATHOMS
634 #  define PERL_UNLOCK_HOOK Perl_sv_nosharing
635 #else
636 /* This reference ensures that the mathoms are linked with perl */
637 #  define PERL_UNLOCK_HOOK Perl_sv_nounlocking
638 #endif
639 PERLVARI(Iunlockhook,   share_proc_t,   MEMBER_TO_FPTR(PERL_UNLOCK_HOOK))
640
641 PERLVARI(Ithreadhook,   thrhook_proc_t, MEMBER_TO_FPTR(Perl_nothreadhook))
642
643 /* Stores the PPID */
644 #ifdef THREADS_HAVE_PIDS
645 PERLVARI(Ippid,         IV,             0)
646 #endif
647
648 PERLVARI(Ihash_seed, UV, 0)             /* Hash initializer */
649
650 PERLVAR(IDBassertion,   SV *)
651
652 PERLVARI(Irehash_seed, UV, 0)           /* 582 hash initializer */
653
654 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
655 /* File descriptor to talk to the child which dumps scalars.  */
656 PERLVARI(Idumper_fd, int, -1)
657 #endif
658
659 #ifdef PERL_IMPLICIT_CONTEXT
660 PERLVARI(Imy_cxt_size, int, 0)          /* size of PL_my_cxt_list */
661 PERLVARI(Imy_cxt_list, void **, NULL) /* per-module array of MY_CXT pointers */
662 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
663 PERLVARI(Imy_cxt_keys, const char **, NULL) /* per-module array of pointers to MY_CXT_KEY constants */
664 #endif
665 #endif
666
667 #ifdef PERL_TRACK_MEMPOOL
668 /* For use with the memory debugging code in util.c  */
669 PERLVAR(Imemory_debug_header, struct perl_memory_debug_header)
670 #endif
671
672 #ifdef PERL_DEBUG_READONLY_OPS
673 PERLVARI(Islabs, I32**, NULL)   /* Array of slabs that have been allocated */
674 PERLVARI(Islab_count, U32, 0)   /* Size of the array */
675 #endif
676
677 PERLVARI(Iisarev, HV*, NULL)    /* Reverse map of @ISA dependencies */
678
679 /* If you are adding a U8 or U16, see the 'Space' comments above on where
680  * there are gaps which currently will be structure padding.  */
681
682 /* Within a stable branch, new variables must be added to the very end, before
683  * this comment, for binary compatibility (the offsets of the old members must
684  *  not change).
685  * (Don't forget to add your variable also to perl_clone()!)
686  * XSUB.h provides wrapper functions via perlapi.h that make this
687  * irrelevant, but not all code may be expected to #include XSUB.h.
688  */