X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/ac7b6cfc962deceb2adc1c179141d8a92384e9aa..d569e7cc1171d70b4ea183bc7c257dcf50f0ab12:/perlvars.h diff --git a/perlvars.h b/perlvars.h index b94bf33..0df71f5 100644 --- a/perlvars.h +++ b/perlvars.h @@ -38,9 +38,9 @@ use the variable. PERLVAR(G, op_mutex, perl_mutex) /* Mutex for op refcounting */ #endif PERLVARI(G, curinterp, PerlInterpreter *, NULL) - /* currently running interpreter - * (initial parent interpreter under - * useithreads) */ + /* currently running interpreter + * (initial parent interpreter under + * useithreads) */ #if defined(USE_ITHREADS) PERLVAR(G, thr_key, perl_key) /* key to retrieve per-thread struct */ #endif @@ -48,16 +48,12 @@ PERLVAR(G, thr_key, perl_key) /* key to retrieve per-thread struct */ /* XXX does anyone even use this? */ PERLVARI(G, do_undump, bool, FALSE) /* -u or dump seen? */ -#ifndef PERL_USE_SAFE_PUTENV -PERLVARI(G, use_safe_putenv, bool, TRUE) -#endif - #if defined(FAKE_PERSISTENT_SIGNAL_HANDLERS)||defined(FAKE_DEFAULT_SIGNAL_HANDLERS) PERLVARI(G, sig_handlers_initted, int, 0) #endif #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS PERLVARA(G, sig_ignoring, SIG_SIZE, int) - /* which signals we are ignoring */ + /* which signals we are ignoring */ #endif #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS PERLVARA(G, sig_defaulting, SIG_SIZE, int) @@ -73,8 +69,13 @@ PERLVARI(G, sig_trapped, int, 0) /* If Perl has to ignore SIGPFE, this is its saved state. * See perl.h macros PERL_FPU_INIT and PERL_FPU_{PRE,POST}_EXEC. */ PERLVAR(G, sigfpe_saved, Sighandler_t) -PERLVARI(G, csighandlerp, Sighandler_t, Perl_csighandler) - /* Pointer to C-level sighandler */ + +/* these ptrs to functions are to avoid linkage problems; see + * perl-5.8.0-2193-g5c1546dc48 + */ +PERLVARI(G, csighandlerp, Sighandler_t, Perl_csighandler) +PERLVARI(G, csighandler1p, Sighandler1_t, Perl_csighandler1) +PERLVARI(G, csighandler3p, Sighandler3_t, Perl_csighandler3) #endif /* This is constant on most architectures, a global on OS/2 */ @@ -99,24 +100,18 @@ PERLVARI(G, mmap_page_size, IV, 0) #if defined(USE_ITHREADS) PERLVAR(G, hints_mutex, perl_mutex) /* Mutex for refcounted he refcounting */ -# if ! defined(USE_THREAD_SAFE_LOCALE) || defined(TS_W32_BROKEN_LOCALECONV) -PERLVAR(G, locale_mutex, perl_mutex) /* Mutex for setlocale() changing */ -# endif -# ifndef USE_THREAD_SAFE_LOCALE -PERLVAR(G, lc_numeric_mutex, perl_mutex) /* Mutex for switching LC_NUMERIC */ -# endif +PERLVAR(G, env_mutex, perl_RnW1_mutex_t) /* Mutex for accessing ENV */ +PERLVAR(G, locale_mutex, perl_mutex) /* Mutex related to locale handling */ #endif #ifdef USE_POSIX_2008_LOCALE PERLVAR(G, C_locale_obj, locale_t) #endif -#ifdef DEBUGGING PERLVARI(G, watch_pvx, char *, NULL) -#endif /* -=for apidoc AmU|Perl_check_t *|PL_check +=for apidoc AmnU|Perl_check_t *|PL_check Array, indexed by opcode, of functions that will be called for the "check" phase of optree building during compilation of Perl code. For most (but @@ -144,31 +139,37 @@ with the core's base checker at the end. For thread safety, modules should not write directly to this array. Instead, use the function L. +=for apidoc Amn|enum perl_phase|PL_phase + +A value that indicates the current Perl interpreter's phase. Possible values +include C, C, C, +C, C, C, and +C. + +For example, the following determines whether the interpreter is in +global destruction: + + if (PL_phase == PERL_PHASE_DESTRUCT) { + // we are in global destruction + } + +C was introduced in Perl 5.14; in prior perls you can use +C (boolean) to determine whether the interpreter is in global +destruction. (Use of C is discouraged since 5.14.) + =cut */ #if defined(USE_ITHREADS) PERLVAR(G, check_mutex, perl_mutex) /* Mutex for PL_check */ #endif -#ifdef PERL_GLOBAL_STRUCT -PERLVAR(G, ppaddr, Perl_ppaddr_t *) /* or opcode.h */ -PERLVAR(G, check, Perl_check_t *) /* or opcode.h */ -PERLVARA(G, fold_locale, 256, unsigned char) /* or perl.h */ -#endif - -#ifdef PERL_NEED_APPCTX -PERLVAR(G, appctx, void*) /* the application context */ -#endif - -#if defined(HAS_TIMES) && defined(PERL_NEED_TIMESBASE) -PERLVAR(G, timesbase, struct tms) -#endif /* allocate a unique index to every module that calls MY_CXT_INIT */ -#ifdef PERL_IMPLICIT_CONTEXT +#ifdef MULTIPLICITY # ifdef USE_ITHREADS PERLVAR(G, my_ctx_mutex, perl_mutex) +PERLVARI(G, veto_switch_non_tTHX_context, int, FALSE) # endif PERLVARI(G, my_cxt_index, int, 0) #endif @@ -178,14 +179,14 @@ PERLVARI(G, my_cxt_index, int, 0) PERLVARI(G, veto_cleanup, int, FALSE) /* exit without cleanup */ /* -=for apidoc AmUx|Perl_keyword_plugin_t|PL_keyword_plugin +=for apidoc AmnUx|Perl_keyword_plugin_t|PL_keyword_plugin Function pointer, pointing at a function used to handle extended keywords. The function should be declared as - int keyword_plugin_function(pTHX_ - char *keyword_ptr, STRLEN keyword_len, - OP **op_ptr) + int keyword_plugin_function(pTHX_ + char *keyword_ptr, STRLEN keyword_len, + OP **op_ptr) The function is called from the tokeniser, whenever a possible keyword is seen. C points at the word in the parser's input @@ -257,12 +258,13 @@ PERLVAR(G, malloc_mutex, perl_mutex) /* Mutex for malloc */ #endif PERLVARI(G, hash_seed_set, bool, FALSE) /* perl.c */ -PERLVARA(G, hash_seed, PERL_HASH_SEED_BYTES, unsigned char) /* perl.c and hv.h */ +PERLVARA(G, hash_seed_w, PERL_HASH_SEED_WORDS, PVT__PERL_HASH_WORD_TYPE) /* perl.c and hv.h */ #if defined(PERL_HASH_STATE_BYTES) -PERLVARA(G, hash_state, PERL_HASH_STATE_BYTES, unsigned char) /* perl.c and hv.h */ +PERLVARA(G, hash_state_w, PERL_HASH_STATE_WORDS, PVT__PERL_HASH_WORD_TYPE) /* perl.c and hv.h */ #endif #if defined(PERL_USE_SINGLE_CHAR_HASH_CACHE) -PERLVARA(G, hash_chars, (1+256) * sizeof(U32), unsigned char) /* perl.c and hv.h */ +#define PERL_SINGLE_CHAR_HASH_CACHE_ELEMS ((1+256) * sizeof(U32)) +PERLVARA(G, hash_chars, PERL_SINGLE_CHAR_HASH_CACHE_ELEMS, unsigned char) /* perl.c and hv.h */ #endif /* The path separator can vary depending on whether we're running under DCL or @@ -272,40 +274,32 @@ PERLVARA(G, hash_chars, (1+256) * sizeof(U32), unsigned char) /* perl.c and hv.h PERLVAR(G, perllib_sep, char) #endif -PERLVAR(G, AboveLatin1, SV *) -PERLVAR(G, Assigned_invlist, SV *) -PERLVAR(G, GCB_invlist, SV *) -PERLVAR(G, HasMultiCharFold, SV *) -PERLVAR(G, InMultiCharFold, SV *) -PERLVAR(G, Latin1, SV *) -PERLVAR(G, LB_invlist, SV *) -PERLVAR(G, NonL1NonFinalFold, SV *) -PERLVAR(G, SB_invlist, SV *) -PERLVAR(G, SCX_invlist, SV *) -PERLVAR(G, UpperLatin1, SV *) /* Code points 128 - 255 */ - -/* List of characters that participate in any fold defined by Unicode */ -PERLVARI(G, in_some_fold, SV *, NULL) - -PERLVAR(G, utf8_idcont, SV *) -PERLVAR(G, utf8_idstart, SV *) -PERLVAR(G, utf8_perl_idcont, SV *) -PERLVAR(G, utf8_perl_idstart, SV *) -PERLVAR(G, utf8_xidcont, SV *) -PERLVAR(G, utf8_xidstart, SV *) -PERLVAR(G, WB_invlist, SV *) -PERLVARA(G, XPosix_ptrs, POSIX_CC_COUNT, SV *) -PERLVARA(G, Posix_ptrs, POSIX_CC_COUNT, SV *) -PERLVAR(G, utf8_toupper, SV *) -PERLVAR(G, utf8_totitle, SV *) -PERLVAR(G, utf8_tolower, SV *) -PERLVAR(G, utf8_tofold, SV *) -PERLVAR(G, utf8_tosimplefold, SV *) -PERLVAR(G, utf8_charname_begin, SV *) -PERLVAR(G, utf8_charname_continue, SV *) -PERLVAR(G, utf8_mark, SV *) -PERLVAR(G, InBitmap, SV *) - -/* Everything that folds to a given character, for case insensitivity regex - * matching */ -PERLVAR(G, utf8_foldclosures, SV *) +/* Definitions of user-defined \p{} properties, as the subs that define them + * are only called once */ +PERLVARI(G, user_def_props, HV *, NULL) + +#if defined(USE_ITHREADS) +PERLVAR(G, user_def_props_aTHX, PerlInterpreter *) /* aTHX that user_def_props + was defined in */ +PERLVAR(G, user_prop_mutex, perl_mutex) /* Mutex for manipulating + PL_user_defined_properties */ +#endif + +/* these record the best way to perform certain IO operations while + * atomically setting FD_CLOEXEC. On the first call, a probe is done + * and the result recorded for use by subsequent calls. + * In theory these variables aren't thread-safe, but the worst that can + * happen is that two treads will both do an initial probe + */ +PERLVARI(G, strategy_dup, int, 0) /* doio.c */ +PERLVARI(G, strategy_dup2, int, 0) /* doio.c */ +PERLVARI(G, strategy_open, int, 0) /* doio.c */ +PERLVARI(G, strategy_open3, int, 0) /* doio.c */ +PERLVARI(G, strategy_mkstemp, int, 0) /* doio.c */ +PERLVARI(G, strategy_socket, int, 0) /* doio.c */ +PERLVARI(G, strategy_accept, int, 0) /* doio.c */ +PERLVARI(G, strategy_pipe, int, 0) /* doio.c */ +PERLVARI(G, strategy_socketpair, int, 0) /* doio.c */ + +PERLVARI(G, my_environ, char **, NULL) +PERLVARI(G, origenviron, char **, NULL)