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