This is a live mirror of the Perl 5 development currently hosted at
3 years agorename RX_HAS_CUTGROUP() to RXp_HAS_CUTGROUP()
David Mitchell [Mon, 24 Jul 2017 13:58:58 +0000 (14:58 +0100)]

It takes a private/internal regexp* pointer rather than a public REGEXP
pointer, so rename it to match the other RXp_ macros.

Most RXp_ macros are a variant of an RX_ macro; however, I didn't add an
RX_HAS_CUTGROUP() macro - someone can always add that if needed. (There's
only one use of RXp_HAS_CUTGROUP in core).

3 years agoreformat RX_() macros
David Mitchell [Mon, 24 Jul 2017 13:54:53 +0000 (14:54 +0100)]
reformat RX_() macros

The previous commit caused the formatting of these macros to become
messy. Realign them, replacing tabs with spaces, and split some long
macros over multiple lines.

Whitespace-only change (if you count splitting a macro with \ as

3 years agoRX_FOO(prog) becomes RX_FOO(rx_sv)
David Mitchell [Mon, 24 Jul 2017 13:19:29 +0000 (14:19 +0100)]
RX_FOO(prog) becomes RX_FOO(rx_sv)

There are a family of RX_() macros which take an SV of type REGEXP as an
argument. For historical reasons (regexeps didn't use to be SVs), the name
of the parameter is 'prog', which is also by convention used to name the
actual regexp struct in some places. So e.g. at the top of
re_intuit_start(), you see

    struct regexp *const prog = ReANY(rx);

This is confusing. So for this class of macro, rename the parameter from
'prog' to 'rx_sv'.  This makes it clearer that the arg should be a REGEXP*
rather than an regexp*.

Note that there are some RXp_() macros which do take a regexp* as an arg;
I've left their parameter name as 'prog'.

3 years agogive REGEXP SVs the POK flag again
David Mitchell [Fri, 7 Jul 2017 13:13:32 +0000 (14:13 +0100)]
give REGEXP SVs the POK flag again

Commit v5.17.5-99-g8d919b0 stopped SVt_REGEXP SVs (and PVLVs acting as
regexes) from having the POK and pPOK flags set. This made things like
SvOK() and SvTRUE() slower, because as well as the quick single test for
any I/N/P/R flags, SvOK() also has to test for

    (SvTYPE(sv) == SVt_REGEXP
     || (SvFLAGS(sv) & (SVTYPEMASK|SVp_POK|SVpgv_GP|SVf_FAKE))
 == (SVt_PVLV|SVf_FAKE))

This commit fixes the issue fixed by g8d919b0 in a slightly different way,
which is less invasive and allows the POK flag.


PVLV are basically PVMGs with a few extra fields. They are intended to
be a superset of all scalar types, so any scalar value can be assigned
to a PVLV SV.

However, once REGEXPs were made into first-class scalar SVs, this
assumption broke - there are a whole bunch of fields in a regex SV body
which can't be copied to to a PVLV. So this broke:

    sub f {
        my $r = qr/abc/; # $r is reference to an SVt_REGEXP
        $_[0] = $$r;

    f($h{foo}); # the hash access is deferred - a temporary PVLV is
                # passed instead

The basic idea behind the g8d919b0 fix was, for an LV-acting-as-regex,
to attach both a PVLV body and a regex body to the SV head. This commit
keeps this basic concept; it just changes how the extra body is attached.

The original fix changed SVt_REGEXP SVs so that sv.sv_u.svu_pv no longer
pointed to the regexp's string representation; instead this pointer was
stored in a union made out of the xpv_len field. Doing this necessitated
not turning the POK flag on for any REGEXP SVs.

This freed up the sv_u to point to the regex body, while the sv_any field
could continue to point to the PVLV body. An ReANY() macro was introduced
that returned the sv_u field rather than the sv_any field.

This commit changes it so that instead, on regexp SVs (and LV-as-regexp
SVs), sv_u always points to the string buffer (so they can have POK set
again), but on specifically LV-as-regex SVs, the xpv_len_u union of the
PVLV body points to the regexp body.

This means that SVt_REGEXP SVs are now completely "normal" again,
and SVt_PVLV SVs are normal except in the one case where they hold a
regex, in which case rather than storing the string buffer's length, the
PVLV body stores a pointer to the regex body.

3 years agosv_2bool_flags(): assume ROK implies SvRV
David Mitchell [Wed, 5 Jul 2017 15:26:51 +0000 (16:26 +0100)]
sv_2bool_flags(): assume ROK implies SvRV

If the SvROK flag is set, the SV must have a valid non-nnull SvRV()
pointer, so don;t bother to check that whether its null.

3 years agoS_check_for_bool_cxt(): special-case OP_AND
David Mitchell [Tue, 4 Jul 2017 11:46:20 +0000 (12:46 +0100)]
S_check_for_bool_cxt(): special-case OP_AND

Re-instate the special-casing, which was removed by v5.25.8-172-gb243b19,
of OP_AND in boolean-context determination.

This is because the special-case allowed things to be more efficient
sometimes, but required returning a false value as sv_2mortal(newSViv(0)))
rather than &PL_sv_no. Now that PL_sv_zero has been added we can use
that instead, cheaply.

This commit adds an extra arg to S_check_for_bool_cxt() to indicate
whether the op supports the special-casing of OP_AND.

3 years agouse the new PL_sv_zero in obvious places
David Mitchell [Tue, 4 Jul 2017 08:45:29 +0000 (09:45 +0100)]
use the new PL_sv_zero in obvious places

In places that do things like mPUSHi(0) or newSViv(0), replace them
with PUSHs(&PL_sv_zero) and &PL_sv_zero, etc.

This avoids the cost of creating and/or mortalising an SV, and/or setting
its value to 0.

This commit causes a subtle change to tainting in various places as a
side-effect. For example, grep in scalar context retunrs 0 if it has no
args.  Formerly the zero value could in theory get tainted:

    @a = ();
    $x = ( ($^X . ""), grep { 1 } @a);

It used to be the case that $x would be tainted; now its not.
In practice this doesn't matter - the zero value was only getting tainted
as a side-effect of tainting's "if anything in the statement uses a
tainted value, taint everything" mechanism, which gives (documented) false
positives. This commit merely removes some such false positives, and
makes the behaviour similar to functions which return &PL_sv_undef/no/yes,
which are also immune to side-effect tainting.

3 years agomake, support PL_sv_zero
David Mitchell [Sat, 8 Jul 2017 15:27:35 +0000 (16:27 +0100)]
make, support PL_sv_zero

3 years agodist/threads/: support PL_sv_zero
David Mitchell [Wed, 5 Jul 2017 15:44:38 +0000 (16:44 +0100)]
dist/threads/: support PL_sv_zero

and bump version from 2.16 to 2.17

3 years agoadd PL_sv_zero
David Mitchell [Mon, 3 Jul 2017 16:07:28 +0000 (17:07 +0100)]
add PL_sv_zero

it's like PL_sv_no, except that its string value is "0" rather than "".
It can be used for example where pp function wants to push a zero return
value on the stack. The next commit will start to use it.

Also update the SvIMMORTAL() to be more efficient: it now checks whether
the SV's address is in a range rather than individually checking against
&PL_sv_undef, &PL_sv_no etc.

3 years ago[perl #130410] Import B-Debug 1.25 from CPAN
Dagfinn Ilmari Mannsåker [Thu, 27 Jul 2017 10:06:35 +0000 (11:06 +0100)]
[perl #130410] Import B-Debug 1.25 from CPAN

This marks it as deprecated in core so it can be removed in 5.30.

3 years agoFetch CPAN modules from the metacpan mirror instead of s.c.o
Dagfinn Ilmari Mannsåker [Thu, 27 Jul 2017 09:58:42 +0000 (10:58 +0100)]
Fetch CPAN modules from the metacpan mirror instead of s.c.o

3 years agoUpdate MANIFEST and bump base $VERSION for previous commit
Steve Hay [Tue, 25 Jul 2017 16:21:03 +0000 (17:21 +0100)]
Update MANIFEST and bump base $VERSION for previous commit

3 years agoLimit dotless-INC effect on with guard:
Aristotle Pagaltzis [Mon, 13 Feb 2017 00:28:14 +0000 (01:28 +0100)]
Limit dotless-INC effect on with guard:

This introduces a more refined and accurate solution for removing
'.' from @INC while reducing the false positives.

The following explanation is roughly what is avaiable in the code
comments. If you stumble upon this and feel like the commit message
or the comments are not helpful enough, please introduce another
commit that adds more explanation or improve the code comments
(or both).


    if ($INC[-1] eq '.' && %{"$base\::"})

We decide that:

The package already exists   => this an optional load
And: there is a dot at the end of @INC  => we want to hide it
However: we only want to hide it during our *own* require()
(i.e. without affecting nested require()s).

So we add a hook to @INC whose job is to hide the dot, but which
first checks checks the callstack depth, because within nested
require()s the callstack is deeper.

Since CORE::GLOBAL::require makes it unknowable in advance what
the exact relevant callstack depth will be, we have to record it
inside a hook. So we put another hook just for that at the front
of @INC, where it's guaranteed to run -- immediately.

The dot-hiding hook does its job by sitting directly in front of
the dot and removing itself from @INC when reached. This causes
the dot to move up one index in @INC, causing the loop inside
pp_require() to skip it.

Loaded coded may disturb this precise arrangement, but that's OK
because the hook is inert by that time. It is only active during
the top-level require(), when @INC is in our control. The only
possible gotcha is if other hooks already in @INC modify @INC in
some way during that initial require().

Note that this jiggery hookery works just fine recursively: if
a module loaded via uses itself, there will be
one pair of hooks in @INC per base::import call frame, but the
pairs from different nestings do not interfere with each other.

(cherry picked from commit 571931bfa1120564fe207965f9ec2ea0f8bbbb8a)

[This is a forward-port, with improved commit message by Sawyer X
<>, of the commit that was cherry-picked into
maint-5.22 and maint-5.24 as commits a93da9a38c and 1afa289000

3 years agoRevert B::Debug removal
Dagfinn Ilmari Mannsåker [Tue, 25 Jul 2017 12:04:37 +0000 (13:04 +0100)]
Revert B::Debug removal

Per perlpolicy, modules need to be deprecated for at least one stable
release before removal.

This reverts commits ecfa068aa0dab432bfdef423766b665be127ef77 and

3 years agoUpdate case folding and character classification in vms/vms.c.
Craig A. Berry [Tue, 25 Jul 2017 13:57:59 +0000 (08:57 -0500)]
Update case folding and character classification in vms/vms.c.

Karl W. tells me we shouldn't be using functions that depend on
the current locale in Perl core, so replace them with the
relevant macros from handy.h.  Use the Latin-1 variants where
possible as Latin-1 is a very close cousin of DEC-MCS.

Use the ASCII variants for things that need to be upcased (like
logical names) or for comparison with literal ASCII upper case

N.B.  While filenames can in principle be reported as UTF-8, most
of the current processing is done via incrementing a pointer and
checking one byte at a time.  That logic will have to be rewritten
to accommodate multi-byte characters.

strncasecmp, atoi, and atol have not been changed.  The current
implementations are documented to have ASCII assumptions.  We'll
have to take another look if and when the CRTL ever catches up
with a more recent version of POSIX.

3 years agoperldelta for ecfa068aa0dab432bfdef423766b665be127ef77
James E Keenan [Tue, 25 Jul 2017 11:25:51 +0000 (07:25 -0400)]
perldelta for ecfa068aa0dab432bfdef423766b665be127ef77

3 years agoRemove B::Debug from core distribution.
James E Keenan [Tue, 25 Jul 2017 10:44:52 +0000 (06:44 -0400)]
Remove B::Debug from core distribution.

It continues to exist as a CPAN distribution.

Increment $B::Terse::VERSION due to change in POD.

Remove internal links to B::Debug within two .pod files.

For: RT #130410

3 years ago(perl #131685) improve utf8::* function documentation
Tony Cook [Mon, 24 Jul 2017 01:05:40 +0000 (11:05 +1000)]
(perl #131685) improve utf8::* function documentation

Splits the little cheat sheet I posted as a comment into pieces
and puts them closer to where they belong

- better document why you'd want to use utf8::upgrade()

- similarly for utf8::downgrade()

- try hard to convince people not to use utf8::is_utf8()

- no, utf8::is_utf8() isn't what you want instead of utf8::valid()

- change some examples to use $x instead of the sort reserved $a

3 years agounfortunately sysread() tries to read characters
Tony Cook [Wed, 19 Jul 2017 05:42:18 +0000 (15:42 +1000)]
unfortunately sysread() tries to read characters

3 years no longer works
Tony Cook [Wed, 19 Jul 2017 00:45:33 +0000 (10:45 +1000)] no longer works

3 years agouse utf8; doesn't force unicode semantics on all strings in scope
Tony Cook [Wed, 19 Jul 2017 00:30:56 +0000 (10:30 +1000)]
use utf8; doesn't force unicode semantics on all strings in scope


$ perl -Mutf8 -le 'chr(0xdf) =~ /ss/i and print "match" or print "no match"'
no match

perhaps this should be removed, or completely re-worded, it's worded
similarly to the next point which behaves differently.

3 years agoFix typo of in
Dagfinn Ilmari Mannsåker [Sun, 23 Jul 2017 19:22:46 +0000 (20:22 +0100)]
Fix typo of in

3 years agofix Storable test for pre-5.19.2 threaded perls
Zefram [Fri, 21 Jul 2017 07:50:12 +0000 (08:50 +0100)]
fix Storable test for pre-5.19.2 threaded perls

The test of Storable's identity-preserving handling of the immortal
scalars ran into trouble with an old bug regarding overloading of the
PADTMP flag, which could prevent the test script getting actual references
to the immortal truth values in order to feed to Storable and to compare
its output against.  On the affected perls, compiling code that includes
a const op whose value is an immortal makes subsequent executions of the
refgen operator on that immortal scalar copy it, breaking its identity.
Loading the testing infrastructure modules could easily perform such
compilation, though whether it actually does depends on the versions of
the modules.  Work around this by taking the platinum-iridium immortal
references first thing in the test script, before loading anything that
could break it.

3 years agorestore Storable's portability to pre-5.25.6 perls
Zefram [Fri, 21 Jul 2017 04:48:20 +0000 (05:48 +0100)]
restore Storable's portability to pre-5.25.6 perls

Commit 4f72e1e921be7caffd7029f421f171bad7f485f2 changed Storable.xs to
use SvPVCLEAR(), defined only on 5.25.6 and later, but didn't supply a
reserve definition.  Add the obvious reserve definition.

3 years agoop.c: Confusing comment typo
Father Chrysostomos [Fri, 21 Jul 2017 01:55:44 +0000 (18:55 -0700)]
op.c: Confusing comment typo

3 years agoBump Perl version from 5.27.2 to 5.27.3
Aaron Crane [Thu, 20 Jul 2017 19:53:42 +0000 (20:53 +0100)]
Bump Perl version from 5.27.2 to 5.27.3

Including the various pieces of Module::CoreList.

3 years agoRelease announcement template: next stable is 5.28
Aaron Crane [Thu, 20 Jul 2017 19:51:47 +0000 (20:51 +0100)]
Release announcement template: next stable is 5.28

3 years agoNew draft perldelta for 5.27.3
Aaron Crane [Thu, 20 Jul 2017 19:49:20 +0000 (20:49 +0100)]
New draft perldelta for 5.27.3

3 years agoperldelta template: add a note about module versions
Aaron Crane [Thu, 20 Jul 2017 19:47:37 +0000 (20:47 +0100)]
perldelta template: add a note about module versions

3 years agoTick off 5.27.2 release
Aaron Crane [Thu, 20 Jul 2017 19:38:43 +0000 (20:38 +0100)]
Tick off 5.27.2 release

3 years agoAdd epigraph for 5.27.2
Aaron Crane [Thu, 20 Jul 2017 19:38:09 +0000 (20:38 +0100)]
Add epigraph for 5.27.2

3 years agoMerge branch 'release-5.27.2' into blead
Aaron Crane [Thu, 20 Jul 2017 19:33:36 +0000 (20:33 +0100)]
Merge branch 'release-5.27.2' into blead

3 years agoAdd 5.27.2 to perlhist v5.27.2
Aaron Crane [Thu, 20 Jul 2017 18:29:51 +0000 (19:29 +0100)]
Add 5.27.2 to perlhist

3 years agoperldelta: delete boilerplate for empty sections
Aaron Crane [Thu, 20 Jul 2017 18:19:12 +0000 (19:19 +0100)]
perldelta: delete boilerplate for empty sections

3 years agoperldelta: acknowledgements for 5.27.2
Aaron Crane [Thu, 20 Jul 2017 18:16:22 +0000 (19:16 +0100)]
perldelta: acknowledgements for 5.27.2

3 years agoperldelta: module updates for 5.27.2
Aaron Crane [Thu, 20 Jul 2017 18:16:04 +0000 (19:16 +0100)]
perldelta: module updates for 5.27.2

3 years agoUpdate Module::CoreList for 5.27.2
Aaron Crane [Thu, 20 Jul 2017 17:32:44 +0000 (18:32 +0100)]
Update Module::CoreList for 5.27.2

3 years agoperlpolicy - Mention the maint-votes branch
Steve Hay [Thu, 20 Jul 2017 13:08:33 +0000 (14:08 +0100)]
perlpolicy - Mention the maint-votes branch

The maint-votes branch has been used for some time now to keep track of
which commits should be cherry-picked into maint branches, but this has
never been mentioned in perlpolicy.pod. Document it now to avoid possible
confusion -- especially during long maint branch freeze periods, which
occurred recently.

3 years agoExtUtils::CBuilder - Fix link() on Windows, broken in version 0.280226
Steve Hay [Thu, 20 Jul 2017 12:37:26 +0000 (13:37 +0100)]
ExtUtils::CBuilder - Fix link() on Windows, broken in version 0.280226

3 years agoperldelta entry for Carp
Zefram [Thu, 20 Jul 2017 06:54:16 +0000 (07:54 +0100)]
perldelta entry for Carp

3 years agoperldelta entry for PathTools
Zefram [Thu, 20 Jul 2017 06:34:47 +0000 (07:34 +0100)]
perldelta entry for PathTools

3 years agofix PathTools dynamic linking for Perl 5.6
Zefram [Thu, 20 Jul 2017 06:20:52 +0000 (07:20 +0100)]
fix PathTools dynamic linking for Perl 5.6

On Perl 5.6, PathTools's use of SvPV_nomg() is satisfied by a definition
in ppport.h.  That definition calls out to the function sv_2pv_flags(),
which is also not defined by the 5.6.  ppport.h can define the function,
but doesn't unless requested to.  Cwd.xs wasn't requesting it, resulting
in having a reference to a non-existent function of a decorated
version of that name.  Fix this by making Cwd.xs request that function.

Some of the existing test cases already exercise the call out to
sv_2pv_flags(), but in non-obvious ways.  Add a more direct test,
requesting canonisation of a number.  However, the use of PERL_DL_NONLAZY
for running the test suite hides the problem.  The XS loading for
PathTools is optional, so with PERL_DL_NONLAZY making the loading fail
due to the unresolvable symbol, PathTools just falls back to its pure
Perl backup implementation, and passes all the tests.  The problem only
really manifests when PERL_DL_NONLAZY is unset, i.e., in real use: the
XS loading succeeds, so PathTools will rely on the XS, but then the code
fails when called.  This issue remains, lurking to bite if PathTools
develops another dynamic linking problem in the future.

3 years agofix PathTools taint handling for Perl 5.6
Zefram [Thu, 20 Jul 2017 05:32:27 +0000 (06:32 +0100)]
fix PathTools taint handling for Perl 5.6

PathTools's reserve code for detecting tainted values on Perl 5.6
generated a warning if the value was undefined, which it commonly was.
Make it allow all undefined values (which get filtered out in the next
step) without warning.  Its test script for tainting behaviour also failed
to detect whether tainting was turned on on Perl 5.6, incorrectly skipping
the test script on the basis that the Perl doesn't support tainting.
Switch that check to an empirical arrangement that works on any Perl.

3 years agofix problems from Carp's partial EBCDIC support
Zefram [Thu, 20 Jul 2017 03:00:30 +0000 (04:00 +0100)]
fix problems from Carp's partial EBCDIC support

Commit 975fe8546427b5f6259103912b13925be148becd introduced partial EBCDIC
support to Carp, but simultaneously introduced some bugs into the module
and the tests.  Multiple issues are addressed in this commit:

* The main check for whether a character needs a non-literal
  representation when dumping a string or regexp argument, which used
  to be a regexp character range [ -~], was expanded to an explicit
  character set not using range syntax, but in the expansion the "&"
  was omitted.  This caused unwanted \x representation of any "&" in an
  argument in a stack trace.  Add the "&" back in and fix the sorting
  of the character set.

* The substitute version of this check for Perls on which Carp can't
  safely apply a regexp to an upgraded string, but new enough to have
  utf8::native_to_unicode(), was applying that function to some fixed
  codepoint values that were already Unicode codepoints.  Remove those
  calls, and compare the fixed codepoints directly to codepoints correctly
  converted through that function.

* That version of the check, by referring to utf8::native_to_unicode()
  directly in source that is always compiled, caused the utf8:: stash to
  be vivified on Perl 5.6, causing havoc (and failed tests).  Hide that
  version of the check behind a (compile-time) string eval.

* Another version of the printability check, for EBCDIC on Perl 5.6,
  treated as printable any codepoint above 0xff.  Change that to correctly
  treat all such codepoints as not safely printable.

* Some tests in t/arg_regexp.t which were originally about non-ASCII
  characters specified in a regexp by using \x regexp syntax got changed
  to use the non-ASCII characters literally at the regexp syntax level
  (by interpolating them from a constructed string).  Restore these to
  using \x syntax, with the appropriate variability of the hex digits.

* Add a couple of "fixme" comments about parts of the EBCDIC support
  that are incomplete.

* Some tests involving non-ASCII characters were later made to skip on
  any Perl prior to 5.17.1.  In practice they work fine on earlier Perls,
  and they're fairly important.  Suspect that the problem that led to
  the skipping being added was dependent on the tests having been broken
  as described above, so remove the skipping logic.

* Incidentally, correct a comment about the purpose of t/arg_string.t
  and add a similar one to t/arg_regexp.t.

* Incidentally, add Changes entries for versions 1.41 and 1.42, which
  were omitted when those changes were made.

3 years agore-fix do/@INC issue in Time-HiRes's Makefile.PL
Zefram [Wed, 19 Jul 2017 23:39:33 +0000 (00:39 +0100)]
re-fix do/@INC issue in Time-HiRes's Makefile.PL

Time-HiRes's Makefile.PL loads its hints file using do-file, and so
has needed to be updated for the removal of the implicit "." from @INC.
Commit 8b69401c2ba8d1ced2e17c24d6b51a7ce3882664 attempted to do this,
but put the explicit "." in the input to File::Spec->catfile, which
edits it back out.  Commit ba570843add681d44ff50ff219d1ce000a961663
fixed this problem, by moving the explicit "." into a string
concatenation after File::Spec->catfile has done its bit.  But commit
5cd155b07ed261125793850e101ebe6fa438c5e3 then reverted that fix,
apparently by mistake during preparation for a CPAN release.  This commit
reinstates the fix.

3 years agocorrect declared min Perl version for Time-HiRes
Zefram [Wed, 19 Jul 2017 23:29:19 +0000 (00:29 +0100)]
correct declared min Perl version for Time-HiRes

Version 1.9727_03 of Time-HiRes introduced into Makefile.PL a declaration
of the minimum required Perl version, but got it wrong.  It declared a
minimum of 5.8, but the module itself only demands 5.6, and it actually
works at least as far back as 5.6.1.  Change the declared minimum to 5.6.

3 years agofix ExtUtils-CBuilder tests for Perl 5.6
Zefram [Wed, 19 Jul 2017 22:28:00 +0000 (23:28 +0100)]
fix ExtUtils-CBuilder tests for Perl 5.6

3 years agoImport Encode-2.92 from CPAN
Aaron Crane [Tue, 18 Jul 2017 17:06:46 +0000 (18:06 +0100)]
Import Encode-2.92 from CPAN

This also permits removing the local customisation for the previous version.

3 years agoPorting/perldelta_template.pod: tiny grammar tweak
Aaron Crane [Tue, 18 Jul 2017 11:14:09 +0000 (12:14 +0100)]
Porting/perldelta_template.pod: tiny grammar tweak

3 years agoImprove documentation of 'map'.
James E Keenan [Fri, 7 Jul 2017 23:59:47 +0000 (19:59 -0400)]
Improve documentation of 'map'.

Per discussion in RT # 131652.

3 years agolocale.t: Refactor error reporting code
Karl Williamson [Fri, 14 Jul 2017 17:26:00 +0000 (11:26 -0600)]
locale.t: Refactor error reporting code

It turns out that there were paths through this code that didn't
generate the correct diagnostics.  The diagnostics came out ahead of the
failing message.  This commit fixes both those, and removes a
no-longer-needed use of explicitly saying we are using the postderef

3 years agoperl.h: Move #define to earlier in the file
Karl Williamson [Mon, 17 Jul 2017 19:27:59 +0000 (13:27 -0600)]
perl.h: Move #define to earlier in the file

I don't know when this bug got introduced (and am not taking the time
to find out), but a symbol was defined after other code tested if it was
defined, so that always failed, and the alternative implementation got
compiled.  I do know that the intended implementation was used at some
point, as I ended up fixing several bugs in it.

3 years agoperl.h: Remove extraneous '}'
Karl Williamson [Mon, 17 Jul 2017 19:25:58 +0000 (13:25 -0600)]
perl.h: Remove extraneous '}'

This would be a syntax error if the code ever got compiled, but another
error prevents that, which will be fixed in the next commit.

3 years agoPL_curstackinfo->si_stack_hwm: gently restore
David Mitchell [Sun, 16 Jul 2017 19:00:01 +0000 (20:00 +0100)]
PL_curstackinfo->si_stack_hwm: gently restore

RT #131732

With v5.27.1-66-g87058c3, I introduced a DEBUGGING-only mechanism in the
runops loop for checking whether an op extended the stack by as many slots
as values it returned on the stack.  It did this by setting a
high-water-mark just before calling each pp function, and checking its
result on return.

It saved and restored the old value of PL_curstackinfo->si_stack_hwm
whenever it entered or left a runops loop or did a JMPENV_PUSH /
JMPENV_POP.  However, the restoring could restore to an old value that was
smaller than the current value, leading to false-positive stack-extend
panics. So only restore if the old value was larger.

In particular this was causing false positives in DBI.

3 years agoAdd some perldelta entries for 5.27.2
Aaron Crane [Sun, 16 Jul 2017 16:23:05 +0000 (17:23 +0100)]
Add some perldelta entries for 5.27.2

3 years ago[perl #131627] extend stack in scalar-context pp_list when no args
Aaron Crane [Sun, 16 Jul 2017 15:51:53 +0000 (16:51 +0100)]
[perl #131627] extend stack in scalar-context pp_list when no args

In scalar (well, non-list) context, pp_list always yields exactly one stack
element. It must therefore extend the stack for that element, in case there
were no arguments on the stack when it started.

3 years ago[MERGE] release management checklist maker
Aaron Crane [Sun, 16 Jul 2017 12:09:41 +0000 (13:09 +0100)]
[MERGE] release management checklist maker

The Release Manager's Guide is a complicated document that must accurately
describe how to prepare all four possible types of release. This makes it
hard to use as the basis for a checklist: for any given type of release, it
must list some steps in the wrong order, and list some steps that mustn't in
fact be taken at all.

We do have a porting tool that prepares a release checklist from the RMG for
a given release type. This set of changes, largely written by Sawyer++,
modifies that tool so that its output lists only the desired steps.

3 years agoRestore Porting/make-rmg-checklist --html option
Aaron Crane [Sun, 9 Jul 2017 13:01:54 +0000 (14:01 +0100)]
Restore Porting/make-rmg-checklist --html option

3 years agoSuppress irrelevant "MUST SKIP this step" RMG paragraphs
Aaron Crane [Sun, 9 Jul 2017 12:54:26 +0000 (13:54 +0100)]
Suppress irrelevant "MUST SKIP this step" RMG paragraphs

Sections that aren't relevant to the current release type are suppressed in
their entirety, so the remaining "MUST SKIP" messages are just confusing.
Remove them from the content.

3 years agoReplace Release Managers Guide (RMG) with new version:
Sawyer X [Sun, 14 May 2017 10:24:07 +0000 (12:24 +0200)]
Replace Release Managers Guide (RMG) with new version:

Many of the mistakes made by me during a release has to do with the
confusing instructions in the guide.

* Some steps are mentioned in different order
* Some steps are mentioned (and noted to *NOT* do)
* The confusion between "MAINT" and "BLEAD-FINAL", and "BLEAD-FINAL"
  and "BLEAD-POINT".

This generator generates a checklist with only the instruction you
*will* have to perform. Any steps that mentions they must be skipped
for the release will not be included in the end-result.

Unlike the previous guide, you need not know the type of the release
you do. Instead, you give the version you want to release and it
generates the appropriate one for you.

All the following incantations work:

    perl Porting/make-rmg-checklist --version 5.26.0-RC2 # RC
    perl Porting/make-rmg-checklist --version 5.26.0     # BLEAD-FINAL
    perl Porting/make-rmg-checklist --version 5.27.0     # BLEAD-POINT
    perl Porting/make-rmg-checklist --version 5.27.1     # BLEAD-POINT
    perl Porting/make-rmg-checklist --version 5.26.1     # MAINT

Extra benefit: Apparently it includes additional checklist steps
at the top that somehow are not included when you currently generate.

Downside: HTML is not yet supported.

3 years agoPerlIO::scalar: check invariant at compile time
Lukas Mai [Sun, 16 Jul 2017 09:48:41 +0000 (11:48 +0200)]
PerlIO::scalar: check invariant at compile time

3 years agoOpcode: check invariant at compile time
Lukas Mai [Sun, 16 Jul 2017 09:48:28 +0000 (11:48 +0200)]
Opcode: check invariant at compile time

3 years agot/lib/warnings/utf8: Fix test
Karl Williamson [Sun, 16 Jul 2017 01:36:25 +0000 (19:36 -0600)]
t/lib/warnings/utf8: Fix test

There is some randomness to this test added to fix [perl #131646].
Change what passes to be a pattern that matches the correct template

3 years agoext/File-Glob/t/rt131211.t: Fix typo
Karl Williamson [Sun, 16 Jul 2017 00:46:50 +0000 (18:46 -0600)]
ext/File-Glob/t/rt131211.t: Fix typo

Commit 0887d051f49229ff72dc6fd22105ce922a11003f had an extra backslash

3 years agoembed.fnc: Fix declaration of my_strerror()
Karl Williamson [Sat, 15 Jul 2017 18:36:54 +0000 (12:36 -0600)]
embed.fnc: Fix declaration of my_strerror()

This was improperly made public (but the docs indicate it should not be
used by the public).

3 years agoembed.fnc Change Some functions only used in macros
Karl Williamson [Sat, 15 Jul 2017 18:03:01 +0000 (12:03 -0600)]
embed.fnc Change Some functions only used in macros

The X flag is used for this situation where a function is public only
because it is called from a public macro.

3 years agoMove bulk of POSIX::setlocale to locale.c
Karl Williamson [Sat, 15 Jul 2017 17:11:41 +0000 (11:11 -0600)]
Move bulk of POSIX::setlocale to locale.c

This cleans up the interface, as it allows several functions to now be
static that used to have to be called from outside locale.c

3 years agoFix File::Glob/t/rt131211.t
Karl Williamson [Sat, 15 Jul 2017 21:01:44 +0000 (15:01 -0600)]
Fix File::Glob/t/rt131211.t

The \b boundaries I added in commit
5a993d81c4b1abf13cd3ae4cbc04f26c7516bc37 were wrong.  \b{wb} give a better

3 years agoCarthago delenda est
Chris 'BinGOs' Williams [Sat, 15 Jul 2017 18:55:05 +0000 (19:55 +0100)]
Carthago delenda est

3 years agoRT #130907: Fix the Unicode Bug in split " "
Aaron Crane [Sat, 4 Mar 2017 12:50:58 +0000 (12:50 +0000)]
RT #130907: Fix the Unicode Bug in split " "

3 years agoTick off 5.22.4 and 5.24.2
Steve Hay [Sat, 15 Jul 2017 18:17:30 +0000 (19:17 +0100)]
Tick off 5.22.4 and 5.24.2

That was probably the last 5.22. There may or may not be another 5.24.

3 years agoAdd perldeltas for 5.22.4 and 5.24.2
Steve Hay [Sat, 15 Jul 2017 18:07:31 +0000 (19:07 +0100)]
Add perldeltas for 5.22.4 and 5.24.2

3 years agoImport Module::CoreList data for 5.24.2
Steve Hay [Sat, 15 Jul 2017 18:00:17 +0000 (19:00 +0100)]
Import Module::CoreList data for 5.24.2

3 years agoImport Module::CoreList data for 5.22.4
Steve Hay [Sat, 15 Jul 2017 17:56:11 +0000 (18:56 +0100)]
Import Module::CoreList data for 5.22.4

3 years agoEpigraphs for 5.22.4 and 5.24.2
Steve Hay [Sat, 15 Jul 2017 17:43:02 +0000 (18:43 +0100)]
Epigraphs for 5.22.4 and 5.24.2

3 years agoperldelta for c7ac81d9d79d22d7d1133b804e5f8dc4a641fe39
James E Keenan [Sat, 15 Jul 2017 16:47:07 +0000 (12:47 -0400)]
perldelta for c7ac81d9d79d22d7d1133b804e5f8dc4a641fe39

Signed-off-by: James E Keenan <>
3 years agoUpdate to ExtUtils::CBuilder 0.280226
Alberto Simões [Fri, 14 Jul 2017 13:14:05 +0000 (14:14 +0100)]
Update to ExtUtils::CBuilder 0.280226

File::Basename::fileparse(), when called with two arguments, is
documented to return a list of three elements:

    The non-suffix part of the file's basename.

    The file's dirname, plus trailing path separator.

    The suffix part of the file's basename.


    my ($name,$path,$suffix) = fileparse('/tmp/perl/p5p/foo.patch', qr/\.[^.]*/);


    $name:      foo
    $path:      /tmp/perl/p5p/
    $suffix:    .patch

If we want to take those values and compose a path with
File::Spec->catfile(), we have to bear in mind that File::Spec generally
expects to have directories precede filenames in its arguments.  Thus,
the correct way to use the values returned by fileparse() would be:

    my $cf = File::Spec->catfile($path, $name . $suffix);

In ExtUtils::CBuilder::Base::new(), however, the return values from
fileparse() were named in a way that suggested that the first value
would be the dirname and the second would be the non-suffix part of the

    my ($ccpath, $ccbase, $ccsfx ) = fileparse($self->{config}{cc}, qr/\.[^.]*/);

$ccpath -- which here is really a basename -- was then used as the first
argument to catfile():

    File::Spec->catfile( $ccpath, $cxx, $ccsfx )

In addition, in the above $ccsfx should not have been a separate
argument.  Rather, it should have been concatenated without a path
separator to the second argument.

For: RT # 131749.  See also: (thanks
to stphnlyd of Perl Toolchain Gang).

Signed-off-by: James E Keenan <>
3 years ago5.22.4 and 5.24.2 today
Steve Hay [Sat, 15 Jul 2017 16:16:06 +0000 (17:16 +0100)]
5.22.4 and 5.24.2 today

3 years agolocale.c: Add forgotten #if DEBUGGING
Karl Williamson [Fri, 14 Jul 2017 21:03:51 +0000 (15:03 -0600)]
locale.c: Add forgotten #if DEBUGGING

I pushed the previous commit without actually amending it to include

3 years agoAdd debugging to locale handling
Karl Williamson [Fri, 14 Jul 2017 19:56:44 +0000 (13:56 -0600)]
Add debugging to locale handling

These debug statements have proven useful in the past tracking down
problems.  I looked them over and kept the ones that I though might be
useful in the future.  This includes extracting some code into a
static function so it can be called from more than one place.

3 years agoperllocale: Clarifications, corrections, and nits
Karl Williamson [Fri, 14 Jul 2017 17:26:44 +0000 (11:26 -0600)]
perllocale: Clarifications, corrections, and nits

3 years agoFile-Glob/t/rt131211.t: skip when File::Glob not used
Karl Williamson [Fri, 14 Jul 2017 04:32:02 +0000 (22:32 -0600)]
File-Glob/t/rt131211.t: skip when File::Glob not used

File::Glob can be turned off at Configure time, and is on certain
platforms.  Thus this .t is not testing File::Glob, but what the
platform's local sort-of-equivalent is.  Thus the tests aren't valid

3 years agoMerge branch 'utf8 fixes' into blead
Karl Williamson [Thu, 13 Jul 2017 03:15:09 +0000 (21:15 -0600)]
Merge branch 'utf8 fixes' into blead

This branch reimplements the forbidding of code points above IV_MAX in
such a way that encountering UTF-8 evaluating to such doesn't kill the
receiving process, but is treated as an ordinary overflow.  To do
otherwise can lead to Denial of Service attacks.

It fixes several bugs that occur only on UTF-8 that is malformed or for
very large code points.

And it cleans up and revamps the testing of the XS API for UTF-8 so that
more coverage is done, but in a fraction of the previous time needed.

3 years agoForbid above IV_MAX code points
Karl Williamson [Sat, 1 Jul 2017 17:58:00 +0000 (11:58 -0600)]
Forbid above IV_MAX code points

This implements the restriction of code points to 0..IV_MAX in such a
way that the process doesn't die when presented with input UTF-8 that
evaluates to a larger one.  Instead, it is treated as overflow.

The commit reinstates causing the offending process to die if trying to
create a character somehow that is above IV_MAX (like
chr(0xFFFFFFFFFFFFF) or trying to do certain operations on one if
somehow one did get created.

The long term goal is to use code points above IV_MAX internally, as
Perl6 does.  So code and tests are not removed, just commented out

3 years agoutf8.c: Change 2 static fcns to handle overlongs
Karl Williamson [Thu, 13 Jul 2017 02:28:45 +0000 (20:28 -0600)]
utf8.c: Change 2 static fcns to handle overlongs

This will be used in the following commit.

One function is made more complicated, so we stop asking it to be

3 years agoutf8.c: Move and slightly change comment block
Karl Williamson [Thu, 13 Jul 2017 02:26:18 +0000 (20:26 -0600)]
utf8.c: Move and slightly change comment block

This is so there are fewer real differences shown in the next commit

3 years agoutf8.c: Generalize static fcn return for indeterminate result
Karl Williamson [Sat, 1 Jul 2017 13:21:09 +0000 (07:21 -0600)]
utf8.c: Generalize static fcn return for indeterminate result

This makes it harder to think that 0 means a definite FALSE.

3 years agoutf8.c: Move a fcn within the file
Karl Williamson [Sat, 1 Jul 2017 12:32:28 +0000 (06:32 -0600)]
utf8.c: Move a fcn within the file

This simply moves a function to later in the file.  The next commIt will
change it to needing a definition which, until this commit, came after it
in the file, and so was not available to it.

3 years agoutf8.c: Generalize static fcn return for indeterminate result
Karl Williamson [Sat, 1 Jul 2017 12:43:34 +0000 (06:43 -0600)]
utf8.c: Generalize static fcn return for indeterminate result

This makes it harder to think that 0 means a definite FALSE.

3 years agoutf8.c: Generalize static fcn return for indeterminate result
Karl Williamson [Sat, 1 Jul 2017 12:18:01 +0000 (06:18 -0600)]
utf8.c: Generalize static fcn return for indeterminate result

Prior to this commit, isFF_OVERLONG() returned a boolean, with 0 also
indicating that there wasn't enough information to make a determination.
I realized that I was forgetting that 0 wasn't necessarily definitive
while coding.  By changing the API to return 3 values, forgetting that
won't likely happen.

This and the next several commits change several other functions that
have the same predicament.

3 years agoutf8.h: Comments only
Karl Williamson [Fri, 30 Jun 2017 19:21:58 +0000 (13:21 -0600)]
utf8.h: Comments only

An earlier commit had split some comments up.  And this adds clarifying

3 years agoutf8.c: Reorder two 'if' clauses
Karl Williamson [Fri, 30 Jun 2017 19:19:10 +0000 (13:19 -0600)]
utf8.c: Reorder two 'if' clauses

This is purely to get vertical line up that easier to see of slightly
differently spelled tests

3 years agoutf8.c: Slightly simplify some code
Karl Williamson [Fri, 30 Jun 2017 17:19:59 +0000 (11:19 -0600)]
utf8.c: Slightly simplify some code

This just does a small refactor, which I think makes things easier to

3 years agoutf8n_to_uvchr(): Properly handle extremely high code points
Karl Williamson [Sat, 8 Jul 2017 20:54:28 +0000 (14:54 -0600)]
utf8n_to_uvchr(): Properly handle extremely high code points

It turns out that it could incorrectly deem something to be overflowing
or overlong.  This fixes that and changes the test to catch this
possibility.  This fixes a bug, so now on 32-bit systems, it detects
that if you have a start byte of FE, you need  a continuation byte to
determine if the result overflows.

3 years agorm APItest/t/utf8_malformed.t
Karl Williamson [Fri, 7 Jul 2017 18:39:33 +0000 (12:39 -0600)]
rm APItest/t/utf8_malformed.t

This file no longer contains any tests.  All were either made redundant
with or have been moved to it.

3 years agoMove test to
Karl Williamson [Fri, 7 Jul 2017 18:37:39 +0000 (12:37 -0600)]
Move test to

This is the final test that was in utf8_malformed.t.  The next commit
will remove the file.

3 years agoAPItest/t/utf8_malformed.t: Remove 2 redundant tests
Karl Williamson [Wed, 5 Jul 2017 16:27:25 +0000 (10:27 -0600)]
APItest/t/utf8_malformed.t: Remove 2 redundant tests

These tests for the malformation where a UTF-8 sequence is interrupted
by the beginning of another character, already get tested int

3 years agoAPItest/t/ White-space only
Karl Williamson [Fri, 7 Jul 2017 21:20:44 +0000 (15:20 -0600)]
APItest/t/ White-space only

This indents properly after the previous commit created a block around
this code, and reflows to fit in 79 columns.

3 years agoAPItest/t/ Add a test
Karl Williamson [Tue, 4 Jul 2017 18:57:40 +0000 (12:57 -0600)]
APItest/t/ Add a test

This verifies that we don't mistake an overlong for overflow