10 hours agot/uni/case.pl: Sort numerics with <=> to get better results khw/ebcdic
Karl Williamson [Sun, 29 Nov 2015 17:57:04 +0000]
t/uni/case.pl: Sort numerics with <=> to get better results

10 hours agoXXX encoding-warnings: Skip tests on EBCDIC
Karl Williamson [Sun, 29 Nov 2015 17:51:18 +0000]
XXX encoding-warnings: Skip tests on EBCDIC

These use the deprecated $^ENCODING mechanism, which doesn't work right

11 hours agoXXX examine utf8.h: Move
Karl Williamson [Thu, 26 Nov 2015 06:04:47 +0000]
XXX examine utf8.h: Move

11 hours agoXXX reword comment
Karl Williamson [Thu, 19 Nov 2015 04:50:44 +0000]
XXX reword comment

11 hours agot/op/utf8decode.t: Remove blank line
Karl Williamson [Fri, 13 Nov 2015 19:35:46 +0000]
t/op/utf8decode.t: Remove blank line

11 hours agoAPItest: Add tests for valid_utf8_to_uvchr
Karl Williamson [Fri, 13 Nov 2015 16:35:19 +0000]
APItest: Add tests for valid_utf8_to_uvchr

11 hours agoXXX check if ok to do utf8.c: Remove unused Perl context parameter
Karl Williamson [Mon, 9 Nov 2015 05:57:45 +0000]
XXX check if ok to do utf8.c: Remove unused Perl context parameter

11 hours agoutf8.c: Unroll utf8n_to_uvchr() for speed
Karl Williamson [Mon, 9 Nov 2015 05:51:49 +0000]
utf8.c: Unroll utf8n_to_uvchr() for speed

This attempts to speed up the bottom level UTF-8 decoding by unrolling
the loop to handle the common cases, and to avoid branch instructions as
much as possible.

Some of the ideas for this commit came from Unicode::UTF8

11 hours agoutf8.c: Reorder uvoffuni_to_utf8() to avoid branches
Karl Williamson [Mon, 9 Nov 2015 05:42:05 +0000]
utf8.c: Reorder uvoffuni_to_utf8() to avoid branches

Prior to this commit, this function had a branch at the beginning to
look for problematic code points that may have to be warned about or
disallowed.  This moves the code out of there to later in the routine to
where we know we have a range of code points that could contain the
problematic code points, but not in ranges that don't contain them.
This should save execution branching.

11 hours agoutf8.h, utfebcdic.h: Add #define
Karl Williamson [Mon, 9 Nov 2015 05:13:44 +0000]
utf8.h, utfebcdic.h: Add #define

This value be used outside these files in a future commit

11 hours agoutf8.h: Fix macro definition
Karl Williamson [Mon, 9 Nov 2015 05:02:22 +0000]
utf8.h: Fix macro definition

This has been wrong, and won't compile, should anyone have tried, since
635e76f560b3b3ca075aa2cb5d6d661601968e04 earlier in 5.23.

11 hours agoutf8.h: Remove unused #define
Karl Williamson [Sat, 7 Nov 2015 17:44:00 +0000]
utf8.h: Remove unused #define

UTF8_QUAD_MAX is no longer used in the core, and is not in cpan, and its
name is highly misleading.  It is defined to be 2**36, which has really
nothing to do with what its name indicates.

11 hours agohandy.h: Use mnemonic instead of literal value
Karl Williamson [Sat, 7 Nov 2015 17:42:20 +0000]
handy.h: Use mnemonic instead of literal value

11 hours agot/lib/warnings/utf8: Add some tests
Karl Williamson [Sat, 7 Nov 2015 17:40:59 +0000]
t/lib/warnings/utf8: Add some tests

These better test the detection of surrogates, noncharacters, and
above-Unicode code points.

11 hours agoutf8.h: Split UNICODE_IS_NONCHAR() into 3 smaller macros
Karl Williamson [Sat, 7 Nov 2015 17:37:47 +0000]
utf8.h: Split UNICODE_IS_NONCHAR() into 3 smaller macros

This defines 3 macros that together determine all the non-characters.
This is for future commits that will know the inputs to be tested
can comprise some restricted subset of the noncharacters, so that the
impossible branches need not be present.

