Make global two interpreter variables
authorKarl Williamson <khw@cpan.org>
Sat, 14 Jul 2018 19:05:52 +0000 (13:05 -0600)
committerKarl Williamson <khw@cpan.org>
Sat, 14 Jul 2018 23:41:02 +0000 (17:41 -0600)
These variables are constant, once initialized, through the life of a
program, so having them be per instance is a waste of time and space

embedvar.h
intrpvar.h
perl.c
perlapi.h
perlvars.h
sv.c
utf8.c

index 1b4d67c..5bd4a4e 100644 (file)
@@ -50,7 +50,6 @@
 #define PL_DBtrace             (vTHX->IDBtrace)
 #define PL_Dir                 (vTHX->IDir)
 #define PL_Env                 (vTHX->IEnv)
-#define PL_InBitmap            (vTHX->IInBitmap)
 #define PL_LIO                 (vTHX->ILIO)
 #define PL_Mem                 (vTHX->IMem)
 #define PL_MemParse            (vTHX->IMemParse)
 #define PL_unitcheckav_save    (vTHX->Iunitcheckav_save)
 #define PL_unlockhook          (vTHX->Iunlockhook)
 #define PL_unsafe              (vTHX->Iunsafe)
-#define PL_utf8_mark           (vTHX->Iutf8_mark)
 #define PL_utf8cache           (vTHX->Iutf8cache)
 #define PL_utf8locale          (vTHX->Iutf8locale)
 #define PL_warn_locale         (vTHX->Iwarn_locale)
 #define PL_GGCB_invlist                (my_vars->GGCB_invlist)
 #define PL_HasMultiCharFold    (my_vars->GHasMultiCharFold)
 #define PL_GHasMultiCharFold   (my_vars->GHasMultiCharFold)
+#define PL_InBitmap            (my_vars->GInBitmap)
+#define PL_GInBitmap           (my_vars->GInBitmap)
 #define PL_LB_invlist          (my_vars->GLB_invlist)
 #define PL_GLB_invlist         (my_vars->GLB_invlist)
 #define PL_Latin1              (my_vars->GLatin1)
 #define PL_Gutf8_idcont                (my_vars->Gutf8_idcont)
 #define PL_utf8_idstart                (my_vars->Gutf8_idstart)
 #define PL_Gutf8_idstart       (my_vars->Gutf8_idstart)
+#define PL_utf8_mark           (my_vars->Gutf8_mark)
+#define PL_Gutf8_mark          (my_vars->Gutf8_mark)
 #define PL_utf8_perl_idcont    (my_vars->Gutf8_perl_idcont)
 #define PL_Gutf8_perl_idcont   (my_vars->Gutf8_perl_idcont)
 #define PL_utf8_perl_idstart   (my_vars->Gutf8_perl_idstart)
index f7b6ee3..fad1eaa 100644 (file)
@@ -640,11 +640,7 @@ PERLVARI(I, underlying_numeric_obj, locale_t, NULL)
 #  endif
 #endif /* !USE_LOCALE_NUMERIC */
 
-/* Unicode inversion lists */
-PERLVAR(I, InBitmap,   SV *)
-
 /* utf8 character class swashes */
-PERLVAR(I, utf8_mark,  SV *)
 PERLVAR(I, seen_deprecated_macro, HV *)
 
 PERLVAR(I, last_swash_hv, HV *)
diff --git a/perl.c b/perl.c
index 86376e3..50af15d 100644 (file)
--- a/perl.c
+++ b/perl.c
@@ -1166,14 +1166,8 @@ perl_destruct(pTHXx)
     }
 
     /* clear character classes  */
-    SvREFCNT_dec(PL_utf8_mark);
-    SvREFCNT_dec(PL_InBitmap);
 #ifdef USE_LOCALE_CTYPE
     SvREFCNT_dec(PL_warn_locale);
-#endif
-    PL_utf8_mark       = NULL;
-    PL_InBitmap          = NULL;
-#ifdef USE_LOCALE_CTYPE
     PL_warn_locale       = NULL;
 #endif
 
index 5b004ae..af5b042 100644 (file)
--- a/perlapi.h
+++ b/perlapi.h
@@ -109,6 +109,8 @@ END_EXTERN_C
 #define PL_GCB_invlist         (*Perl_GGCB_invlist_ptr(NULL))
 #undef  PL_HasMultiCharFold
 #define PL_HasMultiCharFold    (*Perl_GHasMultiCharFold_ptr(NULL))
+#undef  PL_InBitmap
+#define PL_InBitmap            (*Perl_GInBitmap_ptr(NULL))
 #undef  PL_LB_invlist
 #define PL_LB_invlist          (*Perl_GLB_invlist_ptr(NULL))
 #undef  PL_Latin1
@@ -219,6 +221,8 @@ END_EXTERN_C
 #define PL_utf8_idcont         (*Perl_Gutf8_idcont_ptr(NULL))
 #undef  PL_utf8_idstart
 #define PL_utf8_idstart                (*Perl_Gutf8_idstart_ptr(NULL))
+#undef  PL_utf8_mark
+#define PL_utf8_mark           (*Perl_Gutf8_mark_ptr(NULL))
 #undef  PL_utf8_perl_idcont
 #define PL_utf8_perl_idcont    (*Perl_Gutf8_perl_idcont_ptr(NULL))
 #undef  PL_utf8_perl_idstart
index ce17ece..82bce27 100644 (file)
@@ -303,6 +303,8 @@ 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 */
diff --git a/sv.c b/sv.c
index 81223ca..92ce540 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -15588,12 +15588,8 @@ perl_clone_using(PerlInterpreter *proto_perl, UV flags,
     PL_setlocale_buf = NULL;
     PL_setlocale_bufsize = 0;
 
-    /* Unicode inversion lists */
-    PL_InBitmap         = sv_dup_inc(proto_perl->IInBitmap, param);
-
     /* utf8 character class swashes */
     PL_seen_deprecated_macro = hv_dup_inc(proto_perl->Iseen_deprecated_macro, param);
-    PL_utf8_mark       = sv_dup_inc(proto_perl->Iutf8_mark, param);
 
     if (proto_perl->Ipsig_pend) {
        Newxz(PL_psig_pend, SIG_SIZE, int);
diff --git a/utf8.c b/utf8.c
index afe23ca..345d810 100644 (file)
--- a/utf8.c
+++ b/utf8.c
@@ -3367,7 +3367,7 @@ Perl__is_utf8_mark(pTHX_ const U8 *p)
 {
     PERL_ARGS_ASSERT__IS_UTF8_MARK;
 
-    return is_utf8_common(p, &PL_utf8_mark, "IsM", NULL);
+    return is_utf8_common(p, NULL, "IsM", PL_utf8_mark);
 }
 
 STATIC UV
@@ -5829,6 +5829,7 @@ Perl_init_uniprops(pTHX)
     PL_utf8_tofold = _new_invlist_C_array(Case_Folding_invlist);
     PL_utf8_tosimplefold = _new_invlist_C_array(Simple_Case_Folding_invlist);
     PL_utf8_foldclosures = _new_invlist_C_array(_Perl_IVCF_invlist);
+    PL_utf8_mark = _new_invlist_C_array(PL_uni_prop_ptrs[PL_M]);
 }
 
 SV *