regcomp.c: Use data structure to remove special handling
authorKarl Williamson <public@khwilliamson.com>
Mon, 31 Dec 2012 15:45:10 +0000 (08:45 -0700)
committerKarl Williamson <public@khwilliamson.com>
Mon, 31 Dec 2012 18:03:28 +0000 (11:03 -0700)
[:digit:] matches nothing in the upper Latin1 range.  That means the
inversion list for the whole of Latin1 is the same as the one for the
ASCII range.  By copying the ASCII one into the Latin1's slot, we
eliminate the need for code to handle this case specially.

Future commits will remove the switch statement affected by this
commit entirely, and eliminating this special case becomes more
important given this direction.

regcomp.c

index 86f6a29..26024e1 100644 (file)
--- a/regcomp.c
+++ b/regcomp.c
@@ -5218,6 +5218,7 @@ Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count,
        PL_XPosix_ptrs[_CC_CNTRL] = _new_invlist_C_array(XPosixCntrl_invlist);
 
        PL_Posix_ptrs[_CC_DIGIT] = _new_invlist_C_array(PosixDigit_invlist);
+       PL_L1Posix_ptrs[_CC_DIGIT] = _new_invlist_C_array(PosixDigit_invlist);
 
        PL_L1Posix_ptrs[_CC_GRAPH] = _new_invlist_C_array(L1PosixGraph_invlist);
        PL_Posix_ptrs[_CC_GRAPH] = _new_invlist_C_array(PosixGraph_invlist);
@@ -11707,11 +11708,7 @@ parseit:
                 const char *Xname = swash_property_names[classnum];
 
                switch ((I32)namedclass) {
-
                case ANYOF_DIGIT:
-                    l1_source = ascii_source;
-                    /* FALL THROUGH */
-
                case ANYOF_ALPHANUMERIC: /* C's alnum, in contrast to \w */
                case ANYOF_ALPHA:
                case ANYOF_CASED:
@@ -11803,8 +11800,6 @@ parseit:
                    break;
 
                case ANYOF_NDIGIT:
-                    l1_source = ascii_source;
-                    /* FALL THROUGH */
 
                case ANYOF_NALPHANUMERIC:
                case ANYOF_NALPHA: