This is a live mirror of the Perl 5 development currently hosted at
Merge branch 'Remove EBCDCIC special handling' into blead
authorKarl Williamson <>
Sun, 6 Oct 2019 17:08:40 +0000 (11:08 -0600)
committerKarl Williamson <>
Sun, 6 Oct 2019 17:08:40 +0000 (11:08 -0600)
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 .

Trivial merge