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