This is a live mirror of the Perl 5 development currently hosted at
4 years agoclean up leave_scope()
David Mitchell [Fri, 12 Aug 2016 08:59:42 +0000 (09:59 +0100)]
clean up leave_scope()

Rather than having a whole bunch of casting macros like

    #define ARG0_SV  MUTABLE_SV(arg0.any_ptr)

just add extra pointer types to the ANY union and directly do



Also, rename arg0, arg1, arg2 to a0, a1, a2 and reverse their order;
previously if 3 args A,B,C were pushed onto the savestack, they were
popped as a0=C, a1=B, a2=A; now do it as a0=A, a1=B, a2=C. The previous
(rather odd) order was an artifact of the old way leave_scope() used to
pop its args.

There should be no functional changes.

4 years agoFix on top of 75326c48.
Jarkko Hietaniemi [Thu, 11 Aug 2016 23:53:30 +0000 (19:53 -0400)]
Fix on top of 75326c48.

Worked partly accidentally, and as a bonus caused asan
off-stack-variable read violations.

4 years agoThe new tests are valid only for IEEE 754 64-bit doubles.
Jarkko Hietaniemi [Thu, 11 Aug 2016 22:19:00 +0000 (18:19 -0400)]
The new tests are valid only for IEEE 754 64-bit doubles.

The tests do not fail (I wish), they would just need to be different
for example for the 80-bt x86 long doubles, for example, which scale

    perl -wle 'printf "%a\n", -1.5'  # IEEE 754 64-bit
    perl -wle 'printf "%a\n", -1.5'  # x86 80-bit

In any system:

    perl -wle 'print -0x1.8p+0'
    perl -wle 'print -0xcp-3'

See earlier in this file a long if-elsif chain when testing
the @hexfloat because of this very same reason.

4 years agoembed.fnc: sv_copypv is still API
Father Chrysostomos [Fri, 12 Aug 2016 01:20:56 +0000 (18:20 -0700)]
embed.fnc: sv_copypv is still API

This commit removed the A flag, causing the documentation to move from
perlapi to perlintern:

commit 4bac9ae47b5ad7845a24e26b0e95609805de688a
Author: Chip Salzenberg <>
Date:   Fri Jun 22 15:18:18 2012 -0700

    Magic flags harmonization.

But it is still API, even though it is implemented as a macro (and a mathomly function).

(This is one reason why checking in generated files can be helpful.
It avoids mistakes like this by making them more visible.)

4 years agomathoms.c: Restore previous behaviour of sv_copypv
Father Chrysostomos [Fri, 12 Aug 2016 01:12:40 +0000 (18:12 -0700)]
mathoms.c: Restore previous behaviour of sv_copypv

This commit made it a simple wrapper around the new sv_copypv_flags:

commit 4bac9ae47b5ad7845a24e26b0e95609805de688a
Author: Chip Salzenberg <>
Date:   Fri Jun 22 15:18:18 2012 -0700

    Magic flags harmonization.

But in so doing it changed the behaviour of the functional version
(Perl_sv_copypv), while preserving the existing behaviour in the new
macro (sv_copypv).  The latter invokes get-magic, while the former
used to but stopped doing so.

4 years agoperlinterp.pod: typoes
Father Chrysostomos [Thu, 11 Aug 2016 06:10:02 +0000 (23:10 -0700)]
perlinterp.pod: typoes

4 years agoAdd epigraphs for 5.22.3-RC3 and 5.24.1-RC3
Steve Hay [Fri, 12 Aug 2016 00:09:28 +0000 (01:09 +0100)]
Add epigraphs for 5.22.3-RC3 and 5.24.1-RC3

4 years ago5.22.3-RC3 and 5.24.1-RC3 today
Steve Hay [Thu, 11 Aug 2016 21:19:34 +0000 (22:19 +0100)]
5.22.3-RC3 and 5.24.1-RC3 today

4 years agoAdd probe for gai_strerror
H.Merijn Brand [Thu, 11 Aug 2016 16:35:47 +0000 (18:35 +0200)]
Add probe for gai_strerror

