This is a live mirror of the Perl 5 development currently hosted at
3 years agoutf8.c: Rmv no longer used function
Karl Williamson [Sat, 31 Mar 2018 18:14:45 +0000 (12:14 -0600)]
utf8.c: Rmv no longer used function

The previous commit completely stopped using this core-only function.
Remove it.

3 years agoUse compiled-in C structure for inverted case folds
Karl Williamson [Thu, 29 Mar 2018 22:32:49 +0000 (16:32 -0600)]
Use compiled-in C structure for inverted case folds

This commit changes to use the C data structures generated by the
previous commit to compute what characters fold to a given one.  This is
used to find out what things should match under /i.

This now avoids the expensive start up cost of switching to perl, loading a file from disk, and constructing a hash from

3 years agoregen/ Generate tables for inverted case folds
Karl Williamson [Thu, 29 Mar 2018 00:20:10 +0000 (18:20 -0600)]
regen/ Generate tables for inverted case folds

This table will be used in the next commit

3 years agoregen/ Inversion maps don't have to be IV
Karl Williamson [Thu, 29 Mar 2018 00:01:50 +0000 (18:01 -0600)]
regen/ Inversion maps don't have to be IV

An inversion map currently is used only for Unicode-range code points,
which can fit in an int, so don't use the space unnecessarily

3 years agoregexec.c: Remove no longer used macros
Karl Williamson [Thu, 29 Mar 2018 00:00:30 +0000 (18:00 -0600)]
regexec.c: Remove no longer used macros

These are unused now that all the POSIX class lookups are done through
inversion lists, instead of swashes.

3 years agoregen/ Change some fcns to return a ref
Karl Williamson [Wed, 28 Mar 2018 15:55:52 +0000 (09:55 -0600)]
regen/ Change some fcns to return a ref

They previously returned an array.  This is in preparation for a future
commit, where a similar function will return multiple arguments.

3 years agoRemove obsolete variables
Karl Williamson [Tue, 27 Mar 2018 21:56:30 +0000 (15:56 -0600)]
Remove obsolete variables

These were for when some of the Posix character classes were implemented
as swashes, which is no longer the case, so these can be removed.

3 years agoregexec.c: White-space, comment only
Karl Williamson [Tue, 27 Mar 2018 21:38:04 +0000 (15:38 -0600)]
regexec.c: White-space, comment only

Fix up indentation based on the previous few commits

3 years agoregexec.c: Convert swash lookup to inversion list
Karl Williamson [Tue, 27 Mar 2018 21:19:55 +0000 (15:19 -0600)]
regexec.c: Convert swash lookup to inversion list

3 years agoregexec.c: Convert swash lookup to inversion list
Karl Williamson [Tue, 27 Mar 2018 21:03:50 +0000 (15:03 -0600)]
regexec.c: Convert swash lookup to inversion list

Previously this had two loops, the first one was used to keep from
loading the swash for as long as possible.  Now that it is loaded by
default, there is no need to do this.  This overwrites the first loop
with  the second loop

3 years agoregexec.c: Convert swash lookup to inversion list
Karl Williamson [Tue, 27 Mar 2018 20:15:54 +0000 (14:15 -0600)]
regexec.c: Convert swash lookup to inversion list

3 years agoregexec.c: Explicitly use case: instead of default:
Karl Williamson [Tue, 27 Mar 2018 20:06:03 +0000 (14:06 -0600)]
regexec.c: Explicitly use case: instead of default:

This is so the default: can be used for another purpose in the next

3 years agoregexec.c: Check for UTF-8 fitting
Karl Williamson [Tue, 27 Mar 2018 21:49:06 +0000 (15:49 -0600)]
regexec.c: Check for UTF-8 fitting

We've been burned before by malformed UTF-8 causing us to read outside
the buffer bounds.  Here is a case I saw during code inspection, and
it's easy to add the buffer end limit

3 years agoregexec.c: Convert one swash to inversion list
Karl Williamson [Tue, 27 Mar 2018 19:43:50 +0000 (13:43 -0600)]
regexec.c: Convert one swash to inversion list

I'm doing this one-at-a-time for bisection reasons, in case I make a

3 years agoregexec.c: Rmv obsolete macro
Karl Williamson [Tue, 27 Mar 2018 19:33:41 +0000 (13:33 -0600)]
regexec.c: Rmv obsolete macro

This macro is obsolete because the inversion list for this property is
now always loaded, so no need to load.

3 years agoUse charnames inversion lists
Karl Williamson [Sat, 31 Mar 2018 17:18:38 +0000 (11:18 -0600)]
Use charnames inversion lists