11 hours agoutf8.h: Remove a branch in macro for Unicode surrogates
Karl Williamson [Sat, 7 Nov 2015 17:32:54 +0000]
utf8.h: Remove a branch in macro for Unicode surrogates

By masking, this macro can be written so it only has one branch.
Presumably an optimizing compiler would do the same, but not necessarily

11 hours ago utf8.h: Add some casts in macros, for safety
Karl Williamson [Tue, 10 Nov 2015 00:29:05 +0000]
 utf8.h: Add some casts in macros, for safety

This also renames the macro formal parameter to uv to be clearer as to
what is expected as input, and there were cases where it was referred to
inside the macro without being parenthesized, which was dangerous.

11 hours agoPerl_utf16_to_utf8: Combine EBCDIC and ASCII as much as possible
Karl Williamson [Fri, 6 Nov 2015 20:38:31 +0000]
Perl_utf16_to_utf8: Combine EBCDIC and ASCII as much as possible

This uses the underlying structure of UTF-8 to share as much as possible
the code between the two platform types.

11 hours agoPerl_valid_utf8_to_uvchr() unroll loop for speed
Karl Williamson [Fri, 6 Nov 2015 20:35:31 +0000]
Perl_valid_utf8_to_uvchr() unroll loop for speed

This unrolls a loop to speed things up.  I had previously found no
difference in speed, but others have found a significant change, and
it's easy enough to do.

I used macro definitions to make the inline code look cleaner, and show
the patterns in the macros better, but more importantly most of them
will be used in a future commit elsewhere in this file.

11 hours agoPerl_uvoffuni_to_utf8_flags() Combine ASCII, EBCDIC branches
Karl Williamson [Fri, 6 Nov 2015 20:26:54 +0000]
Perl_uvoffuni_to_utf8_flags() Combine ASCII, EBCDIC branches

This uses the underlying structure of UTF-8 and UTF-EBCDIC to unify the
code as much as possible.

11 hours agoutf8.h, utfebcdic.h: Comments, white-space only
Karl Williamson [Fri, 6 Nov 2015 20:21:48 +0000]
utf8.h, utfebcdic.h: Comments, white-space only

11 hours agoutf8.h: Combine EBCDIC and ASCII macros
Karl Williamson [Fri, 6 Nov 2015 18:51:37 +0000]
utf8.h: Combine EBCDIC and ASCII macros

Previous commits have set things up so the macros are the same on both
platforms.  By moving them to the common part of utf8.h, they can share
the same definition.  The difference listing shows instead other things
being moved due to the size of this move in comparison with those things
that really stayed the same.

11 hours agoutf8.h: Refactor macro definition
Karl Williamson [Fri, 6 Nov 2015 18:42:27 +0000]
utf8.h: Refactor macro definition

This changes to use the underlying UTF-8 structure to compute the
numbers in this macro, instead of hand-specifying the resultant ones.
Thus, this macro, with minor tweaks, is the same text on both ASCII and
EBCDIC platforms (though the resultant numbers differ), and the next
commit will change them to use it in common.

11 hours agoutf8.h: Combine EBCDIC and ASCII macros
Karl Williamson [Fri, 6 Nov 2015 18:03:22 +0000]
utf8.h: Combine EBCDIC and ASCII macros

The previous commits have made these macros be the exact same text, so
can be combined, and defined just once.  This requires moving them to
the portion of the file that is common with both EBCDIC and ASCII.

11 hours agoutf8.h: Refactor a macro
Karl Williamson [Fri, 6 Nov 2015 17:56:23 +0000]
utf8.h: Refactor a macro

This new definition expands to the same thing as before, but now it is
identical to the EBCDIC definition (which expands to something else), so
the next commit can combine the ASCII and EBCDIC ones into a single

11 hours agoutf8.h: Use common macro to avoid repeating
Karl Williamson [Fri, 6 Nov 2015 17:44:36 +0000]
utf8.h: Use common macro to avoid repeating

This refactors two macros that have mostly the same guts to have a third
macro to define the common guts.

It also changes to use UV_IS_QUAD instead of a home-grown #define that a
future commit will remove.

11 hours agoutf8.h: Move #define within file
Karl Williamson [Fri, 6 Nov 2015 17:37:56 +0000]
utf8.h: Move #define within file

This makes 2 related definitions adjacent.

