This is a live mirror of the Perl 5 development currently hosted at
5 years agoperlobj: do not discourage manual @ISA
Aristotle Pagaltzis [Mon, 7 Nov 2016 07:51:51 +0000 (08:51 +0100)]
perlobj: do not discourage manual @ISA

5 years agoperlobj: remove now-inaccurate claim
Aristotle Pagaltzis [Mon, 7 Nov 2016 07:36:25 +0000 (08:36 +0100)]
perlobj: remove now-inaccurate claim

5 years ago(perl #129995) avoid sv_catpvn() in do_vop() when unneeded
Tony Cook [Mon, 7 Nov 2016 00:22:55 +0000 (11:22 +1100)]
(perl #129995) avoid sv_catpvn() in do_vop() when unneeded

This could call sv_catpvn() with the source string being within the
destination SV, which caused a freed memory access if do_vop() and
sv_catpvn_flags() had different ideas about the ideal size of the
target SV's buffer.

5 years agoAdded note about perlobj change to perldelta
Dave Rolsky [Tue, 1 Nov 2016 19:34:03 +0000 (14:34 -0500)]
Added note about perlobj change to perldelta

5 years agoAdd docs on calling methods using a fully qualified name like $mp3->File::save()
Lukas Mai [Tue, 1 Nov 2016 19:25:21 +0000 (14:25 -0500)]
Add docs on calling methods using a fully qualified name like $mp3->File::save()

5 years agoSmall formatting fix in perlobj
Dave Rolsky [Tue, 1 Nov 2016 19:24:45 +0000 (14:24 -0500)]
Small formatting fix in perlobj

5 years agoAdd a few more mentions of Moo to perlootut
Dave Rolsky [Tue, 1 Nov 2016 19:21:44 +0000 (14:21 -0500)]
Add a few more mentions of Moo to perlootut

Also ran Porting/podtidy which reformatted a few lines.

5 years agoutf8.c: No need to look at trailing NUL in comparing string
Karl Williamson [Sun, 6 Nov 2016 01:05:41 +0000 (02:05 +0100)]
utf8.c: No need to look at trailing NUL in comparing string

I meant to get this into commit
b0b342d4b3fa61880a96b645a3dab648f7c4c682, but didn't.  Subtract 1 from
the sizeof a constant string to get the number of bytes to compare, as
we don't need to look at the trailing NUL.

5 years agocustomized.dat regen
Jarkko Hietaniemi [Sat, 5 Nov 2016 23:01:49 +0000 (19:01 -0400)]
customized.dat regen

5 years agoVersion bump
Jarkko Hietaniemi [Sat, 5 Nov 2016 23:01:35 +0000 (19:01 -0400)]
Version bump

5 years agoCapture also the stderr, the message from tar might go there
Jarkko Hietaniemi [Sat, 5 Nov 2016 22:58:51 +0000 (18:58 -0400)]
Capture also the stderr, the message from tar might go there

Follow-up to 202b0c8a3ba3de0efe5cb730b242b8c0502e1add

5 years agonetbsd-vax: no infinity
Jarkko Hietaniemi [Sat, 5 Nov 2016 18:10:56 +0000 (14:10 -0400)]
netbsd-vax: no infinity

The tests were not failing, but being a bit noisy.

5 years agocall AV set magic in list assign
David Mitchell [Fri, 4 Nov 2016 15:42:37 +0000 (15:42 +0000)]
call AV set magic in list assign

RT #129996

Perl used to do this, but I broke it with my recent commit

Normally if @a has set magic, then that magic gets called for each
av_store() call; e.g. in @a = (1,2,3), the magic should get called 3

I broke that because I was checking for SVs_RMG rather than SVs_SMG, and
it so happens that no core code sets SVs_SMG on an AV without setting
SVs_RMG too. However, code such as Tk (which use PERL_MAGIC_ext magic),

This commit re-instates the AV behaviour.

Oddly enough, hv_store_ent() etc *don't* call HV set magic. I've added
some tests for that, but marked them TODO because I'm not sure what the
correct behaviour should be.

5 years agonetbsd-vax: customized.dat update for S-L-U
Jarkko Hietaniemi [Fri, 4 Nov 2016 12:52:46 +0000 (08:52 -0400)]
netbsd-vax: customized.dat update for S-L-U

5 years agonetbsd-vax: also the 1E1000 is toxic (in compiletime).
Jarkko Hietaniemi [Fri, 4 Nov 2016 12:43:40 +0000 (08:43 -0400)]
netbsd-vax: also the 1E1000 is toxic (in compiletime).

5 years missing ELSE in usethreads logic
Craig A. Berry [Fri, 4 Nov 2016 01:17:36 +0000 (20:17 -0500)] missing ELSE in usethreads logic

This would only bite if an unknown compiler had been selected, but
there is a port of clang in progress, so try to be ready for

5 years agoFix typos in test comment
Dagfinn Ilmari Mannsåker [Thu, 3 Nov 2016 13:53:45 +0000 (13:53 +0000)]
Fix typos in test comment

5 years agoCompiler choice clean-up in
Craig A. Berry [Thu, 3 Nov 2016 13:15:47 +0000 (08:15 -0500)]
Compiler choice clean-up in

VAXC has not been a possibility for a good long while, and the
versions of the DEC/Compaq/HP/VSI C compiler that report themselves
as "DEC" in a listing file are 15 years or more out-of-date and
can be safely desupported.

5 years agoskip SEGVing test in t/uni/overload.t
David Mitchell [Thu, 3 Nov 2016 11:20:50 +0000 (11:20 +0000)]
skip SEGVing test in t/uni/overload.t

This TODO test is expected to SEGV, and is run using fresh_perl().
But that doesn't stop the shell issuing this scary noise to STDERR:

    sh: line 1:  5106 Segmentation fault      (core dumped) /home/davem/perl5/gi
t/bleed/perl "-I../lib" "tmp5097A" 2>&1

So until this is fixed, just skip the test. See [perl #129933]

5 years agoNet::Ping 500_ping_icmp.t: remove sudo code
David Mitchell [Thu, 3 Nov 2016 11:06:25 +0000 (11:06 +0000)]
Net::Ping 500_ping_icmp.t: remove sudo code

Rcently this  test scipt had code added to it to attempt to re-run itself
as root by invoking 'sudo' rather rather than just skipping the ICMP ping

This can the side-effects of:

* sudo sending a security alert email to the local root account;

* a script being run as root when a non-root user invokes 'make test',
  which might be considered antisocial;

* noise on stderr about sudo failing.


This commit just removes the sudo code and doesn't try to do anything

5 years agoMake toke.c:S_lop's x arg a U8 to match PL_expect
Andy Lester [Thu, 3 Nov 2016 10:54:36 +0000 (10:54 +0000)]
Make toke.c:S_lop's x arg a U8 to match PL_expect

The second argument to S_lop() is an int, but it gets stored in
PL_expect which is a U8.  If we need a U8, then let's bring it
into the function as a U8.

5 years agofix hv.h build breakage
David Mitchell [Thu, 3 Nov 2016 10:32:33 +0000 (10:32 +0000)]
fix hv.h build breakage

The previous commit had a double closing comment (*/)

5 years agoadd a comment about the properties of struct hek
Yves Orton [Thu, 3 Nov 2016 09:03:26 +0000 (10:03 +0100)]
add a comment about the properties of struct hek

5 years agoRevert "hv.h: rework HEK_FLAGS to a proper member in struct hek"
Tony Cook [Thu, 3 Nov 2016 00:12:57 +0000 (11:12 +1100)]
Revert "hv.h: rework HEK_FLAGS to a proper member in struct hek"

This reverts commit d3148f758506efd28325dfd8e1b698385133f0cd.

SV keys are stored as pointers in the key_key, on platforms with
alignment requirements (such as PA-RISC) this resulted in bus errors
early in the build.

5 years agoFix wrong UTF-8 overflow error on 32-bit platforms
Karl Williamson [Wed, 2 Nov 2016 04:12:51 +0000 (22:12 -0600)]
Fix wrong UTF-8 overflow error on 32-bit platforms

Commit 2b5e7bc2e60b4c4b5d87aa66e066363d9dce7930 changed the algorithm
for detecting overflow during decoding UTF-8 into code points.  However,
on 32-bit platforms, this change caused it to claim some things overflow
that really don't.  ALl such are overlong malformations, which are
normally forbidden, but not necessarily.  This commit fixes that.

5 years agoAPItest/t/utf8.t: Correct to uppercase in print
Karl Williamson [Wed, 2 Nov 2016 04:13:21 +0000 (22:13 -0600)]
APItest/t/utf8.t: Correct to uppercase in print

This worked so long as we didn't have hex digits A-F.

5 years agomacOS (10.12) deprecated syscall(2).
Jarkko Hietaniemi [Wed, 2 Nov 2016 20:49:52 +0000 (16:49 -0400)]
macOS (10.12) deprecated syscall(2).

5 years agofix taint handling in list assignment
David Mitchell [Wed, 2 Nov 2016 16:05:54 +0000 (16:05 +0000)]
fix taint handling in list assignment

My recent commit v5.25.6-79-gb09ed99 reworked list assignment, and
accidentally broke taint handling at the same time.

The basic idea is that each element is independent; in:

    ($a, $b, ...) = ($tainted, $untainted, ...);

$a should end up tainted, $b should end up untainted, the statement
containing the assign should remain untainted, and if the statement was
already tainted it shouldn't affect the assign.

Surprisingly this is completely untested, which is why I failed to spot it
when I broke it.

Now fixed. In fact in addition I spotted something that had always been
broken, and fixed that too: it was tainting the rest of the statement; in:

    (($a) = ($TAINT. "x")), ($b = $b . "x");

The taint in the list assign to $a was lingering to mess up and taint $b.

Prior to v5.25.6-79-gb09ed99 , pp_assign looked roughly like:

    for (...each lhs elem...) {
        switch (lhs type) {
        case scalar:
            assign a value to lhs;
        case SVt_PVAV:
            for (...each rhs elem...)
                sv = newSV(0);
                sv_setsv(sv, rhs_elem);
                av_store(av, i, sv);
        case SVt_PVHV:

Commit v5.25.6-79-gb09ed99 accidentally removed *all* the TAINT_NOT's.

This commit re-adds the first TAINT_NOT, but doesn't re-add the
per-array/hash TAINT_NOT's, on the grounds that the aggregates are first
emptied, so any elements being assigned to will be fresh and can't have
taint magic attached, so calling mg_set() on them won't set the taint
value to 1 even if PL_tainted is set.

But this commit does add an extra TAINT_NOT *after* the outer loop, which
is what I think is fixing a longstanding bug.

5 years ago[perl #130001] h2xs: avoid infinite loop for enums
Hugo van der Sanden [Fri, 28 Oct 2016 12:27:23 +0000 (13:27 +0100)]
[perl #130001] h2xs: avoid infinite loop for enums

'typedef enum x { ... } x' causes h2xs to enter a substitution loop while
trying to write the typemap file.

5 years agoclarify behavior single quote regexps
Yves Orton [Wed, 2 Nov 2016 09:53:18 +0000 (10:53 +0100)]
clarify behavior single quote regexps

The documentation was ambiguous about what type of interpolation
was disabled in single quote regexps. It is a bit debateable whether
"\n" in a regex is a regexp meta-escapes which happens to match "\n",
or if it is a string escape that needs to be interpolated. Since single
quote regexps should allow regexp meta-escapes (for instance \s), then
it makes more sense to treat \n and \x{..} also as regexp meta-escapes,
which then leaves nothing but variables that /could/ be interpolated.

This effectively officially defines the current behavior as correct,
and will allow us to close a number of tickets because of it. In
particular we can close #21491 as "not a bug", and probably also related

5 years agoUpgrade Net::Ping from version 2.51 to 2.55
Steve Hay [Wed, 2 Nov 2016 08:18:01 +0000 (08:18 +0000)]
Upgrade Net::Ping from version 2.51 to 2.55

(This retains the blead customizations from 01b515d1d7 and 0fc44d0a18.)

5 years agoTreat VSI C the same as DEC/Compaq/HP C.
Craig A. Berry [Wed, 2 Nov 2016 00:06:06 +0000 (19:06 -0500)]
Treat VSI C the same as DEC/Compaq/HP C.

5 years agoUpgrade Unicode::Collate from version 1.14 to 1.17
Steve Hay [Tue, 1 Nov 2016 17:44:52 +0000 (17:44 +0000)]
Upgrade Unicode::Collate from version 1.14 to 1.17

5 years agoUpgrade Test::Simple from version 1.302059 to 1.302062
Steve Hay [Tue, 1 Nov 2016 17:35:01 +0000 (17:35 +0000)]
Upgrade Test::Simple from version 1.302059 to 1.302062

5 years agoUpgrade Term::ANSIColor from version 4.05 to 4.06
Steve Hay [Tue, 1 Nov 2016 17:29:33 +0000 (17:29 +0000)]
Upgrade Term::ANSIColor from version 4.05 to 4.06

5 years agorework perl #129903 - inf recursion from use of empty pattern in regex codeblock
Yves Orton [Mon, 31 Oct 2016 19:22:37 +0000 (20:22 +0100)]
rework perl #129903 - inf recursion from use of empty pattern in regex codeblock

FC didn't like my previous patch for this issue, so here is the
one he likes better. With tests and etc. :-)

The basic problem is that code like this: /(?{ s!!! })/ can trigger
infinite recursion on the C stack (not the normal perl stack) when the
last successful pattern in scope is itself. Since the C stack overflows
this manifests as an untrappable error/segfault, which then kills perl.

We avoid the segfault by simply forbidding the use of the empty pattern
when it would resolve to the currently executing pattern.

I imagine with a bit of effort someone can trigger the original SEGV,
unlike my original fix which forbade use of the empty pattern in a
regex code block. So if someone actually reports such a bug we might
have to revert to the older approach of prohibiting this.

5 years agonew feature @{^CAPTURE} (and %{^CAPTURE} and %{^CAPTURE_ALL})
Yves Orton [Mon, 31 Oct 2016 21:44:31 +0000 (22:44 +0100)]
new feature @{^CAPTURE} (and %{^CAPTURE} and %{^CAPTURE_ALL})

@{^CAPTURE} exposes the capture buffers of the last match
as an array. So $1 is ${^CAPTURE}[0].

%{^CAPTURE} is the equivalent to %+ (ie named captures)

%{^CAPTURE_ALL} is the equivalent to %- (ie all named captures).

5 years agoSkip the subnormals tests in tru64.
Jarkko Hietaniemi [Tue, 1 Nov 2016 00:45:03 +0000 (20:45 -0400)]
Skip the subnormals tests in tru64.

At first I thought these would be ftz/daz problems
(flush-to-zero/denormals-are-zero), compiled with bare cc those seem
to happen with denormals (e.g. DBL_MIN * 0.5), but the "cc -ieee"
which perl is compiled with does make the ftz/daz go away.  Needs
further study.  So make them TODO for now.

5 years ago(perl #129085) avoid memcmp() past the end of a string
Tony Cook [Mon, 29 Aug 2016 05:04:55 +0000 (15:04 +1000)]
(perl #129085) avoid memcmp() past the end of a string

When a match is anchored against the start of a string, the regexp
can be compiled to include a fixed string match against a fixed
offset in the string.

In some cases, where the matched against string included UTF-8 before
the fixed offset, this could result in attempting a memcmp() which
overlaps the end of the string and potentially past the end of the
allocated memory.

5 years ago(perl #128997) avoid reading beyond the end of the line buffer
Tony Cook [Tue, 18 Oct 2016 04:46:48 +0000 (15:46 +1100)]
(perl #128997) avoid reading beyond the end of the line buffer

when there's a short UTF-8 character at the end.

5 years ago(perl #129961) code cleanup for clang -Weverything support
Andy Lester [Mon, 31 Oct 2016 00:35:40 +0000 (11:35 +1100)]
(perl #129961) code cleanup for clang -Weverything support

This patch simplifies two bits of code that I came across while
working on supporting the clang -Weverything flag.

The first, in Perl_validate_proto, removes unnecessary variable
initialization if proto of NULL is passed.

The second, in S_scan_const, rearranges some code and #ifdefs so that
the convert_unicode and real_range_max variables are only declared
if EBCDIC is set.  This lets us no longer have to unnecessarily set
useless variables to make the compiler happy, and it saves us from some
unnecessary checks on "if (convert_unicode)".  One of the comments says
"(Compilers should optimize this out for non-EBCDIC)", but now the
compiler won't even see these unnecessary variables or tests.

5 years agoAdded some discussion of tabs & spaces in the source code
Andy Lester [Sun, 30 Oct 2016 23:46:30 +0000 (10:46 +1100)]
Added some discussion of tabs & spaces in the source code

5 years agofix #129802: sv_grow: remove the overallocation for COW exemption for powers of 2
Yves Orton [Sun, 30 Oct 2016 10:02:57 +0000 (11:02 +0100)]
fix #129802: sv_grow: remove the overallocation for COW exemption for powers of 2

They are just performance bombs waiting to hit the regex engine
and other code. If someone wants this precise level of management
then we should provide an API for them to do so.

Really this just shows the flaw in our current COW implementation.

5 years agofix perl #129802 - overallocate in concat to ensure we can COW
Yves Orton [Sun, 30 Oct 2016 09:56:36 +0000 (10:56 +0100)]
fix perl #129802 - overallocate in concat to ensure we can COW

Otherwise we get degenerate performance in things like the regex
engine under certain cases.

5 years agoXS-APItest/t/utf8.t: Test with longest possible overlong
Karl Williamson [Fri, 28 Oct 2016 14:46:53 +0000 (08:46 -0600)]
XS-APItest/t/utf8.t: Test with longest possible overlong

As part of testing, certain malformations are perturbed to also be
overlong to see that the combination of them is properly handled.  To do
this, the code will take a test case and calculate an overlong that is
longer than it.  However if the test case is as long as the overlong
would be, this can't be done, and is skipped.  This commit now
uses a longer overlong than previously (now the maximum possible) so
that fewer tests have to be skipped.

5 years agoXS-APItest/t/utf8.t: White-space only
Karl Williamson [Fri, 28 Oct 2016 14:44:43 +0000 (08:44 -0600)]
XS-APItest/t/utf8.t: White-space only

5 years agoXS-APItest/t/utf8.t: Fix EBCDIC bug
Karl Williamson [Fri, 28 Oct 2016 14:42:38 +0000 (08:42 -0600)]
XS-APItest/t/utf8.t: Fix EBCDIC bug

This number needs to be adjusted for EBCDIC platforms

5 years agoXS-APItest/t/utf8.t: Move a common expression to $var
Karl Williamson [Fri, 28 Oct 2016 14:36:56 +0000 (08:36 -0600)]
XS-APItest/t/utf8.t: Move a common expression to $var

The maximum byte length of a single code-points UTF-8 representation is
used in a bunch of places.  Calculate it once.

5 years agoXS-APItest/t/utf8.t: Fix wrong test on EBCDIC
Karl Williamson [Fri, 28 Oct 2016 14:31:09 +0000 (08:31 -0600)]
XS-APItest/t/utf8.t: Fix wrong test on EBCDIC

The I8 string doesn't work the same as UTF-8, as it only takes 5 bits
from each continuation byte instead of 6.

5 years agoThe new symbols broke a limit in VMS.
Craig A. Berry [Sat, 29 Oct 2016 02:02:37 +0000 (22:02 -0400)]
The new symbols broke a limit in VMS.

5 years agoUse the new metalevel definitions for fp inf/nan/range
Jarkko Hietaniemi [Thu, 27 Oct 2016 11:46:22 +0000 (07:46 -0400)]
Use the new metalevel definitions for fp inf/nan/range

There are still hacks (in a good sense) of detecting "vax float"
in the cpan/ modules (patches submitted upstream, customized moves done),
but that is fine since the new Config symbols will be available only in
the future.

5 years agoConfigure: add defs summarizing doublekind/longdblkind
Jarkko Hietaniemi [Tue, 25 Oct 2016 02:07:46 +0000 (22:07 -0400)]
Configure: add defs summarizing doublekind/longdblkind

For windows/netware It seems that many of the recent fp definitions
have not been yet copied over there [1] [2], so went mostly by dead
reckoning [3].

[1] Note that many of them are not absolutely necessary for building.
[2] The proper updating involves doing stuff in win32, which I do not have.
[3] As far as I can tell, Windows CE does not really not have long double.

5 years agonetbsd-vax: 2**400 does not fit vax fp
Jarkko Hietaniemi [Thu, 27 Oct 2016 12:03:08 +0000 (08:03 -0400)]
netbsd-vax: 2**400 does not fit vax fp

Note also that the computation needs to be runtime, not compiletime.

5 years agonetbsd-vax: more skippage due to no inf/nan
Jarkko Hietaniemi [Mon, 24 Oct 2016 22:31:57 +0000 (18:31 -0400)]
netbsd-vax: more skippage due to no inf/nan

5 years agoArchive-Tar: customized.dat
Jarkko Hietaniemi [Sat, 29 Oct 2016 01:34:42 +0000 (21:34 -0400)]
Archive-Tar: customized.dat

5 years agoArchive-Tar: Maintainers customization
Jarkko Hietaniemi [Fri, 28 Oct 2016 23:44:27 +0000 (19:44 -0400)]
Archive-Tar: Maintainers customization

5 years agoArchive-Tar: customized version bump
Jarkko Hietaniemi [Fri, 28 Oct 2016 23:42:10 +0000 (19:42 -0400)]
Archive-Tar: customized version bump

5 years agoArchive-Tar: detect if external tar fails
Jarkko Hietaniemi [Fri, 28 Oct 2016 23:38:46 +0000 (19:38 -0400)]
Archive-Tar: detect if external tar fails

5 years agoArchive-Tar: in VMS gnutar requires filenames in native format
Craig A. Berry [Fri, 28 Oct 2016 22:58:03 +0000 (18:58 -0400)]
Archive-Tar: in VMS gnutar requires filenames in native format

5 years agoArchive-Tar: RT #118476: scan for the right tar more robustly
Jarkko Hietaniemi [Fri, 28 Oct 2016 12:32:23 +0000 (08:32 -0400)]
Archive-Tar: RT #118476: scan for the right tar more robustly

(1) Do not assume it is called 'tar'.
(2) Do not assume it has the compression features.
(3) Do not assume there is only one 'tar'.
(4) Do not assume the first one found has the compression features.
(5) Add the platform executable suffix to the name.

5 years agoFix test to be EBCDIC friendly
Karl Williamson [Fri, 28 Oct 2016 00:58:18 +0000 (18:58 -0600)]
Fix test to be EBCDIC friendly

Commit da42332b10691ba7af7550035ffc7f46c87e4e66 introduced a new test.
But on EBCDIC platforms that test doesn't do what it is intended.  It
uses \xE4, assuming it will have a different representation when encoded
in UTF-8, and it is trying to test that having a different
representation still works.  But \xE4 on EBCDIC is a UTF-8 invariant

perlhacktips gives some suggestions on writing tests that work on both
character sets.  In this case \xB6, that is mentioned there, works, as
it is UTF-8 variant on both character sets, and all EBCDIC code pages that
have ever been supported by Perl.

5 years agoregcomp.c: document the trie common prefix logic
Yves Orton [Thu, 27 Oct 2016 20:35:21 +0000 (22:35 +0200)]
regcomp.c: document the trie common prefix logic

I wrote this code some time ago. It is somewhat of
a state machine with some interesting implicit
assumptions which took me a while to remember. While
I do it seems reasonable to document them so the next
guy (maybe/probably me) doesn't have to think so hard.

5 years agoregcomp.c: avoid some unnecessary work when it wont be used
Yves Orton [Thu, 27 Oct 2016 20:34:49 +0000 (22:34 +0200)]
regcomp.c: avoid some unnecessary work when it wont be used

5 years agoregcomp.c: in trie common prefix logic rename idx to first_ofs
Yves Orton [Thu, 27 Oct 2016 20:32:09 +0000 (22:32 +0200)]
regcomp.c: in trie common prefix logic rename idx to first_ofs

Using 'idx' and 'ofs' interchangably is confusing, calling
this first_ofs makes it more obvious what it is used for.

5 years agoregcomp.c: whitespace only change, break up dense code/long line
Yves Orton [Thu, 27 Oct 2016 20:28:55 +0000 (22:28 +0200)]
regcomp.c: whitespace only change, break up dense code/long line

5 years agoregcomp.c: add a comment about the trie logic
Yves Orton [Thu, 27 Oct 2016 20:28:30 +0000 (22:28 +0200)]
regcomp.c: add a comment about the trie logic

5 years agoregcomp.c: refactor TRIE bitmap logic to a macro
Yves Orton [Thu, 27 Oct 2016 20:26:39 +0000 (22:26 +0200)]
regcomp.c: refactor TRIE bitmap logic to a macro

In four places we use the same logic, so refactor
it to one macro called from four places and avoid
any future oversights missing one.

5 years agooptimise gv.c a bit (we could do better)
Yves Orton [Thu, 27 Oct 2016 18:58:37 +0000 (20:58 +0200)]
optimise gv.c a bit (we could do better)

We save a few ops for package vars starting with 'E'
by checking the second char as well. We could
probably be much smarter with this switch, but we
would have to generate it, which involves its own

5 years agomust check all the EXPORT vars in two places!
Yves Orton [Thu, 27 Oct 2016 13:36:27 +0000 (15:36 +0200)]
must check all the EXPORT vars in two places!

(Silence lots of used once warnings we used to not generate)

5 years agoregcomp.c: fix perl #129950 - fix firstchar bitmap under utf8 with prefix optimisation
Yves Orton [Thu, 27 Oct 2016 11:52:24 +0000 (13:52 +0200)]
regcomp.c: fix perl #129950 - fix firstchar bitmap under utf8 with prefix optimisation

The trie code contains a number of sub optimisations, one of which
extracts common prefixes from alternations, and another which isa
bitmap of the possible matching first chars.

The bitmap needs to contain the possible first octets of the string
which the trie can match, and for codepoints which might have a different
first octet under utf8 or non-utf8 need to register BOTH codepoints.

So for instance in the pattern (?:a|a\x{E4}) we should restructure this
as a(|\x{E4), and the bitmap for the trie should contain both \x{E4} AND
\x{C3} as \x{C3} is the first byte of \x{EF} expressed as utf8.

5 years agoCarp/t/arg_string.t: fixup to previous fixup
David Mitchell [Thu, 27 Oct 2016 08:29:33 +0000 (09:29 +0100)]
Carp/t/arg_string.t: fixup to previous fixup

I added alternates to a regex for matching a f/p number, but forgot
to put parentheses around them. So it was being ridiculously over-liberal

5 years agoCarp/t/arg_string.t: be liberal in f/p formats
David Mitchell [Thu, 27 Oct 2016 08:09:24 +0000 (09:09 +0100)]
Carp/t/arg_string.t: be liberal in f/p formats

[perl #129954] dist/Carp/t/arg_string.t: Test fails

This test script checks that args are displayed sensibly in longmess()
output, but floating-point numbers can be displayed in various formats
depending on platform, so make the regex more forgiving.

Also add a comment to the top of the script explaining its purpose.

5 years agolocale.c: Silence compiler warning
Karl Williamson [Wed, 26 Oct 2016 18:20:29 +0000 (12:20 -0600)]
locale.c: Silence compiler warning

from some compilers

5 years agolib/locale.t: Skip testing known incompatible locales
Karl Williamson [Mon, 24 Oct 2016 04:03:08 +0000 (22:03 -0600)]
lib/locale.t: Skip testing known incompatible locales

Some locales are incompatible with Perl.  The only multi-byte locales
accepted are UTF-8 ones.  ISO 646 locales can have things like a '|' be
a \w, which will create havoc with regular expressions.  This commit
causes locale.t to not test such locales, and to note which ones are
skipped, and why.

If we were to do the tests anyway, it could create segfaults.  For
example locales with state can have their states screwed up by Perl,
which knows nothing about that.  One could argue that the locale should
be immune from bad state, and not segfault, but that is not under Perl's
control, and we will get blamed initially, anyway, when a segfault
happens, so don't test them.

The multi-byte locales are more incompatible with Perl than the 7-bit
locales that aren't ASCII compatible.  So it could be argued that those
should be tested, but I don't want to undertake the work to separate out
the two causes from each other.  The ISO 646 locales are essentially
obsolete, and hence unlikely to be encountered in practice, so there
would be little pay off for doing that work.

5 years agolib/locale.t: Add skip(), fail() functions
Karl Williamson [Mon, 24 Oct 2016 04:02:13 +0000 (22:02 -0600)]
lib/locale.t: Add skip(), fail() functions

5 years agot/ Make find_locales accept string input
Karl Williamson [Tue, 25 Oct 2016 17:10:15 +0000 (11:10 -0600)]
t/ Make find_locales accept string input

Prior to this commit, in order to work properly, find_locales required
the C enum number for a locale category.  This relaxes that to allow the
name of the category as well.  Thus it will work seamlessly when a given
category isn't on the platform.  Unless wrapped in an eval, or checked
before using, it was a potential bug to call this function at all.  This
is because it didn't properly handle a string, and trying to find the
locale number might fail on a given platform.

5 years agot/ Add 'use strict'
Karl Williamson [Tue, 25 Oct 2016 16:49:01 +0000 (10:49 -0600)]
t/ Add 'use strict'

5 years agot/ Move some code earlier in the file
Karl Williamson [Mon, 24 Oct 2016 23:45:45 +0000 (17:45 -0600)]
t/ Move some code earlier in the file

This is a simple move, with no changes.  This will make things flow more
logically after a future commit.

5 years agot/ Complement sense of optional parameter
Karl Williamson [Mon, 24 Oct 2016 03:27:33 +0000 (21:27 -0600)]
t/ Complement sense of optional parameter

Most often we want to only look at locales that are compatible with
Perl.  Make that the default for the optional parameter.

5 years agot/ Fix not catching incompatible locales
Karl Williamson [Mon, 24 Oct 2016 03:18:20 +0000 (21:18 -0600)]
t/ Fix not catching incompatible locales

This is looking for a warning generated by the core when a setlocale is
done to one that it deems incompatible with Perl.  However, the warning
isn't generated unless locales are being used, as Perl mostly ignores
locales, so even if the background one is incompatible, it doesn't

5 years agoutf8.c: Silence unused parameter compiler warning
Karl Williamson [Wed, 26 Oct 2016 17:02:46 +0000 (11:02 -0600)]
utf8.c: Silence unused parameter compiler warning

5 years agolocale.c: Use meaningful initialization msg
Karl Williamson [Tue, 25 Oct 2016 17:32:38 +0000 (11:32 -0600)]
locale.c: Use meaningful initialization msg

This string is initialized to keep it out of BSS.  It is supposed to be
overwritten by the first call to it.  Use a message that informs the
user if there is a bug and the overwriting doesn't work properly.  This
commit is the result of some freebsd releases that don't properly
implement strlcpy.

5 years agolocale.c: Output warning if debugging and 'no warnings'
Karl Williamson [Wed, 26 Oct 2016 18:09:36 +0000 (12:09 -0600)]
locale.c: Output warning if debugging and 'no warnings'

This message is helpful if called with -DL, even if warnings are off

5 years agoPATCH: [perl #129964] Fix spelling of "referent" in five places.
Andy Lester [Wed, 26 Oct 2016 17:45:12 +0000 (11:45 -0600)]
PATCH: [perl #129964] Fix spelling of "referent" in five places.

5 years agoAdd branch predictors for DEBUG statements
Karl Williamson [Tue, 25 Oct 2016 16:47:23 +0000 (10:47 -0600)]
Add branch predictors for DEBUG statements

It is unlikely that any given debug flag will be set in any given run,
even under DEBUGGING builds.

5 years agoperl.h: White-space only
Karl Williamson [Tue, 25 Oct 2016 16:46:42 +0000 (10:46 -0600)]
perl.h: White-space only

5 years agopod/perllocale: Add caution about incompatible locales
Karl Williamson [Mon, 24 Oct 2016 04:12:12 +0000 (22:12 -0600)]
pod/perllocale: Add caution about incompatible locales

Some locales aren't compatible with Perl.  Note the potential bad
consequences of using them.

5 years agoPATCH: [perl #129277] perlrecharclass: Clarify q// handling
Karl Williamson [Fri, 16 Sep 2016 03:52:44 +0000 (21:52 -0600)]
PATCH: [perl #129277] perlrecharclass: Clarify q// handling


5 years ago-DsR : display unTEMPed temps with "t" not "T"
David Mitchell [Wed, 26 Oct 2016 16:48:44 +0000 (17:48 +0100)]
-DsR : display unTEMPed temps with "t" not "T"

with the -R debugging flag, SVs are displayed with a reference count
(if > 1), and with a T if the SV is referenced from the temps stack.

    $ perl -DstR -e'@a = map $_,"a", "b"'
    *  <T>PV("a"\0)  <T>PV("b"\0)

This commit enhances this to use both "t" and "T":

t:  SV is referenced from PL_tmps_stack, but SvTEMP() not set
T:  SV is referenced from PL_tmps_stack, and in addition, SvTEMP() is set

(The other permutation,  SvTEMP() set but not in PL_tmps_stack, is

This commit changes

5 years agospeed up AV and HV clearing/undeffing
David Mitchell [Wed, 26 Oct 2016 14:59:01 +0000 (15:59 +0100)]
speed up AV and HV clearing/undeffing

av_clear(), av_undef(), hv_clear(), hv_undef() and av_make()
all have similar guards along the lines of:

    ... do stuff ...;

to stop the AV or HV leaking or being prematurely freed while processing
its elements (e.g. FETCH() or DESTROY() might do something to it).

Introducing an extra scope and calling leave_scope() is expensive.
Instead, use a trick I introduced in my recent pp_assign() recoding:
add the AV/HV to the temps stack, then at the end of the function,
just PL_tmpx_ix-- if nothing else has been pushed on the tmps stack in the
meantime, or replace the tmps stack slot with &PL_sv_undef otherwise
(which doesn't care how many times its ref count gets decremented).

This is efficient, and doesn't artificially extend the life of the SV
like sv_2mortal() would.

This commit makes this code around 5% faster:

    my @a;
    for my $i (1..3_000_000) {
        @a = (1,2,3);
        @a = ();

and this code around 3% faster:

    my %h;
    for my $i (1..3_000_000) {
        %h = qw(a 1 b 2);
        %h = ();

5 years agot/op/read.t: test with zero-length buffer
David Mitchell [Wed, 26 Oct 2016 14:30:19 +0000 (15:30 +0100)]
t/op/read.t: test with zero-length buffer

This test file had:

    my (@values, @buffers) = ('', '');

which isn't doing what the author probably intended. Instead it's testing
twice for the same zero-length value, and not testing at all for a zero
length buffer.

5 years agoNet::Ping: avoid stderr noise in tests
David Mitchell [Wed, 26 Oct 2016 10:58:18 +0000 (11:58 +0100)]
Net::Ping: avoid stderr noise in tests

Send status info to STDOUT rather than STDERR.

5 years agoAdd perldelta entries for
David Mitchell [Wed, 26 Oct 2016 08:51:57 +0000 (09:51 +0100)]
Add perldelta entries for


5 years agotiearray.t - more fine-grained DESTROY counts
David Mitchell [Fri, 21 Oct 2016 13:42:18 +0000 (14:42 +0100)]
tiearray.t - more fine-grained DESTROY counts

It currently tests once near the end of the script that DESTROY has been
called 3 times. Instead test after each individual scope exit
where we expect DESTROY to be called

5 years agoreindent tiearray.t
David Mitchell [Fri, 21 Oct 2016 13:33:54 +0000 (14:33 +0100)]
reindent tiearray.t

The indents in this test file were a mixture of 1,2,4, and most
importantly, 0 - which made it very hard to visually see the scope
of lexical vars.

Reindent to a standard 4-char indent.

Also delete trailing whitespace from lines.

Whitespace-only changes

5 years agoHandle list assignment in list context better
David Mitchell [Wed, 19 Oct 2016 08:41:53 +0000 (09:41 +0100)]
Handle list assignment in list context better

In something like

    sub inc { $_++ for @_ }
    inc(($a,$b,$c,$d) = (10,20))

The four scalar vars will end up with the values (11,21,1,1), with
the list assign op returning 4 lval scalars to be passed to inc.

However, when the LHS includes a hash or array, any 'empty' scalars weren't
being returned. This:

    inc(($a,$b,@array,$c) = (10))

used to leave $b and $c undefined. With this commit, they are both set to

This change broke some tests in hashassign.t, which were added in 2012
by commit v5.17.6-295-gb1babc5. Half these tests were commented as

    # this arguable, but this is how it works

and they all tested that a scalar following a hash wasn't returned in
lvalue context; i.e. they all assumed that

    inc((%h, $x) = (...))

*wouldn't* increment $x. This commit causes $x to be incremented, and
I've changed the failing tests.

It also adds an EXTEND(SP,1) in the scalar case; otherwise with
scalar( () = @a) and empty @a, it could in theory push the '0' return
value off the end of the stack.

5 years agoBetter optimise array and hash assignment
David Mitchell [Wed, 5 Oct 2016 09:10:56 +0000 (10:10 +0100)]
Better optimise array and hash assignment

[perl #127999] Slowdown in split + list assign

Re-implement the code that handles e.g.

    (..., @a) = (...);
    (..., %h) = (...);

to make it a lot faster - more than reversing a performance regression
introduced in 5.24.0 - and fix some bugs. In particular, it now
special-cases an empty RHS, which just clears the aggregate, e.g.

    (..., @a) = ()

Getting list assignment correct is quite tricky, due to the possibility of
premature frees, like @a = ($a[0]), and magic/tied values on the LHS or
RHS being triggered too soon/late, which might have side-effects.  This
often requires making a copy of each RHS element (and indeed for assigning
to an array or hash, the values need copying anyway). But copying too soon
can result in leaked SVs if magic (such as calling FETCH()) dies. This
usually involves mortalising all the copies, which slows things down.

Further, a bug fix in 5.24.0 added the SV_NOSTEAL flag when copying SVs.
This meant in something like @a = (split(...))[0,0], where the two SvTEMPs
on the RHS are the same, the first copy is no longer allowed to steal the
PVX buffer, which would have made the second SV undef. But this means that
PVX buffers are now always copied, which resulted in the slowdown seen in
RT #127999.

Amongst the general rewriting and optimising, this commit does the
following specific things to boost performance (and fix RT #127999).

* If the SVs on the RHS are non-magical SvTEMPs with a ref count of 1, then
the SV isn't copied; instead it is stored directly in the array/hash. This
more than undoes the cost of SV_NOSTEAL.

* The tmps stack is now used as a temporary refcounted version of the
argument stack frame, meaning that args placed there will be freed on
croak.  In something like @a = (....), each RHS element is copied, with
the copy placed on the temps stack. Then @a is cleared. Then the elements
on the tmps stack are stored in the array, and removed from the temps
stack (with the ownership of 1 reference count transferring from the temps
stack to the array). Normally by the time pp_aassign() returns, there is
nothing left on the tmps stack and tmps_free() isn't called - this is the
novel element that distinguishes this from the normal use of mortalising.

* For hash assignment, the keys and values are processed in separate
loops, with keys not normally being copied.

* The ENTER/SAVEFREESV(ary/hash)/LEAVE has been removed, and the array or
hash kept temporarily alive by using the temps stack along with all the
other copied SVs.

* The main 'for each LHS element' loop has been split into two loops: the
second one is run when there no more RHS elements to consume. The second
loop is much simpler, and makes things like @a = () much faster.

Here are the average expr::aassign:: benchmarks for selected perls
(raw numbers - lower is better)

          5.6.1    5.22.0    5.24.0    5.25.5      this
         ------    ------    ------    ------    ------
    Ir   1355.9    1497.8    1387.0    1382.0    1146.6
    Dr    417.2     454.2     410.1     411.1     335.2
    Dw    260.6     270.8     249.0     246.8     194.5
  COND    193.5     223.2     212.0     207.7     174.4
   IND     25.3      17.6      10.8      10.8      10.0

COND_m      4.1       3.1       3.1       3.7       2.8
 IND_m      8.9       6.1       5.5       5.5       5.5

And this code:

    my @a;
    for my $i (1..10_000_000) {
        @a = (1,2,3);
        #@a = ();

with the empty assign is 33% faster than blead, and without is 12% faster
than blead.

5 years fix --sort and --compact options
David Mitchell [Mon, 10 Oct 2016 16:10:16 +0000 (17:10 +0100)] fix --sort and --compact options

They were using the full pathname of the perl executable to index into
a hash indexed by label.

5 years agoOpenBSD 6 still does not support returning pid, gid or uid with SA_SIGINFO
Andrew Fresh [Tue, 25 Oct 2016 04:14:32 +0000 (15:14 +1100)]
OpenBSD 6 still does not support returning pid, gid or uid with SA_SIGINFO

5 years agomake do "a\0b" fail silently instead of throwing (RT #129928)
Lukas Mai [Thu, 20 Oct 2016 22:10:15 +0000 (00:10 +0200)]
make do "a\0b" fail silently instead of throwing (RT #129928)

Also remove the label/goto from CLEAR_ERRSV because labels have function
scope, which means you couldn't use CLEAR_ERRSV more than once per
function without getting a "duplicate label" error.