This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Cache locale UTF8-ness lookups
[perl5.git] / intrpvar.h
index 3f43fd9..3cc8388 100644 (file)
@@ -73,6 +73,7 @@ PERLVAR(I, multideref_pc, UNOP_AUX_item *)
 
 /* Fields used by magic variables such as $@, $/ and so on */
 PERLVAR(I, curpm,      PMOP *)         /* what to do \ interps in REs from */
 
 /* 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 */
 PERLVARI(I, tainted,   bool, FALSE)    /* using variables controlled by $< */
 
 PERLVAR(I, tainting,   bool)           /* doing taint checks */
 PERLVARI(I, tainted,   bool, FALSE)    /* using variables controlled by $< */
@@ -97,9 +98,11 @@ PERLVAR(I, in_eval,  U8)             /* trap "fatal" errors? */
 PERLVAR(I, defgv,      GV *)           /* the *_ glob */
 /*
 
 PERLVAR(I, defgv,      GV *)           /* the *_ glob */
 /*
 
-=for apidoc mn|bool|PL_dowarn
+=for apidoc mn|U8|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<PL_dowarn> is a
+collection of flag bits.
 
 =cut
 */
 
 =cut
 */
@@ -155,12 +158,26 @@ C<&PL_sv_no>.
 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.  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
 */
 
 =cut
 */
 
+#ifdef MULTIPLICITY
+PERLVAR(I, sv_yes,     SV)
 PERLVAR(I, sv_undef,   SV)
 PERLVAR(I, sv_no,      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 */
 PERLVAR(I, padname_undef,      PADNAME)
 PERLVAR(I, padname_const,      PADNAME)
 PERLVAR(I, Sv,         SV *)           /* used to hold temporary values */
@@ -185,7 +202,6 @@ PERLVAR(I, na,              STRLEN)         /* for use in SvPV when length is
                                           Not Applicable */
 
 /* stat stuff */
                                           Not Applicable */
 
 /* stat stuff */
-PERLVAR(I, statbuf,    Stat_t)
 PERLVAR(I, statcache,  Stat_t)         /* _ */
 PERLVAR(I, statgv,     GV *)
 PERLVARI(I, statname,  SV *,   NULL)
 PERLVAR(I, statcache,  Stat_t)         /* _ */
 PERLVAR(I, statgv,     GV *)
 PERLVARI(I, statname,  SV *,   NULL)
@@ -246,6 +262,8 @@ 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, utf8locale, bool)           /* utf8 locale detected */
 PERLVAR(I, in_utf8_CTYPE_locale, bool)
 PERLVAR(I, in_utf8_COLLATE_locale, bool)
+PERLVARA(I, locale_utf8ness, 256, char)
+
 #ifdef USE_LOCALE_CTYPE
     PERLVAR(I, warn_locale, SV *)
 #endif
 #ifdef USE_LOCALE_CTYPE
     PERLVAR(I, warn_locale, SV *)
 #endif
@@ -440,8 +458,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, 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
 /* 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
@@ -490,8 +506,8 @@ PERLVAR(I, compiling,       COP)            /* compiling/done executing marker */
 
 PERLVAR(I, compcv,     CV *)           /* currently compiling subroutine */
 PERLVAR(I, comppad_name, PADNAMELIST *)        /* variable names for "my" variables */
 
 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)
 
 #ifdef HAVE_INTERP_INTERN
 PERLVAR(I, sys_intern, struct interp_intern)
@@ -541,7 +557,7 @@ PERLVAR(I, sighandlerp,     Sighandler_t)
 
 PERLVARA(I, body_roots,        PERL_ARENA_ROOTS_SIZE, void*) /* array of body roots */
 
 
 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 */
 
 
 PERLVARI(I, padlist_generation, U32, 1)        /* id to identify padlist clones */
 
@@ -550,21 +566,21 @@ 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, 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, I32)     /* end of vars to introduce */
-PERLVAR(I, padix,      I32)            /* lowest unused index - 1
+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, I32)            /* lowest unused for constants */
+PERLVAR(I, constpadix, PADOFFSET)      /* lowest unused for constants */
 
 
-PERLVAR(I, padix_floor,        I32)            /* how low may inner block reset padix */
+PERLVAR(I, padix_floor,        PADOFFSET)      /* how low may inner block reset padix */
 
 #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 */
 
 #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 */
 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 */
@@ -572,6 +588,9 @@ PERLVARI(I, collation_standard, bool, TRUE)
                                        /* Assume simple collation */
 #endif /* USE_LOCALE_COLLATE */
 
                                        /* Assume simple collation */
 #endif /* USE_LOCALE_COLLATE */
 
+PERLVARI(I, langinfo_buf, char *, NULL)
+PERLVARI(I, langinfo_bufsize, Size_t, 0)
+
 #ifdef PERL_SAWAMPERSAND
 PERLVAR(I, sawampersand, U8)           /* must save all match strings */
 #endif
 #ifdef PERL_SAWAMPERSAND
 PERLVAR(I, sawampersand, U8)           /* must save all match strings */
 #endif
@@ -594,9 +613,10 @@ PERLVARI(I, perl_destruct_level, signed char,      0)
 #ifdef USE_LOCALE_NUMERIC
 
 PERLVARI(I, numeric_standard, int, TRUE)
 #ifdef USE_LOCALE_NUMERIC
 
 PERLVARI(I, numeric_standard, int, TRUE)
-                                       /* Assume simple numerics */
-PERLVARI(I, numeric_local, bool, TRUE)
-                                       /* Assume local numerics */
+                                       /* Assume C locale numerics */
+PERLVARI(I, numeric_underlying, bool, TRUE)
+                                       /* Assume underlying locale numerics */
+PERLVARI(I, numeric_underlying_is_standard, bool, TRUE)
 PERLVAR(I, numeric_name, char *)       /* Name of current numeric locale */
 PERLVAR(I, numeric_radix_sv, SV *)     /* The radix separator if not '.' */
 
 PERLVAR(I, numeric_name, char *)       /* Name of current numeric locale */
 PERLVAR(I, numeric_radix_sv, SV *)     /* The radix separator if not '.' */
 
@@ -621,12 +641,14 @@ PERLVAR(I, utf8_charname_begin, SV *)
 PERLVAR(I, utf8_charname_continue, SV *)
 
 PERLVARA(I, utf8_swash_ptrs, POSIX_SWASH_COUNT, SV *)
 PERLVAR(I, utf8_charname_continue, SV *)
 
 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 *)
 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, SCX_invlist, SV *)
 PERLVAR(I, WB_invlist, SV *)
 PERLVAR(I, WB_invlist, SV *)
+PERLVAR(I, Assigned_invlist, SV *)
+PERLVAR(I, seen_deprecated_macro, HV *)
 
 PERLVAR(I, last_swash_hv, HV *)
 PERLVAR(I, last_swash_tmps, U8 *)
 
 PERLVAR(I, last_swash_hv, HV *)
 PERLVAR(I, last_swash_tmps, U8 *)
@@ -807,7 +829,15 @@ 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)
 
 
 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)
 
 /* 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.  */
 
 /* 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.  */