11 hours agoutf8.h: Combine EBCDIC and ASCII #defines
Karl Williamson [Fri, 6 Nov 2015 17:06:32 +0000]
utf8.h: Combine EBCDIC and ASCII #defines

Change to use the same definition for two macros on both types of
platforms, simplifying the code, by using the underlying structure of
the encoding.

11 hours agoutf8.h: Move #define to earlier in the file
Karl Williamson [Fri, 6 Nov 2015 16:36:54 +0000]
utf8.h: Move #define to earlier in the file

And use its mnemonic in other #defines instead of repeating the raw

11 hours agoutf8.h, et.al.: Clean up some casts
Karl Williamson [Fri, 6 Nov 2015 16:11:55 +0000]
utf8.h, et.al.: Clean up some casts

By making sure the no-op macros cast the output appropriately, we can
eliminate the casts that have been added in things that call them

11 hours agoutf8.h: Combine ASCII and EBCDIC defines into one
Karl Williamson [Fri, 6 Nov 2015 19:54:55 +0000]
utf8.h: Combine ASCII and EBCDIC defines into one

By using a more fundamental value, these two definitions of the macro
can be made the same, so only need one, common to both platforms

11 hours agoutfebcdic.h: Use an internal macro to avoid repeating
Karl Williamson [Fri, 30 Oct 2015 16:01:09 +0000]
utfebcdic.h: Use an internal macro to avoid repeating

This creates a macro that is used in portions of 2 other macros, thus
removing repetition.

11 hours agoutf8.h, utfebcdic.h: Fix-up UTF8_MAXBYTES_CASE defn
Karl Williamson [Fri, 30 Oct 2015 03:19:40 +0000]
utf8.h, utfebcdic.h: Fix-up UTF8_MAXBYTES_CASE defn

The definition had gotten moved away from its comments in utf8.h, and
the wrong thing was being guarded by a #error, (UTF8_MAXBYTES instead).
And it is possible to generalize to get the compiler to do the
calculation, and to consolidate the definitions from the two files into
a single one.

11 hours agoRevert "Unicode::Collate: Generalize to work on EBCDIC"
Karl Williamson [Tue, 3 Nov 2015 18:26:47 +0000]
Revert "Unicode::Collate: Generalize to work on EBCDIC"

11 hours agoUnicode::Collate: Generalize to work on EBCDIC
Karl Williamson [Tue, 27 Oct 2015 23:56:59 +0000]
Unicode::Collate: Generalize to work on EBCDIC

The data that this module gets is directly from unicode.org, and hence
is in Unicode order.  But the input data is from whatever platform it's
running on, which may be in EBCDIC order.  We just need to convert to
Unicode on input.

11 hours agoDeprecate 3 utf8 functions
Karl Williamson [Mon, 26 Oct 2015 18:02:42 +0000]
Deprecate 3 utf8 functions

These functions will generally lead to the wrong answers when used on
EBCDIC platforms in modern perls.  The docs now give guidance on what to
use instead.

11 hours agoXXX Skip porting tests
Karl Williamson [Mon, 2 Nov 2015 20:24:22 +0000]
XXX Skip porting tests

11 hours agoXXX cpan/Encode/t/at-cn.t
Karl Williamson [Fri, 6 Nov 2015 16:07:57 +0000]
XXX cpan/Encode/t/at-cn.t

11 hours agoXXX test encode
Karl Williamson [Thu, 5 Nov 2015 05:01:37 +0000]
XXX test encode

11 hours agot/TEST: Test Encode
Karl Williamson [Sun, 25 Oct 2015 02:06:58 +0000]
t/TEST: Test Encode

11 hours agoXXX experiment cpan/Pod-Simple/t/fcodes_s.t
Karl Williamson [Sun, 25 Oct 2015 02:02:56 +0000]
XXX experiment cpan/Pod-Simple/t/fcodes_s.t

11 hours agoXXX cpan decode.t: Generalize to run on EBCDIC
Karl Williamson [Sun, 25 Oct 2015 02:01:36 +0000]
XXX cpan decode.t: Generalize to run on EBCDIC

Just use another code point.  The previous code point was a UTF-8
invariant on EBCDIC systems, so did not trigger what was being tested.

11 hours agoXXX cpan cow.t: Fix so also runs on EBCDIC 1047
Karl Williamson [Sun, 25 Oct 2015 02:00:40 +0000]
XXX cpan cow.t: Fix so also runs on EBCDIC 1047

