This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Merge branch 'Remove EBCDCIC special handling' into blead
authorKarl Williamson <khw@cpan.org>
Sun, 6 Oct 2019 17:08:40 +0000 (11:08 -0600)
committerKarl Williamson <khw@cpan.org>
Sun, 6 Oct 2019 17:08:40 +0000 (11:08 -0600)
commit4f89f09f9b3db7f542b7029c55aad389a59c9a02
tree10e0c37d317b734e27acf0b0125587d690b050d9
parentd7bcd45a8b00fa6be02a62e097629473b2a9becc
parent2c03e801f9133bacfe39d2a12decdd9d2b3b075a
Merge branch 'Remove EBCDCIC special handling' into blead

It turns out that only a single number is needed to distinguish between
basic UTF-8 and UTF-EBCDIC.  And that is the number of bits of
real information are in each continuation byte.  In UTF-8 it is 6 (2
bits reserved for syntax); In UTF-EBCDIC it is 5.

Everything else stems from reasonable decisions based on this
fundamental difference.  So all the other constants can be common
between the two systems, using compile-time shifts and masks.

For Perl's extended UTF-8-like encoding, another constant is needed,
which is the number of continuation bytes appended when the start byte
is 8 bits.  For both systems, that number is the minimum required to be
able to encode a 64-bit integer. (There are other ways to extend the
encoding, including some that are infinitely so.  But Perl chose to just
append a fixed number of bytes, so it isn't extensible.  But it has the
advantage of needing to rely only on the first byte to know how many
more are coming.)

This commit consolidates various constants that differed between the
two systems, but were unnecessarily so.  There are other constants that
remain that differ between the two files; these are for convenience .