4 years ago[ #128893]: printf %a botches 0 flag for negative values
Jarkko Hietaniemi [Thu, 11 Aug 2016 13:18:27 +0000 (09:18 -0400)]
[ #128893]: printf %a botches 0 flag for negative values

4 years ago[ #128890]: printf %a rounds incorrectly
Jarkko Hietaniemi [Thu, 11 Aug 2016 13:15:21 +0000 (09:15 -0400)]
[ #128890]: printf %a rounds incorrectly

4 years ago[ #128889]: printf %a mishandles negative pseudo-precision
Jarkko Hietaniemi [Thu, 11 Aug 2016 13:12:04 +0000 (09:12 -0400)]
[ #128889]: printf %a mishandles negative pseudo-precision

(the fix for [ #128888] fixed also this one)

4 years ago[ #128888]: printf %a mishandles zero precision
Jarkko Hietaniemi [Wed, 10 Aug 2016 23:06:03 +0000 (19:06 -0400)]
[ #128888]: printf %a mishandles zero precision

4 years agoComment fix for b6d9b423
Jarkko Hietaniemi [Wed, 10 Aug 2016 23:47:19 +0000 (19:47 -0400)]
Comment fix for b6d9b423

4 years agoAdd reference for b6d9b423
Jarkko Hietaniemi [Wed, 10 Aug 2016 23:13:36 +0000 (19:13 -0400)]
Add reference for b6d9b423

4 years agoleave_scope(): pop args in each branch
David Mitchell [Thu, 11 Aug 2016 11:07:07 +0000 (12:07 +0100)]
leave_scope(): pop args in each branch

About 4 years ago I heavily refactored Perl_leave_scope(). One of the
things I did was to pop the args for each action once at the top of the
loop. This involved a number of nested condtionals.

This commit makes each action (i.e. each switch branch) responsible
for copying its own args off the save stack, while the top of loop is
still responsible for decrementing PL_savestack_ix.

The gain is marginal, but it makes the code cleaner and the object code

4 years agoCarp: say what cluck() does
David Mitchell [Thu, 11 Aug 2016 08:37:39 +0000 (09:37 +0100)]
Carp: say what cluck() does

Nowhere did it actually describe what cluck does.

4 years agoUpdate Config::Perl::V to 0.27
H.Merijn Brand [Thu, 11 Aug 2016 10:57:57 +0000 (12:57 +0200)]
Update Config::Perl::V to 0.27

4 years agoUpgrade Encode from version 2.85 to 2.86
Steve Hay [Thu, 11 Aug 2016 07:21:52 +0000 (08:21 +0100)]
Upgrade Encode from version 2.85 to 2.86

This incorporates all current blead customizations.

4 years agoPATCH: [perl #128867] Locale failures on FREE BSD
Karl Williamson [Wed, 10 Aug 2016 21:20:39 +0000 (15:20 -0600)]
PATCH: [perl #128867] Locale failures on FREE BSD

The main failure appears to be a bug in freebsd.  Jim Keenan and I have
created a stand-alone C program, not involving Perl, that reproduces it,
which I will attach to the ticket.  I have searched their bug db and not
found this reported, so will create a ticket against them.

Several of the failures are bugs in some of the locale definitions for
freebsd, like not all lowercase letters also being alphas.  I will
report these as well, and adjust the allowable failure percentage for
this platform, if necessary, to get these to not fail the test at large.

The bug is that newlocale() and/or uselocale() are not working properly.
These are from POSIX 2008, and perl has not used them previously.
I sort of expected some platforms to have not implemented them properly;
this is the first one we've encountered that does so.

This changes the hints file so that it appears that uselocale() is not
on the system.

4 years agopp_sort.c: Missing cast
Father Chrysostomos [Wed, 10 Aug 2016 20:00:51 +0000 (13:00 -0700)]
pp_sort.c: Missing cast

This is a compilation error under C++.

4 years agot/uni/parser.t: Fix failing test on VMS
Karl Williamson [Tue, 9 Aug 2016 19:35:41 +0000 (13:35 -0600)]
t/uni/parser.t: Fix failing test on VMS

Commit 2aa61ac397079a33eb3c36c2e7c1f41be224c657 caused this failure.
Simply turn off warnings, though this won't work once the deprecation is
made fatal.

Spotted by Craig Berry.

4 years agoAdd Sergey Aleynikov to AUTHORS
Karl Williamson [Mon, 8 Aug 2016 23:28:30 +0000 (17:28 -0600)]
Add Sergey Aleynikov to AUTHORS

4 years agolib/locale_threads.t: Add new test file
Karl Williamson [Mon, 8 Aug 2016 23:22:54 +0000 (17:22 -0600)]
lib/locale_threads.t: Add new test file

This file tests locale and thread interactions.  At the moment, it has
just one test, adapted from [perl #127708].  The adaptations include
placing it under t/, and using my knowledge of the underlying bug
cause to stress it more than the original by Sergey Aleynikov.
He says it fails nearly 50% of the time on an unpatched perl.

4 years agoMove some global destruction to where it belongs
Karl Williamson [Wed, 10 Aug 2016 18:02:38 +0000 (12:02 -0600)]
Move some global destruction to where it belongs

Out of ignorance, I put this locale global destruction in the per-thread
destruction code, leading to segfaults on at least Darwin.

4 years agoAdd some error checking/debugging for locale
Karl Williamson [Wed, 10 Aug 2016 18:08:51 +0000 (12:08 -0600)]
Add some error checking/debugging for locale

We are starting to use libc functions for locale that have never been
used before.  I previously hadn't bothered to check error returns on
things that "shouldn't" fail.  But given that there may be bugs in
various vendors' implementations or documentation of these, and/or my
misreading of how to use them, it is warranted to actually do the

This also adds a couple of debug statements to lib/locale.t that I
wished were already there.

4 years agoNote the provenance of the Encode customizations
Steve Hay [Wed, 10 Aug 2016 16:56:40 +0000 (17:56 +0100)]
Note the provenance of the Encode customizations

(and request syncing in

4 years agoUpgrade File-Fetch from version 0.48_01 to 0.50
Steve Hay [Wed, 10 Aug 2016 16:30:48 +0000 (17:30 +0100)]
Upgrade File-Fetch from version 0.48_01 to 0.50

4 years agoin-place sort preserved element lvalue identity
David Mitchell [Wed, 10 Aug 2016 15:19:55 +0000 (16:19 +0100)]
in-place sort preserved element lvalue identity

RT #128340

The in-place sorting optimisation @a = sort @a, was preserving the
elements of @a rather than (logically) making copies. So make a copy
of any element whose refcount is greater than 1. This may not be the
perfect condition, but keeps performance for the common cases.

Note that several of the tests in t/op/sort.t actually relied on this
behaviour to test whether the sort was being in-placed, so I've added
tests for in-placing to t/perf/opcount.t instead.

See the previous commit for a general discussion of performance;
to the A, B, C in that commit message, here's a fourth column added:
D is like C but with this commit added:

                     A       B       C       D
                ------  ------  ------  ------
            Ir  5238.0  2324.0  2772.0  2801.0
            Dr  1464.0   649.0   765.0   765.0
            Dw   919.0   298.0   370.0   380.0
          COND   782.0   320.0   405.0   405.0
           IND    25.0    25.0    26.0    26.0

        COND_m    14.9    13.0    17.0    17.1
         IND_m     8.0     5.0     5.0     5.0

so it has little effect on performance.

4 years agoPartially pessimise in-place sorting
David Mitchell [Wed, 10 Aug 2016 14:12:56 +0000 (15:12 +0100)]
Partially pessimise in-place sorting

There's currently an optimisation that converts at compile-time

    @a = sort { .... } @a

into (approximately)

    sort { ... } \@a

Then at run time, rather than passing an svp pointer to the appropriate
sort routine which points to a list of SV*'s on the stack, pp_sort()
passes a pointer to @a's AvARRAY. This allows the array to be sorted
in-place, which is more efficient.

However, it has some issues. First, the @a visible to the sort routine
will be varying, whereas logically it should still hold the original list
of values until after the '@a = ...' assignment.

Secondly, the mergesort algorithm cureently used internally, when in
mid-sort, temporarily stores pointers in the array which aren't pointers
to SVs - this means that if @a elements are accessed mid-sort, it can

The solution to both these problems is for pp_sort() to push the elements
of @a onto the stack at the beginning, sort the stack (like normal sorts
do), then copy back to @a at the end. This is less efficient than before,
but is still a lot more efficient than executing separate padav and
aassign ops.

Here are benchmark results in raw instruction counts etc (lower is better)
for the sort line in this code block:

    my (@a, @b);
    @a = reverse 1..10;
    @b = sort { $a <=> $b } @a;

A is for a non-in-place sort, i.e. @b = sort ... @a;
B and C are for an inline sort, i.e. as above, but  @a = sort ... @a;
where B is blead before this commit and C is this commit.

                 A       B       C
            ------  ------  ------
        Ir  5238.0  2324.0  2772.0
        Dr  1464.0   649.0   765.0
        Dw   919.0   298.0   370.0
      COND   782.0   320.0   405.0
       IND    25.0    25.0    26.0

    COND_m    14.9    13.0    17.0
     IND_m     8.0     5.0     5.0

As can be seen, this partial pessimisation slows down in-place sorting by
round 20%, but overall in-place is still nearly twice the speed as without
the optimisation.

These are the figures for a plain numeric sort (which is optimised to use
a C comparison function); for other types of sort, the cost of the
comparator dominates, and so the slowdown is much less marked.

4 years agoAdd missing CUSTOMIZED entry for
Steve Hay [Wed, 10 Aug 2016 13:13:26 +0000 (14:13 +0100)]
Add missing CUSTOMIZED entry for

and update customized.dat

4 years agohexfp: IEEE 754 subnormals printf %a
Jarkko Hietaniemi [Sun, 7 Aug 2016 23:20:37 +0000 (19:20 -0400)]
hexfp: IEEE 754 subnormals printf %a

4 years agoExclude a new Pod-Perldoc test script for now, since it's failing in core
Steve Hay [Wed, 10 Aug 2016 12:54:26 +0000 (13:54 +0100)]
Exclude a new Pod-Perldoc test script for now, since it's failing in core

Failures on Win32/MSVC++ when dropped into core are:

not ok 3 - got expected output in STDOUT
#   Failed test 'got expected output in STDOUT'
#   at t/02_module_pod_output.t line 40.
#                   undef
#     doesn't match '(?^:Look up Perl documentation)'

not ok 7 - got expected output in STDERR
#   Failed test 'got expected output in STDERR'
#   at t/02_module_pod_output.t line 73.
#                   ''perl' is not recognized as an internal or external command
# operable program or batch file.
# '
#     doesn't match '(?^:No documentation)'

4 years agoUpgrade Pod-Perldoc from vesion 3.25_03 to 3.27
Steve Hay [Wed, 10 Aug 2016 12:24:22 +0000 (13:24 +0100)]
Upgrade Pod-Perldoc from vesion 3.25_03 to 3.27

4 years agoSync CPAN Locale::Maketext 1.28 with blead
Steve Hay [Wed, 10 Aug 2016 12:10:26 +0000 (13:10 +0100)]
Sync CPAN Locale::Maketext 1.28 with blead

4 years agodump.c: dump physical, not logical, AVs
David Mitchell [Wed, 10 Aug 2016 08:30:55 +0000 (09:30 +0100)]
dump.c: dump physical, not logical, AVs

Perl_do_sv_dump() (as used by Devel::Peek) dumped a logical AV - i.e.
if it was tied, it called tie methods to get its size and to get its

Instead, dump the physical fields in the AV - e.g. a tied AV will likely
have a FILL of -1 and no elements.

4 years agoUpgrade Encode from version 2.84 to 2.85
Steve Hay [Tue, 9 Aug 2016 16:55:29 +0000 (17:55 +0100)]
Upgrade Encode from version 2.84 to 2.85

This retains the customizations to Byte/Makefile.PL, and
various test scripts that have not yet been assimilated.

4 years agoUpgrade Digest-SHA from version 5.95 to 5.96
Steve Hay [Tue, 9 Aug 2016 16:36:33 +0000 (17:36 +0100)]
Upgrade Digest-SHA from version 5.95 to 5.96

4 years agoAdd Richard Levitte to AUTHORS.
Craig A. Berry [Tue, 9 Aug 2016 15:48:31 +0000 (10:48 -0500)]
Add Richard Levitte to AUTHORS.

4 years agoFile::Spec::VMS->canonpath() incorrect with ODS-5 style directory specs.
Richard Levitte [Tue, 9 Aug 2016 15:22:56 +0000 (10:22 -0500)]
File::Spec::VMS->canonpath() incorrect with ODS-5 style directory specs.

I've found a bug in File::Spec::VMS->canonpath(), when a dash
component in a directory spec is preceded by a name containing an
escaped period.

My examples show quite clearly where things go wrong:

    $ perl -e "use File::Spec::Functions; print canonpath('foo:[bar.coo.kie.--]')"


    $ perl -e "use File::Spec::Functions; print canonpath('foo:[bar^.coo.kie.--]')"


    $ perl -e "use File::Spec::Functions; print canonpath('foo:[bar.coo^.kie.--]')"


    $ perl -e "use File::Spec::Functions; print canonpath('foo:[bar.coo.kie.-]')"


    $ perl -e "use File::Spec::Functions; print canonpath('foo:[bar^.coo.kie.-]')"


    $ perl -e "use File::Spec::Functions; print canonpath('foo:[bar.coo^.kie.-]')"


I've created a patch (attached) that solves the issue, with these
correct results (same paths)

[Committer's note: this fixes perl RT #128865]

4 years agoUpgrade Test-Simple from version 1.302045 to 1.302049
Steve Hay [Tue, 9 Aug 2016 07:34:16 +0000 (08:34 +0100)]
Upgrade Test-Simple from version 1.302045 to 1.302049

4 years agoUpgrade IO-Socket-IP from version 0.37 to 0.38
Steve Hay [Tue, 9 Aug 2016 07:29:33 +0000 (08:29 +0100)]
Upgrade IO-Socket-IP from version 0.37 to 0.38

4 years agoperlhacktips: Add link for %formatting size_t args
Karl Williamson [Thu, 4 Aug 2016 00:59:36 +0000 (18:59 -0600)]
perlhacktips: Add link for %formatting size_t args

4 years agoperlguts: Note how to print Size_t, SSize_t
Karl Williamson [Mon, 8 Aug 2016 21:48:24 +0000 (15:48 -0600)]
perlguts: Note how to print Size_t, SSize_t

4 years agoperldiag: YA case of too large code point breakage
Karl Williamson [Mon, 8 Aug 2016 21:28:10 +0000 (15:28 -0600)]
perldiag: YA case of too large code point breakage

This adds another case where having a code point above IV_MAX doesn't
work properly, and stresses there may be more.

4 years agoAdd test for [perl #126606]
Karl Williamson [Mon, 8 Aug 2016 21:11:03 +0000 (15:11 -0600)]
Add test for [perl #126606]

4 years agoperlop: Clarify tr/// casing statement
Karl Williamson [Mon, 8 Aug 2016 17:00:03 +0000 (11:00 -0600)]
perlop: Clarify tr/// casing statement

4 years agoperlop: Fix important typo
Karl Williamson [Mon, 8 Aug 2016 16:03:32 +0000 (10:03 -0600)]
perlop: Fix important typo

The text is saying don't mix case, and this typo was mixing case.

4 years agoUpdate Archive-Tar to CPAN version 2.10
Chris 'BinGOs' Williams [Mon, 8 Aug 2016 12:00:30 +0000 (13:00 +0100)]
Update Archive-Tar to CPAN version 2.10


2.10  27/07/2016 (TONYC)
- CVE-2016-1238: avoid loading optional modules from default .

4 years agoFix M::CL version
Chris 'BinGOs' Williams [Mon, 8 Aug 2016 11:58:53 +0000 (12:58 +0100)]
Fix M::CL version

4 years agoUpdate IPC-Cmd to CPAN version 0.96
Chris 'BinGOs' Williams [Mon, 8 Aug 2016 11:56:21 +0000 (12:56 +0100)]
Update IPC-Cmd to CPAN version 0.96


0.96 Thu Jul 28 11:17:12 BST 2016

  Bug fixes:
  * Require Module::Load::Conditional 0.66 to resolve
    CVE-2016-1238: avoid loading optional modules from default .

4 years agoDocument -DDEBUGGING better
David Mitchell [Mon, 8 Aug 2016 11:35:55 +0000 (12:35 +0100)]
Document -DDEBUGGING better

RT #128671 and

In particular, perlhacktips and perlrun contained out-of-date information
that setting -g would automatically set DEBUGGING too.

I've also improved the description of -DDEBUGGING in INSTALL, and
tried to make it clearer when the text is referring to the Configure
switch -DDEBUGGING  and when to the C compiler switch -DDEBUGGING.

4 years agoUpdate ExtUtils-MakeMaker to CPAN version 7.22
Chris 'BinGOs' Williams [Mon, 8 Aug 2016 11:12:30 +0000 (12:12 +0100)]
Update ExtUtils-MakeMaker to CPAN version 7.22


7.22  Mon Aug  8 09:29:02 BST 2016

    No changes since 7.21_01

7.21_01 Sun Aug  7 10:37:53 BST 2016

    Bug fixes:
    - CVE-2016-1238: instmodsh sanitise @INC

7.20  Fri Aug  5 09:39:56 BST 2016

    No changes since 7.19_08

7.19_08 Thu Jul 28 12:31:13 BST 2016

    Bug fixes:
    - CVE-2016-1238: avoid loading VMS::Feature from the default .

7.19_07 Sun Jul  3 15:11:40 BST 2016

    Bug fixes:
    - Restore ordering issue involving OTHERLDFLAGS

7.19_06 Mon Jun 27 12:32:06 BST 2016

    Test fixes:
    - Skip subdirscomplex test on VMS

7.19_05 Mon Jun 20 15:21:52 BST 2016

    Doc fixes:
    - fix typos and add subdirs text to

7.19_04 Tue Jun 14 11:16:19 BST 2016

    Bug fixes:
    - prevent EUMM::Locale from warning with old

    Doc fixes:
    - added examples for running tests in subdirs

7.19_03 Mon Jun 13 14:22:46 BST 2016

    Bug fixes:
    - Fix test warnings in when in core

7.19_02 Mon Jun 13 09:57:37 BST 2016

    Bug fixes:
    - Check for ascii locale using normalized name

7.19_01 Thu Jun  2 14:26:20 BST 2016

    Bug fixes:
    - Cygwin: avoid libperl.dll.dll.a
    - Fix basic.t tests on Win32 in core

4 years agoperldelta for OP_SIGELEM work
David Mitchell [Mon, 8 Aug 2016 10:31:13 +0000 (11:31 +0100)]
perldelta for OP_SIGELEM work

4 years agoUpgrade libnet from version 3.09_01 to 3.10
Steve Hay [Mon, 8 Aug 2016 07:30:49 +0000 (08:30 +0100)]
Upgrade libnet from version 3.09_01 to 3.10

4 years agoINCMARK is a statement now; don't cast it
Lukas Mai [Mon, 8 Aug 2016 01:09:54 +0000 (03:09 +0200)]
INCMARK is a statement now; don't cast it

4 years agoUnify mark macros
Father Chrysostomos [Sun, 7 Aug 2016 22:53:40 +0000 (15:53 -0700)]
Unify mark macros

Use static inline functions to avoid having different code paths
for GCC and non-GCC.  INCMARK is unused on CPAN and only used as
a statement in core, so it can become a statement.

4 years agoperlvar: Emphasize that $] has unchanged behavior forever
Karl Williamson [Sun, 7 Aug 2016 00:55:23 +0000 (18:55 -0600)]
perlvar: Emphasize that $] has unchanged behavior forever

Also add a link

4 years agoCorrect spelling errors: lib/unicore/mktables
Shlomi Fish [Sat, 2 Apr 2016 22:43:37 +0000 (01:43 +0300)]
Correct spelling errors: lib/unicore/mktables

All tests appear to pass. I hereby disclaim any explicit or implicit
ownership of my changes and place them under the

Thanks to Vim's ":help spell" for helping a lot.

4 years agoDocument that return value of pos(), by default, expresses characters.
James E Keenan [Sat, 13 Feb 2016 01:36:25 +0000 (20:36 -0500)]
Document that return value of pos(), by default, expresses characters.

When 'use bytes' is in effect, the return value expresses bytes.

Revise documentation and add some tests exemplifying this.

On recommendation of Jason Gibson.

For: RT # 127518

4 years agotoke.c: Clarify comment
Father Chrysostomos [Sat, 6 Aug 2016 04:28:39 +0000 (21:28 -0700)]
toke.c: Clarify comment

4 years agohandy.h: Clarify comment
Karl Williamson [Fri, 5 Aug 2016 22:47:03 +0000 (16:47 -0600)]
handy.h: Clarify comment

4 years agoImprove isOCTAL() definition
Karl Williamson [Fri, 5 Aug 2016 22:46:28 +0000 (16:46 -0600)]
Improve isOCTAL() definition

This potentially saves a branch

4 years agoAPItest: Add tests for isOCTAL
Karl Williamson [Fri, 5 Aug 2016 20:19:31 +0000 (14:19 -0600)]
APItest: Add tests for isOCTAL

4 years agoNote upgrade of NEXT to version 0.67.
James E Keenan [Fri, 5 Aug 2016 23:43:47 +0000 (19:43 -0400)]
Note upgrade of NEXT to version 0.67.

4 years agoUpdate NEXT to CPAN version 0.67.
Neil Bowers [Fri, 5 Aug 2016 23:42:15 +0000 (19:42 -0400)]
Update NEXT to CPAN version 0.67.

4 years agot/op/tr.t: Fix to pass in EBCDIC
Karl Williamson [Fri, 5 Aug 2016 18:50:43 +0000 (12:50 -0600)]
t/op/tr.t: Fix to pass in EBCDIC

I forgot to do this in 3a34ca0bce7835211b45e070373cf653c253636a

4 years agoPATCH: [perl #128738] Large code pt as string delim
Karl Williamson [Thu, 4 Aug 2016 20:07:53 +0000 (14:07 -0600)]
PATCH: [perl #128738] Large code pt as string delim

The bug here is simply an I32 was used when an IV was needed.

One could argue that there should be that the parser should refuse to
accept something larger than an IV.  I chose not to do that, as this is
a deprecated usage, which generates a warning by default and will be a
syntax error anyway in a future release.

4 years agoXSLoader Makefile.PL: Note a possible pitfall
Father Chrysostomos [Fri, 5 Aug 2016 18:28:08 +0000 (11:28 -0700)]
XSLoader Makefile.PL: Note a possible pitfall

4 years agoadd "provides" metadata for XSLoader (RT#138836)
Karen Etheridge [Fri, 5 Aug 2016 17:16:40 +0000 (10:16 -0700)]
add "provides" metadata for XSLoader (RT#138836)

This avoids confusing tools like cpanm and carton which use 'provides'
metadata, and are not able to infer the correct data here because
XSLoader_pm.PL is used to generate, but then is
deleted before cpanm can see it.

4 years agoConsistent spaces after dots in perldiag
Father Chrysostomos [Fri, 5 Aug 2016 07:30:02 +0000 (00:30 -0700)]
Consistent spaces after dots in perldiag

4 years agoSort perldiag
Father Chrysostomos [Fri, 5 Aug 2016 07:18:51 +0000 (00:18 -0700)]
Sort perldiag

4 years agoAUTHORS: consistent indent
Father Chrysostomos [Fri, 5 Aug 2016 07:09:10 +0000 (00:09 -0700)]
AUTHORS: consistent indent

4 years agoRmv duplicate AUTHORS entry for Stéphane Payrard
Father Chrysostomos [Fri, 5 Aug 2016 07:06:21 +0000 (00:06 -0700)]
Rmv duplicate AUTHORS entry for Stéphane Payrard

4 years agoRemove duplicate Mark Fisher AUTHORS entry
Father Chrysostomos [Fri, 5 Aug 2016 07:02:05 +0000 (00:02 -0700)]
Remove duplicate Mark Fisher AUTHORS entry

4 years agoAUTHORS: some sorting
Father Chrysostomos [Fri, 5 Aug 2016 07:00:46 +0000 (00:00 -0700)]
AUTHORS: some sorting

4 years agoAdd Chris Travers to AUTHORS
Father Chrysostomos [Fri, 5 Aug 2016 06:24:18 +0000 (23:24 -0700)]
Add Chris Travers to AUTHORS

4 years ago[perl #128769] Improve @INC . message
Father Chrysostomos [Fri, 5 Aug 2016 06:23:09 +0000 (23:23 -0700)]
[perl #128769] Improve @INC . message

The new version is based on one written by Chris Travers, polished
up a bit by yours truly.

4 years agogv.c:require_tie_mod: Create namesv only when needed
Father Chrysostomos [Fri, 5 Aug 2016 00:45:42 +0000 (17:45 -0700)]
gv.c:require_tie_mod: Create namesv only when needed

We only need it as an SV when we are going to load a module.  We can-
not share the SV with Perl_load_module, is ck_require mangles it
("Errno" → "").  The other uses of the SV are unnecessary, as
we have pv interfaces available.

4 years agoRationalise gv.c:gv_magicalize
Father Chrysostomos [Thu, 4 Aug 2016 21:29:48 +0000 (14:29 -0700)]
Rationalise gv.c:gv_magicalize

This code is confusing, and confusion has resulted in bugs.  So rework
the code a bit to make it more comprehensible.

gv_magicalize no longer has such an arcane return value.  What it does
now is simply add appropriate magic to (or do appropriate vivification
in) the GV passed as its argument.  It returns true if magic or vivi-
fication was applicable.

The caller (gv_fetchpvn_flags) uses that return value to determine
whether to install the GV in the symbol table, if the caller has
requested that a symbol only be added if it is a magical one

This reworking does mean that the GV is now checked for content even
when it would make no difference, but I think the resulting clarity
(ahem, *relative* clarity) of the code is worth it.

4 years agoRevert "gv.c:require_tie_mod: Create namesv only when needed"
James E Keenan [Thu, 4 Aug 2016 22:47:15 +0000 (18:47 -0400)]
Revert "gv.c:require_tie_mod: Create namesv only when needed"

This reverts commit e167a7177da799ca1757dc382b386abd3ae29491.

Observed to cause many test failures on Linux and FreeBSD.  See message on
list with subject "Many test failures in blead".

4 years agogv.c:require_tie_mod: Create namesv only when needed
Father Chrysostomos [Thu, 4 Aug 2016 21:09:57 +0000 (14:09 -0700)]
gv.c:require_tie_mod: Create namesv only when needed

We only need it as an SV when we are going to load a module.  Also,
there is no need for two separate SVs; we can use the same one for
Perl_load_module as we use subsequently in gv_stashsv.

4 years agogv.c: comment typeo
Father Chrysostomos [Thu, 4 Aug 2016 20:59:32 +0000 (13:59 -0700)]
gv.c: comment typeo

4 years agogv.c:require_tie_mod: Accept pvn params
Father Chrysostomos [Thu, 4 Aug 2016 20:55:41 +0000 (13:55 -0700)]
gv.c:require_tie_mod: Accept pvn params

All the callers create the SV on the fly.  We might as well put the
SV creation into the function itself.  (A forthcoming commit will
refactor things to avoid the SV when possible.)

4 years ago#126041 preserve systemroot env var during env wipe for Win32 in magic.t
Daniel Dragan [Thu, 4 Aug 2016 05:37:46 +0000 (00:37 -0500)]
#126041 preserve systemroot env var during env wipe for Win32 in magic.t

This fixes a test fail with VC 2005 on WinXP in magic.t. See perl #126041
for an example of the failure. Systemroot env var is required on WinXP to
load SXS tracked DLLs, VC 2005 and 2008's MS libc's are SXS tracked
(before and after are not), so once %ENV is wipe and systemroot is deleted
the require Win32; cant load the XS DLL because the XS DLL is linked
against the SXS tracked libc specific to 2005/2008.

4 years ago[perl #126041] Only clear LS_COLORS for glob
Father Chrysostomos [Thu, 4 Aug 2016 20:17:32 +0000 (13:17 -0700)]
[perl #126041] Only clear LS_COLORS for glob

When miniperl calls csh to implement glob(), we clear %ENV temporarily
to avoid csh dying on invalid values for things like LS_COLORS.  That
has proven to have far too many problems, since many system-dependent
env vars are necessary for calling an external process.  See the RT
ticket for details.

A better solution is temporarily to clear only those vars that are
known to be problematic and make csh possibly fail.  There only hap-
pens to be one of those at present, namely LS_COLORS.

4 years agoIncrease $Errno::VERSION to 1.26
Father Chrysostomos [Thu, 4 Aug 2016 20:06:12 +0000 (13:06 -0700)]
Increase $Errno::VERSION to 1.26

4 years agoIncrease $Tie::Hash::NamedCapture::VERSION to 0.10
Father Chrysostomos [Thu, 4 Aug 2016 20:05:41 +0000 (13:05 -0700)]
Increase $Tie::Hash::NamedCapture::VERSION to 0.10

4 years agoIncrease $arybase::VERSION to 0.12
Father Chrysostomos [Thu, 4 Aug 2016 20:05:06 +0000 (13:05 -0700)]
Increase $arybase::VERSION to 0.12

4 years agoRework mod loading for %- and %!; fix mem leak
Father Chrysostomos [Thu, 4 Aug 2016 20:00:18 +0000 (13:00 -0700)]
Rework mod loading for %- and %!; fix mem leak

There are many built-in variables that perl creates on demand for
efficiency’s sake.  gv_fetchpvn_flags (which is responsible for sym-
bol lookup) will fill in those variables automatically when add-
ing a symbol.

The special GV_ADDMG flag passed to this function by a few code paths
(such as defined *{"..."}) tells gv_fetchpvn_flags to add the symbol,
but only if it is one of the ‘magical’ built-in variables that we pre-
tend already exist.

To accomplish this, when the GV_ADDMG flag is passed,
gv_fetchpvn_flags, if the symbol does not already exist, creates a new
GV that is not attached to the stash.  It then runs it through its
magicalization code and checks afterward to see whether the GV
changed.  If it did, then it gets added to the stash.  Otherwise, it
is discarded.

Three of the variables, %-, %!, and $], are problematic, in that they
are implemented by external modules.  gv_fetchpvn_flags loads those
modules, which tie the variable in question, and then control is
returned to gv_fetchpvn_flags.  If it has a GV that has not been
installed in the symbol table yet, then the module will vivify that GV
on its own by a recursive call to gv_fetchpvn_flags (with the GV_ADD
flag, which does none of this temporary-dangling-GV stuff), and
gv_fetchpvn_flags will have a separate one which, when installed,
would clobber the one with the tied variable.

We solved that by having the GV installed right before calling the
module, for those three variables (in perl 5.16).

The implementation changed in commit v5.19.3-437-g930867a, which was
supposed to clean up the code and make it easier to follow.  Unfortun-
ately there was a bug in the implementation.  It tries to install the
GV for those cases *before* the magicalization code, but the logic is
wrong.  It checks to see whether we are adding only magical symbols
(addmg) and whether the GV has anything in it, but before anything has
been added to the GV.  So the symbol never gets installed.  Instead,
it just leaks, and the one that the implementing module vivifies
gets used.

This leak can be observed with XS::APItest::sv_count:

$ ./perl -Ilib -MXS::APItest -e 'for (1..10){ defined *{"!"}; delete $::{"!"}; warn sv_count  }'
3833 at -e line 1.
4496 at -e line 1.
4500 at -e line 1.
4504 at -e line 1.
4508 at -e line 1.
4512 at -e line 1.
4516 at -e line 1.
4520 at -e line 1.
4524 at -e line 1.
4528 at -e line 1.

Perl 5.18 does not exhibit the leak.

So in this commit I am finally implementing something that was dis-
cussed about the time that v5.19.3-437-g930867a was introduced.  To
avoid the whole problem of recursive calls to gv_fetchpvn_flags vying
over whose GV counts, I have stopped the implementing modules from
tying the variables themselves.  Instead, whichever gv_fetchpvn_flags
call is trying to create the glob is now responsible for seeing that
the variable is tied after the module is loaded.  Each module now pro-
vides a _tie_it function that gv_fetchpvn_flags can call.

One remaining infelicity is that Errno mentions $! in its source, so
*! will be vivified when it is loading, only to be clobbered by the
GV subsequently installed by gv_fetch_pvn_flags.  But at least it
will not leak.

One test that failed as a result of this (in t/op/magic.t) was try-
ing to undo the loading of in order to test it afresh with
*{"!"}.  But it did not remove *! before the test.  The new logic in
the code happens to work in such a way that the tiedness of the vari-
able determines whether the module needs to be loaded (which is neces-
sary, now that the module does not tie the variable).  Since the test
is by no means normal code, it seems reasonable to change it.

4 years agoUse parser, not PL_parser, in perly.y
Father Chrysostomos [Wed, 3 Aug 2016 20:53:40 +0000 (13:53 -0700)]
Use parser, not PL_parser, in perly.y

The code snippets in perly.y are #included in a C function that has a
‘parser’ local variable.  Local variables require less machine code
(especially under threads).

4 years agoparser.h: comment typo
Father Chrysostomos [Wed, 3 Aug 2016 20:46:34 +0000 (13:46 -0700)]
parser.h: comment typo

4 years agoFinish reordering the parser struct (again!)
Father Chrysostomos [Wed, 3 Aug 2016 20:34:16 +0000 (13:34 -0700)]
Finish reordering the parser struct (again!)

This is meant to be a more correct version of d64e121b07.

4 years agoRevert "Um, finish reordering the parser struct"
Father Chrysostomos [Wed, 3 Aug 2016 20:31:06 +0000 (13:31 -0700)]
Revert "Um, finish reordering the parser struct"

This reverts commit d64e121b07bda895f7f3a5d0e449fc948986e2f1.

It contained stupid blunders.  See

4 years agoremove most 'a' flags from embed.fnc
David Mitchell [Thu, 4 Aug 2016 10:47:02 +0000 (11:47 +0100)]
remove most 'a' flags from embed.fnc


In embed.fnc, we mark about 80 functions with the a flag, which we
document as meaning:

:   a  Allocates memory a la malloc/calloc.  Also implies "R":
:         proto.h: add __attribute__malloc__

Now, the current gcc docs for the malloc attribute states:

    This tells the compiler that a function is malloc-like, i.e., that the
    pointer P returned by the function cannot alias any other pointer
    valid when the function returns, and moreover no pointers to valid
    objects occur in any storage addressed by P.

    Using this attribute can improve optimization. Functions like malloc
    and calloc have this property because they return a pointer to
    uninitialized or zeroed-out storage. However, functions like realloc
    do not have this property, as they can return a pointer to storage
    containing pointers.

This implies to me that we should only flag functions as 'a' if both:

    1) it returns a pointer to memory that isn't pointed to from elsewhere;
    2) that the block of memory itself contains no pointers.

I think we are failing condition (2) for many 'a' functions; for example
the op.c newXXXOP() functions return an alloced op struct (condition 1
probably satisfied), but which contain pointers (condition 2 fails).

4 years ago[MERGE] add OP_ARGELEM etc
David Mitchell [Wed, 3 Aug 2016 19:55:39 +0000 (20:55 +0100)]

this branch:

* moves the parsing of subroutine signatures into perly.y rather than
  using a custom mini-parser in toke.c;
* adds 3 new ops, OP_ARGELEM, OP_ARGDEFELEM, OPARGCHECK to handle
  the checking and processing of subroutine arguments;
* fixes up to handle the new ops and to handle
  'use feature "signatures"' better.

4 years agosilence compiler warning in perly.y
David Mitchell [Mon, 1 Aug 2016 16:20:27 +0000 (17:20 +0100)]
silence compiler warning in perly.y

assigning a char from an I32 gives a warning. Add an explicit cast
as we know the int only ever holds a char.

4 years - avoid deep recursion warning
David Mitchell [Mon, 1 Aug 2016 11:41:06 +0000 (12:41 +0100)] - avoid deep recursion warning

also add some basic descriptions to a few functions.

4 years agoenable warnings+strict in t/op/signatures.t
David Mitchell [Mon, 1 Aug 2016 11:08:09 +0000 (12:08 +0100)]
enable warnings+strict in t/op/signatures.t

4 years agoduplicate signature vars gave wrong warning
David Mitchell [Mon, 1 Aug 2016 10:41:42 +0000 (11:41 +0100)]
duplicate signature vars gave wrong warning

RT #128719. This:

    sub f ($x, $x) {}


    "state" variable $x masks earlier declaration in same scope

This commit changes that to '"my" variable'