11 hours agoXXX lib/open.t: todo test until encode is fixed
Karl Williamson [Tue, 6 Oct 2015 16:49:18 +0000]
XXX lib/open.t: todo test until encode is fixed

11 hours agoXXX See if lib/open.t now works
Karl Williamson [Mon, 5 Oct 2015 23:08:59 +0000]
XXX See if lib/open.t now works

11 hours agoMANIFEST, etc for prev. commit
Karl Williamson [Thu, 8 Oct 2015 18:54:54 +0000]
MANIFEST, etc for prev. commit

11 hours agoXXX cpan MIME::Base64::unicode.t: Generalize to work on EBCDIC
Karl Williamson [Thu, 1 Oct 2015 17:19:22 +0000]
XXX cpan MIME::Base64::unicode.t: Generalize to work on EBCDIC

11 hours agoXXX cpan quoted-print.t: Generalize for non-ASCII
Karl Williamson [Tue, 6 Oct 2015 22:53:53 +0000]
XXX cpan quoted-print.t: Generalize for non-ASCII

This had hard-coded in one EBCDIC code page, and would not work on
others.  The ASCII and EBCDIC code was disjoint, and over the years,
changes had been made to the ASCII version, but not the EBCDIC.

This commit joins the disparate paths so that they will stay in sync,
and modernizes to use the is() test function, which it defines itself
rather than adding dependencies.

Because the diff listing is so disjointed, I manually checked that the
final result included the tests from the ASCII version, which had more
tests than the EBCDIC, and some revisions.

The one change is that I changed "\x20" occurrences to " ".  I know
enough about perl parsing to know that the \x version will be
transformed into the literal blank before the module sees it, so that
keeping the \x version doesn't actually test anything.

11 hours agoXXX cpan quoted-print.t: Add in an is() testing function
Karl Williamson [Tue, 6 Oct 2015 20:32:54 +0000]
XXX cpan quoted-print.t: Add in an is() testing function

This function will allow this .t to be modernized to use more current
testing infrastructure.  I added this separately from the changes in the
next commit, as my diff tool got confused and showed lots of change
fragments.  This will make the diff in the following commit cleaner,
but it still is not very good.

11 hours agoXXX cpan quoted-print.t: Test that interior \t is output as-is
Karl Williamson [Tue, 6 Oct 2015 20:20:33 +0000]
XXX cpan quoted-print.t: Test that interior \t is output as-is

Tabs aren't encoded except if they are at the end of line.  But there
was no test for non-end of line tabs.

11 hours agoXXX Debug cpan/MIME-Base64/t/base64.t
Karl Williamson [Thu, 1 Oct 2015 17:16:44 +0000]
XXX Debug cpan/MIME-Base64/t/base64.t

11 hours agoRun official Unicode normalization tests if available
Karl Williamson [Thu, 1 Oct 2015 18:07:33 +0000]
Run official Unicode normalization tests if available

This will skip the test if the optional generated file is not built.
It is built by changing the Makefile options to run mktables.

11 hours agoRevert "Generate official normtest file"
Karl Williamson [Sat, 3 Oct 2015 16:23:46 +0000]
Revert "Generate official normtest file"

11 hours agoGenerate official Unicode normalization test file
Karl Williamson [Mon, 21 Sep 2015 19:31:45 +0000]
Generate official Unicode normalization test file

11 hours agoXXX debug lib/open.t
Karl Williamson [Fri, 25 Sep 2015 18:20:40 +0000]
XXX debug lib/open.t

11 hours agoXXX cpan 07locale.t: Skip if locales not fully available
Karl Williamson [Sat, 3 Oct 2015 14:46:28 +0000]
XXX cpan 07locale.t: Skip if locales not fully available

Some systems will have partial locale handling available, but not enough
to actually use; this commit improves the detection of them.  Also, the
perl can be configured to not use locales, even if available, and this
commit now honors that.

11 hours agoXXX CPAN and unsure Encode
Karl Williamson [Tue, 26 Feb 2013 00:04:24 +0000]
XXX CPAN and unsure Encode

11 hours agoXXX cpan: cpan/MIME-Base64/Base64.xs: Generalize for EBCDIC
Karl Williamson [Mon, 22 Dec 2014 06:00:26 +0000]
XXX cpan: cpan/MIME-Base64/Base64.xs: Generalize for EBCDIC

