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