#include "handy.h"
-/*
-=head1 Per-Interpreter Variables
-*/
-
/* These variables are per-interpreter in threaded/multiplicity builds,
* global otherwise.
/* New variables must be added to the very end for binary compatibility. */
-/* Don't forget to add your variable also to perl_clone()! (in sv.c) */
+/* DON'T FORGET to add your variable also to perl_clone()! (in sv.c) */
/* The 'I' prefix is only needed for vars that need appropriate #defines
* generated when built with or without MULTIPLICITY. It is also used
PERLVAR(I, stack_max, SV **)
PERLVAR(I, savestack, ANY *) /* items that need to be restored when
- LEAVEing scopes we've ENTERed */
+ LEAVEing scopes we've ENTERed */
PERLVAR(I, savestack_ix, I32)
PERLVAR(I, savestack_max, I32)
PERLVAR(I, tmps_stack, SV **) /* mortals we've made */
PERLVARI(I, tmps_ix, SSize_t, -1)
PERLVARI(I, tmps_floor, SSize_t, -1)
-PERLVAR(I, tmps_max, SSize_t)
-
-PERLVARI(I, sub_generation, U32, 1) /* incr to invalidate method cache */
+PERLVAR(I, tmps_max, SSize_t) /* first unalloced slot in tmps stack */
PERLVAR(I, markstack, I32 *) /* stack_sp locations we're
- remembering */
+ remembering */
PERLVAR(I, markstack_ptr, I32 *)
PERLVAR(I, markstack_max, I32 *)
+PERLVARI(I, sub_generation, U32, 1) /* incr to invalidate method cache */
+
#ifdef PERL_HASH_RANDOMIZE_KEYS
#ifdef USE_PERL_PERTURB_KEYS
PERLVARI(I, hash_rand_bits_enabled, U8, 1) /* used to randomize hash stuff 0 == no-random, 1 == random, 2 == determinsitic */
/* Fields used by magic variables such as $@, $/ and so on */
PERLVAR(I, curpm, PMOP *) /* what to do \ interps in REs from */
+PERLVAR(I, curpm_under, PMOP *) /* what to do \ interps in REs from */
-PERLVAR(I, tainting, bool) /* doing taint checks */
+PERLVAR(I, tainting, bool) /* ? doing taint checks */
PERLVARI(I, tainted, bool, FALSE) /* using variables controlled by $< */
/* PL_delaymagic is currently used for two purposes: to assure simultaneous
*/
PERLVAR(I, delaymagic, U16) /* ($<,$>) = ... */
-PERLVAR(I, localizing, U8) /* are we processing a local() list? */
-PERLVAR(I, in_eval, U8) /* trap "fatal" errors? */
-PERLVAR(I, defgv, GV *) /* the *_ glob */
/*
+=for apidoc_section $warning
+=for apidoc mn|U8|PL_dowarn
-=for apidoc mn|bool|PL_dowarn
+The C variable that roughly corresponds to Perl's C<$^W> warning variable.
+However, C<$^W> is treated as a boolean, whereas C<PL_dowarn> is a
+collection of flag bits.
-The C variable which corresponds to Perl's C<$^W> warning variable.
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
=cut
*/
PERLVARI(I, utf8cache, I8, PERL___I) /* Is the utf8 caching code enabled? */
#undef PERL___I
+/*
+=for apidoc Amn|GV *|PL_defgv
+
+The GV representing C<*_>. Useful for access to C<$_>.
+
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
+=cut
+*/
+
+PERLVAR(I, localizing, U8) /* are we processing a local() list? */
+PERLVAR(I, in_eval, U8) /* trap "fatal" errors? */
+PERLVAR(I, defgv, GV *) /* the *_ glob */
+
+/*
+=for apidoc Amn|HV*|PL_curstash
+
+The stash for the package code will be compiled into.
+
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
+=cut
+*/
/* Stashes */
PERLVAR(I, defstash, HV *) /* main symbol table */
PERLVAR(I, curstash, HV *) /* symbol table for current package */
+/*
+=for apidoc Amn|COP*|PL_curcop
+
+The currently active COP (control op) roughly representing the current
+statement in the source.
+
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
+=cut
+*/
+
PERLVAR(I, curcop, COP *)
PERLVAR(I, curstack, AV *) /* THE STACK */
PERLVAR(I, curstackinfo, PERL_SI *) /* current stack + context */
PERLVAR(I, mainstack, AV *) /* the stack when nothing funny is
- happening */
+ happening */
/* memory management */
PERLVAR(I, sv_count, IV) /* how many SV* are currently allocated */
PERLVAR(I, comppad, PAD *) /* storage for lexically scoped temporaries */
/*
+=for apidoc_section $SV
=for apidoc Amn|SV|PL_sv_undef
-This is the C<undef> SV. Always refer to this as C<&PL_sv_undef>.
+This is the C<undef> SV. It is readonly. Always refer to this as
+C<&PL_sv_undef>.
=for apidoc Amn|SV|PL_sv_no
-This is the C<false> SV. See C<L</PL_sv_yes>>. Always refer to this as
-C<&PL_sv_no>.
+This is the C<false> SV. It is readonly. See C<L</PL_sv_yes>>. Always refer
+to this as C<&PL_sv_no>.
=for apidoc Amn|SV|PL_sv_yes
-This is the C<true> SV. See C<L</PL_sv_no>>. Always refer to this as
-C<&PL_sv_yes>.
+This is the C<true> SV. It is readonly. See C<L</PL_sv_no>>. Always refer to
+this as C<&PL_sv_yes>.
+
+=for apidoc Amn|SV|PL_sv_zero
+This readonly SV has a zero numeric value and a C<"0"> string value. It's
+similar to C<L</PL_sv_no>> except for its string value. Can be used as a
+cheap alternative to C<mXPUSHi(0)> for example. Always refer to this as
+C<&PL_sv_zero>. Introduced in 5.28.
=cut
*/
+#ifdef MULTIPLICITY
+PERLVAR(I, sv_yes, SV)
PERLVAR(I, sv_undef, SV)
PERLVAR(I, sv_no, SV)
-PERLVAR(I, sv_yes, SV)
+PERLVAR(I, sv_zero, SV)
+#else
+/* store the immortals as an array to ensure they are contiguous in
+ * memory: makes SvIMMORTAL_INTERP(sv) possible */
+PERLVARA(I, sv_immortals, 4, SV)
+#endif
+
PERLVAR(I, padname_undef, PADNAME)
PERLVAR(I, padname_const, PADNAME)
-PERLVAR(I, Sv, SV *) /* used to hold temporary values */
+
+/*
+=for apidoc Cmn||PL_Sv
+
+A scratch pad SV for whatever temporary use you need. Chiefly used as a
+fallback by macros on platforms where L<perlapi/PERL_USE_GCC_BRACE_GROUPS>> is
+unavailable, and which would otherwise evaluate their SV parameter more than
+once.
+
+=cut
+*/
+PERLVAR(I, Sv, SV *)
PERLVAR(I, parser, yy_parser *) /* current parser state */
*/
PERLVAR(I, na, STRLEN) /* for use in SvPV when length is
- Not Applicable */
+ Not Applicable */
/* stat stuff */
-PERLVAR(I, statbuf, Stat_t)
PERLVAR(I, statcache, Stat_t) /* _ */
PERLVAR(I, statgv, GV *)
PERLVARI(I, statname, SV *, NULL)
-#ifdef HAS_TIMES
-/* Will be removed soon after v5.21.0. See RT #121351 */
-PERLVAR(I, timesbuf, struct tms)
-#endif
-
/*
+=for apidoc_section $io
=for apidoc mn|SV*|PL_rs
The input record separator - C<$/> in Perl space.
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
=for apidoc mn|GV*|PL_last_in_gv
The GV which was last used for a filehandle input operation. (C<< <FH> >>)
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
=for apidoc mn|GV*|PL_ofsgv
The glob containing the output field separator - C<*,> in Perl space.
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
=cut
*/
PERLVAR(I, efloatsize, STRLEN)
PERLVARI(I, dumpindent, U16, 4) /* number of blanks per dump
- indentation level */
+ indentation level */
+
+/*
+=for apidoc_section $embedding
+=for apidoc Amn|U8|PL_exit_flags
+
+Contains flags controlling perl's behaviour on exit():
+
+=over
+
+=item * C<PERL_EXIT_DESTRUCT_END>
+
+If set, END blocks are executed when the interpreter is destroyed.
+This is normally set by perl itself after the interpreter is
+constructed.
+
+=item * C<PERL_EXIT_ABORT>
+
+Call C<abort()> on exit. This is used internally by perl itself to
+abort if exit is called while processing exit.
+
+=item * C<PERL_EXIT_WARN>
+
+Warn on exit.
+
+=item * C<PERL_EXIT_EXPECTED>
+
+Set by the L<perlfunc/exit> operator.
+
+=back
+
+=for apidoc Amnh||PERL_EXIT_EXPECTED
+=for apidoc Amnh||PERL_EXIT_ABORT
+=for apidoc Amnh||PERL_EXIT_DESTRUCT_END
+=for apidoc Amnh||PERL_EXIT_WARN
+
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
+=cut
+*/
PERLVAR(I, exit_flags, U8) /* was exit() unexpected, etc. */
PERLVAR(I, utf8locale, bool) /* utf8 locale detected */
PERLVAR(I, in_utf8_CTYPE_locale, bool)
+PERLVAR(I, in_utf8_COLLATE_locale, bool)
+PERLVAR(I, in_utf8_turkic_locale, bool)
+#if defined(USE_ITHREADS) && ! defined(USE_THREAD_SAFE_LOCALE)
+PERLVARI(I, lc_numeric_mutex_depth, int, 0) /* Emulate general semaphore */
+#endif
+PERLVARA(I, locale_utf8ness, 256, char)
+
#ifdef USE_LOCALE_CTYPE
PERLVAR(I, warn_locale, SV *)
#endif
PERLVARA(I, colors,6, char *) /* values from PERL_RE_COLORS env var */
/*
+=for apidoc_section $optree_construction
=for apidoc Amn|peep_t|PL_peepp
Pointer to the per-subroutine peephole optimiser. This is a function
structure, rather than just at the top level, it is likely to be more
convenient to wrap the L</PL_rpeepp> hook.
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
=cut
*/
rather than throughout the structure, it is likely to be more convenient
to wrap the L</PL_peepp> hook.
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
=cut
*/
When 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.
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
=cut
*/
PERLVAR(I, basetime, Time_t) /* $^T */
PERLVARI(I, maxsysfd, I32, MAXSYSFD)
- /* top fd to pass to subprocesses */
+ /* top fd to pass to subprocesses */
PERLVAR(I, statusvalue, I32) /* $? */
#ifdef VMS
PERLVAR(I, statusvalue_vms, U32)
PERLVAR(I, DBline, GV *) /* *DB::line */
/*
+=for apidoc_section $debugging
=for apidoc mn|GV *|PL_DBsub
When Perl is run in debugging mode, with the B<-d> switch, this GV contains
the SV which holds the name of the sub being debugged. This is the C
variable which corresponds to Perl's $DB::sub variable. See
C<L</PL_DBsingle>>.
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
=for apidoc mn|SV *|PL_DBsingle
When Perl is run in debugging mode, with the B<-d> switch, this SV is a
boolean which indicates whether subs are being single-stepped.
variable which corresponds to Perl's $DB::single variable. See
C<L</PL_DBsub>>.
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
=for apidoc mn|SV *|PL_DBtrace
Trace variable used when Perl is run in debugging mode, with the B<-d>
switch. This is the C variable which corresponds to Perl's $DB::trace
variable. See C<L</PL_DBsingle>>.
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
=cut
*/
PERLVAR(I, filemode, int) /* so nextargv() can preserve mode */
PERLVAR(I, lastfd, int) /* what to preserve mode on */
PERLVAR(I, oldname, char *) /* what to preserve mode on */
-PERLVAR(I, Argv, const char **) /* stuff to free from do_aexec, vfork safe */
-PERLVAR(I, Cmd, char *) /* stuff to free from do_aexec, vfork safe */
/* Elements in this array have ';' appended and are injected as a single line
into the tokeniser. You can't put any (literal) newlines into any program
you stuff in into this array, as the point where it's injected is expecting
PERLVARI(I, laststatval, int, -1)
PERLVAR(I, modcount, I32) /* how much op_lvalue()ification in
- assignment? */
+ assignment? */
/* interpreter atexit processing */
PERLVARI(I, exitlistlen, I32, 0) /* length of same */
PERLVARI(I, exitlist, PerlExitListEntry *, NULL)
- /* list of exit functions */
+ /* list of exit functions */
/*
+=for apidoc_section $HV
=for apidoc Amn|HV*|PL_modglobal
C<PL_modglobal> is a general purpose, interpreter global HV for use by
to share data among each other. It is a good idea to use keys
prefixed by the package name of the extension that owns the data.
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
=cut
*/
PERLVAR(I, compcv, CV *) /* currently compiling subroutine */
PERLVAR(I, comppad_name, PADNAMELIST *) /* variable names for "my" variables */
-PERLVAR(I, comppad_name_fill, I32) /* last "introduced" variable offset */
-PERLVAR(I, comppad_name_floor, I32) /* start of vars in innermost block */
+PERLVAR(I, comppad_name_fill, PADOFFSET)/* last "introduced" variable offset */
+PERLVAR(I, comppad_name_floor, PADOFFSET)/* start of vars in innermost block */
#ifdef HAVE_INTERP_INTERN
PERLVAR(I, sys_intern, struct interp_intern)
- /* platform internals */
+ /* platform internals */
#endif
/* more statics moved here */
#endif
PERLVAR(I, osname, char *) /* operating system */
-PERLVAR(I, sighandlerp, Sighandler_t)
+PERLVAR(I, sighandlerp, Sighandler_t)
+/* these two are provided only to solve library linkage issues; they
+ * should not be hooked by user code */
+PERLVAR(I, sighandler1p, Sighandler1_t)
+PERLVAR(I, sighandler3p, Sighandler3_t)
PERLVARA(I, body_roots, PERL_ARENA_ROOTS_SIZE, void*) /* array of body roots */
-PERLVAR(I, debug, VOL U32) /* flags given to -D switch */
+PERLVAR(I, debug, volatile U32) /* flags given to -D switch */
-PERLVARI(I, maxo, int, MAXO) /* maximum number of ops */
+PERLVARI(I, padlist_generation, U32, 1) /* id to identify padlist clones */
PERLVARI(I, runops, runops_proc_t, RUNOPS_DEFAULT)
PERLVAR(I, subname, SV *) /* name of current subroutine */
PERLVAR(I, subline, I32) /* line this subroutine began on */
-PERLVAR(I, min_intro_pending, I32) /* start of vars to introduce */
+PERLVAR(I, min_intro_pending, PADOFFSET)/* start of vars to introduce */
+
+PERLVAR(I, max_intro_pending, PADOFFSET)/* end of vars to introduce */
+PERLVAR(I, padix, PADOFFSET) /* lowest unused index - 1
+ in current "register" pad */
+PERLVAR(I, constpadix, PADOFFSET) /* lowest unused for constants */
+
+PERLVAR(I, padix_floor, PADOFFSET) /* how low may inner block reset padix */
-PERLVAR(I, max_intro_pending, I32) /* end of vars to introduce */
-PERLVAR(I, padix, I32) /* lowest unused index - 1
- in current "register" pad */
-PERLVAR(I, constpadix, I32) /* lowest unused for constants */
+#if defined(USE_POSIX_2008_LOCALE) \
+ && defined(USE_THREAD_SAFE_LOCALE) \
+ && ! defined(HAS_QUERYLOCALE)
-PERLVAR(I, padix_floor, I32) /* how low may inner block reset padix */
+/* This is the most number of categories we've encountered so far on any
+ * platform */
+PERLVARA(I, curlocales, 12, char *)
+#endif
#ifdef USE_LOCALE_COLLATE
+
PERLVAR(I, collation_name, char *) /* Name of current collation */
PERLVAR(I, collxfrm_base, Size_t) /* Basic overhead in *xfrm() */
PERLVARI(I, collxfrm_mult,Size_t, 2) /* Expansion factor in *xfrm() */
PERLVARI(I, collation_ix, U32, 0) /* Collation generation index */
+PERLVARI(I, strxfrm_NUL_replacement, U8, 0) /* Code point to replace NULs */
+PERLVARI(I, strxfrm_is_behaved, bool, TRUE)
+ /* Assume until proven otherwise that it works */
+PERLVARI(I, strxfrm_max_cp, U8, 0) /* Highest collating cp in locale */
PERLVARI(I, collation_standard, bool, TRUE)
- /* Assume simple collation */
+ /* Assume simple collation */
#endif /* USE_LOCALE_COLLATE */
+PERLVARI(I, langinfo_buf, char *, NULL)
+PERLVARI(I, langinfo_bufsize, Size_t, 0)
+PERLVARI(I, setlocale_buf, char *, NULL)
+PERLVARI(I, setlocale_bufsize, Size_t, 0)
+
#ifdef PERL_SAWAMPERSAND
PERLVAR(I, sawampersand, U8) /* must save all match strings */
#endif
-PERLVAR(I, unsafe, bool)
-PERLVAR(I, colorset, bool) /* PERL_RE_COLORS env var is in use */
-
/* current phase the interpreter is in
for ordering this structure to remove holes, we're assuming that this is 4
bytes. */
PERLVARI(I, in_load_module, bool, FALSE) /* to prevent recursions in PerlIO_find_layer */
-/* This value may be set when embedding for full cleanup */
-/* 0=none, 1=full, 2=full with checks */
-/* mod_perl is special, and also assigns a meaning -1 */
-PERLVARI(I, perl_destruct_level, signed char, 0)
+PERLVAR(I, unsafe, bool)
+PERLVAR(I, colorset, bool) /* PERL_RE_COLORS env var is in use */
-#ifdef USE_LOCALE_NUMERIC
+/*
+=for apidoc_section $embedding
+=for apidoc Amn|signed char|PL_perl_destruct_level
-PERLVARI(I, numeric_standard, int, TRUE)
- /* Assume simple numerics */
-PERLVARI(I, numeric_local, bool, TRUE)
- /* Assume local numerics */
-PERLVAR(I, numeric_name, char *) /* Name of current numeric locale */
-PERLVAR(I, numeric_radix_sv, SV *) /* The radix separator if not '.' */
+This value may be set when embedding for full cleanup.
-#endif /* !USE_LOCALE_NUMERIC */
+Possible values:
-/* Unicode inversion lists */
-PERLVAR(I, Latin1, SV *)
-PERLVAR(I, UpperLatin1, SV *) /* Code points 128 - 255 */
-PERLVAR(I, AboveLatin1, SV *)
-PERLVAR(I, InBitmap, SV *)
+=over
-PERLVAR(I, NonL1NonFinalFold, SV *)
-PERLVAR(I, HasMultiCharFold, SV *)
+=item * 0 - none
-/* utf8 character class swashes */
-PERLVAR(I, utf8_mark, SV *)
-PERLVAR(I, utf8_toupper, SV *)
-PERLVAR(I, utf8_totitle, SV *)
-PERLVAR(I, utf8_tolower, SV *)
-PERLVAR(I, utf8_tofold, SV *)
-PERLVAR(I, utf8_charname_begin, SV *)
-PERLVAR(I, utf8_charname_continue, SV *)
+=item * 1 - full
-PERLVARA(I, utf8_swash_ptrs, POSIX_SWASH_COUNT, SV *)
-PERLVARA(I, Posix_ptrs, POSIX_CC_COUNT, SV *)
-PERLVARA(I, XPosix_ptrs, POSIX_CC_COUNT, SV *)
-PERLVAR(I, GCB_invlist, SV *)
-PERLVAR(I, SB_invlist, SV *)
-PERLVAR(I, WB_invlist, SV *)
+=item * 2 or greater - full with checks.
-PERLVAR(I, last_swash_hv, HV *)
-PERLVAR(I, last_swash_tmps, U8 *)
-PERLVAR(I, last_swash_slen, STRLEN)
-PERLVARA(I, last_swash_key,UTF8_MAXBYTES-1, U8)
-PERLVAR(I, last_swash_klen, U8) /* Only needs to store 0-12 */
+=back
-#ifdef FCRYPT
-PERLVARI(I, cryptseen, bool, FALSE) /* has fast crypt() been initialized? */
-#else
-/* One byte hole in the interpreter structure. */
-#endif
+If C<$ENV{PERL_DESTRUCT_LEVEL}> is set to an integer greater than the
+value of C<PL_perl_destruct_level> its value is used instead.
+
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
+=cut
+*/
+/* mod_perl is special, and also assigns a meaning -1 */
+PERLVARI(I, perl_destruct_level, signed char, 0)
PERLVAR(I, pad_reset_pending, bool) /* reset pad on next attempted alloc */
+
PERLVAR(I, srand_called, bool)
+#ifdef USE_LOCALE_NUMERIC
+
+PERLVARI(I, numeric_underlying, bool, TRUE)
+ /* Assume underlying locale numerics */
+PERLVARI(I, numeric_underlying_is_standard, bool, TRUE)
+
+PERLVARI(I, numeric_standard, int, TRUE)
+ /* Assume C locale numerics */
+PERLVAR(I, numeric_name, char *) /* Name of current numeric locale */
+PERLVAR(I, numeric_radix_sv, SV *) /* The radix separator if not '.' */
+
+# ifdef HAS_POSIX_2008_LOCALE
+
+PERLVARI(I, underlying_numeric_obj, locale_t, NULL)
+
+# endif
+#endif /* !USE_LOCALE_NUMERIC */
+
/* Array of signal handlers, indexed by signal number, through which the C
signal handler dispatches. */
PERLVAR(I, psig_ptr, SV **)
#if defined(USE_ITHREADS)
PERLVAR(I, regex_pad, SV **) /* Shortcut into the array of
- regex_padav */
+ regex_padav */
PERLVAR(I, regex_padav, AV *) /* All regex objects, indexed via the
- values in op_pmoffset of pmop.
- Entry 0 is an SV whose PV is a
- "packed" list of IVs listing
- the now-free slots in the array */
+ values in op_pmoffset of pmop.
+ Entry 0 is an SV whose PV is a
+ "packed" list of IVs listing
+ the now-free slots in the array */
PERLVAR(I, stashpad, HV **) /* for CopSTASH */
PERLVARI(I, stashpadmax, PADOFFSET, 64)
PERLVARI(I, stashpadix, PADOFFSET, 0)
PERLVARI(I, def_layerlist, PerlIO_list_t *, NULL)
#endif
-PERLVARI(I, encoding, SV *, NULL) /* $^ENCODING */
-PERLVARI(I, lex_encoding, SV *, NULL) /* encoding pragma */
-
-PERLVAR(I, utf8_idstart, SV *)
-PERLVAR(I, utf8_idcont, SV *)
-PERLVAR(I, utf8_xidstart, SV *)
-PERLVAR(I, utf8_perl_idstart, SV *)
-PERLVAR(I, utf8_perl_idcont, SV *)
-PERLVAR(I, utf8_xidcont, SV *)
-
-PERLVAR(I, sort_RealCmp, SVCOMPARE_t)
-
PERLVARI(I, checkav_save, AV *, NULL) /* save CHECK{}s when compiling */
PERLVARI(I, unitcheckav_save, AV *, NULL)
- /* save UNITCHECK{}s when compiling */
+ /* save UNITCHECK{}s when compiling */
PERLVARI(I, clocktick, long, 0) /* this many times() ticks in a second */
/* Hooks to shared SVs and locks. */
PERLVARI(I, sharehook, share_proc_t, Perl_sv_nosharing)
PERLVARI(I, lockhook, share_proc_t, Perl_sv_nosharing)
+
+GCC_DIAG_IGNORE(-Wdeprecated-declarations)
#ifdef NO_MATHOMS
# define PERL_UNLOCK_HOOK Perl_sv_nosharing
#else
#endif
PERLVARI(I, unlockhook, share_proc_t, PERL_UNLOCK_HOOK)
+GCC_DIAG_RESTORE
+
PERLVARI(I, threadhook, thrhook_proc_t, Perl_nothreadhook)
/* Can shared object be destroyed */
/* Compile-time block start/end hooks */
PERLVAR(I, blockhooks, AV *)
-/* Everything that folds to a given character, for case insensitivity regex
- * matching */
-PERLVARI(I, utf8_foldclosures, HV *, NULL)
-
-/* List of characters that participate in folds (except marks, etc in
- * multi-char folds) */
-PERLVARI(I, utf8_foldable, SV *, NULL)
-
PERLVAR(I, custom_ops, HV *) /* custom op registrations */
PERLVAR(I, Xpv, XPV *) /* (unused) held temporary value */
/* Hook for File::Glob */
PERLVARI(I, globhook, globhook_t, NULL)
-PERLVARI(I, padlist_generation, U32, 1) /* id to identify padlist clones */
-
+#if defined(MULTIPLICITY)
/* The last unconditional member of the interpreter structure when 5.18.0 was
released. The offset of the end of this is baked into a global variable in
any shared perl library which will allow a sanity test in future perl
releases. */
-#define PERL_LAST_5_18_0_INTERP_MEMBER Iglobhook
+# define PERL_LAST_5_18_0_INTERP_MEMBER Iglobhook
+#endif
-#ifdef PERL_IMPLICIT_CONTEXT
+#ifdef MULTIPLICITY
PERLVARI(I, my_cxt_list, void **, NULL) /* per-module array of MY_CXT pointers */
PERLVARI(I, my_cxt_size, int, 0) /* size of PL_my_cxt_list */
-# ifdef PERL_GLOBAL_STRUCT_PRIVATE
-PERLVARI(I, my_cxt_keys, const char **, NULL) /* per-module array of pointers to MY_CXT_KEY constants */
-# endif
#endif
-#if defined(PERL_IMPLICIT_CONTEXT) || defined(PERL_DEBUG_READONLY_COW)
+#if defined(MULTIPLICITY) || defined(PERL_DEBUG_READONLY_COW)
/* For use with the memory debugging code in util.c. This is used only in
* DEBUGGING builds (as long as the relevant structure is defined), but
* defining it in non-debug builds too means that we retain binary
PERLVAR(I, random_state, PL_RANDOM_STATE_TYPE)
+PERLVARI(I, dump_re_max_len, STRLEN, 60)
+
+/* For internal uses of randomness, this ensures the sequence of
+ * random numbers returned by rand() isn't modified by perl's internal
+ * use of randomness.
+ * This is important if the user has called srand() with a seed.
+ */
+
+PERLVAR(I, internal_random_state, PL_RANDOM_STATE_TYPE)
+
+PERLVARA(I, TR_SPECIAL_HANDLING_UTF8, UTF8_MAXBYTES, char)
+
+PERLVAR(I, AboveLatin1, SV *)
+PERLVAR(I, Assigned_invlist, SV *)
+PERLVAR(I, GCB_invlist, SV *)
+PERLVAR(I, HasMultiCharFold, SV *)
+PERLVAR(I, InMultiCharFold, SV *)
+PERLVAR(I, Latin1, SV *)
+PERLVAR(I, LB_invlist, SV *)
+PERLVAR(I, SB_invlist, SV *)
+PERLVAR(I, SCX_invlist, SV *)
+PERLVAR(I, UpperLatin1, SV *) /* Code points 128 - 255 */
+
+/* List of characters that participate in any fold defined by Unicode */
+PERLVAR(I, in_some_fold, SV *)
+
+/* Everything that folds to a given character, for case insensitivity regex
+ * matching */
+PERLVAR(I, utf8_foldclosures, SV *)
+
+PERLVAR(I, utf8_idcont, SV *)
+PERLVAR(I, utf8_idstart, SV *)
+PERLVAR(I, utf8_perl_idcont, SV *)
+PERLVAR(I, utf8_perl_idstart, SV *)
+PERLVAR(I, utf8_xidcont, SV *)
+PERLVAR(I, utf8_xidstart, SV *)
+PERLVAR(I, WB_invlist, SV *)
+PERLVARA(I, XPosix_ptrs, POSIX_CC_COUNT, SV *)
+PERLVARA(I, Posix_ptrs, POSIX_CC_COUNT, SV *)
+PERLVAR(I, utf8_toupper, SV *)
+PERLVAR(I, utf8_totitle, SV *)
+PERLVAR(I, utf8_tolower, SV *)
+PERLVAR(I, utf8_tofold, SV *)
+PERLVAR(I, utf8_tosimplefold, SV *)
+PERLVAR(I, utf8_charname_begin, SV *)
+PERLVAR(I, utf8_charname_continue, SV *)
+PERLVAR(I, utf8_mark, SV *)
+PERLVARI(I, InBitmap, SV *, NULL)
+PERLVAR(I, CCC_non0_non230, SV *)
+PERLVAR(I, Private_Use, SV *)
+
+#ifdef HAS_MBRLEN
+PERLVAR(I, mbrlen_ps, mbstate_t)
+#endif
+#ifdef HAS_MBRTOWC
+PERLVAR(I, mbrtowc_ps, mbstate_t)
+#endif
+#ifdef HAS_WCRTOMB
+PERLVAR(I, wcrtomb_ps, mbstate_t)
+#endif
+#ifdef PERL_MEM_LOG
+/* Enough space for the reserved byte, 1 for a potential leading 0, then enough
+ * for the longest representable integer plus an extra, the 3 flag characters,
+ * and NUL */
+PERLVARA(I, mem_log, 1 + 1 + TYPE_DIGITS(UV) + 1 + 3 + 1, char);
+#endif
+
/* If you are adding a U8 or U16, check to see if there are 'Space' comments
* above on where there are gaps which currently will be structure padding. */
* this comment, for binary compatibility (the offsets of the old members must
* not change).
* (Don't forget to add your variable also to perl_clone()!)
- * XSUB.h provides wrapper functions via perlapi.h that make this
- * irrelevant, but not all code may be expected to #include XSUB.h.
*/