11 hours agocpan/ExtUtils-Install/t/InstallWithMM.t: White-space only
Karl Williamson [Mon, 21 Apr 2014 16:09:57 +0000]
cpan/ExtUtils-Install/t/InstallWithMM.t: White-space only

Indent for new block formed by previous commit

11 hours agocpan/ExtUtils-Install/t/InstallWithMM.t: Skip if EBCDIC
Karl Williamson [Tue, 16 Apr 2013 15:03:47 +0000]
cpan/ExtUtils-Install/t/InstallWithMM.t: Skip if EBCDIC

Because it uses JSON

11 hours agoXXX remove all but CP 1047 EBCDIC tables
Karl Williamson [Tue, 8 Sep 2015 04:39:09 +0000]
XXX remove all but CP 1047 EBCDIC tables

This makes things smaller and faster to regenerate during the debugging

11 hours agot/TEST
Karl Williamson [Fri, 25 Sep 2015 18:22:13 +0000]

11 hours agoXXX Test Unicode::Collate and Unicode::Normalize
Karl Williamson [Mon, 3 Aug 2015 04:18:10 +0000]
XXX Test Unicode::Collate and Unicode::Normalize

11 hours agot/TEST: Stop after 10 errors
Karl Williamson [Tue, 26 Mar 2013 21:44:59 +0000]
t/TEST: Stop after 10 errors

11 hours ago XXX cpan vutil.c Nits, C<> L<>
Karl Williamson [Sat, 9 May 2015 03:12:55 +0000]
 XXX cpan vutil.c Nits, C<> L<>

11 hours agoImport cpan's version/t/07locale.t
Karl Williamson [Sat, 3 Oct 2015 15:34:54 +0000]
Import cpan's version/t/07locale.t

13 hours agohexfp: printf %.13a 0.0 blead
Jarkko Hietaniemi [Sun, 29 Nov 2015 03:56:29 +0000]
hexfp: printf %.13a 0.0

13 hours agohexfp: printf %.13a 1.0
Jarkko Hietaniemi [Sun, 29 Nov 2015 03:22:25 +0000]
hexfp: printf %.13a 1.0

22 hours agoperldelta for deprecation of code points > IV_MAX
Karl Williamson [Sun, 29 Nov 2015 05:28:17 +0000]
perldelta for deprecation of code points > IV_MAX

Commit 760c7c2f746ce3f3c3356b0a3efb017b6d0cb5b0 added this deprecation.

25 hours agohexfp: printf %a for negative zero.
Jarkko Hietaniemi [Sat, 28 Nov 2015 22:45:19 +0000]
hexfp: printf %a for negative zero.

28 hours agoutf8.c: White-space, comment typos only
Karl Williamson [Sat, 28 Nov 2015 19:13:00 +0000]
utf8.c: White-space, comment typos only

28 hours agoDeprecate Unicode code points above IV_MAX
Karl Williamson [Sat, 28 Nov 2015 18:49:43 +0000]
Deprecate Unicode code points above IV_MAX

See https://rt.perl.org/Ticket/Display.html?id=115166

28 hours agoperlapi: Account for EBCDIC extend UTF-8 range
Karl Williamson [Sat, 28 Nov 2015 18:54:44 +0000]
perlapi: Account for EBCDIC extend UTF-8 range

These pod changes were missed for
c0236afee0c5845d3823612c5cd34eccc4d29321, which also had a typo in its
commit message:  It should have said that the previous max was 2**31 -

28 hours agoutf8.h: Remove use of redundant flags
Karl Williamson [Thu, 26 Nov 2015 05:35:53 +0000]
utf8.h: Remove use of redundant flags

The ABOVE_31_BIT flags is a proper subset of the SUPER flags, so if the
latter is set, we don't have to bother setting the former.  On the other
hand, there is no harm in doing so, these changes are all resolved at
compile time.  The reason I'm changing them is that it is easier to
explain in the pod what is happening, in the next commit.

28 hours agoutf8.h: Add clearer #define synonyms
Karl Williamson [Thu, 26 Nov 2015 03:41:39 +0000]
utf8.h: Add clearer #define synonyms

