10 months agorevert perl_run() 0 -> 256 return mapping
David Mitchell [Mon, 28 May 2018 14:54:57 +0000 (15:54 +0100)] 
revert perl_run() 0 -> 256 return mapping

RT #133220

This commit partially reverts v5.27.6-180-g0301e89953.

That commit changed the return values of perl_parse() and perl_run()
so that an exit(0) wouldn't return 0 (which indicates a normal finish)
and instead return 0x100, which a indicates non-normal return, but with
a value which if used as an 8-bit process exit value on UNIX, has the
modulo value of 0.

However, it turns out that perl_run() (via S_run_body()) does a my_exit(0)
rather than just running to completion. So it turns out that it's not
possible to distinguish between perl code finishing normally, and perl
code doing exit(0).

This broke code which embedded perl and expected perl_run() to return 0
on normal completion.

It may be possible to fix this by getting S_run_body() to not call
my_exit(0), but that's too unpredictable change while we're at -RC1.

So just revert the new perl_run() 0x100 behaviour for now.

11 months agoExcessively long line made t/porting/podcheck.t unhappy.
James E Keenan [Thu, 24 May 2018 19:42:35 +0000 (15:42 -0400)] 
Excessively long line made t/porting/podcheck.t unhappy.

11 months agoUpdate information on which gcc versions are supported on Windows
Steve Hay [Thu, 24 May 2018 12:37:04 +0000 (13:37 +0100)] 
Update information on which gcc versions are supported on Windows

See [perl #128631] (MinGW with runtimes >= 3.21 currently don't work) and
[perl #132955] (MinGW 3.4.5 and 4.7.2+ and MinGW64 x64 6.3.0+ currently
don't work in C++ mode).

11 months agofix Mingw GCC C++ build errors PL_inf/PL_nan
Daniel Dragan [Tue, 24 Apr 2018 18:12:46 +0000 (14:12 -0400)] 
fix Mingw GCC C++ build errors PL_inf/PL_nan

Trying a USE_CPLUSPLUS=define build with dmake (USE_CPLUSPLUS not
implemented in GNUMakefile) causes the following error

gcc -c -xc++ -I.\include -I. -I.. -DWIN32 -DPERLDLL -DPERL_CORE -s -O2 -fwrapv -
fno-strict-aliasing -DPERL_EXTERNAL_GLOB -DPERL_IS_MINIPERL -omini\globals.o  ..
In file included from ..\globals.c:32:0:
..\perl.h:6754:50: error: too many initializers for 'U8 [8] {aka unsigned char [
..\perl.h:6790:50: error: too many initializers for 'U8 [8] {aka unsigned char [
dmake:  Error code 129, while making 'mini\globals.o'
in plain C mode builds, this error was just a warning and nobody paid
attention to it for a while
gcc -c  -I.\include -I. -I.. -DWIN32 -DPERLDLL -DPERL_CORE -s -O2 -fwrapv -fno-s
trict-aliasing -DPERL_EXTERNAL_GLOB -DPERL_IS_MINIPERL -omini\globals.o  ..\glob
In file included from ..\globals.c:32:0:
..\perl.h:5432:42: warning: excess elements in array initializer
 #define INFNAN_U8_NV_DECL EXTCONST union { U8 u8[NVSIZE]; NV nv; }
..\perl.h:6754:1: note: in expansion of macro 'INFNAN_U8_NV_DECL'
..\perl.h:5432:42: warning: (near initialization for 'PL_inf.u8')
 #define INFNAN_U8_NV_DECL EXTCONST union { U8 u8[NVSIZE]; NV nv; }
..\perl.h:6754:1: note: in expansion of macro 'INFNAN_U8_NV_DECL'
..\perl.h:5432:42: warning: excess elements in array initializer
 #define INFNAN_U8_NV_DECL EXTCONST union { U8 u8[NVSIZE]; NV nv; }

Now on VC C++ build, LONGDBLINFBYTES is 8 bytes, as defined in
LONGDBLINFBYTES macro in, and for VC, "long double" is always
typedefed by the CC to "double", so there was no warning, but on GCC,
"long double" is the 80 bit/10 byte type and in config_H.gc the 12 byte
version of INF is inside LONGDBLINFBYTES macro. Because LONG_DOUBLESIZE
define was previously "8" because of makefile logic regardless of CC,


was being hit on GCC, even though NVSIZE is 8 as it should be, but
LONGDBLINFBYTES was 12. Hence the warning. I didnt research why this
warning on GCC didn't cause test failures. Perhaps full perl recomputes
the correct initializer in config_sh.PL and doesn't rely on what was in the
miniperl initializer for PL_inf.

To fix things, always emit the correct value for LONG_DOUBLESIZE and dont
hardcode it at 8 for miniperl. 8 must stay for all VCs, and 12/16 is for
GCC. Although GNUMakefile doesn't support a USE_CPLUSPLUS build option,
it has provisons to support it one day. To keep things in sync, copy
miniperl config.h append changes from to GNUMakefile. Also
collapse 2 shell cmd lines in "ifeq ($(USE_LONG_DOUBLE),define)" to reduce
number of proc launches of cmd.exe by the maketool (perf issue).

Next C++ build issue.

APItest.xs: In function 'void XS_XS__APItest__Backrefs_Comctl32Version(Perl
Interpreter*, CV*)':
APItest.xs:6806:37: error: cast from 'LPSTR {aka char*}' to 'WORD {aka shor
t unsigned int}' loses precision [-fpermissive]
dmake:  Error code 129, while making 'APItest.o'

