X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/63d993753d09d211c27dda85e151b32456afb73d..ebfc9d5d0d50ffc852e4ae35a78e6a922ada8700:/intrpvar.h diff --git a/intrpvar.h b/intrpvar.h index a4e5864..d076446 100644 --- a/intrpvar.h +++ b/intrpvar.h @@ -10,10 +10,6 @@ #include "handy.h" -/* -=head1 Per-Interpreter Variables -*/ - /* These variables are per-interpreter in threaded/multiplicity builds, * global otherwise. @@ -40,7 +36,7 @@ PERLVAR(I, stack_base, SV **) 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) @@ -53,13 +49,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 */ + 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 */ @@ -94,24 +90,17 @@ PERLVARI(I, tainted, bool, FALSE) /* using variables controlled by $< */ PERLVAR(I, delaymagic, U16) /* ($<,$>) = ... */ /* -=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_section $warning =for apidoc mn|U8|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 is a collection of flag bits. +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 */ @@ -126,10 +115,30 @@ 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 */ @@ -143,6 +152,10 @@ PERLVAR(I, curstash, HV *) /* symbol table for current package */ 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 */ @@ -150,7 +163,7 @@ 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 */ @@ -171,16 +184,18 @@ PERLVAR(I, regmatch_state, regmatch_state *) PERLVAR(I, comppad, PAD *) /* storage for lexically scoped temporaries */ /* +=for apidoc_section $SV =for apidoc Amn|SV|PL_sv_undef -This is the C SV. Always refer to this as C<&PL_sv_undef>. +This is the C SV. It is readonly. Always refer to this as +C<&PL_sv_undef>. =for apidoc Amn|SV|PL_sv_no -This is the C SV. See C>. Always refer to this as -C<&PL_sv_no>. +This is the C SV. It is readonly. See C>. Always refer +to this as C<&PL_sv_no>. =for apidoc Amn|SV|PL_sv_yes -This is the C SV. See C>. Always refer to this as -C<&PL_sv_yes>. +This is the C SV. It is readonly. 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 @@ -204,7 +219,19 @@ PERLVARA(I, sv_immortals, 4, SV) 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 evaluate their SV parameter more than +once. + +=cut +*/ +PERLVAR(I, Sv, SV *) + PERLVAR(I, parser, yy_parser *) /* current parser state */ PERLVAR(I, stashcache, HV *) /* Cache to speed up S_method_common */ @@ -222,7 +249,7 @@ C macro. */ PERLVAR(I, na, STRLEN) /* for use in SvPV when length is - Not Applicable */ + Not Applicable */ /* stat stuff */ PERLVAR(I, statcache, Stat_t) /* _ */ @@ -230,18 +257,31 @@ PERLVAR(I, statgv, GV *) PERLVARI(I, statname, SV *, NULL) /* +=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<< >>) +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 */ @@ -278,9 +318,10 @@ PERLVAR(I, efloatbuf, char *) 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(): @@ -308,6 +349,15 @@ 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 + +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 */ @@ -329,6 +379,7 @@ PERLVARA(I, locale_utf8ness, 256, char) 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 @@ -346,6 +397,10 @@ If the new code wishes to operate on ops throughout the subroutine's structure, rather than just at the top level, it is likely to be more convenient to wrap the L 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 */ @@ -370,6 +425,10 @@ If the new code wishes to operate only on ops at a subroutine's top level, rather than throughout the structure, it is likely to be more convenient to wrap the L 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 */ @@ -384,6 +443,10 @@ It is also assured to first fire for the parent OP and then for its kids. 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 */ @@ -429,7 +492,7 @@ PERLVAR(I, e_script, SV *) 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) @@ -458,12 +521,17 @@ PERLVAR(I, DBgv, GV *) /* *DB::DB */ 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>. +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. @@ -471,11 +539,19 @@ Single-stepping is automatically turned on after every step. This is the C variable which corresponds to Perl's $DB::single variable. See 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. + =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>. +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 */ @@ -536,14 +612,15 @@ PERLVARI(I, laststype, U16, OP_STAT) 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 is a general purpose, interpreter global HV for use by @@ -552,6 +629,10 @@ In a pinch, it can also be used as a symbol table for extensions 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 */ @@ -569,7 +650,7 @@ 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 */ @@ -611,7 +692,11 @@ 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 */ @@ -619,14 +704,6 @@ PERLVAR(I, debug, volatile U32) /* flags given to -D switch */ PERLVARI(I, padlist_generation, U32, 1) /* id to identify padlist clones */ -/* -=for apidoc Amn|runops_proc_t|PL_runops - -See L. - -=cut -*/ - PERLVARI(I, runops, runops_proc_t, RUNOPS_DEFAULT) PERLVAR(I, subname, SV *) /* name of current subroutine */ @@ -636,7 +713,7 @@ 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 */ + in current "register" pad */ PERLVAR(I, constpadix, PADOFFSET) /* lowest unused for constants */ PERLVAR(I, padix_floor, PADOFFSET) /* how low may inner block reset padix */ @@ -645,6 +722,8 @@ PERLVAR(I, padix_floor, PADOFFSET) /* how low may inner block reset padix */ && defined(USE_THREAD_SAFE_LOCALE) \ && ! defined(HAS_QUERYLOCALE) +/* This is the most number of categories we've encountered so far on any + * platform */ PERLVARA(I, curlocales, 12, char *) #endif @@ -659,7 +738,7 @@ 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) @@ -671,9 +750,6 @@ PERLVARI(I, setlocale_bufsize, Size_t, 0) 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. */ @@ -681,7 +757,11 @@ PERLVARI(I, phase, enum perl_phase, PERL_PHASE_CONSTRUCT) PERLVARI(I, in_load_module, bool, FALSE) /* to prevent recursions in PerlIO_find_layer */ +PERLVAR(I, unsafe, bool) +PERLVAR(I, colorset, bool) /* PERL_RE_COLORS env var is in use */ + /* +=for apidoc_section $embedding =for apidoc Amn|signed char|PL_perl_destruct_level This value may be set when embedding for full cleanup. @@ -701,18 +781,27 @@ Possible values: If C<$ENV{PERL_DESTRUCT_LEVEL}> is set to an integer greater than the value of C 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_standard, int, TRUE) - /* Assume C locale numerics */ PERLVARI(I, numeric_underlying, bool, TRUE) - /* Assume underlying locale numerics */ + /* 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 '.' */ @@ -723,24 +812,6 @@ PERLVARI(I, underlying_numeric_obj, locale_t, NULL) # endif #endif /* !USE_LOCALE_NUMERIC */ -/* utf8 character class swashes */ -PERLVAR(I, seen_deprecated_macro, HV *) - -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 */ - -#ifdef FCRYPT -PERLVARI(I, cryptseen, bool, FALSE) /* has fast crypt() been initialized? */ -#else -/* One byte hole in the interpreter structure. */ -#endif - -PERLVAR(I, pad_reset_pending, bool) /* reset pad on next attempted alloc */ -PERLVAR(I, srand_called, bool) - /* Array of signal handlers, indexed by signal number, through which the C signal handler dispatches. */ PERLVAR(I, psig_ptr, SV **) @@ -769,12 +840,12 @@ PERLVAR(I, body_arenas, void *) /* pointer to list of body-arenas */ #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) @@ -793,17 +864,17 @@ PERLVARI(I, known_layers, PerlIO_list_t *, NULL) PERLVARI(I, def_layerlist, PerlIO_list_t *, NULL) #endif -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 @@ -812,6 +883,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 */ @@ -845,18 +918,20 @@ 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 +#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 */ #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 @@ -897,6 +972,63 @@ PERLVARI(I, dump_re_max_len, STRLEN, 60) 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. */ @@ -904,6 +1036,4 @@ PERLVAR(I, internal_random_state, PL_RANDOM_STATE_TYPE) * 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. */