These names have long caused me consternation, as they are named after
the internal ASCII-platform UTF-8 representation, which is not the same
for EBCDIC platforms, nor do they convey meaning to someone who isn't
currently steeped in the UTF-8 internals.  I've added synonyms that are
platform-independent in meaning and make more sense to someone coming at
this cold.  The old names are retained for back compat.

34 hours agoreformat the FOOMARK macros slightly
David Mitchell [Sat, 28 Nov 2015 17:32:27 +0000]
reformat the FOOMARK macros slightly

whitespace-only changes

35 hours agoFOOMARK debugging macros: fix %d cast; only -Dsv
David Mitchell [Sat, 28 Nov 2015 17:09:13 +0000]
FOOMARK debugging macros: fix %d cast; only -Dsv

The debugging variants of POPMARK() etc: use %IVdf rather than %d
to avoid compiler warnings when sizeof(IV) != sizeof(int);
also, make these macros trigger only under -Dsv rather than just -Ds
(-v is the verbose variant).

35 hours agoBenchmark.t: better diagnostics
David Mitchell [Sat, 28 Nov 2015 16:44:12 +0000]
Benchmark.t: better diagnostics

use cmp_ok() instesd of ok() where apppriate and similar things to
get better diagnostucs when things fail (e.g. display what the bad value
was, rather than just letting you know it was bad).

Also, use diag() rather than 'print STDERR "# .....\n";'

3 days agoBenchmark.t/.pm: deal with short times
David Mitchell [Thu, 26 Nov 2015 15:41:01 +0000]
Benchmark.t/.pm: deal with short times

The number of iterations to do on various tests was set at 3 or 10
in the first incarnation of the test file 13 years ago, and hasn't
changed since. In the meantime, CPUs have gotten faster. So bump the
iteration count to 100. This makes no appreciable difference to total wall
time for the test file on my newish x86_64 platform, but will hopefully
make tests less likely to be running within the noise of  a single 100Hz
clock tick.

In particular, the NetBSD smokes were quite frequently failing tests 127
and 128, due to the CPU taken to do an empty loop being greater than that
for a full loop, thus leading to negative apparent execution time.  This
was likely to be due to the first taking "1" clock tick and the second
taking "0" ticks. Although this is less likely to happen now that the
iterations has been increased, this commit also adds a check to
Benchmark.pm for a negative apparent execution time, and if detected,
prints a "too few iterations" warning and resets it to zero.

3 days agoBenchmark: move elapsed time calc into method
David Mitchell [Thu, 26 Nov 2015 13:51:29 +0000]
Benchmark: move elapsed time calc into method

A couple of places do basically the same set of summing various times()
fields within a Benchmark object, so make it into a private method.

4 days agoExtend UTF-EBCDIC to handle up to 2**64-1
Karl Williamson [Thu, 19 Nov 2015 04:28:14 +0000]
Extend UTF-EBCDIC to handle up to 2**64-1

This uses for UTF-EBCDIC essentially the same mechanism that Perl
already uses for UTF-8 on ASCII platforms to extend it beyond what might
be its natural maximum.  That is, when the UTF-8 start byte is 0xFF, it
adds a bunch more bytes to the character than it otherwise would,
bringing it to a total of 14 for UTF-EBCDIC.  This is enough to handle
any code point that fits in a 64 bit word.

The downside of this is that this extension is not compatible with
previous perls for the range 2**30 up through the previous max,
2**30 - 1.  A simple program could be written to convert files that were
written out using an older perl so that they can be read with newer
perls, and the perldelta says we will do this should anyone ask.
However, I strongly suspect that the number of such files in existence
is zero, as people in EBCDIC land don't seem to use Unicode much, and
these are very large code points, which are associated with a
portability warning every time they are output in some way.

This extension brings UTF-EBCDIC to parity with UTF-8, so that both can
cover a 64-bit word.  It allows some removal of special cases for EBCDIC
in core code and core tests.  And it is a necessary step to handle Perl
6's NFG, which I'd like eventually to bring to Perl 5.

This commit causes two implementations of a macro in utf8.h and
utfebcdic.h to become the same, and both are moved to a single one in
the portion of utf8.h common to both.

To illustrate, the I8 for U+3FFFFFFF (2**30-1) is
"\xFE\xBF\xBF\xBF\xBF\xBF\xBF" before and after this commit, but the I8
for the next code point, U+40000000 is now
and before this commit it was "\xFF\xA0\xA0\xA0\xA0\xA0\xA0".

