This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Remove EBCDIC PL_freq
authorKarl Williamson <khw@cpan.org>
Sat, 20 Jun 2020 22:15:49 +0000 (16:15 -0600)
committerKarl Williamson <khw@cpan.org>
Sat, 18 Jul 2020 04:04:08 +0000 (22:04 -0600)
Instead, do a translation of the ASCII one at runtime.  This is because
the table doesn't account for the various EBCDIC flavors, so isn't
actually accurate.

perl.h
util.c

diff --git a/perl.h b/perl.h
index 445ad3a..7a569c2 100644 (file)
--- a/perl.h
+++ b/perl.h
@@ -5015,42 +5015,6 @@ EXT unsigned char PL_fold_locale[256]; /* Unfortunately not EXTCONST. */
 #endif /* !PERL_GLOBAL_STRUCT */
 
 #ifdef DOINIT
-#  ifdef EBCDIC
-EXTCONST unsigned char PL_freq[] = {/* EBCDIC frequencies for mixed English/C */
-    1,      2,      84,     151,    154,    155,    156,    157,
-    165,    246,    250,    3,      158,    7,      18,     29,
-    40,     51,     62,     73,     85,     96,     107,    118,
-    129,    140,    147,    148,    149,    150,    152,    153,
-    255,      6,      8,      9,     10,     11,     12,     13,
-     14,     15,     24,     25,     26,     27,     28,    226,
-     29,     30,     31,     32,     33,     43,     44,     45,
-     46,     47,     48,     49,     50,     76,     77,     78,
-     79,     80,     81,     82,     83,     84,     85,     86,
-     87,     94,     95,    234,    181,    233,    187,    190,
-    180,     96,     97,     98,     99,    100,    101,    102,
-    104,    112,    182,    174,    236,    232,    229,    103,
-    228,    226,    114,    115,    116,    117,    118,    119,
-    120,    121,    122,    235,    176,    230,    194,    162,
-    130,    131,    132,    133,    134,    135,    136,    137,
-    138,    139,    201,    205,    163,    217,    220,    224,
-    5,      248,    227,    244,    242,    255,    241,    231,
-    240,    253,    16,     197,    19,     20,     21,     187,
-    23,     169,    210,    245,    237,    249,    247,    239,
-    168,    252,    34,     196,    36,     37,     38,     39,
-    41,     42,     251,    254,    238,    223,    221,    213,
-    225,    177,    52,     53,     54,     55,     56,     57,
-    58,     59,     60,     61,     63,     64,     65,     66,
-    67,     68,     69,     70,     71,     72,     74,     75,
-    205,    208,    186,    202,    200,    218,    198,    179,
-    178,    214,    88,     89,     90,     91,     92,     93,
-    217,    166,    170,    207,    199,    209,    206,    204,
-    160,    212,    105,    106,    108,    109,    110,    111,
-    203,    113,    216,    215,    192,    175,    193,    243,
-    172,    161,    123,    124,    125,    126,    127,    128,
-    222,    219,    211,    195,    188,    193,    185,    184,
-    191,    183,    141,    142,    143,    144,    145,    146
-};
-#  else  /* ascii rather than ebcdic */
 EXTCONST unsigned char PL_freq[] = {   /* letter frequencies for mixed English/C */
        1,      2,      84,     151,    154,    155,    156,    157,
        165,    246,    250,    3,      158,    7,      18,     29,
@@ -5085,7 +5049,6 @@ EXTCONST unsigned char PL_freq[] = {      /* letter frequencies for mixed English/C *
        130,    131,    132,    133,    134,    135,    136,    137,
        138,    139,    141,    142,    143,    144,    145,    146
 };
-#  endif
 #else
 EXTCONST unsigned char PL_freq[];
 #endif
diff --git a/util.c b/util.c
index 9aa8f55..4b6c0df 100644 (file)
--- a/util.c
+++ b/util.c
@@ -772,9 +772,10 @@ Perl_fbm_compile(pTHX_ SV *sv, U32 flags)
 
     s = (const unsigned char*)(SvPVX_const(sv));       /* deeper magic */
     for (i = 0; i < len; i++) {
-       if (PL_freq[s[i]] < frequency) {
+        U32 this_frequency = PL_freq[NATIVE_TO_LATIN1(s[i])];
+       if (this_frequency < frequency) {
            PERL_DEB( rarest = i );
-           frequency = PL_freq[s[i]];
+           frequency = this_frequency;
        }
     }
     BmUSEFUL(sv) = 100;                        /* Initial value */