This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Add ‘immortal’ pad name intrp vars
[perl5.git] / intrpvar.h
CommitLineData
907b3e23
DM
1/* intrpvar.h
2 *
3 * Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
1129b882 4 * 2006, 2007, 2008 by Larry Wall and others
907b3e23
DM
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
e3d474b7
KW
11#include "handy.h"
12
907b3e23
DM
13/*
14=head1 Per-Interpreter Variables
15*/
49f531da 16
907b3e23
DM
17/* These variables are per-interpreter in threaded/multiplicity builds,
18 * global otherwise.
19
d7cb65f2 20 * Don't forget to re-run regen/embed.pl to propagate changes! */
cb68f92d 21
ab686ae8 22/* New variables must be added to the very end for binary compatibility. */
6537fe72 23
ba05a734 24/* Don't forget to add your variable also to perl_clone()! (in sv.c) */
02506efe 25
cb68f92d
GS
26/* The 'I' prefix is only needed for vars that need appropriate #defines
27 * generated when built with or without MULTIPLICITY. It is also used
97df044c
KW
28 * to generate the appropriate export list for win32. If the variable
29 * needs to be initialized, use PERLVARI.
cb68f92d 30 *
907b3e23
DM
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
115ff745 35PERLVAR(I, stack_sp, SV **) /* top of the stack */
115ff745 36PERLVAR(I, op, OP *) /* currently executing op */
115ff745 37PERLVAR(I, curpad, SV **) /* active pad (lexicals+tmps) */
907b3e23 38
115ff745
NC
39PERLVAR(I, stack_base, SV **)
40PERLVAR(I, stack_max, SV **)
907b3e23 41
115ff745 42PERLVAR(I, savestack, ANY *) /* items that need to be restored when
907b3e23 43 LEAVEing scopes we've ENTERed */
115ff745
NC
44PERLVAR(I, savestack_ix, I32)
45PERLVAR(I, savestack_max, I32)
46
19bc2726
DM
47PERLVAR(I, scopestack, I32 *) /* scopes we've ENTERed */
48PERLVAR(I, scopestack_ix, I32)
49PERLVAR(I, scopestack_max, I32)
50
115ff745 51PERLVAR(I, tmps_stack, SV **) /* mortals we've made */
e8eb279c
FC
52PERLVARI(I, tmps_ix, SSize_t, -1)
53PERLVARI(I, tmps_floor, SSize_t, -1)
54PERLVAR(I, tmps_max, SSize_t)
19bc2726
DM
55
56PERLVARI(I, sub_generation, U32, 1) /* incr to invalidate method cache */
907b3e23 57
115ff745 58PERLVAR(I, markstack, I32 *) /* stack_sp locations we're
907b3e23 59 remembering */
115ff745
NC
60PERLVAR(I, markstack_ptr, I32 *)
61PERLVAR(I, markstack_max, I32 *)
907b3e23 62
ff2a62e0
FC
63PERLVARI(I, sawalias, bool, FALSE) /* must enable common-vars
64 pessimisation */
65
6a5b4183
YO
66#ifdef PERL_HASH_RANDOMIZE_KEYS
67#ifdef USE_PERL_PERTURB_KEYS
68PERLVARI(I, hash_rand_bits_enabled, U8, 1) /* used to randomize hash stuff 0 == no-random, 1 == random, 2 == determinsitic */
69#endif
0e0ab621 70PERLVARI(I, hash_rand_bits, UV, 0) /* used to randomize hash stuff */
6a5b4183 71#endif
19bc2726
DM
72PERLVAR(I, strtab, HV *) /* shared string table */
73
74/* Fields used by magic variables such as $@, $/ and so on */
75PERLVAR(I, curpm, PMOP *) /* what to do \ interps in REs from */
76
77PERLVAR(I, tainting, bool) /* doing taint checks */
78PERLVAR(I, tainted, bool) /* using variables controlled by $< */
79PERLVAR(I, delaymagic, U16) /* ($<,$>) = ... */
80PERLVAR(I, localizing, U8) /* are we processing a local() list? */
81PERLVAR(I, in_eval, U8) /* trap "fatal" errors? */
3f44dc81 82PERLVAR(I, defgv, GV *) /* the *_ glob */
19bc2726
DM
83/*
84
85=for apidoc mn|bool|PL_dowarn
86
87The C variable which corresponds to Perl's $^W warning variable.
88
89=cut
90*/
91
92PERLVAR(I, dowarn, U8)
93
94#if defined (PERL_UTF8_CACHE_ASSERT) || defined (DEBUGGING)
95# define PERL___I -1
96#else
97# define PERL___I 1
98#endif
99PERLVARI(I, utf8cache, I8, PERL___I) /* Is the utf8 caching code enabled? */
100#undef PERL___I
101
102
103/* Stashes */
104PERLVAR(I, defstash, HV *) /* main symbol table */
105PERLVAR(I, curstash, HV *) /* symbol table for current package */
106
107PERLVAR(I, curcop, COP *)
108PERLVAR(I, curstack, AV *) /* THE STACK */
109PERLVAR(I, curstackinfo, PERL_SI *) /* current stack + context */
110PERLVAR(I, mainstack, AV *) /* the stack when nothing funny is
111 happening */
112
113/* memory management */
114PERLVAR(I, sv_count, IV) /* how many SV* are currently allocated */
19bc2726
DM
115
116PERLVAR(I, sv_root, SV *) /* storage for SVs belonging to interp */
117PERLVAR(I, sv_arenaroot, SV *) /* list of areas for garbage collection */
118
f65e70f5
DM
119/* fake PMOP that PL_curpm points to while in (?{}) so $1 et al are visible */
120PERLVARI(I, reg_curpm, PMOP*, NULL)
121
19bc2726 122/* the currently active slab in a chain of slabs of regmatch states,
87c1d905
DM
123 * and the currently active state within that slab. This stack of states
124 * is shared amongst re-entrant calls to the regex engine */
19bc2726
DM
125
126PERLVARI(I, regmatch_slab, regmatch_slab *, NULL)
127PERLVAR(I, regmatch_state, regmatch_state *)
128
129PERLVAR(I, comppad, PAD *) /* storage for lexically scoped temporaries */
130
131/*
132=for apidoc Amn|SV|PL_sv_undef
133This is the C<undef> SV. Always refer to this as C<&PL_sv_undef>.
134
135=for apidoc Amn|SV|PL_sv_no
136This is the C<false> SV. See C<PL_sv_yes>. Always refer to this as
137C<&PL_sv_no>.
138
139=for apidoc Amn|SV|PL_sv_yes
140This is the C<true> SV. See C<PL_sv_no>. Always refer to this as
141C<&PL_sv_yes>.
142
143=cut
144*/
145
146PERLVAR(I, sv_undef, SV)
147PERLVAR(I, sv_no, SV)
148PERLVAR(I, sv_yes, SV)
12d375ea
FC
149PERLVAR(I, padname_undef, PADNAME)
150PERLVAR(I, padname_const, PADNAME)
115ff745 151PERLVAR(I, Sv, SV *) /* used to hold temporary values */
19bc2726
DM
152
153PERLVAR(I, parser, yy_parser *) /* current parser state */
154
155PERLVAR(I, stashcache, HV *) /* Cache to speed up S_method_common */
156
907b3e23
DM
157
158/*
159=for apidoc Amn|STRLEN|PL_na
160
161A convenience variable which is typically used with C<SvPV> when one
162doesn't care about the length of the string. It is usually more efficient
163to either declare a local variable and use that instead or to use the
164C<SvPV_nolen> macro.
165
166=cut
167*/
168
115ff745 169PERLVAR(I, na, STRLEN) /* for use in SvPV when length is
907b3e23
DM
170 Not Applicable */
171
172/* stat stuff */
115ff745
NC
173PERLVAR(I, statbuf, Stat_t)
174PERLVAR(I, statcache, Stat_t) /* _ */
175PERLVAR(I, statgv, GV *)
176PERLVARI(I, statname, SV *, NULL)
907b3e23
DM
177
178#ifdef HAS_TIMES
3f572b05 179/* Will be removed soon after v5.21.7. See RT #121351 */
115ff745 180PERLVAR(I, timesbuf, struct tms)
907b3e23
DM
181#endif
182
907b3e23
DM
183/*
184=for apidoc mn|SV*|PL_rs
185
186The input record separator - C<$/> in Perl space.
187
188=for apidoc mn|GV*|PL_last_in_gv
189
154e47c8 190The GV which was last used for a filehandle input operation. (C<< <FH> >>)
907b3e23 191
e23d9e2f 192=for apidoc mn|GV*|PL_ofsgv
907b3e23 193
e23d9e2f 194The glob containing the output field separator - C<*,> in Perl space.
907b3e23
DM
195
196=cut
197*/
198
115ff745
NC
199PERLVAR(I, rs, SV *) /* input record separator $/ */
200PERLVAR(I, last_in_gv, GV *) /* GV used in last <FH> */
201PERLVAR(I, ofsgv, GV *) /* GV of output field separator *, */
202PERLVAR(I, defoutgv, GV *) /* default FH for output */
203PERLVARI(I, chopset, const char *, " \n-") /* $: */
204PERLVAR(I, formtarget, SV *)
205PERLVAR(I, bodytarget, SV *)
206PERLVAR(I, toptarget, SV *)
907b3e23 207
115ff745
NC
208
209PERLVAR(I, restartop, OP *) /* propagating an error from croak? */
210PERLVAR(I, restartjmpenv, JMPENV *) /* target frame for longjmp in die */
907b3e23 211
115ff745
NC
212PERLVAR(I, top_env, JMPENV *) /* ptr to current sigjmp environment */
213PERLVAR(I, start_env, JMPENV) /* empty startup sigjmp environment */
214PERLVARI(I, errors, SV *, NULL) /* outstanding queued errors */
907b3e23
DM
215
216/* statics "owned" by various functions */
115ff745 217PERLVAR(I, hv_fetch_ent_mh, HE*) /* owned by hv_fetch_ent() */
907b3e23 218
115ff745 219PERLVAR(I, lastgotoprobe, OP*) /* from pp_ctl.c */
907b3e23
DM
220
221/* sort stuff */
115ff745
NC
222PERLVAR(I, sortcop, OP *) /* user defined sort routine */
223PERLVAR(I, sortstash, HV *) /* which is in some package or other */
224PERLVAR(I, firstgv, GV *) /* $a */
225PERLVAR(I, secondgv, GV *) /* $b */
907b3e23
DM
226
227/* float buffer */
115ff745
NC
228PERLVAR(I, efloatbuf, char *)
229PERLVAR(I, efloatsize, STRLEN)
907b3e23 230
115ff745 231PERLVARI(I, dumpindent, U16, 4) /* number of blanks per dump
907b3e23
DM
232 indentation level */
233
e914d9bb 234PERLVAR(I, exit_flags, U8) /* was exit() unexpected, etc. */
157b3822 235
115ff745 236PERLVAR(I, utf8locale, bool) /* utf8 locale detected */
31f05a37 237PERLVAR(I, in_utf8_CTYPE_locale, bool)
907b3e23 238
87c1d905 239PERLVARA(I, colors,6, char *) /* values from PERL_RE_COLORS env var */
907b3e23 240
9ea12537
Z
241/*
242=for apidoc Amn|peep_t|PL_peepp
243
244Pointer to the per-subroutine peephole optimiser. This is a function
245that gets called at the end of compilation of a Perl subroutine (or
246equivalently independent piece of Perl code) to perform fixups of
247some ops and to perform small-scale optimisations. The function is
248called once for each subroutine that is compiled, and is passed, as sole
249parameter, a pointer to the op that is the entry point to the subroutine.
250It modifies the op tree in place.
251
252The peephole optimiser should never be completely replaced. Rather,
253add code to it by wrapping the existing optimiser. The basic way to do
254this can be seen in L<perlguts/Compile pass 3: peephole optimization>.
255If the new code wishes to operate on ops throughout the subroutine's
256structure, rather than just at the top level, it is likely to be more
257convenient to wrap the L</PL_rpeepp> hook.
258
259=cut
260*/
261
115ff745 262PERLVARI(I, peepp, peep_t, Perl_peep)
9ea12537
Z
263
264/*
265=for apidoc Amn|peep_t|PL_rpeepp
266
267Pointer to the recursive peephole optimiser. This is a function
268that gets called at the end of compilation of a Perl subroutine (or
269equivalently independent piece of Perl code) to perform fixups of some
270ops and to perform small-scale optimisations. The function is called
271once for each chain of ops linked through their C<op_next> fields;
272it is recursively called to handle each side chain. It is passed, as
273sole parameter, a pointer to the op that is at the head of the chain.
274It modifies the op tree in place.
275
276The peephole optimiser should never be completely replaced. Rather,
277add code to it by wrapping the existing optimiser. The basic way to do
278this can be seen in L<perlguts/Compile pass 3: peephole optimization>.
279If the new code wishes to operate only on ops at a subroutine's top level,
280rather than throughout the structure, it is likely to be more convenient
281to wrap the L</PL_peepp> hook.
282
283=cut
284*/
285
115ff745 286PERLVARI(I, rpeepp, peep_t, Perl_rpeep)
907b3e23 287
2f175318
VP
288/*
289=for apidoc Amn|Perl_ophook_t|PL_opfreehook
290
291When non-C<NULL>, the function pointed by this variable will be called each time an OP is freed with the corresponding OP as the argument.
292This allows extensions to free any extra attribute they have locally attached to an OP.
293It is also assured to first fire for the parent OP and then for its kids.
294
295When you replace this variable, it is considered a good practice to store the possibly previously installed hook and that you recall it inside your own.
296
297=cut
298*/
299
115ff745 300PERLVARI(I, opfreehook, Perl_ophook_t, 0) /* op_free() hook */
f37b8c3f 301
115ff745
NC
302PERLVARI(I, watchaddr, char **, 0)
303PERLVAR(I, watchok, char *)
907b3e23 304
115ff745 305PERLVAR(I, perldb, U32)
d95e864f 306
115ff745 307PERLVAR(I, signals, U32) /* Using which pre-5.8 signals */
30b0736d 308
79968a97
NC
309PERLVAR(I, reentrant_retint, int) /* Integer return value from reentrant functions */
310
49f531da 311/* pseudo environmental stuff */
115ff745
NC
312PERLVAR(I, origargc, int)
313PERLVAR(I, origargv, char **)
314PERLVAR(I, envgv, GV *)
315PERLVAR(I, incgv, GV *)
316PERLVAR(I, hintgv, GV *)
317PERLVAR(I, origfilename, char *)
9a189793 318PERLVARI(I, xsubfilename, const char *, NULL)
115ff745
NC
319PERLVAR(I, diehook, SV *)
320PERLVAR(I, warnhook, SV *)
1d7c1841
GS
321
322/* switches */
115ff745 323PERLVAR(I, patchlevel, SV *)
115ff745
NC
324PERLVAR(I, localpatches, const char * const *)
325PERLVARI(I, splitstr, const char *, " ")
326
327PERLVAR(I, minus_c, bool)
328PERLVAR(I, minus_n, bool)
329PERLVAR(I, minus_p, bool)
330PERLVAR(I, minus_l, bool)
331PERLVAR(I, minus_a, bool)
332PERLVAR(I, minus_F, bool)
333PERLVAR(I, doswitches, bool)
334PERLVAR(I, minus_E, bool)
954c1994 335
115ff745
NC
336PERLVAR(I, inplace, char *)
337PERLVAR(I, e_script, SV *)
49f531da 338
115ff745 339PERLVAR(I, basetime, Time_t) /* $^T */
d4cce5f1 340
115ff745 341PERLVARI(I, maxsysfd, I32, MAXSYSFD)
cb68f92d 342 /* top fd to pass to subprocesses */
115ff745 343PERLVAR(I, statusvalue, I32) /* $? */
49f531da 344#ifdef VMS
115ff745 345PERLVAR(I, statusvalue_vms, U32)
e5218da5 346#else
115ff745 347PERLVAR(I, statusvalue_posix, I32)
49f531da
NIS
348#endif
349
115ff745
NC
350PERLVARI(I, sig_pending, int, 0) /* Number if highest signal pending */
351PERLVAR(I, psig_pend, int *) /* per-signal "count" of pending */
157b3822 352
49f531da 353/* shortcuts to various I/O objects */
115ff745
NC
354PERLVAR(I, stdingv, GV *) /* *STDIN */
355PERLVAR(I, stderrgv, GV *) /* *STDERR */
115ff745
NC
356PERLVAR(I, argvgv, GV *) /* *ARGV */
357PERLVAR(I, argvoutgv, GV *) /* *ARGVOUT */
358PERLVAR(I, argvout_stack, AV *)
49f531da
NIS
359
360/* shortcuts to regexp stuff */
115ff745 361PERLVAR(I, replgv, GV *) /* *^R */
49f531da
NIS
362
363/* shortcuts to misc objects */
115ff745 364PERLVAR(I, errgv, GV *) /* *@ */
49f531da
NIS
365
366/* shortcuts to debugging objects */
115ff745
NC
367PERLVAR(I, DBgv, GV *) /* *DB::DB */
368PERLVAR(I, DBline, GV *) /* *DB::line */
954c1994
GS
369
370/*
2eb25c99 371=for apidoc mn|GV *|PL_DBsub
954c1994
GS
372When Perl is run in debugging mode, with the B<-d> switch, this GV contains
373the SV which holds the name of the sub being debugged. This is the C
374variable which corresponds to Perl's $DB::sub variable. See
375C<PL_DBsingle>.
376
2eb25c99 377=for apidoc mn|SV *|PL_DBsingle
954c1994 378When Perl is run in debugging mode, with the B<-d> switch, this SV is a
7889fe52 379boolean which indicates whether subs are being single-stepped.
954c1994
GS
380Single-stepping is automatically turned on after every step. This is the C
381variable which corresponds to Perl's $DB::single variable. See
382C<PL_DBsub>.
383
2eb25c99 384=for apidoc mn|SV *|PL_DBtrace
954c1994
GS
385Trace variable used when Perl is run in debugging mode, with the B<-d>
386switch. This is the C variable which corresponds to Perl's $DB::trace
387variable. See C<PL_DBsingle>.
388
389=cut
390*/
391
115ff745
NC
392PERLVAR(I, DBsub, GV *) /* *DB::sub */
393PERLVAR(I, DBsingle, SV *) /* $DB::single */
394PERLVAR(I, DBtrace, SV *) /* $DB::trace */
395PERLVAR(I, DBsignal, SV *) /* $DB::signal */
396PERLVAR(I, dbargs, AV *) /* args to call listed by caller function */
49f531da 397
a6d69523
TC
398PERLVARA(I, DBcontrol, DBVARMG_COUNT, IV) /* IV versions of $DB::single, trace, signal */
399
49f531da 400/* symbol tables */
115ff745
NC
401PERLVAR(I, debstash, HV *) /* symbol table for perldb package */
402PERLVAR(I, globalstash, HV *) /* global keyword overrides imported here */
403PERLVAR(I, curstname, SV *) /* name of current package */
404PERLVAR(I, beginav, AV *) /* names of BEGIN subroutines */
405PERLVAR(I, endav, AV *) /* names of END subroutines */
406PERLVAR(I, unitcheckav, AV *) /* names of UNITCHECK subroutines */
407PERLVAR(I, checkav, AV *) /* names of CHECK subroutines */
408PERLVAR(I, initav, AV *) /* names of INIT subroutines */
49f531da 409
49f531da 410/* subprocess state */
115ff745 411PERLVAR(I, fdpid, AV *) /* keep fd-to-pid mappings for my_popen */
49f531da
NIS
412
413/* internal state */
115ff745 414PERLVARI(I, op_mask, char *, NULL) /* masked operations for safe evals */
49f531da 415
49f531da 416/* current interpreter roots */
115ff745
NC
417PERLVAR(I, main_cv, CV *)
418PERLVAR(I, main_root, OP *)
419PERLVAR(I, main_start, OP *)
420PERLVAR(I, eval_root, OP *)
421PERLVAR(I, eval_start, OP *)
49f531da
NIS
422
423/* runtime control stuff */
115ff745 424PERLVARI(I, curcopdb, COP *, NULL)
49f531da 425
115ff745
NC
426PERLVAR(I, filemode, int) /* so nextargv() can preserve mode */
427PERLVAR(I, lastfd, int) /* what to preserve mode on */
428PERLVAR(I, oldname, char *) /* what to preserve mode on */
429PERLVAR(I, Argv, const char **) /* stuff to free from do_aexec, vfork safe */
430PERLVAR(I, Cmd, char *) /* stuff to free from do_aexec, vfork safe */
00accf8d
NC
431/* Elements in this array have ';' appended and are injected as a single line
432 into the tokeniser. You can't put any (literal) newlines into any program
433 you stuff in into this array, as the point where it's injected is expecting
434 a single physical line. */
115ff745
NC
435PERLVAR(I, preambleav, AV *)
436PERLVAR(I, mess_sv, SV *)
437PERLVAR(I, ors_sv, SV *) /* output record separator $\ */
19bc2726 438
79968a97
NC
439/* funky return mechanisms */
440PERLVAR(I, forkprocess, int) /* so do_open |- can return proc# */
441
71eebe1e 442/* statics moved here for shared library purposes */
115ff745
NC
443PERLVARI(I, gensym, I32, 0) /* next symbol for getsym() to define */
444PERLVARI(I, cv_has_eval, bool, FALSE) /* PL_compcv includes an entereval or similar */
445PERLVAR(I, taint_warn, bool) /* taint warns instead of dying */
446PERLVARI(I, laststype, U16, OP_STAT)
19bc2726 447
115ff745 448PERLVARI(I, laststatval, int, -1)
d4cce5f1 449
19bc2726
DM
450PERLVAR(I, modcount, I32) /* how much op_lvalue()ification in
451 assignment? */
452
4b556e6c 453/* interpreter atexit processing */
115ff745
NC
454PERLVARI(I, exitlistlen, I32, 0) /* length of same */
455PERLVARI(I, exitlist, PerlExitListEntry *, NULL)
cb68f92d 456 /* list of exit functions */
954c1994
GS
457
458/*
459=for apidoc Amn|HV*|PL_modglobal
460
7889fe52 461C<PL_modglobal> is a general purpose, interpreter global HV for use by
954c1994 462extensions that need to keep information on a per-interpreter basis.
7889fe52
NIS
463In a pinch, it can also be used as a symbol table for extensions
464to share data among each other. It is a good idea to use keys
954c1994
GS
465prefixed by the package name of the extension that owns the data.
466
467=cut
468*/
469
115ff745 470PERLVAR(I, modglobal, HV *) /* per-interp module data */
cb68f92d
GS
471
472/* these used to be in global before 5.004_68 */
115ff745 473PERLVARI(I, profiledata, U32 *, NULL) /* table of ops, counts */
cb68f92d 474
115ff745 475PERLVAR(I, compiling, COP) /* compiling/done executing marker */
cb68f92d 476
115ff745 477PERLVAR(I, compcv, CV *) /* currently compiling subroutine */
36c300bb 478PERLVAR(I, comppad_name, PADNAMELIST *) /* variable names for "my" variables */
115ff745
NC
479PERLVAR(I, comppad_name_fill, I32) /* last "introduced" variable offset */
480PERLVAR(I, comppad_name_floor, I32) /* start of vars in innermost block */
4b556e6c
JD
481
482#ifdef HAVE_INTERP_INTERN
115ff745 483PERLVAR(I, sys_intern, struct interp_intern)
cb68f92d 484 /* platform internals */
4b556e6c
JD
485#endif
486
7fae4e64 487/* more statics moved here */
115ff745
NC
488PERLVAR(I, DBcv, CV *) /* from perl.c */
489PERLVARI(I, generation, int, 100) /* from op.c */
56953603 490
19bc2726
DM
491PERLVAR(I, unicode, U32) /* Unicode features: $ENV{PERL_UNICODE} or -C */
492
115ff745
NC
493PERLVARI(I, in_clean_objs,bool, FALSE) /* from sv.c */
494PERLVARI(I, in_clean_all, bool, FALSE) /* ptrs to freed SVs now legal */
495PERLVAR(I, nomemok, bool) /* let malloc context handle nomem */
496PERLVARI(I, savebegin, bool, FALSE) /* save BEGINs for compiler */
7fae4e64 497
19bc2726 498
985213f2
AB
499PERLVAR(I, delaymagic_uid, Uid_t) /* current real user id, only for delaymagic */
500PERLVAR(I, delaymagic_euid, Uid_t) /* current effective user id, only for delaymagic */
501PERLVAR(I, delaymagic_gid, Gid_t) /* current real group id, only for delaymagic */
502PERLVAR(I, delaymagic_egid, Gid_t) /* current effective group id, only for delaymagic */
115ff745 503PERLVARI(I, an, U32, 0) /* malloc sequence number */
be2b6a89 504
79968a97
NC
505/* Perl_Ibreakable_sub_generation_ptr was too long for VMS, hence "gen" */
506PERLVARI(I, breakable_sub_gen, U32, 0)
507
be2b6a89
DM
508#ifdef DEBUGGING
509 /* exercise wrap-around */
510 #define PERL_COP_SEQMAX (U32_MAX-50)
511#else
512 #define PERL_COP_SEQMAX 0
513#endif
115ff745 514PERLVARI(I, cop_seqmax, U32, PERL_COP_SEQMAX) /* statement sequence number */
be2b6a89
DM
515#undef PERL_COP_SEQMAX
516
115ff745
NC
517PERLVARI(I, evalseq, U32, 0) /* eval sequence number */
518PERLVAR(I, origalen, U32)
519PERLVAR(I, origenviron, char **)
ca0c25f6 520#ifdef PERL_USES_PL_PIDSTATUS
115ff745 521PERLVAR(I, pidstatus, HV *) /* pid-to-status mappings for waitpid */
ca0c25f6 522#endif
115ff745 523PERLVAR(I, osname, char *) /* operating system */
5c728af0 524
115ff745 525PERLVAR(I, sighandlerp, Sighandler_t)
0672f40e 526
115ff745 527PERLVARA(I, body_roots, PERL_ARENA_ROOTS_SIZE, void*) /* array of body roots */
93e68bfb 528
79968a97
NC
529PERLVAR(I, debug, VOL U32) /* flags given to -D switch */
530
115ff745 531PERLVARI(I, maxo, int, MAXO) /* maximum number of ops */
9f7da6d5 532
115ff745 533PERLVARI(I, runops, runops_proc_t, RUNOPS_DEFAULT)
0672f40e 534
115ff745 535PERLVAR(I, subname, SV *) /* name of current subroutine */
0672f40e 536
115ff745
NC
537PERLVAR(I, subline, I32) /* line this subroutine began on */
538PERLVAR(I, min_intro_pending, I32) /* start of vars to introduce */
d95e864f 539
115ff745 540PERLVAR(I, max_intro_pending, I32) /* end of vars to introduce */
8ce2f624
FC
541PERLVAR(I, padix, I32) /* lowest unused index - 1
542 in current "register" pad */
b54c5e14 543PERLVAR(I, constpadix, I32) /* lowest unused for constants */
d95e864f 544
115ff745 545PERLVAR(I, padix_floor, I32) /* how low may inner block reset padix */
0672f40e 546
0672f40e 547#ifdef USE_LOCALE_COLLATE
115ff745
NC
548PERLVAR(I, collation_name, char *) /* Name of current collation */
549PERLVAR(I, collxfrm_base, Size_t) /* Basic overhead in *xfrm() */
550PERLVARI(I, collxfrm_mult,Size_t, 2) /* Expansion factor in *xfrm() */
551PERLVARI(I, collation_ix, U32, 0) /* Collation generation index */
552PERLVARI(I, collation_standard, bool, TRUE)
9f7da6d5 553 /* Assume simple collation */
0672f40e
GS
554#endif /* USE_LOCALE_COLLATE */
555
19bc2726
DM
556#ifdef PERL_SAWAMPERSAND
557PERLVAR(I, sawampersand, U8) /* must save all match strings */
9f7da6d5 558#endif
95ca8690 559
19bc2726 560PERLVAR(I, unsafe, bool)
87c1d905 561PERLVAR(I, colorset, bool) /* PERL_RE_COLORS env var is in use */
19bc2726 562
79968a97
NC
563/* current phase the interpreter is in
564 for ordering this structure to remove holes, we're assuming that this is 4
565 bytes. */
566PERLVARI(I, phase, enum perl_phase, PERL_PHASE_CONSTRUCT)
567
568PERLVARI(I, in_load_module, bool, FALSE) /* to prevent recursions in PerlIO_find_layer */
569
570/* This value may be set when embedding for full cleanup */
571/* 0=none, 1=full, 2=full with checks */
572/* mod_perl is special, and also assigns a meaning -1 */
573PERLVARI(I, perl_destruct_level, signed char, 0)
9f7da6d5 574
0672f40e
GS
575#ifdef USE_LOCALE_NUMERIC
576
7738054c 577PERLVARI(I, numeric_standard, int, TRUE)
0672f40e 578 /* Assume simple numerics */
115ff745 579PERLVARI(I, numeric_local, bool, TRUE)
0672f40e 580 /* Assume local numerics */
115ff745
NC
581PERLVAR(I, numeric_name, char *) /* Name of current numeric locale */
582PERLVAR(I, numeric_radix_sv, SV *) /* The radix separator if not '.' */
f8115845 583
0672f40e
GS
584#endif /* !USE_LOCALE_NUMERIC */
585
a3e1f3a6 586/* Unicode inversion lists */
a3e1f3a6 587PERLVAR(I, Latin1, SV *)
892d8259 588PERLVAR(I, UpperLatin1, SV *) /* Code points 128 - 255 */
a3e1f3a6 589PERLVAR(I, AboveLatin1, SV *)
e0a1ff7a 590PERLVAR(I, InBitmap, SV *)
a3e1f3a6 591
26faadbd 592PERLVAR(I, NonL1NonFinalFold, SV *)
9d53c457 593PERLVAR(I, HasMultiCharFold, SV *)
26faadbd 594
a3e1f3a6 595/* utf8 character class swashes */
115ff745 596PERLVAR(I, utf8_mark, SV *)
27d4fc33 597PERLVAR(I, utf8_X_regular_begin, SV *)
115ff745 598PERLVAR(I, utf8_X_extend, SV *)
115ff745
NC
599PERLVAR(I, utf8_toupper, SV *)
600PERLVAR(I, utf8_totitle, SV *)
601PERLVAR(I, utf8_tolower, SV *)
602PERLVAR(I, utf8_tofold, SV *)
bde9e88d
KW
603PERLVAR(I, utf8_charname_begin, SV *)
604PERLVAR(I, utf8_charname_continue, SV *)
30f9bdb0 605
63c61c3f 606PERLVARA(I, utf8_swash_ptrs, POSIX_SWASH_COUNT, SV *)
30f9bdb0 607PERLVARA(I, Posix_ptrs, POSIX_CC_COUNT, SV *)
cac6e0ca
KW
608PERLVARA(I, XPosix_ptrs, POSIX_CC_COUNT, SV *)
609
115ff745
NC
610PERLVAR(I, last_swash_hv, HV *)
611PERLVAR(I, last_swash_tmps, U8 *)
612PERLVAR(I, last_swash_slen, STRLEN)
6c2f1a55 613PERLVARA(I, last_swash_key,UTF8_MAXBYTES-1, U8)
45d91b83 614PERLVAR(I, last_swash_klen, U8) /* Only needs to store 0-12 */
d95e864f
NC
615
616#ifdef FCRYPT
115ff745 617PERLVARI(I, cryptseen, bool, FALSE) /* has fast crypt() been initialized? */
79968a97
NC
618#else
619/* One byte hole in the interpreter structure. */
d95e864f
NC
620#endif
621
115ff745 622PERLVAR(I, pad_reset_pending, bool) /* reset pad on next attempted alloc */
e6b4660c 623PERLVAR(I, srand_called, bool)
12fbd33b 624
c4a30c8c
NC
625/* Array of signal handlers, indexed by signal number, through which the C
626 signal handler dispatches. */
115ff745 627PERLVAR(I, psig_ptr, SV **)
c4a30c8c 628/* Array of names of signals, indexed by signal number, for (re)use as the first
d525a7b2
NC
629 argument to a signal handler. Only one block of memory is allocated for
630 both psig_name and psig_ptr. */
115ff745 631PERLVAR(I, psig_name, SV **)
1d7c1841 632
c5be433b 633#if defined(PERL_IMPLICIT_SYS)
115ff745
NC
634PERLVAR(I, Mem, struct IPerlMem *)
635PERLVAR(I, MemShared, struct IPerlMem *)
636PERLVAR(I, MemParse, struct IPerlMem *)
637PERLVAR(I, Env, struct IPerlEnv *)
638PERLVAR(I, StdIO, struct IPerlStdIO *)
639PERLVAR(I, LIO, struct IPerlLIO *)
640PERLVAR(I, Dir, struct IPerlDir *)
641PERLVAR(I, Sock, struct IPerlSock *)
642PERLVAR(I, Proc, struct IPerlProc *)
76e3520e 643#endif
1d7c1841 644
115ff745
NC
645PERLVAR(I, ptr_table, PTR_TBL_t *)
646PERLVARI(I, beginav_save, AV *, NULL) /* save BEGIN{}s when compiling */
f180df80 647
115ff745 648PERLVAR(I, body_arenas, void *) /* pointer to list of body-arenas */
93e68bfb 649
d95e864f 650
1fcf4c12 651#if defined(USE_ITHREADS)
115ff745 652PERLVAR(I, regex_pad, SV **) /* Shortcut into the array of
e6853197 653 regex_padav */
115ff745 654PERLVAR(I, regex_padav, AV *) /* All regex objects, indexed via the
e6853197 655 values in op_pmoffset of pmop.
402d2eb1
NC
656 Entry 0 is an SV whose PV is a
657 "packed" list of IVs listing
e6853197 658 the now-free slots in the array */
d4d03940
FC
659PERLVAR(I, stashpad, HV **) /* for CopSTASH */
660PERLVARI(I, stashpadmax, PADOFFSET, 64)
661PERLVARI(I, stashpadix, PADOFFSET, 0)
1fcf4c12
AB
662#endif
663
ea68fd67 664#ifdef USE_REENTRANT_API
115ff745 665PERLVAR(I, reentrant_buffer, REENTR *) /* here we store the _r buffers */
f5a82810
JH
666#endif
667
115ff745
NC
668PERLVAR(I, custom_op_names, HV *) /* Names of user defined ops */
669PERLVAR(I, custom_op_descs, HV *) /* Descriptions of user defined ops */
19e8ce8e 670
a1ea730d 671#ifdef PERLIO_LAYERS
115ff745
NC
672PERLVARI(I, perlio, PerlIOl *, NULL)
673PERLVARI(I, known_layers, PerlIO_list_t *, NULL)
674PERLVARI(I, def_layerlist, PerlIO_list_t *, NULL)
a1ea730d
NIS
675#endif
676
3e669301
KW
677PERLVARI(I, encoding, SV *, NULL) /* $^ENCODING */
678PERLVARI(I, lex_encoding, SV *, NULL) /* encoding pragma */
0a378802 679
115ff745
NC
680PERLVAR(I, utf8_idstart, SV *)
681PERLVAR(I, utf8_idcont, SV *)
682PERLVAR(I, utf8_xidstart, SV *)
b6912c02 683PERLVAR(I, utf8_perl_idstart, SV *)
eba68aa0 684PERLVAR(I, utf8_perl_idcont, SV *)
115ff745 685PERLVAR(I, utf8_xidcont, SV *)
82686b01 686
115ff745 687PERLVAR(I, sort_RealCmp, SVCOMPARE_t)
147f47de 688
115ff745
NC
689PERLVARI(I, checkav_save, AV *, NULL) /* save CHECK{}s when compiling */
690PERLVARI(I, unitcheckav_save, AV *, NULL)
691 /* save UNITCHECK{}s when compiling */
ece599bd 692
115ff745 693PERLVARI(I, clocktick, long, 0) /* this many times() ticks in a second */
5311654c 694
15a5279a 695/* Hooks to shared SVs and locks. */
115ff745
NC
696PERLVARI(I, sharehook, share_proc_t, Perl_sv_nosharing)
697PERLVARI(I, lockhook, share_proc_t, Perl_sv_nosharing)
d0647d4e
NC
698#ifdef NO_MATHOMS
699# define PERL_UNLOCK_HOOK Perl_sv_nosharing
700#else
701/* This reference ensures that the mathoms are linked with perl */
702# define PERL_UNLOCK_HOOK Perl_sv_nounlocking
703#endif
115ff745 704PERLVARI(I, unlockhook, share_proc_t, PERL_UNLOCK_HOOK)
d0647d4e 705
115ff745 706PERLVARI(I, threadhook, thrhook_proc_t, Perl_nothreadhook)
15a5279a 707
9e08d3a4 708/* Can shared object be destroyed */
115ff745 709PERLVARI(I, destroyhook, destroyable_proc_t, Perl_sv_destroyable)
9e08d3a4 710
01d65469 711#ifndef PERL_MICRO
115ff745 712PERLVARI(I, signalhook, despatch_signals_proc_t, Perl_despatch_signals)
01d65469 713#endif
92f022bb 714
115ff745 715PERLVARI(I, isarev, HV *, NULL) /* Reverse map of @ISA dependencies */
f16dd614 716
9e08d3a4
NC
717/* Register of known Method Resolution Orders.
718 What this actually points to is an implementation detail (it may change to
719 a structure incorporating a reference count - use mro_get_from_name to
720 retrieve a C<struct mro_alg *> */
115ff745 721PERLVAR(I, registered_mros, HV *)
9e08d3a4
NC
722
723/* Compile-time block start/end hooks */
115ff745 724PERLVAR(I, blockhooks, AV *)
9e08d3a4
NC
725
726/* Everything that folds to a given character, for case insensitivity regex
727 * matching */
115ff745 728PERLVARI(I, utf8_foldclosures, HV *, NULL)
9e08d3a4
NC
729
730/* List of characters that participate in folds (except marks, etc in
731 * multi-char folds) */
115ff745 732PERLVARI(I, utf8_foldable, SV *, NULL)
9e08d3a4 733
115ff745 734PERLVAR(I, custom_ops, HV *) /* custom op registrations */
9e08d3a4 735
19bc2726
DM
736PERLVAR(I, Xpv, XPV *) /* (unused) held temporary value */
737
738/* name of the scopes we've ENTERed. Only used with -DDEBUGGING, but needs to be
739 present always, as -DDEBUGGING must be binary compatible with non. */
740PERLVARI(I, scopestack_name, const char * *, NULL)
741
742PERLVAR(I, debug_pad, struct perl_debug_pad) /* always needed because of the re extension */
743
d67594ff
FC
744/* Hook for File::Glob */
745PERLVARI(I, globhook, globhook_t, NULL)
746
3f572b05 747/* The last unconditional member of the interpreter structure when 5.21.7 was
ffee3ff6
NC
748 released. The offset of the end of this is baked into a global variable in
749 any shared perl library which will allow a sanity test in future perl
750 releases. */
d399cf59 751#define PERL_LAST_5_18_0_INTERP_MEMBER Iglobhook
ffee3ff6 752
f16dd614 753#ifdef PERL_IMPLICIT_CONTEXT
115ff745 754PERLVARI(I, my_cxt_list, void **, NULL) /* per-module array of MY_CXT pointers */
817b0f24 755PERLVARI(I, my_cxt_size, int, 0) /* size of PL_my_cxt_list */
ba6d381e 756# ifdef PERL_GLOBAL_STRUCT_PRIVATE
115ff745 757PERLVARI(I, my_cxt_keys, const char **, NULL) /* per-module array of pointers to MY_CXT_KEY constants */
ba6d381e 758# endif
f16dd614
DM
759#endif
760
7cb608b5
NC
761#ifdef PERL_TRACK_MEMPOOL
762/* For use with the memory debugging code in util.c */
115ff745 763PERLVAR(I, memory_debug_header, struct perl_memory_debug_header)
7cb608b5
NC
764#endif
765
ba6d381e
NC
766#ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
767/* File descriptor to talk to the child which dumps scalars. */
115ff745 768PERLVARI(I, dumper_fd, int, -1)
ba6d381e
NC
769#endif
770
ba6d381e 771
d7a2c63c 772#ifdef DEBUG_LEAKING_SCALARS
115ff745 773PERLVARI(I, sv_serial, U32, 0) /* SV serial number, used in sv.c */
d7a2c63c
MHM
774#endif
775
a38ab475
RZ
776PERLVARA(I, sv_consts, SV_CONSTS_COUNT, SV*) /* constant SVs with precomputed hash value */
777
75d476e2
SM
778#ifdef PERL_TRACE_OPS
779PERLVARA(I, op_exec_cnt, OP_max+2, UV) /* Counts of executed OPs of the given type.
780 If PERL_TRACE_OPS is enabled, we'll dump
781 a summary count of all ops executed in the
782 program at perl_destruct time. For
783 profiling/debugging only. Works only if
784 DEBUGGING is enabled, too. */
785#endif
786
3be8f094
TC
787PERLVAR(I, random_state, PL_RANDOM_STATE_TYPE)
788
157b3822
NC
789/* If you are adding a U8 or U16, check to see if there are 'Space' comments
790 * above on where there are gaps which currently will be structure padding. */
d95e864f
NC
791
792/* Within a stable branch, new variables must be added to the very end, before
793 * this comment, for binary compatibility (the offsets of the old members must
794 * not change).
b83cd129 795 * (Don't forget to add your variable also to perl_clone()!)
e3acbfda 796 * XSUB.h provides wrapper functions via perlapi.h that make this
b83cd129
JH
797 * irrelevant, but not all code may be expected to #include XSUB.h.
798 */