VS_FILE_INFO is internally "RT_VERSION" which is MAKEINTRESOURCE(16). The
output type of MAKEINTRESOURCE is a char *. GCC complains about casting
that char * back down to a WORD (aka short). Put in a size_t used for
pointer arithimitic to silence the error. Another option is to
remove the outer MAKEINTRESOURCE in APItest.xs since RT_VERSION has
MAKEINTRESOURCE internally, but that assumes implementation details of
headers so pick the less dependency on header design option.

11 months agoAdd link to release for epigraph
Sawyer X [Wed, 23 May 2018 13:47:46 +0000 (16:47 +0300)] 
Add link to release for epigraph

11 months agoperldelta: Clarify we refer to perl -i in in-place editing
Sawyer X [Wed, 23 May 2018 13:37:37 +0000 (16:37 +0300)] 
perldelta: Clarify we refer to perl -i in in-place editing

11 months agoperldelta: Remove mention of reverted change
Sawyer X [Wed, 23 May 2018 13:35:37 +0000 (16:35 +0300)] 
perldelta: Remove mention of reverted change

11 months agoperldelta: convert all RT ticket references to links
Aaron Crane [Tue, 22 May 2018 08:23:58 +0000 (09:23 +0100)] 
perldelta: convert all RT ticket references to links

11 months agoMinor edits to perldelta
Aaron Crane [Tue, 22 May 2018 08:12:47 +0000 (09:12 +0100)] 
Minor edits to perldelta

- Delete some mentions of bugs that were both introduced and fixed in the
  5.27.x series

- Fix a POD infelicity

- Add one word for clarity

11 months agoFixes for perldelta
Karl Williamson [Mon, 21 May 2018 19:26:58 +0000 (13:26 -0600)] 
Fixes for perldelta

This commit makes some changes to perldelta.

1) Reorders some sections so that a new feature is presented before
being referred to.

2) Typos

3) Confused wording

4) =head text should all be on the same line

5) script runs are experimental

11 months agoupdate with perl527*delta removal
David Mitchell [Mon, 21 May 2018 15:26:10 +0000 (16:26 +0100)] 
update with perl527*delta removal

Update a few build files so that they know that the perl527*delta.pod
files no longer exist.

11 months agoRemove 5.27.x perldelta files
Sawyer X [Mon, 21 May 2018 13:54:21 +0000 (16:54 +0300)] 
Remove 5.27.x perldelta files

11 months agoRegen META files
Sawyer X [Mon, 21 May 2018 13:42:02 +0000 (16:42 +0300)] 
Regen META files

11 months agoAdding epigraph, correct previous
Sawyer X [Mon, 21 May 2018 13:25:41 +0000 (16:25 +0300)] 
Adding epigraph, correct previous

11 months agodisarm RC1 bump
Sawyer X [Mon, 21 May 2018 12:52:19 +0000 (15:52 +0300)] 
disarm RC1 bump

11 months agoUpdate META files v5.28.0-RC1
Sawyer X [Mon, 21 May 2018 10:50:38 +0000 (13:50 +0300)] 
Update META files

11 months agobump version to RC1
Sawyer X [Mon, 21 May 2018 10:50:13 +0000 (13:50 +0300)] 
bump version to RC1

11 months agoUpdate perlhist for 5.28.0-RC1
Sawyer X [Mon, 21 May 2018 10:49:21 +0000 (13:49 +0300)] 
Update perlhist for 5.28.0-RC1

11 months agoFinally
Sawyer X [Mon, 21 May 2018 10:44:16 +0000 (13:44 +0300)] 

11 months agoFinalize perldelta
Sawyer X [Mon, 21 May 2018 09:19:57 +0000 (12:19 +0300)] 
Finalize perldelta

11 months agoUpdate Module::CoreList for 5.28.0
Sawyer X [Mon, 21 May 2018 08:47:26 +0000 (11:47 +0300)] 
Update Module::CoreList for 5.28.0

11 months agoRemove symlink and MANIFEST entry
Sawyer X [Sun, 20 May 2018 16:08:46 +0000 (19:08 +0300)] 
Remove symlink and MANIFEST entry

11 months agoFixes for 5.28.0
Sawyer X [Sun, 20 May 2018 15:38:08 +0000 (18:38 +0300)] 
Fixes for 5.28.0