The I8 for 2**64-1 (U+FFFFFFFFFFFFFFFF) is
"\xFF\xAF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF", whereas
before this commit it was unrepresentable.

Commit 7c560c3beefbb9946463c9f7b946a13f02f319d8 said in its message that
it was moving something that hadn't been needed on EBCDIC until the
"next commit".  That statement turned out to be wrong, overtaken by
events.  This now is the commit it was referring to.
commit I prematurely
pushed that

4 days agotoke.c: Remove soon-to-be invalid t assumption
Karl Williamson [Mon, 23 Nov 2015 22:00:55 +0000]
toke.c: Remove soon-to-be invalid t assumption

The code in toke.c assumes that the UTF8 expansion of the string
"\x{foo}" takes no more bytes than the original input text, which
includes the 4 bytes of overhead "\x{}".  Similarly for "\o{}".  The
functions that convert to the code point actually now assert for this.
The next commit will make this assumption definitely invalid on EBCDIC
platforms.  Remove the assertions, and actually handle the case
properly.  The other places that call the conversion functions do not
make this assumption, so there is no harm in removing them from there.

Since we believe that this can't happen except on EBCDIC, we
could #ifdef this code and use just an assert on non-EBCDIC.  But it's
easier to maintain if #ifdef's are minimized.  Parsing is not a
time-critical operation, like being in an inner loop, and the extra test
gives a branch prediction hint to the compiler.

4 days agoext/XS-APItest/t/utf8.t: Change variable names for clarity
Karl Williamson [Wed, 25 Nov 2015 18:35:51 +0000]
ext/XS-APItest/t/utf8.t: Change variable names for clarity

These variables are misnamed, based on the internal Perl UTF-8
representation for ASCII platforms, which is not applicable for
UTF-EBCDIC.  Rename them to something that applies to both platforms,
and lowers confusion.

4 days agoOutput appropriately dire warning for high code points
Karl Williamson [Tue, 10 Nov 2015 00:00:53 +0000]
Output appropriately dire warning for high code points

Code points above 2**31-1 have never been in any standard, so their use
is non-portable.  There has been a more dire warning raised at times
when decoding UTF-8 into a UV, but it wasn't getting output always when
it was appropriate.  Going the other way, into UTF-8, there was only one
type of warning output.  This commit splits that into the more dire for
higher code points.

4 days agoext/XS-APItest: Add tests for uvchr_to_utf8()
Karl Williamson [Tue, 10 Nov 2015 02:41:05 +0000]
ext/XS-APItest: Add tests for uvchr_to_utf8()

There are some TODOs added that these tests uncovered, which will be
fixed in the next commit.

4 days agoFix uvoffuni_to_utf8_flags() disallowed input
Karl Williamson [Wed, 11 Nov 2015 19:12:52 +0000]
Fix uvoffuni_to_utf8_flags() disallowed input

This function has the capability to refuse to accept problematic code
points, such as surrogates.  It accepted them anyway if the warnings
category wasn't enabled.  Tests for this will be introduced in the next

4 days agoXS-APItest/utf8.t: Add a bunch more tests
Karl Williamson [Tue, 10 Nov 2015 02:40:41 +0000]
XS-APItest/utf8.t: Add a bunch more tests

This adds more extensive testing, and rearranges things so that the
the more fundamental tests are done earlier.  Boundary cases are
especially added.  It removes many of the EBCDIC skips.  Debug
information is output now to STDERR so that test_harness displays it,
and more gets output upon failure.  Two TODO tests were added as a
result of this catching some existing problems that hadn't been tested
for previously.

4 days agoregcomp.c: White-space only
Karl Williamson [Tue, 24 Nov 2015 21:14:14 +0000]
regcomp.c: White-space only

This does vertical alignment to make things clearer

4 days agoregen/ebcdic.pl: Output tables in hex
Karl Williamson [Fri, 13 Nov 2015 19:42:22 +0000]
regen/ebcdic.pl: Output tables in hex

When dealing with code points, it is easier to use the hex values.  This
outputs the tables in hex, squeezing them so they barely fit in an 80
column window.  That they didn't use to so fit was why they were not
output in hex prior to this commit.

The UTF8SKIP table is continued to be output in decimal, as the values
aren't code points.

