Remove PL_ASCII; use existing array slots for it
authorKarl Williamson <public@khwilliamson.com>
Thu, 15 Aug 2013 16:59:01 +0000 (10:59 -0600)
committerKarl Williamson <public@khwilliamson.com>
Tue, 24 Sep 2013 17:36:16 +0000 (11:36 -0600)
PL_ASCII contains an inversion list to match the ASCII-range code
points.  It is unusable outside the core regular expression code because
all the functions that manipulate inversion lists are defined only
within a few core files.  Therefore no outside code should be depending
on it.

It turns out that there are arrays of similar inversion lists, and these
all have slots which should have this inversion list in them.  This
commit fills them, instead of using PL_ASCII.

embedvar.h
intrpvar.h
regcomp.c
sv.c

index 2349c8c..06d4e18 100644 (file)
@@ -40,7 +40,6 @@
 #    define vTHX       PERL_GET_INTERP
 #  endif
 
-#define PL_ASCII               (vTHX->IASCII)
 #define PL_AboveLatin1         (vTHX->IAboveLatin1)
 #define PL_Argv                        (vTHX->IArgv)
 #define PL_Cmd                 (vTHX->ICmd)
index 9cfe2c6..3a8f959 100644 (file)
@@ -576,7 +576,6 @@ PERLVAR(I, numeric_radix_sv, SV *)  /* The radix separator if not '.' */
 #endif /* !USE_LOCALE_NUMERIC */
 
 /* Unicode inversion lists */
-PERLVAR(I, ASCII,      SV *)
 PERLVAR(I, Latin1,     SV *)
 PERLVAR(I, UpperLatin1,        SV *)   /* Code points 128 - 255 */
 PERLVAR(I, AboveLatin1,        SV *)
index 61f61ee..7d863be 100644 (file)
--- a/regcomp.c
+++ b/regcomp.c
@@ -5545,10 +5545,13 @@ Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count,
      * having to test them each time otherwise */
     if (! PL_AboveLatin1) {
        PL_AboveLatin1 = _new_invlist_C_array(AboveLatin1_invlist);
-       PL_ASCII = _new_invlist_C_array(ASCII_invlist);
        PL_Latin1 = _new_invlist_C_array(Latin1_invlist);
        PL_UpperLatin1 = _new_invlist_C_array(UpperLatin1_invlist);
 
+        PL_Posix_ptrs[_CC_ASCII] = _new_invlist_C_array(ASCII_invlist);
+        PL_L1Posix_ptrs[_CC_ASCII] = _new_invlist_C_array(ASCII_invlist);
+        PL_XPosix_ptrs[_CC_ASCII] = _new_invlist_C_array(ASCII_invlist);
+
        PL_L1Posix_ptrs[_CC_ALPHANUMERIC]
                                 = _new_invlist_C_array(L1PosixAlnum_invlist);
        PL_Posix_ptrs[_CC_ALPHANUMERIC]
@@ -12840,7 +12843,7 @@ parseit:
 #endif  /* Not isascii(); just use the hard-coded definition for it */
                         _invlist_union_maybe_complement_2nd(
                                 posixes,
-                                PL_ASCII,
+                                PL_Posix_ptrs[_CC_ASCII],
                                 cBOOL(namedclass % 2), /* Complement if odd
                                                           (NASCII) */
                                 &posixes);
diff --git a/sv.c b/sv.c
index f3c0d2c..2c272f2 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -13710,7 +13710,6 @@ perl_clone_using(PerlInterpreter *proto_perl, UV flags,
 #endif /* !USE_LOCALE_NUMERIC */
 
     /* Unicode inversion lists */
-    PL_ASCII           = sv_dup_inc(proto_perl->IASCII, param);
     PL_Latin1          = sv_dup_inc(proto_perl->ILatin1, param);
     PL_UpperLatin1     = sv_dup_inc(proto_perl->IUpperLatin1, param);
     PL_AboveLatin1     = sv_dup_inc(proto_perl->IAboveLatin1, param);