11 months agoMerged all perldeltas for 5.28.0
Sawyer X [Sun, 20 May 2018 15:37:59 +0000 (18:37 +0300)] 
Merged all perldeltas for 5.28.0

11 months agoUpdate Module::CoreList for 5.28.0-RC1
Sawyer X [Mon, 14 May 2018 20:48:21 +0000 (23:48 +0300)] 
Update Module::CoreList for 5.28.0-RC1

11 months agoUpdate perlpolicy for 5.28.0
Sawyer X [Mon, 14 May 2018 20:36:48 +0000 (23:36 +0300)] 
Update perlpolicy for 5.28.0

11 months agoregcomp.c: White space only
Karl Williamson [Sun, 13 May 2018 03:58:56 +0000 (21:58 -0600)] 
regcomp.c: White space only

Indent code that now has a newly formed block around it.

11 months agoregcomp.c: Avoid a panic on malformed qr/\N{..}/i
Karl Williamson [Sun, 13 May 2018 03:40:02 +0000 (21:40 -0600)] 
regcomp.c: Avoid a panic on malformed qr/\N{..}/i

Input constructs that expand to more than one character are handled very
very specially when they occur within a bracketed character class.  What
happens effectively is that they are removed from the class and parsed
separately, using the regular code in regcomp.c to generate something
like a trie for them.  The other characters within the class are handled

The specially handled stuff is parsed from a separate string.  In the
case where that stuff is of the form \N{U+...}, I neglected to
adequately consider that the syntax could trigger an error.  When such
an error is raised, it can violate our assumptions about the state of
things, and lead to a panic.

THe code actually parses the construct twice.  The first time while
deciding if this expands to multiple characters (so that it can be
separated out), and the second time to actually figure out and return
the expansion.  This commit fixes the bug by adding error checking
during the first pass.  Previously, the minimal amount of work was done
to be able to find the count of characters in the expansion.  Now, more
work is done to do the checking, as we go along with the counting.  This
actually results in less special case code needing to be executed, so
there is a net code removal from this commit.

11 months agoPATCH: [perl #133194] Heap buffer overflow
Karl Williamson [Sun, 13 May 2018 04:20:33 +0000 (22:20 -0600)] 
PATCH: [perl #133194] Heap buffer overflow

On debugging builds, the code in the ticket instead fails an assert.  I
thought I had previous failures figured out, but it turns out I was
wrong.  To prevent potential security failures by going ahead and
printing memory known to be outside what we are expecting on
non-debugging builds, instead panic.

This doesn't fix the underlying problem of how we came to be trying to
output bad stuff, but it keeps all such cases from being security

11 months agoPATCH: [perl #133185] Infinite loop in qr//
Karl Williamson [Tue, 8 May 2018 18:13:18 +0000 (12:13 -0600)] 
PATCH: [perl #133185] Infinite loop in qr//

This loop was inadvertently introduced as part of patches to fix
(perl #132227 CVE-2018-6797] heap-buffer-overflow".  The commit in 5.27
responsible was f8fb8615ddc5a80e3bbd4386a8914497f921b62d.

To be vulnerable, the pattern must start out as /d (hence no use 5.012
or higher), and then there must be something that implicitly forces /u
(which the \pp does in the test case added by this patch), and then
(?aa), and then the code point \xDF.  (German Sharp S).  The /i must be
in effect by the time the DF is encountered, but it needn't come in the
(?aa) which the test does.

The problem is that the conditional that is testing that we switched
away from /d rules is assuming that this happened during the
construction of the current EXACTFish node.  The comments I wrote
indicate this assumption.  But this example shows that the switch can
come before this node started getting constructed, and so it loops.

The patch explicitly saves the state at the beginning of this node's
construction, and only retries if it changed during that construction.
Therefore the next time through, it will see that it hasn't changed
since the previous time, and won't loop.

11 months agoPATCH: [perl # 133179] heap-buffer-overflow write
Karl Williamson [Sun, 6 May 2018 08:27:01 +0000 (02:27 -0600)] 
PATCH: [perl # 133179] heap-buffer-overflow write

The code did not consider the case of a trailing slash with no
denominator following it.  Simply add a check.

11 months agoWork around for [perl $133136]
Karl Williamson [Tue, 1 May 2018 17:51:19 +0000 (11:51 -0600)] 
Work around for [perl $133136]

This commit is a blatant kludge to work around a failing test in
Lexical::SealRequireHints.  The test is wrong, checking for an internal
detail that has changed.

This commit adds a conditional for the exact input that's failing, and
if found, uses the old method, so the test passes.

The failing input is the regex pattern


'foo' is unlikely to be found in practice outside of .t files, and
this particular pattern rarely even in those.  So this should not slow
down real production code.

11 months agoRevert "set PERL_EXIT_DESTRUCT_END in all embeddings"
David Mitchell [Wed, 9 May 2018 09:54:55 +0000 (10:54 +0100)] 
Revert "set PERL_EXIT_DESTRUCT_END in all embeddings"

This reverts commit 8e920bd341e241f50a74dbf8aa343319f204e200.
Also skip the tests in t/op/blocks.t

RT #132863

8e920bd341 sets the PERL_EXIT_DESTRUCT_END flag on non-UNIXy platforms,
like is already done on UNIXy platforms.  This makes things like
BEGIN { exit(1) } call END blocks on those platforms (like they already
do on UNIX).

But it caused problems with win32 pseudo-forks, so revert for 5.28
and re-address the issues sometime later.

11 months agot/op/blocks.t: indent 6 tests in a new skip block
David Mitchell [Wed, 9 May 2018 12:52:50 +0000 (13:52 +0100)] 
t/op/blocks.t: indent 6 tests in a new skip block

Apart from the whitespace change, this just wraps 6 tests in
a SKIP: { ... } block which isn't (yet) used.

11 months agot/op/blocks.t: consolidate VMS-skips together
David Mitchell [Wed, 9 May 2018 12:49:14 +0000 (13:49 +0100)] 
t/op/blocks.t: consolidate VMS-skips together

Put the three tests skipped under VMS together into a single SKIP
block rather than 3 separate skips.

As well as being tidier, as a side effect, it makes 6 tests contiguous
that are shortly to be skipped under win32,

11 months agot/op/blocks.t: add some whitespace
David Mitchell [Wed, 9 May 2018 12:35:42 +0000 (13:35 +0100)] 
t/op/blocks.t: add some whitespace

Makes the tests a bit easier to read.

11 months agoperlretut correction: 'qw' should be inside parens
Gene Sullivan [Sat, 5 May 2018 02:17:25 +0000 (22:17 -0400)] 
perlretut correction: 'qw' should be inside parens

RT #133172

11 months agofix build failure with recent glibc
David Mitchell [Fri, 11 May 2018 07:03:42 +0000 (08:03 +0100)] 
fix build failure with recent glibc

RT #133184

pp_crypt() directly manipulates a field inside 'struct crypt_data' to work
around a bug in an ancient glibc version from circa 2002. New glibc
releases don't have this field so perl fails to compile. Make the hack
conditional on glibc version.

Stolen from a patch to the Fedora 28 distribution.

11 months agoPATCH: [perl #133175] script run free from wrong pool panic
Karl Williamson [Sat, 5 May 2018 03:26:31 +0000 (21:26 -0600)] 
PATCH: [perl #133175] script run free from wrong pool panic

Setting the pointer to NULL after freeing signals the code in later
interations that it has been freed already

No test is added because it could become outdated (not testing what it
was designed to test) with a new Unicode version changing the underlying
data.  This bug was discovered by testing on Unicode 7.0, and the data
changed so that there was not a problem by Unicode 10.0.

11 months agofix typo in Artistic
David Mitchell [Mon, 7 May 2018 16:44:02 +0000 (17:44 +0100)] 
fix typo in Artistic

RT #133120

Spotted by Alexandr Savca

Change approved by Makoto Nozaki of TPF

11 months agosprintf2.t: mark TODO bad denorm values under g++
David Mitchell [Tue, 1 May 2018 14:28:49 +0000 (15:28 +0100)] 
sprintf2.t: mark TODO bad denorm values under g++

Some t/op/sprintf2.t tests were failing under g++. This is due the perl
toker interpreting very small literal hex floating pointers as 0 rather
than as a subnormal value.

For example:

    perl -le'print "bad" if 0x1.fffffffffffffp-1022 == 0.0'

This breaks some of the sprintf2.t tests, so mark them TODO them if the
literal value evaluates to zero.

Note that this is a bug in the toker/g++/glibc rather than sprintf.

The issue is due to the use of pow() in scan_num():

under gcc and plain g++, pow(2.0, -1074) returns the smallest denorm
number; however, under 'g++ -ansi', it returns 0.0.

11 months agoEnsure temp directories are cleaned up.
James E Keenan [Thu, 26 Apr 2018 20:51:39 +0000 (16:51 -0400)] 
Ensure temp directories are cleaned up.

Tux reported that on certain platforms File::Temp::tempdir(CLEANUP => 1) was
not cleaning up after itself properly.  Guarantee that this cleanup takes
place in and END block.


11 months agolib/locale.t: TODO some locales on Solaris
Karl Williamson [Sat, 28 Apr 2018 16:18:05 +0000 (10:18 -0600)] 
lib/locale.t: TODO some locales on Solaris

There is a bug in Solaris with locales which have a multi-byte decimal
radix character.  Make these TODO, like we do cygwin, which has had a
similar problem.

11 months agolib/locale.t: Mark a test problematic
Karl Williamson [Sat, 28 Apr 2018 16:16:08 +0000 (10:16 -0600)] 
lib/locale.t: Mark a test problematic

We now have found a system that fails this test.  Tests that are listed
as problematic automatically get marked as TODO when they fail with
specified platforms.  The next commit will specify the platform that
this is fails on.

11 months agot/run/locale.t: Skip some Solaris locales
Karl Williamson [Thu, 19 Apr 2018 20:43:43 +0000 (14:43 -0600)] 
t/run/locale.t: Skip some Solaris locales

Solaris is buggy in dealing with locales that have a multi-byte UTF-8
decimal radix character.  Skip using these, like we do on cygwin, which
has a similar problem.

11 months agogetcwd() doesn't fail on non-existent directories on DragonFly BSD.
Tomasz Konojacki [Sun, 22 Apr 2018 21:49:59 +0000 (23:49 +0200)] 
getcwd() doesn't fail on non-existent directories on DragonFly BSD.

Until it's fixed upstream, we should skip tests that don't expect
this behaviour.

[RT #133141]

11 months agoPATCH: [perl #133136] bisect runner
Karl Williamson [Wed, 25 Apr 2018 22:28:37 +0000 (16:28 -0600)] 
PATCH: [perl #133136] bisect runner

bisect runner is supposed to keep going if the particular revision being
tested fails to compile.  But it wasn't.

Nicholas graciously diagnosed the problem.  When the enhancement for
testing when a module got broken, the code to do so was placed before
the check to see if the build for this revision crashed.  It's simply a
matter of moving that module code to after that check.

11 months agoutf8.c: use TRUE not true
Daniel Dragan [Sat, 28 Apr 2018 01:09:49 +0000 (21:09 -0400)] 
utf8.c: use TRUE not true

"true" token was added in commit 394d2d3f37 but "true" is C++ and C99,
"TRUE" is portable perl API

Win32 VC 2003 C mode (C89) build faiure
..\utf8.c(6177) : error C2065: 'true' : undeclared identifier

11 months agoFinally fix C++ build with VS2017
Steve Hay [Sat, 28 Apr 2018 12:56:05 +0000 (13:56 +0100)] 
Finally fix C++ build with VS2017

Dodge the "offsetof has a builtin meaning; use /Zc:offsetof- to revert to
old, non-conforming definition" error when compiling Socket.xs by reverting
to an old definition of STRUCT_OFFSET for that compiler.

11 months ago[MERGE] temporarily revert weak in-place sort fix
David Mitchell [Fri, 27 Apr 2018 09:35:09 +0000 (10:35 +0100)] 
[MERGE] temporarily revert weak in-place sort fix

11 months agoRevert "Strengthen weak refs when sorting in-place"
David Mitchell [Thu, 26 Apr 2018 10:46:22 +0000 (11:46 +0100)] 
Revert "Strengthen weak refs when sorting in-place"

This reverts commit f6107ca24b4cf22dcf7fd69d65612ad718c48fca.

See RT #132142.

For now, re-introduce the bug that fails to convert weak refs to strong
refs when sorting in place.

This is commit 2 of 2.

11 months agoRevert "Unweaken refs in in-place reverse"
David Mitchell [Thu, 26 Apr 2018 10:42:54 +0000 (11:42 +0100)] 
Revert "Unweaken refs in in-place reverse"

This reverts commit 5bad3c4f3a4515aaa622eecdf6f5a84fcaff7ed9.

See RT #132142.

For now, re-introduce the bug that fails to convert weak refs to strong
refs when sorting in place.

This is commit 1 of 2.

11 months ago(perl #133030) make utime() available only if we have both fd and name setting
Tony Cook [Thu, 12 Apr 2018 11:11:12 +0000 (21:11 +1000)] 
(perl #133030) make utime() available only if we have both fd and name setting

11 months agofix linkage of PL_inf/nan under C++
David Mitchell [Tue, 24 Apr 2018 14:07:51 +0000 (15:07 +0100)] 
fix linkage of PL_inf/nan under C++

RT #132955

Commit 0879cd66ef3f00  fixed perl to still build under C++ after changes
to PL_inf and PL_nan. Unfortunately this seems to have broken C++ builds
under Windows.

Handle the extern 'C'  stuff in a different way - as suggested by Leon T -
that hopefully satisfies all platforms.

12 months agofixup for NO_TAINT_SUPPORT
Yves Orton [Tue, 24 Apr 2018 10:45:29 +0000 (12:45 +0200)] 

12 months agoMake gets() declaration extern "C"
Steve Hay [Mon, 23 Apr 2018 12:53:55 +0000 (13:53 +0100)] 
Make gets() declaration extern "C"

This, together with the previous commit, fixes the C++-mode build on
Windows using VS2017 except for the remaining problem with PL_nan when
linking POSIX - see RT#132955.

12 months agoMake PERLIO_FILE_file() an lvalue
Leon Timmermans [Thu, 19 Apr 2018 17:05:35 +0000 (19:05 +0200)] 
Make PERLIO_FILE_file() an lvalue

12 months agoremove Storable::__Storable__ from Module::CoreList
Karen Etheridge [Sat, 21 Apr 2018 10:42:03 +0000 (12:42 +0200)] 
remove Storable::__Storable__ from Module::CoreList

It was mistakenly picked up starting in 5.27.6 due to ad2ec6b54c and we
didn't notice: it should have never been added. Remove historical entries
and blacklist it so it doesn't come back.

12 months ago#133125 revise -DNO_MATHOM logic again in
Daniel Dragan [Fri, 20 Apr 2018 14:46:39 +0000 (10:46 -0400)] 
#133125 revise -DNO_MATHOM logic again in

Revision of patch in #133098.

There is a problem described in #133125 with XS-APITest using with "Perl_"
mathomed C symbols instead of the Perl_-less ones which would get
preprocessor redirected to newer C funcs, then link failure of XS-APITest
on Win32 because missing symbols. These symbols were missing because they
were marked "m" and I thought in commit 1545ba5b04 "m" means no C symbol,
ever, but that isn't true. It seems that "b" means must export on a
with-mathoms default perl. So put back part of the original code before
commit 1545ba5b04 from commit 3f1866a8f6, so that on with mathoms builds
all "b"s are exported, but on no mathom builds, all "b"s are removed/not

There are some logic holes here for strange or impossible combinations
of flags, like flags "Abi" or just "b" without "A", that I wont address

12 months agoRT#133131: pp_hot.c: deoptimise pp_iter() when non-standard OP_AND op_ppaddr
Aaron Crane [Fri, 20 Apr 2018 15:45:04 +0000 (17:45 +0200)] 
RT#133131: pp_hot.c: deoptimise pp_iter() when non-standard OP_AND op_ppaddr

Commit 7c114860c0fa8ade5e00a4b609d2fbd11d5a494c introduced an optimisation
in pp_iter(). Before the optimisation, pp_iter() pushed either &PL_SV_yes or
&PL_sv_no to the stack, and returned the op_next in the obvious way.

The optimisation takes advantage of the fact that the op_next of an OP_ITER
always points to an OP_AND node, so pp_iter() now directly jumps to either
the op_next or the op_other of the OP_AND as appropriate.

The commit message for the optimisation also says this:

    It's possible that some weird optree-munging XS module may break this
    assumption. For now I've just added asserts that the next op is OP_AND
    with an op_ppaddr of Perl_pp_and; if that assertion fails, it may be
    necessary to convert pp_iter()s' asserts into conditional statements.

However, Devel::Cover does change the op_ppaddr of the ops it can see, so
the assertions on op_ppaddr were being tripped when Devel::Cover was run
under a -DDEBUGGING Perl. But even if the asserts didn't trip, skipping the
OP_AND nodes would prevent Devel::Cover from determining branch coverage in
the way that it wants.

This commit converts the asserts into conditional statements, as outlined in
the commit message above, and undoes the optimisation when the op_ppaddr
doesn't match.

12 months agoAdapt to perl being in its fourth decade
Leon Timmermans [Sat, 21 Apr 2018 10:16:29 +0000 (12:16 +0200)] 
Adapt to perl being in its fourth decade

12 months agoAdd announcement URL
Sawyer X [Sat, 21 Apr 2018 08:30:07 +0000 (10:30 +0200)] 
Add announcement URL

12 months agoUpdate Module::CoreList for 5.28.0, I hope correctly
Sawyer X [Sat, 21 Apr 2018 07:53:35 +0000 (09:53 +0200)] 
Update Module::CoreList for 5.28.0, I hope correctly

12 months agoNow META.json finally works
Sawyer X [Fri, 20 Apr 2018 21:01:01 +0000 (23:01 +0200)] 
Now META.json finally works

12 months agoRegen, again
Sawyer X [Fri, 20 Apr 2018 20:57:13 +0000 (22:57 +0200)] 
Regen, again

12 months agoFix Module::CoreList versions
Sawyer X [Fri, 20 Apr 2018 20:57:08 +0000 (22:57 +0200)] 
Fix Module::CoreList versions

12 months agonew perldelta for 5.27.12 or 5.28.0
Sawyer X [Fri, 20 Apr 2018 15:37:46 +0000 (17:37 +0200)] 
new perldelta for 5.27.12 or 5.28.0

12 months agoFix Storable indexing issue with PAUSE
Chris 'BinGOs' Williams [Fri, 20 Apr 2018 17:07:00 +0000 (18:07 +0100)] 
Fix Storable indexing issue with PAUSE

12 months agoTick off release
Sawyer X [Fri, 20 Apr 2018 15:31:50 +0000 (17:31 +0200)] 
Tick off release

12 months agoUpgrade paragraph:
Sawyer X [Fri, 20 Apr 2018 15:30:13 +0000 (17:30 +0200)] 
Upgrade paragraph:

I'll put the link once I see the ID.

12 months agoAdd new release to perlhist v5.27.11
Sawyer X [Fri, 20 Apr 2018 13:32:49 +0000 (15:32 +0200)] 
Add new release to perlhist

12 months agoFinalizing perldelta
Sawyer X [Fri, 20 Apr 2018 12:05:59 +0000 (14:05 +0200)] 
Finalizing perldelta

12 months agoUpdate Module::CoreList for 5.27.11
Sawyer X [Fri, 20 Apr 2018 11:22:50 +0000 (13:22 +0200)] 
Update Module::CoreList for 5.27.11

12 months agoDocument that `use v5.12` and `use feature ":5.12"` differ
Aaron Crane [Fri, 20 Apr 2018 12:28:35 +0000 (14:28 +0200)] 
Document that `use v5.12` and `use feature ":5.12"` differ

12 months agoChange in the house of flies
Chris 'BinGOs' Williams [Fri, 20 Apr 2018 11:18:15 +0000 (12:18 +0100)] 
Change in the house of flies

12 months agoBump Module-CoreList so is higher than version on CPAN
Chris 'BinGOs' Williams [Fri, 20 Apr 2018 11:13:14 +0000 (12:13 +0100)] 
Bump Module-CoreList so is higher than version on CPAN

12 months agoAdd ppport.h to IO
Dagfinn Ilmari MannsÃ¥ker [Fri, 20 Apr 2018 09:12:31 +0000 (11:12 +0200)] 
Add ppport.h to IO

12 months agoMerge branch 'bring unicode properties into core' into blead
Karl Williamson [Fri, 20 Apr 2018 07:12:22 +0000 (01:12 -0600)] 
Merge branch 'bring unicode properties into core' into blead

Most \p{} constructs will now use inversion lists compiled into core.
This significantly lowers the start up cost of using Unicode properties.
The theory is that the properties not used will stay paged out by the
operating system.

Certain constructs continue to use the old mechanism.  The design here
is that if a property is not found, the old mechanism is used as a
fail safe.  In particular,

1) if the property name is invalid, this new system won't find it, and
   the old system will be invoked, and also won't find it, and the
   compilation will abort.

2) This new system does not handle user-defined properties, so the old
   mechanism will be used for those

3) In the numeric_value property (nv), if the input is not in canonical
   form, this new mechanism won't find it, and the old system will be
   used.  "3/4" is in canonical form, so the new system will be used;
   but "6/8" and 0.75 are not, so the old system will be used.

12 months agoperldelta for this moving uniprops to core
Karl Williamson [Fri, 20 Apr 2018 07:07:41 +0000 (01:07 -0600)] 
perldelta for this moving uniprops to core

12 months agoregen/ Omit #defines
Karl Williamson [Fri, 20 Apr 2018 06:21:46 +0000 (00:21 -0600)] 
regen/ Omit #defines is somewhat more flexible than Devel::Tokenizer::C, and so we can
avoid a bunch of #defines, and use the desired value directly.

12 months agoUse a perfect hash for Unicode property lookups
Karl Williamson [Fri, 20 Apr 2018 05:16:33 +0000 (23:16 -0600)] 
Use a perfect hash for Unicode property lookups

The previous commits in this series have been preparing to allow the
Devel::Tokenizer::C code to be swapped out for the much smaller perfect
hash code.

12 months agoregen/ Add comments to gen'd file
Karl Williamson [Fri, 20 Apr 2018 05:51:32 +0000 (23:51 -0600)] 
regen/ Add comments to gen'd file

This adds a comment showing for each rule what the input is for it.

12 months agoregen/ Split function into two
Karl Williamson [Thu, 19 Apr 2018 14:58:22 +0000 (08:58 -0600)] 
regen/ Split function into two

Instead of directly printing as it goes along, a new function generates
the text to print, and the print function is refactored to be a wrapper
that calls that function and prints.

This is in preparation for that text to be printed outside

12 months agoregen/ Move a print around
Karl Williamson [Thu, 19 Apr 2018 14:56:00 +0000 (08:56 -0600)] 
regen/ Move a print around

This needs to be placed elsewhere so it is always output, in preparation
for the next commits when not everything gets generated

12 months agoregen/ Use U16, etc, not uint16_t etc
Karl Williamson [Thu, 19 Apr 2018 14:36:52 +0000 (08:36 -0600)] 
regen/ Use U16, etc, not uint16_t etc

Use the perl type names

12 months agoAdd regen/ for generating a perfect hash
Yves Orton [Thu, 19 Apr 2018 04:04:53 +0000 (22:04 -0600)] 
Add regen/ for generating a perfect hash

This is copied unchanged from github,

where it is more of a stand-alone program.  Later commits will customize
it for perl use.

12 months agoBring all Unicode property definitions into core
Karl Williamson [Fri, 20 Apr 2018 03:08:24 +0000 (21:08 -0600)] 
Bring all Unicode property definitions into core

This commit causes the looking up of \p{} Unicode properties to be done
without having to use the swash mechanism.s, with certain exceptions.
This will all be explained in the merge commit.

This commit uses Devel::Tokenizer::C to generate the code that turns the
property string as keywords into numbers that can be understood by the
computer.  This mechanism generates relatively large code.  The next
commits will replace this with a smaller mechanism.

12 months agoSet up initial \p{} parse function.
Karl Williamson [Wed, 11 Apr 2018 19:05:08 +0000 (13:05 -0600)] 
Set up initial \p{} parse function.

This function will parse the interior of \p{} Unicode property names in
regular expression patterns.

The design of this function will be to return NULL on the properties it
cannot handle; otherwise it returns  an inversion list representing the
property it did find.  The current mechanism will be used to handle the
cases where this function returns NULL.

This initial state is just to have the function return NULL always, so
the existing mechanism is always used.  A later commit will add
the functionality in 5.28 that bypasses the existing mechanism.

12 months agoregen/ Keep core tables adjacent
Karl Williamson [Fri, 20 Apr 2018 02:52:24 +0000 (20:52 -0600)] 
regen/ Keep core tables adjacent

The expectation is that most of the Unicode tables won't be used in any
given run, and since they reside in the text segment, won't get paged
in.  But that's not true of the tables used by the perl core.  So make
them adjacent so that paging one in will get some of the others.

12 months agoGenerate all binary Unicode property tables
Karl Williamson [Fri, 20 Apr 2018 02:06:27 +0000 (20:06 -0600)] 
Generate all binary Unicode property tables

This is in preparation for future commits.  All the tables are
generated, but the newly generated ones remain unused by the core.  The
tables also are renamed to have a prefix 'PL_' in front of them, and
some casing changes.  The code that explicitly mentions to generate the
current tables is removed, so that these are part of the grander scheme
of things.

12 months agoregen/ Use one table if applies everywhere
Karl Williamson [Fri, 20 Apr 2018 01:43:18 +0000 (19:43 -0600)] 
regen/ Use one table if applies everywhere

If a table is the same under all EBCDIC code pages and ASCII, only one
copy need be output, instead of one for each page.  This happens if the
table either includes the entire range of native code points (0-255) or
has no native code points.

At this commit, only \p{Assigned} falls into this category.

12 months agoregen/ White space only
Karl Williamson [Fri, 20 Apr 2018 01:13:25 +0000 (19:13 -0600)] 
regen/ White space only

This outdents a for loop initialization section that previously was

12 months agoregen/ Reverse order of table vs EBCDIC
Karl Williamson [Fri, 20 Apr 2018 00:02:30 +0000 (18:02 -0600)] 
regen/ Reverse order of table vs EBCDIC

This changes the order of the loops so that the outer one is the table,
and the inner one is the codeset.  This means that the different tables
for each codeset are together.

This prepares the way for the next commit

12 months agoregen/ Extract code into subs
Karl Williamson [Thu, 19 Apr 2018 23:06:39 +0000 (17:06 -0600)] 
regen/ Extract code into subs

This is in preparation for it to be used in more places

12 months agoregen/ Move some code around
Karl Williamson [Thu, 19 Apr 2018 22:34:04 +0000 (16:34 -0600)] 
regen/ Move some code around

This moves the switching of #if's to be adjacent to the area it is used

12 months agoregen/ Move some code around
Karl Williamson [Thu, 19 Apr 2018 17:04:37 +0000 (11:04 -0600)] 
regen/ Move some code around

This is in preparation for a future commit

12 months agoregen/ Better handle preprocessor directives
Karl Williamson [Thu, 19 Apr 2018 16:29:28 +0000 (10:29 -0600)] 
regen/ Better handle preprocessor directives

Prior to this patch it was possible for the code to get confused about
what to do when an #ifdef had multiple conditions

12 months agoMove inversion lists to utf8.c
Karl Williamson [Mon, 9 Apr 2018 16:43:06 +0000 (10:43 -0600)] 
Move inversion lists to utf8.c

These previously were statics in perl.c.  A future commit would need
access to these from regcomp.c.  We could create an access function in
perl.c so that regcomp.c could access them, or we could move them to
regcomp.c.  But doing that means also they would be statics in
re_comp.c, and that would mean two copies.

So that means an access function is needed.  Their use is really
unrelated to perl.c, which merely initializes them, so that could have
an access function instead.  But the most logical place for their home
is utf8.c, which is described as for Unicode things, not just UTF-8

So this commit moves these inversion lists to utf8.c, and creates an
initialization function called on perl startup from perl.c

12 months agoUpdate IO ChangeLog since last public release to CPAN
Todd Rinaldo [Thu, 19 Apr 2018 20:36:11 +0000 (15:36 -0500)] 
Update IO ChangeLog since last public release to CPAN

12 months agoRemove pre-5.8 logic no longer relevant in IO unit tests
Todd Rinaldo [Thu, 19 Apr 2018 20:32:55 +0000 (15:32 -0500)] 
Remove pre-5.8 logic no longer relevant in IO unit tests