4 days agoPerl_newATTRSUB_x: cast a bool arg
David Mitchell [Wed, 25 Nov 2015 15:58:20 +0000]
Perl_newATTRSUB_x: cast a bool arg

S_op_const_sv() expects a bool arg, so cast accordingly.
(Otherwise if the flag bit is > bit 7, it could get truncated to 0)

4 days agoBenchmark.t: add more diag output
David Mitchell [Wed, 25 Nov 2015 15:36:26 +0000]
Benchmark.t: add more diag output

2 tests in a particular block of code are consistently failing on a newbsd

Make a copy of that block of code but with the result object and
chart object generated separately, then diag dump both if any of the
tests in that new block fail, so we can see better what's going wrong.

4 days agoBenchmark.t: fix marginal tests
David Mitchell [Wed, 25 Nov 2015 11:18:38 +0000]
Benchmark.t: fix marginal tests

Two tests fail a lot of smokes; those tests assert that two
code variants when one is faster than the other should show a percentage
difference > 0. Then the differences are slight, the percentage may round
down to zero and the test will fail. Reduce the likelihood of this my
making one code variant a lot slower than the other

4 days agofix an else nesting error from the last set of DynaLoader patches
Tony Cook [Wed, 25 Nov 2015 05:39:16 +0000]
fix an else nesting error from the last set of DynaLoader patches

5 days agoSDBM_File: specify the prototyping behaviour
David Mitchell [Tue, 24 Nov 2015 16:57:50 +0000]
SDBM_File: specify the prototyping behaviour

This commit just adds 'PROTOTYPES: DISABLE' which is the default
anyway(*), but it stops this annoying warning on stderr:

    Please specify prototyping behavior for SDBM_File.xs (see perlxs manual)

(*) perlxs.pod implies that the default is enabled, but this doesn't
appear to be the case

5 days agoupdate Maintainers.pl for new Module-Metadata
David Mitchell [Tue, 24 Nov 2015 15:39:49 +0000]
update Maintainers.pl for new Module-Metadata

5 days agoUpdate Module-Metadata to version 1.000031
Karen Etheridge [Tue, 24 Nov 2015 04:01:01 +0000]
Update Module-Metadata to version 1.000031

1.000031  2015-11-24 03:57:55Z (TRIAL RELEASE)
  - be less noisy on failure when building as part of perl core (see perl

5 days agoExtUtils::CBuilder: silence noisy test
David Mitchell [Tue, 24 Nov 2015 15:21:43 +0000]
ExtUtils::CBuilder: silence noisy test

00-have-compiler.t deliberately does something that tries to fork and
exec a non-existent file.

Stop spurious 'Can't exec "djaadjfkadjkfajdf"' appearing on stderr
by temporaily closing it before running the relevant tests.

5 days agoshared.xs: remove dead code
David Mitchell [Tue, 24 Nov 2015 12:56:18 +0000]
shared.xs: remove dead code

Since v5.23.4-26-g0b057af made static a bunch a functions not used
outside their own src files, gcc has been complaining:

    shared.xs:1172:1: warning: ‘Perl_sharedsv_unlock’ defined but not used [-Wunused-function]
     Perl_sharedsv_unlock(pTHX_ SV *ssv)

So "delete" this function using '#if 0'

5 days agoOpcode.xs: silence compiler warning
David Mitchell [Tue, 24 Nov 2015 12:38:15 +0000]
Opcode.xs: silence compiler warning

Opcode.xs: In function ‘opmask_addlocal’:
../../perl.h:6473:12: warning: unused variable ‘my_cxtp’ [-Wunused-variable]
  my_cxt_t *my_cxtp = (my_cxt_t *)PL_my_cxt_list[MY_CXT_INDEX]

Without debugging enabled, opcode_debug becomes a constant, so
dMY_CXT isn't needed in opmask_addlocal().

Make the enabling of debugging based on a macro (OPCODE_DEBUG)
rather then on '#if 0', then use that accordingly.

6 days ago[perl #126443] make sure PL_oldbufptr is preserved in scan_heredoc()
Tony Cook [Tue, 24 Nov 2015 03:52:31 +0000]
[perl #126443] make sure PL_oldbufptr is preserved in scan_heredoc()

This is later used to update PL_oldoldbufptr, if the token following
the <<FOO is unexpected this causes S_no_op() to access an invalid