X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/5585e758ec847fcd75936b77096edf5234d6e0c0..32da1f0cbb3039b18da95a780824c723ee95d127:/intrpvar.h diff --git a/intrpvar.h b/intrpvar.h index 4243fc8..1ea21ca 100644 --- a/intrpvar.h +++ b/intrpvar.h @@ -11,7 +11,7 @@ #include "handy.h" /* -=head1 Per-Interpreter Variables +=for apidoc_section Per-Interpreter Variables */ /* These variables are per-interpreter in threaded/multiplicity builds, @@ -21,7 +21,7 @@ /* 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 @@ -53,13 +53,13 @@ PERLVARI(I, tmps_ix, SSize_t, -1) PERLVARI(I, tmps_floor, SSize_t, -1) PERLVAR(I, tmps_max, SSize_t) /* first unalloced slot in tmps stack */ -PERLVARI(I, sub_generation, U32, 1) /* incr to invalidate method cache */ - PERLVAR(I, markstack, I32 *) /* stack_sp locations we're 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 */ @@ -75,7 +75,7 @@ PERLVAR(I, multideref_pc, UNOP_AUX_item *) 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 @@ -93,14 +93,12 @@ PERLVARI(I, tainted, bool, FALSE) /* using variables controlled by $< */ */ 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 mn|U8|PL_dowarn -=for apidoc mn|bool|PL_dowarn - -The C variable which corresponds to Perl's C<$^W> warning variable. +The C variable that roughly corresponds to Perl's C<$^W> warning variable. +However, C<$^W> is treated as a boolean, whereas C is a +collection of flag bits. =cut */ @@ -115,11 +113,39 @@ PERLVAR(I, dowarn, U8) 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<$_>. + +=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. + +=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. + +=cut +*/ + PERLVAR(I, curcop, COP *) PERLVAR(I, curstack, AV *) /* THE STACK */ PERLVAR(I, curstackinfo, PERL_SI *) /* current stack + context */ @@ -156,15 +182,40 @@ C<&PL_sv_no>. This is the C SV. See C>. 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> except for its string value. Can be used as a +cheap alternative to C 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> is +unavailable, and which would otherwise would evaluate their SV parameter more +than once. + +=cut +*/ +PERLVAR(I, Sv, SV *) PERLVAR(I, parser, yy_parser *) /* current parser state */ @@ -186,7 +237,6 @@ PERLVAR(I, na, STRLEN) /* for use in SvPV when length is Not Applicable */ /* stat stuff */ -PERLVAR(I, statbuf, Stat_t) PERLVAR(I, statcache, Stat_t) /* _ */ PERLVAR(I, statgv, GV *) PERLVARI(I, statname, SV *, NULL) @@ -242,11 +292,53 @@ PERLVAR(I, efloatsize, STRLEN) PERLVARI(I, dumpindent, U16, 4) /* number of blanks per dump indentation level */ +/* +=for apidoc Amn|U8|PL_exit_flags + +Contains flags controlling perl's behaviour on exit(): + +=over + +=item * C + +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 + +Call C on exit. This is used internally by perl itself to +abort if exit is called while processing exit. + +=item * C + +Warn on exit. + +=item * C + +Set by the L 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 + +=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 @@ -441,8 +533,6 @@ PERLVARI(I, curcopdb, COP *, NULL) 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 @@ -538,11 +628,15 @@ PERLVAR(I, pidstatus, HV *) /* pid-to-status mappings for waitpid */ #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, padlist_generation, U32, 1) /* id to identify padlist clones */ @@ -560,12 +654,20 @@ PERLVAR(I, constpadix, PADOFFSET) /* lowest unused for constants */ PERLVAR(I, padix_floor, PADOFFSET) /* how low may inner block reset padix */ +#if defined(USE_POSIX_2008_LOCALE) \ + && defined(USE_THREAD_SAFE_LOCALE) \ + && ! defined(HAS_QUERYLOCALE) + +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 */ -PERLVARA(I, strxfrm_min_char, 3, char) +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 */ @@ -573,13 +675,15 @@ PERLVARI(I, collation_standard, bool, TRUE) /* 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. */ @@ -587,63 +691,56 @@ PERLVARI(I, phase, enum perl_phase, PERL_PHASE_CONSTRUCT) 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 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, LB_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 its value is used instead. + +=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 **) @@ -696,15 +793,6 @@ PERLVARI(I, known_layers, PerlIO_list_t *, NULL) PERLVARI(I, def_layerlist, PerlIO_list_t *, NULL) #endif -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 */ @@ -714,6 +802,8 @@ 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 @@ -722,6 +812,8 @@ PERLVARI(I, lockhook, share_proc_t, Perl_sv_nosharing) #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 */ @@ -742,14 +834,6 @@ PERLVAR(I, registered_mros, HV *) /* 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 */ @@ -763,18 +847,17 @@ PERLVAR(I, debug_pad, struct perl_debug_pad) /* always needed because of the re /* Hook for File::Glob */ PERLVARI(I, globhook, globhook_t, NULL) +#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 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) @@ -808,7 +891,66 @@ PERLVARA(I, op_exec_cnt, OP_max+2, UV) /* Counts of executed OPs of the given ty PERLVAR(I, random_state, PL_RANDOM_STATE_TYPE) -PERLVARI(I, dump_re_max_len, STRLEN, 0) +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 /* 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. */ @@ -817,6 +959,4 @@ PERLVARI(I, dump_re_max_len, STRLEN, 0) * 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. */