This commit makes the inversion lists for parsing character name global
instead of interpreter level, so can be initialized once per process,
and no copies are created upon new thread instantiation.  More
importantly, this is another instance where no longer
needs to be loaded, and the definition files read from disk.

3 years agoregen/ Generate charnames inversion lists
Karl Williamson [Tue, 27 Mar 2018 19:00:38 +0000 (13:00 -0600)]
regen/ Generate charnames inversion lists

This is so we won't have to load and read them from disk
when they are first encountered.

3 years agoRemove no longer used constant and #if checks.
Karl Williamson [Tue, 27 Mar 2018 18:52:35 +0000 (12:52 -0600)]
Remove no longer used constant and #if checks.

This is now obsolete as a result of the last few commits.

3 years agoutf8.c: Change no longer used params to dummys
Karl Williamson [Tue, 27 Mar 2018 18:44:54 +0000 (12:44 -0600)]
utf8.c: Change no longer used params to dummys

The previous commits have caused certain parameters to be ignored in
some calls to these functions.  Change them to dummys, so if a mistake
is made, it can be caught, and not promulgated

3 years agoMove init of 2 inversion lists to perl.c
Karl Williamson [Tue, 27 Mar 2018 17:55:56 +0000 (11:55 -0600)]
Move init of 2 inversion lists to perl.c

These read-only globals can be initialized in perl.c, which allows us to
remove runtime checks that they are initialized.  This commit also takes
advantage of the fact that they are now always initialized to use them
as inversion lists, avoid swash creation.

3 years agoFix bug in mathoms fcn _is_utf8_xidcont()
Karl Williamson [Tue, 27 Mar 2018 17:55:23 +0000 (11:55 -0600)]
Fix bug in mathoms fcn _is_utf8_xidcont()

This was using the wrong variable, the one used by plain

Since both of these are in mathoms.c, and deprecated, this really wasn't
causing an issue in the field.

3 years agoutf8.c: Avoid calling swash code
Karl Williamson [Tue, 27 Mar 2018 16:50:28 +0000 (10:50 -0600)]
utf8.c: Avoid calling swash code

Now that we prefer inversion lists over swashes, we can just use the
inversion lists functions if we have an inversion list, avoiding the
swash code altogether in these instances.

This commit stops using inversion lists for two internal properties, but
the next commit will restore that.

3 years agoutf8.c: Prefer an inversion list over a swash
Karl Williamson [Tue, 27 Mar 2018 16:18:03 +0000 (10:18 -0600)]
utf8.c: Prefer an inversion list over a swash

Measurements I took in 8946fcd98c63bdc848cec00a1c72aaf232d932a1 indicate
that at the sizes that Unicode inversion lists are, there is no slowdown
in retrieval of data using an inversion list vs a hash.  Converting to
use an inversion list, when possible, avoids the hash construction
overhead, and eventually to the removal of a bunch of code.

3 years agoutf8.c: Clarify comment
Karl Williamson [Sat, 31 Mar 2018 16:30:14 +0000 (10:30 -0600)]
utf8.c: Clarify comment

3 years agoperl.h: Clarify comment
Karl Williamson [Fri, 30 Mar 2018 20:31:48 +0000 (14:31 -0600)]
perl.h: Clarify comment

3 years agoutf8.c: Add comments
Karl Williamson [Sat, 31 Mar 2018 17:04:34 +0000 (11:04 -0600)]
utf8.c: Add comments

This adds comments, and some white space changes to the function
dealing with changing case changed in

3 years agoregexec.c: Silence compiler warning
Karl Williamson [Sat, 31 Mar 2018 18:09:40 +0000 (12:09 -0600)]
regexec.c: Silence compiler warning

When this #ifdef'd code is compiled, there was a warning

3 years agoutf8.c: Allow to compile for early Unicode versions
Karl Williamson [Sat, 31 Mar 2018 17:08:50 +0000 (11:08 -0600)]
utf8.c: Allow to compile for early Unicode versions

Commit 8946fcd98c63bdc848cec00a1c72aaf232d932a1 broke the compilation of
utf8.c when perl is compiled against very early Unicode versions, as
some tables this is expecting don't exist in them.  But it is easily
solvable by a few #ifdefs

3 years agofix versions in doc of signature/attribute diag
Zefram [Fri, 30 Mar 2018 23:06:26 +0000 (00:06 +0100)]
fix versions in doc of signature/attribute diag

The documentation for the new diagnostic about attributes and signatures
being provided in the wrong order, for [perl #132760], mentions the
versions of perl in which the order changed.  It had the versions slightly
wrong, implying introduction of signatures in 5.18 and the change to
signatures being before attributes in 5.20.  In fact signatures were
introduced in 5.20, and the order was first changed in 5.22.

3 years agodelete unreliable test of Carp crash avoidance
Zefram [Fri, 30 Mar 2018 22:07:36 +0000 (23:07 +0100)]
delete unreliable test of Carp crash avoidance

rt52610_crash.t was introduced by commit
4764858cb80e76fdba33cc1b3be8fcdef26df754, and is predicated on
the mythical effectiveness of that commit's code change in avoiding
stack-not-refcounted crashes, an effectiveness also expressed in that
commit's very inaccurate commit message.  In fact the code change will
avoid *some* crashes, but cannot guarantee to avoid crashing in any
particular situation of the kind that it targets.  It is therefore not
possible to have a test for it avoiding a stack-not-refcounted crash,
with any expectation that the test would reliably pass or even reliably
avoid crashing.  rt52610_crash.t must therefore be deleted.

3 years agoRemove 'our' from one non-Exporter-related variable.
James E Keenan [Thu, 29 Mar 2018 22:31:14 +0000 (18:31 -0400)]
Remove 'our' from one non-Exporter-related variable.

3 years agoUse lexically scoped ('our') variables in POD examples.
James E Keenan [Thu, 29 Mar 2018 13:36:57 +0000 (09:36 -0400)]
Use lexically scoped ('our') variables in POD examples.

Per Dan Book recommendation, as this is code likely to be copied-and-pasted by
people new to Perl.

Keep podcheck happy.

For: RT # 133040

3 years agoUpdate proto.h
Karl Williamson [Thu, 29 Mar 2018 16:08:43 +0000 (10:08 -0600)]
Update proto.h

It turns out I didn't do a format-patch after fixing this unregenerated
proto.h bug in 0dc258e2b8d107ef76f2d62c1a1a68222fd1e769, so I ended up
pushing an outdated version.

3 years agoembed.fnc: Add a const to parameter
Karl Williamson [Thu, 29 Mar 2018 16:08:43 +0000 (10:08 -0600)]
embed.fnc: Add a const to parameter

To match what the file declares it as.

3 years agoMaintain extralibs order for linker
Sergey Aleynikov [Wed, 28 Mar 2018 20:53:32 +0000 (23:53 +0300)]
Maintain extralibs order for linker

As per discussion in RT # 132992

3 years agoFix ALL_STATIC builds with MinGW
Sergey Aleynikov [Wed, 28 Mar 2018 20:28:56 +0000 (23:28 +0300)]
Fix ALL_STATIC builds with MinGW

ALL_STATIC required BUILD_STATIC set but that was not documented.

3 years agoFix spelling in windows makefiles
Sergey Aleynikov [Wed, 28 Mar 2018 20:26:20 +0000 (23:26 +0300)]
Fix spelling in windows makefiles

3 years agoFix static builds with MinGW
Sergey Aleynikov [Wed, 28 Mar 2018 19:35:05 +0000 (22:35 +0300)]
Fix static builds with MinGW

Move Extensions_normalize target before Extensions
target to satisfy dependencies.

3 years agoUpdate links in Devel::PPPort documentation
Sergey Aleynikov [Mon, 26 Mar 2018 20:39:45 +0000 (23:39 +0300)]
Update links in Devel::PPPort documentation

So they no longer point to github, as it's now maintained in-core.

(The committer fixed the links to be mailto:s and bumped the version

3 years agoUpdate RT path for Devel::PPPort
Sergey Aleynikov [Mon, 26 Mar 2018 20:26:47 +0000 (23:26 +0300)]
Update RT path for Devel::PPPort

3 years agoutf8.c: fix leak
Karl Williamson [Tue, 27 Mar 2018 15:57:44 +0000 (09:57 -0600)]
utf8.c: fix leak

Commit 8946fcd98c63bdc848cec00a1c72aaf232d932a1 failed to free a scalar
it created.  I meant to do so, but in the end, forgot.

3 years agoRegen uconfig.h
Karl Williamson [Tue, 27 Mar 2018 18:17:50 +0000 (12:17 -0600)]
Regen uconfig.h

After 0cc3cc274e71bf1211f53331f706d17b75acdd54

3 years agoMark unused dl_unload_all_files() argument
Dagfinn Ilmari Mannsåker [Tue, 27 Mar 2018 12:22:57 +0000 (13:22 +0100)]
Mark unused dl_unload_all_files() argument

3 years agoWhitespace consistency
H.Merijn Brand [Tue, 27 Mar 2018 09:13:53 +0000 (11:13 +0200)]
Whitespace consistency

3 years agoFix building with -Accflags=-DDL_UNLOAD_ALL_AT_EXIT
Dagfinn Ilmari Mannsåker [Tue, 27 Mar 2018 08:10:11 +0000 (09:10 +0100)]
Fix building with -Accflags=-DDL_UNLOAD_ALL_AT_EXIT

Commit bb6a367ad5d replaced an XPUSHs inside a loop with an EXTEND
outside it, but didn't move the dSP to match.  Even if it did, that
would have been wrong, since the loop might push more than one value.
Revert that bit of the commit.

In passing, move the declaration of dl_librefs and dl_libref into the
scope where they're used.

3 years agod_strchr is C89 and has been removed from Configure
H.Merijn Brand [Tue, 27 Mar 2018 07:17:48 +0000 (09:17 +0200)]
d_strchr is C89 and has been removed from Configure

3 years agoMove some inversion list init to perl.c
Karl Williamson [Sun, 25 Mar 2018 17:58:55 +0000 (11:58 -0600)]
Move some inversion list init to perl.c

The initialization time spent here is trivial, and this saves a copy of
these arrays on some systems.  This is because there is only one perl.c,
and there is both regcomp.c and re_comp.c which would contain the
identical static const array.  Some OS's won't remove the duplicate

3 years agoMove case change invlists from interpreter to global
Karl Williamson [Sun, 25 Mar 2018 17:41:15 +0000 (11:41 -0600)]
Move case change invlists from interpreter to global

These are now constant through the life of the program, so don't need to
be duplicated at each new thread instantiation.

3 years agoregen/ Fix comment gobbleldy gook
Karl Williamson [Sun, 25 Mar 2018 04:21:45 +0000 (22:21 -0600)]
regen/ Fix comment gobbleldy gook

3 years agoMove UTF-8 case changing data into core
Karl Williamson [Fri, 23 Mar 2018 19:43:56 +0000 (13:43 -0600)]
Move UTF-8 case changing data into core

Prior to this commit, if a program wanted to compute the case-change of
a character above 0xFF, the C code would switch to perl, loading
lib/ and then read another file from disk, and then create a
hash.  Future references would use the hash, but the start up cost is
quite large.  There are five case change types, uc, lc, tc, fc, and
simple fc.  Only the first encountered requires loading of utf8_heavy,
but each required switching to utf8_heavy, and reading the appropriate
file from disk.

This commit changes these functions to use compiled-in C data structures
(inversion maps) to represent the data.  To look something up requires a
binary search instead of a hash lookup.

An individual hash lookup tends to be faster than a binary search,  but
the differences are small for small sizes.  I did some benchmarking some
years ago, (commit message 87367d5f9dc9bbf7db1a6cf87820cea76571bf1a) and
the results were that for fewer than 512 entries, the binary search was
just as fast as a hash, if not actually faster.  Now, I've done some
more benchmarks on blead, using the tool, which wasn't
available back then.  The results below indicate that the differences
are minimal up through 2047 entries, which all Unicode properties are
well within.

A hash, PL_foldclosures, is still constructed at runtime for the case of
regular expression /i matching, and this could be generated at Perl
compile time, as a further enhancement for later.  But reading a file
from disk is no longer required to do this.

======================= benchmarking results =======================

    Ir   Instruction read
    Dr   Data read
    Dw   Data write
    COND conditional branches
    IND  indirect branches
    _m   branch predict miss
    _m1  level 1 cache miss
    _mm  last cache (e.g. L3) miss
    -    indeterminate percentage (e.g. 1/0)

The numbers represent raw counts per loop iteration.

"\x{10000}" =~ qr/\p{CWKCF}/"

        swash invlist Ratio %
        fetch search
       ------ ------- -------
    Ir 2259.0  2264.0    99.8
    Dr  665.0   664.0   100.2
    Dw  406.0   404.0   100.5
  COND  406.0   405.0   100.2
   IND   17.0    15.0   113.3

COND_m    8.0     8.0   100.0
 IND_m    4.0     4.0   100.0

 Ir_m1    8.9    17.0    52.4
 Dr_m1    4.5     3.4   132.4
 Dw_m1    1.9     1.2   158.3

 Ir_mm    0.0     0.0   100.0
 Dr_mm    0.0     0.0   100.0
 Dw_mm    0.0     0.0   100.0

These were constructed by using the file whose contents are below, which
uses the property in Unicode that currently has the largest number of
entries in its inversion list, > 1600.  The test was run on blead -O2,
no debugging, no threads.  Then the cut-off boundary was changed from
512 to 2047 for when we use a hash vs an inversion list, and the test
run again.  This yields the difference between a hash fetch and an
inversion list binary search
===================== The benchmark file is below ===============

no warnings 'once';

my @benchmarks;

    push @benchmarks, 'swash' => {
        desc    => '"\x{10000}" =~ qr/\p{CWKCF}/"',
        setup   => 'no warnings "once"; my $re = qr/\p{CWKCF}/; my $a =
        code     => '$a =~ $re;',


3 years agoregen/ Add case changing tables
Karl Williamson [Fri, 23 Mar 2018 19:27:25 +0000 (13:27 -0600)]
regen/ Add case changing tables

This will be used by a future commit.

3 years agoregen/ White space only
Karl Williamson [Fri, 23 Mar 2018 18:26:12 +0000 (12:26 -0600)]
regen/ White space only

This properly indents some code blocks.

3 years agoregen/ Allow to Generate code point mappings
Karl Williamson [Fri, 23 Mar 2018 18:22:06 +0000 (12:22 -0600)]
regen/ Allow to Generate code point mappings

This expands the code to handle code point mapping inversion maps.  This
capability will be used in a future commit to handle case changing
operations in utf8.c.

3 years agoregen/ Fix bug with adjusted inputs
Karl Williamson [Sun, 25 Mar 2018 00:52:44 +0000 (18:52 -0600)]
regen/ Fix bug with adjusted inputs

This doesn't affect any current uses, but we need to better account for
adjusted inversion maps.

3 years agoregen/ Suppress empty enum declarations
Karl Williamson [Fri, 23 Mar 2018 18:11:48 +0000 (12:11 -0600)]
regen/ Suppress empty enum declarations

This diverts the outputting of the enum typedefs until after they are
fully known, so that an empty one can be suppressed.

A future commit will need this

3 years agoregen/ Allow enum defns to be public
Karl Williamson [Fri, 23 Mar 2018 17:55:28 +0000 (11:55 -0600)]
regen/ Allow enum defns to be public

This adds the ability for an enum typedef to be able to be made public.
Earlier in 5.27, commit c0221e16334efbe9723722578949dc3916d669d4 was
made to revert fea79782ed31ac4faa71eb6193faff54b4bbe249, because it
created bloat due to multiple statics of large arrays

This current commit is an alternative approach to
fea79782ed31ac4faa71eb6193faff54b4bbe249, but which doesn't create
bloat.  But the capability is commented out because it isn't needed in

3 years agoregen/ Handle EBCDIC
Karl Williamson [Thu, 22 Mar 2018 20:25:44 +0000 (14:25 -0600)]
regen/ Handle EBCDIC

The code and comment here were out-of-date.  When we are constructing
EBCDIC we need to modify the code points that are the result of a case
change that expands to more than one code point.  This code is not
currently in used.

3 years agoregen/ Remove Currency_Symbol definition
Karl Williamson [Fri, 23 Mar 2018 15:52:57 +0000 (09:52 -0600)]
regen/ Remove Currency_Symbol definition

This is unused in 5.28.

3 years agoAdd epigraphs for 5.24.4-RC1 and 5.26.2-RC1
Steve Hay [Sat, 24 Mar 2018 19:54:23 +0000 (19:54 +0000)]
Add epigraphs for 5.24.4-RC1 and 5.26.2-RC1

3 years ago5.24.4-RC1 and 5.26.2-RC1 today
Steve Hay [Sat, 24 Mar 2018 17:23:37 +0000 (17:23 +0000)]
5.24.4-RC1 and 5.26.2-RC1 today

3 years agoBump Time-HiRes to 1.9759 to revert changes from 1.9754..1.9758 on CPAN
Todd Rinaldo [Fri, 23 Mar 2018 16:48:39 +0000 (11:48 -0500)]
Bump Time-HiRes to 1.9759 to revert changes from 1.9754..1.9758 on CPAN

Tag Porting/ so it is clear that a release to CPAN is

3 years agoRevert "Upgrade Time::HiRes from version 1.9753 to 1.9757"
Todd Rinaldo [Fri, 23 Mar 2018 16:36:08 +0000 (11:36 -0500)]
Revert "Upgrade Time::HiRes from version 1.9753 to 1.9757"

This reverts commit 13813507385079199d99d90776780dcd653f6919.

On recommendation of the Author, we are reverting these changes for
now in order to stabilize blead.

3 years agoRevert "Upgrade Time::HiRes from version 1.9757 to 1.9758"
Todd Rinaldo [Fri, 23 Mar 2018 16:35:45 +0000 (11:35 -0500)]
Revert "Upgrade Time::HiRes from version 1.9757 to 1.9758"

This reverts commit 554c20fe6eab1dc262c2fb2d036b76fa09153f1c.

3 years agoMaint releases are now expected mid-April; RC1s will be out soon
Steve Hay [Thu, 22 Mar 2018 21:33:12 +0000 (21:33 +0000)]
Maint releases are now expected mid-April; RC1s will be out soon

3 years agoRemove redundant advice in the RMG about using pod2html which you were just shown...
Todd Rinaldo [Thu, 22 Mar 2018 20:31:20 +0000 (15:31 -0500)]
Remove redundant advice in the RMG about using pod2html which you were just shown how to use

3 years agoUpdate Porting/ to match CPAN for Module::CoreList
Todd Rinaldo [Thu, 22 Mar 2018 19:31:54 +0000 (14:31 -0500)]
Update Porting/ to match CPAN for Module::CoreList

3 years agoUpgrade Time::HiRes from version 1.9757 to 1.9758
Todd Rinaldo [Thu, 22 Mar 2018 19:22:25 +0000 (14:22 -0500)]
Upgrade Time::HiRes from version 1.9757 to 1.9758


1.9758 [2018-03-21]
 - fix build in Win32 with Visual C by introducing a fake struct timezone
   [ #124844]
 - in utime.t detect better being run in a noatime filesystem,
   and if so, skip the test (for the HAMMER filesystem of DragonflyBSD)
 - also for the HAMMER fs (if not in noatime), lower the expected subsecond
   timestamp granularity to microseconds
 - fix the version number typo in Changes: 1.9577 -> 1.9757

3 years agoutf8.c: Update comment
Karl Williamson [Thu, 22 Mar 2018 14:27:11 +0000 (08:27 -0600)]
utf8.c: Update comment

3 years agoI18N::Langinfo/t/Langinfo.t: Skip tests on early netbsd
Karl Williamson [Mon, 19 Mar 2018 00:19:48 +0000 (18:19 -0600)]
I18N::Langinfo/t/Langinfo.t: Skip tests on early netbsd

The names of the months and weekdays are swapped with the abbreviated
names before netbsd 7, so skip the tests on those platforms.  See their

 date: 2013-09-07 20:11:41 +0400;  author: bouyer;  state: Exp;  lines:
 +38 -38;  commitid: HURUJwL5bnZmww4x;
  Apply patch, requested by joerg in ticket #934:
    lib/libc/locale/global_locale.c: patch
     provide consistent and correct data for the C locale.

3 years agolocale.c: Really silence compiler warning
Karl Williamson [Thu, 15 Mar 2018 17:37:16 +0000 (11:37 -0600)]
locale.c: Really silence compiler warning

Commit 32a62865ef662fce2b2250a7e0eca15861e7fe20 did not work, as gcc
doesn't recognize a void cast as handling a return value.  This should
hopefully work, though we discard the value before looking at it, which
could cause another warning.

3 years agoop_dump(): display PARENT of top-most node
David Mitchell [Tue, 20 Mar 2018 16:21:20 +0000 (16:21 +0000)]
op_dump(): display PARENT of top-most node

When dumping a subtree, display the op_parent() value for
the top-most node of the subtree.

3 years agoPush release of 5.28 by a month to May
Sawyer X [Wed, 21 Mar 2018 09:05:54 +0000 (11:05 +0200)]
Push release of 5.28 by a month to May

3 years agomktables: Add aliases to the Present_In property
Karl Williamson [Wed, 21 Mar 2018 04:42:31 +0000 (22:42 -0600)]
mktables: Add aliases to the Present_In property

This property parallels the Age property (but is cumulative).  Each
table in it should have the same property value possibilities as the
corresponding Age table.

3 years agoAdjust code which did not get automatically switched over to 5.027011
Todd Rinaldo [Wed, 21 Mar 2018 00:47:24 +0000 (19:47 -0500)]
Adjust code which did not get automatically switched over to 5.027011

The following changes were still required after doing

  $ ./perl -Ilib Porting/bump-perl-version -i 5.27.10 5.27.11

Module::CoreList had to be updated by hand. had to be updated by doing regen/ lib/B/

3 years agoDevel::PPPort: Use prefix D_PPP_ for helper macros
Pali [Thu, 15 Mar 2018 19:51:30 +0000 (20:51 +0100)]
Devel::PPPort: Use prefix D_PPP_ for helper macros

Prefix D_PPP_ is already handled by This change cleanups code,
makes code more consistent and avoids specifying helper macros in =dontwarn

3 years agoBump the perl version in various places for 5.27.11
Todd Rinaldo [Tue, 20 Mar 2018 21:48:46 +0000 (16:48 -0500)]
Bump the perl version in various places for 5.27.11

3 years agoNew Perldelta for 5.27.11
Todd Rinaldo [Tue, 20 Mar 2018 21:47:13 +0000 (16:47 -0500)]
New Perldelta for 5.27.11

3 years agoTick another dev release off
Chris 'BinGOs' Williams [Tue, 20 Mar 2018 21:30:35 +0000 (21:30 +0000)]
Tick another dev release off

3 years agoEpigraph for 5.27.10
Todd Rinaldo [Tue, 20 Mar 2018 21:29:53 +0000 (16:29 -0500)]
Epigraph for 5.27.10

3 years agoPerlhist entry for 5.27.10 v5.27.10
Todd Rinaldo [Tue, 20 Mar 2018 17:31:44 +0000 (12:31 -0500)]
Perlhist entry for 5.27.10

3 years agoFinalize perldelta for 5.27.10
Todd Rinaldo [Tue, 20 Mar 2018 17:17:27 +0000 (12:17 -0500)]
Finalize perldelta for 5.27.10

3 years agoupdate Module::CoreList for v5.27.10
Todd Rinaldo [Tue, 20 Mar 2018 17:11:12 +0000 (12:11 -0500)]
update Module::CoreList for v5.27.10

3 years handle postfix $r->$#*
David Mitchell [Tue, 20 Mar 2018 12:05:13 +0000 (12:05 +0000)] handle postfix $r->$#*

(\my @a)->$#*

was being deparsed as

$#{\my @a}

which incorrectly reduced the scope of the lexical @a.

Make recognise this case and use the new postfix notation

This fixes

    ./TEST -deparse op/array.t

which was using ->$#*.

3 years agoDeparse: handle \our @a
David Mitchell [Tue, 20 Mar 2018 09:51:37 +0000 (09:51 +0000)]
Deparse: handle \our @a

\our @a
was being deparsed as

which incorrectly converts the \ from a scalar op to a list op

3 years ago[MERGE] Deparse fixups.
David Mitchell [Tue, 20 Mar 2018 09:28:23 +0000 (09:28 +0000)]
[MERGE] Deparse fixups.

    ./TEST -deparse
pass again

3 years agoadd entries to Porting/deparse-skips.txt
David Mitchell [Mon, 19 Mar 2018 23:42:05 +0000 (23:42 +0000)]
add entries to Porting/deparse-skips.txt

Two test scripts are newly failing under
    ./TEST -deparse

    there are two issues:

        \our @a
        is getting deparsed as
        \our (@a)
        and so being misinterpreted as refgen rather than srefgen
        isn't deparsed, so
        (\my @a)->$#*
        gets deparsed as
        $#{\my @a}
        with an incorrect scope for the my delcaration


    for some reason, some functions from ./lib/
    are being output as part of lib/Config.t, and so things
    like strict throw a wobbly.
    Not sure yet why its happening

3 years bump version
David Mitchell [Mon, 19 Mar 2018 23:46:39 +0000 (23:46 +0000)] bump version

3 years agoDeparse -l: set correct line num at end of sub
David Mitchell [Mon, 19 Mar 2018 20:35:26 +0000 (20:35 +0000)]
Deparse -l: set correct line num at end of sub

A sub declaration like

    sub f { ...}

will be deparsed under -l as

    #line 1 "foo"
    sub f {
    #line 1 "foo"

which means that the closing '}' of the sub is incorrectly seen as being
on the next line.

This matters when a glob is created based on a sub being compiled: the
glob's gp_line field is set to the line containing the '}'.

This was causing some tests in ext/B/t/xref.t to fail under
    ./TEST -deparse

This commit causes an extra #line directive to be emitted:

    #line 1 "foo"
    sub f {
    #line 1 "foo"
    #line 1 "foo"   <=== NEW

Whether xref.t failed depended on another factor. The optimisation
which created the GV for a just-compiled sub as an RV to a CV rather than
a GV to CV, causes the later-vifified GV (upgraded from an RV) to instead
have a gp_line corresponding to the first cop in the sub's body.

Arguably this difference (gp_line being set to the line number of first
line of the sub rather than the last line) is a bug, but it's not obvious
how to fix it, and I don't address it here.

However, the optimisation originally only applied to GVs in the main
stash;  it was later extended to all stashes but then reverted again,
in the sequence of commits


which caused xref.t to pass, then fail again.

3 years tr/...//c was failing
David Mitchell [Tue, 13 Mar 2018 12:20:03 +0000 (12:20 +0000)] tr/...//c was failing

Deparsing a tr/....//c (complement and an empty replacement list)
was failing due to the 'delete RHS if LHS == RHS' action not triggering,
due the LHS having already been complemented.

At the same time, expand the set deparse tr/// tests;

3 years add some code comments
David Mitchell [Mon, 12 Mar 2018 12:20:23 +0000 (12:20 +0000)] add some code comments

3 years agoDeparse: remove spurious tr/// debugging
David Mitchell [Sun, 11 Mar 2018 18:04:53 +0000 (18:04 +0000)]
Deparse: remove spurious tr/// debugging

I accidentally left a debugging print statement in after my recent tr///

3 years agoFix locale failures introduced 5 hours ago
Karl Williamson [Tue, 20 Mar 2018 02:52:25 +0000 (20:52 -0600)]
Fix locale failures introduced 5 hours ago

Commit 9fe4122e6defd7e9204ed6f2370d926d4c3b261b broke threaded builds
because it changed to free a global variable upon thread exit (I had
forgotten that it wasn't an interpreter variable).

I do not know why this passed before pushing; others have had trouble
reproducing it.  But the same tests were failing for me now.  The one
difference is that I had been using clang with address sanitizer
compiled in but turned off when I made that commit.  Now I'm using g++

Spotted by Dave Mitchell

3 years agoFirst draft of perldelta for 5.27.10
Todd Rinaldo [Tue, 20 Mar 2018 01:54:17 +0000 (20:54 -0500)]
First draft of perldelta for 5.27.10

3 years agoSpelling correction in perldiag.pod
Todd Rinaldo [Tue, 20 Mar 2018 01:49:35 +0000 (20:49 -0500)]
Spelling correction in perldiag.pod

3 years agoperl.c: Free some locale stuff on exit
Karl Williamson [Mon, 19 Mar 2018 22:00:21 +0000 (16:00 -0600)]
perl.c: Free some locale stuff on exit

This stops potential memory leaks when using POSIX 2008 locale handling,
by freeing the current locale object and two special ones.

3 years agolocale.c: Add detail to debugging statement
Karl Williamson [Mon, 19 Mar 2018 21:53:04 +0000 (15:53 -0600)]
locale.c: Add detail to debugging statement

so that it is easier to debug memory leaks.

3 years agolocale.c: Fix memory leak
Karl Williamson [Mon, 19 Mar 2018 21:36:56 +0000 (15:36 -0600)]
locale.c: Fix memory leak

This was caused by doing some initialization work out-of-order.  This
commit just moves some code to later in the function, revising some
comments to make sense after the move.

3 years agoUpdate File::Glob to 1.31 to account for changes in 5.27.10
Todd Rinaldo [Mon, 19 Mar 2018 21:33:52 +0000 (16:33 -0500)]
Update File::Glob to 1.31 to account for changes in 5.27.10

 - C89 changes from Aaron Crane
 - Unit test timing fixes
 - Don't use loop: as a label to avoid struct loop confusion

3 years agoUpgrade Test-Harness from version 3.39 to 3.41
Todd Rinaldo [Mon, 19 Mar 2018 20:35:27 +0000 (15:35 -0500)]
Upgrade Test-Harness from version 3.39 to 3.41


3.42    19-03-2018
        - Enable rulesfile.t to run in core

3 years agoFix locale problems on mingw
Karl Williamson [Sun, 18 Mar 2018 18:39:47 +0000 (12:39 -0600)]
Fix locale problems on mingw

Various symbols get exported (or not) by  The determination
of some of the new ones is fairly complex in perl.h, and unfortunately
in general the code logic to do so must be copied into (until
a volunteer fixes this).  I thought I could avoid a bunch of this by
using the symbol ${^SAFE_LOCALES} which in fact was created so that
programs wouldn't have to know about this complexity.

The problem is that on Windows, miniperl is always compiled
single-thread and so locales are always safe, and so (which
is called by miniperl) got the wrong information.  The solution,
unfortunately, is to reproduce the complexity in

Spotted by Daniel Dragan.