This is a live mirror of the Perl 5 development currently hosted at
6 years agoAPItest/t/utf8.t: Add missing test
Karl Williamson [Thu, 6 Oct 2016 00:34:15 +0000 (18:34 -0600)]
APItest/t/utf8.t: Add missing test

Under some circumstances we weren't validating that the generated
warnings are correct.  This required reordering some 'if' tests, and
revised special casing of the overflow test.

6 years agoAPItest/t/utf8.t: Rename test for clarity
Karl Williamson [Thu, 6 Oct 2016 00:32:55 +0000 (18:32 -0600)]
APItest/t/utf8.t: Rename test for clarity

6 years agoutf8.c: Extract some code into 2 functions
Karl Williamson [Mon, 3 Oct 2016 03:50:10 +0000 (21:50 -0600)]
utf8.c: Extract some code into 2 functions

This is in preparation for the same functionality to each be used in a
new place in a future commit

6 years agoutf8.c: Rename a couple of macros for clarity
Karl Williamson [Mon, 3 Oct 2016 03:31:52 +0000 (21:31 -0600)]
utf8.c: Rename a couple of macros for clarity

These were recently added in 2b47960981adadbe81b9635d4ca7861c45ccdced.
This also removes the #undefs of these in preparation for them to be
used later in the file.

6 years agoutf8.h: Change some flag definition constants
Karl Williamson [Mon, 3 Oct 2016 03:09:27 +0000 (21:09 -0600)]
utf8.h: Change some flag definition constants

These #defines give flag bits in a U32.  This commit opens a gap that
will be filled in a future commit.  A test file has to change to
correspond, as it duplicates the defines.

6 years agoAPItest/t/utf8.t: Extract code to common function
Karl Williamson [Mon, 3 Oct 2016 03:05:15 +0000 (21:05 -0600)]
APItest/t/utf8.t: Extract code to common function

There are many instances of this simple code to dump an array of trapped
warning messages.  The problem is that they display better when joined
by "" rather than by a comma.  Rather than change each instance to do
that, I changed each instance to a sub call and changed it there.

6 years agoutf8.c: Add some UNLIKELY()s
Karl Williamson [Fri, 30 Sep 2016 18:42:45 +0000 (12:42 -0600)]
utf8.c: Add some UNLIKELY()s

for branch prediction

6 years agoAdd details to UTF-8 malformation error messages
Karl Williamson [Wed, 28 Sep 2016 21:05:17 +0000 (15:05 -0600)]
Add details to UTF-8 malformation error messages

I've long been unsatisfied with the information contained in the
error/warning messages raised when some input is malformed UTF-8, but
have been reluctant to change the text in case some one is relying on
it.  One reason that someone might be parsing the messages is that there
has been no convenient way to otherwise pin down what the exact
malformation might be.  A few commits from now will add a facility
to get the type of malformation unambiguously.  This will be a better
mechanism to use for those rare modules that need to know what's the
exact malformation.

So, I will fix and issue pull requests for any module broken by this

The messages are changed by now dumping (in \xXY format) the bytes that
make up the malformed character, and extra details are added in most

Messages about overlongs now display the code point they evaluate to and
what the shortest UTF-8 sequence for generating that code point is.

Messages about overflowing now just display that it overflows, since the
entire byte sequence is now dumped.  The previous message displayed just
the byte which was being processed where overflow was detected, but that
information is not at all meaningfull.

6 years agoutf8.c: Consolidate duplicate error msg text
Karl Williamson [Wed, 28 Sep 2016 16:19:03 +0000 (10:19 -0600)]
utf8.c: Consolidate duplicate error msg text

This text is generated in 2 places; consolidate into one place.

6 years agoUpgrade Scalar-List-Utils from version 1.45 to 1.46
Steve Hay [Thu, 13 Oct 2016 12:31:51 +0000 (13:31 +0100)]
Upgrade Scalar-List-Utils from version 1.45 to 1.46

6 years agoUpgrade Test::Simple from version 1.302056 to 1.302059
Steve Hay [Thu, 13 Oct 2016 07:29:16 +0000 (08:29 +0100)]
Upgrade Test::Simple from version 1.302056 to 1.302059

6 years agoUpgrade parent from version 0.234 to 0.236
Steve Hay [Thu, 13 Oct 2016 07:23:55 +0000 (08:23 +0100)]
Upgrade parent from version 0.234 to 0.236

6 years agoUpgrade HTTP::Tiny from version 0.068 to 0.070
Steve Hay [Thu, 13 Oct 2016 07:17:00 +0000 (08:17 +0100)]
Upgrade HTTP::Tiny from version 0.068 to 0.070

6 years agocorelist: Fix typo in variable name
Thomas Sibley [Wed, 12 Oct 2016 16:44:30 +0000 (09:44 -0700)]
corelist: Fix typo in variable name

6 years Allow =item lists in perlapi
Karl Williamson [Thu, 13 Oct 2016 00:30:11 +0000 (18:30 -0600)] Allow =item lists in perlapi

Such lists were silently ignored.  This fixes things so no pod commands
are silently ignored, and hence lists are now accepted in a function's
pod.  This fixes the entry for 'vverify', whose =item list was not
getting picked up.

6 years agoperlapi: Fix docs for 2 scope related macros
Karl Williamson [Thu, 13 Oct 2016 00:27:26 +0000 (18:27 -0600)]
perlapi: Fix docs for 2 scope related macros

These 2 macros were using =item instead of =for apidoc, so they silently
were not included in perlapi.  This commit also changes  their
references to links.

6 years agoAdd epigraphs for 5.22.3-RC4 and 5.24.1-RC4
Steve Hay [Wed, 12 Oct 2016 22:01:01 +0000 (23:01 +0100)]
Add epigraphs for 5.22.3-RC4 and 5.24.1-RC4

6 years ago5.22.3-RC4 and 5.24.1-RC4 today
Steve Hay [Wed, 12 Oct 2016 19:12:25 +0000 (20:12 +0100)]
5.22.3-RC4 and 5.24.1-RC4 today

6 years agoop.c: fix what looks like typos in comments
Lukas Mai [Wed, 12 Oct 2016 00:20:18 +0000 (02:20 +0200)]
op.c: fix what looks like typos in comments

6 years agoRevert "Reduce SelectSaver memory footprint"
James E Keenan [Tue, 11 Oct 2016 14:02:22 +0000 (10:02 -0400)]
Revert "Reduce SelectSaver memory footprint"

This reverts commit 26d58bfed57736ec1e1f1dfd579484f8b6fcccd7.

6 years ago[rt #129336] #!perl -i u erroneously interpreted as -u
Dan Collins [Fri, 23 Sep 2016 05:21:20 +0000 (01:21 -0400)]
[rt #129336] #!perl -i u erroneously interpreted as -u

Perl_moreswitches processes a single switch, and returns a pointer
to the start of the next switch. It can return either
the a pointer to the next flag itself:

    #!perl -n -p
               ^ Can point here

Or, to the space before the next "arg":

    #!perl -n -p
             ^ Can point here

(Where the next call to Perl_moreswitches will consume " -".)

In the case of -i[extension], the pointer is by default pointing at
the space after the end of the argument. The current code tries to
do the former, by unconditionally advancing the pointer, and then
advancing it again if it is on a '-'. But that is incorrect:

    #!perl -i p
              ^ Will point here, but that isn't a flag

I could fix this by removing the unconditional s++, and having it
increment by 2 if *(s+1)=='-', but this work isn't actually
necessary - it's better to just leave it pointing at the space after
the argument.

6 years agoProvide a template for call to File::Temp::tempfile().
François Perrad [Sun, 9 Oct 2016 20:13:21 +0000 (16:13 -0400)]
Provide a template for call to File::Temp::tempfile().

tempfile() with template gives a file in the current directory.
tempfile() without template gives a file in /tmp.  These may be on different
kinds of filesystems (in the instant case, the former was on ext2, the latter
on ext4) with different characteristics with respect to high-resolution

Originally reported at:

6 years agoReduce SelectSaver memory footprint
Nicolas R [Thu, 8 Sep 2016 20:29:46 +0000 (14:29 -0600)]
Reduce SelectSaver memory footprint

This is saving about 500k when using SelectSaver
as most of the time Carp is not required.

before> perl -I. -e 'require q{lib/}; print qx{grep VmRSS /proc/$$/status}'
VmRSS:      2920 kB

after> perl -I. -e 'require q{lib/}; print qx{grep VmRSS /proc/$$/status}'
VmRSS:      2352 kB

Committer:  Increment SelectSaver $VERSION.  Add perldelta entry for SelectSaver.

For: RT # 129235

6 years agoXS-APItest/t/utf8.t: Fix failing EBCDIC test
Karl Williamson [Wed, 5 Oct 2016 20:56:59 +0000 (14:56 -0600)]
XS-APItest/t/utf8.t: Fix failing EBCDIC test

Recent commit 418080dc73a4b9e525a76d6d3b5034ff616716b4 fixing a test in
this file that was failing only on EBCDIC platforms had an error.  It
applied a correction to a test that didn't require it, causing it to
fail.  This commit changes that to use a different method to detect
which tests to apply the correction to, and knowing that some things can
be determined earlier as a result.

6 years agoutf8.c: Add missing cast
Karl Williamson [Wed, 5 Oct 2016 19:45:00 +0000 (13:45 -0600)]
utf8.c: Add missing cast

This string literal contains U8's.  It normally is only compiled on
EBCDIC, and when I tried it (by changing the #ifdef's around) on Linux
g++, it fails to compile.  Apparently it does compile on z/OS, but the
logs don't show the result.  But there are a bunch of failures there
involving this function, and this could explain them.

6 years ago[perl #129350] anchored/floating substrings must be utf8 if target is
Hugo van der Sanden [Tue, 4 Oct 2016 13:40:11 +0000 (14:40 +0100)]
[perl #129350] anchored/floating substrings must be utf8 if target is

If the target is utf8 and either the anchored or floating substrings
are not, we need to create utf8 copies to check against. The state
of the two substrings may not be the same, but we were only testing
whichever we planned to check first.

6 years ago[MERGE] eliminate OP_PUSHRE and optimise split()
David Mitchell [Tue, 4 Oct 2016 10:40:12 +0000 (11:40 +0100)]
[MERGE] eliminate OP_PUSHRE and optimise split()

6 years agoPerl_newASSIGNOP: fix on g++ builds
David Mitchell [Sun, 25 Sep 2016 18:30:39 +0000 (19:30 +0100)]
Perl_newASSIGNOP: fix on g++ builds

op.c: In function ‘OP* Perl_newASSIGNOP(PerlInterpreter*, I32, OP*, I32, OP*)’:
op.c:6605:15: error: jump to label ‘detach_split’ [-fpermissive]
op.c:6631:22: note:   from here
                 goto detach_split;
op.c:6584:30: note:   skips initialization of ‘PMOP* const pm’
                 PMOP * const pm = (PMOP*)right;

6 years extract padname code and fixup split
David Mitchell [Mon, 19 Sep 2016 15:42:45 +0000 (16:42 +0100)] extract padname code and fixup split

The code that prints '$i:1,2'' in something like 'padsv[$i:1,2]':
extract it out into a separate function, then use it with  split
to display the array name rather than just a target number in:

    $ perl -MO=Concise -e'my @a = split()'
    split(/" "/ => @a:1,2)[t2] vK/LVINTRO,RTIME,ASSIGN,LEX,IMPLIM ->6

6 years agofix common assign issue on @a = (split(), 1)
David Mitchell [Mon, 19 Sep 2016 14:39:34 +0000 (15:39 +0100)]
fix common assign issue on @a = (split(), 1)

RT #127999 Slowdown in split + list assign

The compile-time common-value detection mechanism for OP_ASSIGN
was getting OP_SPLIT wrong.

It was assuming that OP_SPLIT was always dangerous. In fact,
OP_SPLIT is usually completely safe, not passing though any of its
arguments, except where the assign in (@a = split()) has been optimised
away and the array attached directly to the OP_SPLIT op, or the ops that
produce the array have been appended as an extra child of the OP_SPLIT op

6 years agoBetter optimise my/local @a = split()
David Mitchell [Mon, 19 Sep 2016 11:35:13 +0000 (12:35 +0100)]
Better optimise my/local @a = split()

There are currently two optimisations for when the results of a split
are assigned to an array.

For the first,

    @array = split(...);

the aassign and padav/rv2av are optimised away, and pp_split() directly
assigns to the array attached to the split op (via op_pmtargetoff or

For the second,

    my @array    = split(...);
    local @array = split(...);
    @{$expr}     = split(...);

The aassign is optimised away, but the padav/rv2av is kept as an additional
arg to split. pp_split itself then uses the first arg popped off the stack
as the array (This was introduced by FC with v5.21.4-409-gef7999f).

This commit moves these two:

    my @array    = split(...);
    local @array = split(...);

from the second case to the first case, by simply setting OPpLVAL_INTRO
on the OP_SPLIT, and making pp_split() do SAVECLEARSV() or save_ary()
as appropriate.

This makes my @a = split(...) a few percent faster.

6 years agore-indent block in Perl_newASSIGNOP
David Mitchell [Sun, 18 Sep 2016 15:13:41 +0000 (16:13 +0100)]
re-indent block in Perl_newASSIGNOP

Whitepace-only change.

This is a followup to the previous commit, which simplified that code

6 years agomake OP_SPLIT a PMOP, and eliminate OP_PUSHRE
David Mitchell [Thu, 15 Sep 2016 09:59:37 +0000 (10:59 +0100)]
make OP_SPLIT a PMOP, and eliminate OP_PUSHRE

Most ops that execute a regex, such as match and subst, are of type PMOP.
A PMOP allows the actual regex to be attached directly to that op, due
to its extra fields.

OP_SPLIT is different; it is just a plain LISTOP, but it always has an
OP_PUSHRE as its first child, which *is* a PMOP and which has the regex

At runtime, pp_pushre()'s only job is to push itself (i.e. the current
PL_op) onto the stack. Later pp_split() pops this to get access to the
regex it wants to execute.

This is a bit unpleasant, because we're pushing an OP* onto the stack,
which is supposed to be an array of SV*'s. As a bit of a hack, on
DEBUGGING builds we push a PVLV with the PL_op address embedded instead,
but this still isn't very satisfactory.

Now that regexes are first-class SVs, we could push a REGEXP onto the
stack rather than PL_op. However, there is an optimisation of @array =
split which eliminates the assign and embeds the array's GV/padix directly
in the PUSHRE op. So split still needs access to that op. But the pushre
op will always be splitop->op_first anyway, so one possibility is to just
skip executing the pushre altogether, and make pp_split just directly
access op_first instead to get the regex and @array info.

But if we're doing that, then why not just go the full hog and make
OP_SPLIT into a PMOP, and eliminate the OP_PUSHRE op entirely: with the
data that was spread across the two ops now combined into just the one
split op.

That is exactly what this commit does.

For a simple compile-time pattern like  split(/foo/, $s, 1), the optree
looks like:

        <@> split[t2] lK
           </> pushre(/"foo"/) s/RTIME
           <0> padsv[$s:1,2] s
           <$> const(IV 1) s

        </> split(/"foo"/)[t2] lK/RTIME
           <0> padsv[$s:1,2] s
           <$> const[IV 1] s

while for a run-time expression like split(/$pat/, $s, 1),

        <@> split[t3] lK
           </> pushre() sK/RTIME
              <|> regcomp(other->8) sK
                 <0> padsv[$pat:2,3] s
           <0> padsv[$s:1,3] s
           <$> const(IV 1)s

        </> split()[t3] lK/RTIME
           <|> regcomp(other->8) sK
              <0> padsv[$pat:2,3] s
           <0> padsv[$s:1,3] s
           <$> const[IV 1] s

This makes the code faster and simpler.

At the same time, two new private flags have been added for OP_SPLIT -
OPpSPLIT_ASSIGN and OPpSPLIT_LEX - which make it explicit that the
assign op has been optimised away, and if so, whether the array is

Also, deparsing of split has been improved, to the extent that

    perl TEST -deparse op/split.t

now passes.

Also, a couple of panic messages in pp_split() have been replaced with

6 years agoTime-HiRes: explicit clockid_t cast for C++11
Jarkko Hietaniemi [Sat, 1 Oct 2016 14:30:29 +0000 (10:30 -0400)]
Time-HiRes: explicit clockid_t cast for C++11

6 years agoPL_inf/PL_nan need different export with C++
Jarkko Hietaniemi [Fri, 30 Sep 2016 21:18:16 +0000 (17:18 -0400)]
PL_inf/PL_nan need different export with C++

After the 9ee3aea9, the old way worked with C++ for building
the core, but then failed building the POSIX extension.

(This change is about building with C++ after the 9ee3aea9,
even though that change was about ordering perl.h into a more
logical order for vax-netbsd, or for any non-IEEE-754 platform.)

6 years agovax-netbsd: do not export inf/nan which we do not have
Jarkko Hietaniemi [Fri, 30 Sep 2016 11:35:53 +0000 (07:35 -0400)]
vax-netbsd: do not export inf/nan which we do not have

6 years agovax-netbsd: POSIX: skip t/math.t tests needing inf/nan
Jarkko Hietaniemi [Thu, 29 Sep 2016 10:47:13 +0000 (06:47 -0400)]
vax-netbsd: POSIX: skip t/math.t tests needing inf/nan

6 years agovax-netbsd: POSIX: skip inf/nan parts
Jarkko Hietaniemi [Tue, 27 Sep 2016 23:07:40 +0000 (19:07 -0400)]
vax-netbsd: POSIX: skip inf/nan parts

6 years agovax-netbsd: POSIX: fenv.h is work-in-progress
Jarkko Hietaniemi [Tue, 27 Sep 2016 22:40:46 +0000 (18:40 -0400)]
vax-netbsd: POSIX: fenv.h is work-in-progress

Given that fenv.h seems very IEEE-754 oriented,
it's likely to stay that way for a while.

6 years agovax-netbsd: avoid NV_INF/NV_NAN uses
Jarkko Hietaniemi [Thu, 29 Sep 2016 21:57:05 +0000 (17:57 -0400)]
vax-netbsd: avoid NV_INF/NV_NAN uses

6 years agovax-netbsd: inf/nan only if IEEE 754
Jarkko Hietaniemi [Thu, 29 Sep 2016 12:23:12 +0000 (08:23 -0400)]
vax-netbsd: inf/nan only if IEEE 754

6 years agoAPItest/t/utf8.t: Add some constants
Karl Williamson [Fri, 30 Sep 2016 03:07:19 +0000 (21:07 -0600)]
APItest/t/utf8.t: Add some constants

Though unused now, they were convenient during some debugging, and may
be again.

6 years agoAPItest/t/utf8.t: Fix 3-byte overlong test
Karl Williamson [Fri, 30 Sep 2016 03:05:49 +0000 (21:05 -0600)]
APItest/t/utf8.t: Fix 3-byte overlong test

Unlike ASCII platforms, one can tell on EBCDIC ones if an otherwise
valid 3-byte sequence is overlong on the first byte.

6 years agoAPItest/t/utf8.t: Fix EBCDIC test
Karl Williamson [Fri, 30 Sep 2016 03:03:30 +0000 (21:03 -0600)]
APItest/t/utf8.t: Fix EBCDIC test

Unlike on ASCII platforms, it may take more than one byte of a partial
character to determine if it represents a code point that needs 32 or
more bits to represent.  This fixes the test to account for that.

6 years agoutf8.c: Add missing type specifier to declaration
Karl Williamson [Fri, 30 Sep 2016 03:01:36 +0000 (21:01 -0600)]
utf8.c: Add missing type specifier to declaration

This code was missing a STRLEN specifier; only compiled on EBCDIC.

6 years agoAPItest/t/utf8.t: Skip some tests if major one fails
Karl Williamson [Thu, 29 Sep 2016 17:51:41 +0000 (11:51 -0600)]
APItest/t/utf8.t: Skip some tests if major one fails

If the patched test fails, the subsequent ones in the loop are
meaningless, so don't execute them.

6 years agoAPItest/t/utf8.t: Fix typo
Karl Williamson [Thu, 29 Sep 2016 17:50:51 +0000 (11:50 -0600)]
APItest/t/utf8.t: Fix typo

This was a typo in the UTF-EBCDIC for a code point, so affected only
tests on that platform

6 years agoutf8n_to_uvchr() Fix EBCDIC bug with overlongs
Karl Williamson [Thu, 29 Sep 2016 02:42:30 +0000 (20:42 -0600)]
utf8n_to_uvchr() Fix EBCDIC bug with overlongs

The comment removed in this commit was wrong, and so was the code it
described.  On EBCDIC platforms, there are malformations that need to be
converted from Unicode to native.  When I wrote that I wasn't thinking
about overlongs, which can evaluate to any code point.  The new tests in
d566bd20c27a46aecd668d2f739b9515f46ac74f caught this.

6 years agoRT #116250: Fail the right number of tests on timeout
Dan Collins [Thu, 29 Sep 2016 15:23:00 +0000 (11:23 -0400)]
RT #116250: Fail the right number of tests on timeout

Committer: Correct syntax error.  Correct RT # in commit message.

6 years agoOP_SASSIGN: make op_first==op_last for UNOP
David Mitchell [Thu, 29 Sep 2016 15:03:05 +0000 (16:03 +0100)]
OP_SASSIGN: make op_first==op_last for UNOP

Occasionally (e.g. $x ||= 1) an OP_SASSIGN operator only has a single
arg. The previous two commits made OP_SASSIGN always be allocated as a
BINOP, and if necessary, set op_last to NULL when there's only s single

This commit instead sets op_last equal to op_first for this case (similar
to how a LISTOP with a single arg is handled). This removes the need for
special handling in S_finalize_op().

6 years agosassign was used as UNOP, optimize {or,and,dor}assign
Reini Urban [Thu, 29 Sep 2016 15:20:52 +0000 (16:20 +0100)]
sassign was used as UNOP, optimize {or,and,dor}assign

  To clarify: OP_SASSIGN normally has two args, and is allocated as a
  BINOP. However, in something like $x ||= 1,  the optree looks like:

    4        <|> orassign(other->5) vK/1 ->7
    -           <1> ex-rv2sv sKRM/1 ->4
    3              <#> gvsv[*x] s ->4
    6           <1> sassign sK/BKWARD,1 ->7
    5              <$> const[IV 1] s ->6

  Here the sassign only has a single arg, since the other arg is already
  left on the stack after orassign has executed.

  In this case, perl was allocating the op as a UNOP, which causes
  problems with any code which assumes op_last contains a valid pointer.
  This commit changes it so that the op is always allocated as a BINOP,
  even when it only has one arg. In that case, it sets op_last to NULL
  (but see the next commit).

  Setting OPpASSIGN_BACKWARDS earlier is just a simplification of the

In newASSIGNOP with {or,and,dor}assign, the rhs was wrongly compiled as UNOP sassign.
It caused DEBUGGING corruption in the op finalizer for sassign (first not
pointing to last without sibling) and added random chunk to the last field.
It was never used though, as only {or,and,dor}assign used this op_other op.

{or,and,dor}assign needs the sassign with OPpASSIGN_BACKWARDS, set it
directly, not later in the LOGOP.

finalize_op needs a special case for it, as the last is empty there.

6 years agosassign is wrongly declared as BASEOP, not BINOP.
Reini Urban [Thu, 29 Sep 2016 13:30:27 +0000 (14:30 +0100)]
sassign is wrongly declared as BASEOP, not BINOP.

  To clarify: OP_SASSIGN is always allocated as a BINOP (or occasionally
  as a UNOP - see the next commit), but is listed as a BASEOP in
  regen/opcodes. Because of this, various bits of code that rely on e.g.
  PL_opargs[] have to be special-cased for OP_SASSIGN. This commit changes
  the entry in regen/opcodes to list it as BINOP, and removes the
  I've also added a temporary workaround marked by XXX to make the commit
  work under PERL_OP_PARENT, which is the default now. This will be
  removed in a couple if commits' time.

This was wrong from the very beginning:
added with 79072805bf lwall perl 5.0 alpha 2 1993 with class s, not 0,
but missing the 2 S S args, which are present in aassign.
Changed to BASEOP with db173bac9b6de7d by mbeattie in 1997.
The '# sassign is special-cased for op class' comment is suspicious.

Fix it in ck_sassign also, it is created as BINOP in newASSIGNOP.
In 202206897 dapm 2014 complained about it also. Remove some special
cases where it should be a BINOP but was not.

6 years agoundef $0 shouldn't warn about $0
David Mitchell [Wed, 28 Sep 2016 12:40:34 +0000 (13:40 +0100)]
undef $0 shouldn't warn about $0

RT #123910

    $ perl -we'undef $0'
    Use of uninitialized value $0 in undef operator at -e line 1.

Generally, undef should ignore its arg when determining which var was
undef: only magic will trigger an undef warning.

6 years agoOP_MULTIDEREF: ignore customised delete/exists
David Mitchell [Wed, 28 Sep 2016 10:27:38 +0000 (11:27 +0100)]
OP_MULTIDEREF: ignore customised delete/exists

We already skip optmising to a multideref if an aelem op has a customised
PL_check[] routine; extend this skip to OP_EXISTS and OP_DELETE too.


6 years agoSpeed up compilation of a smidge.
James Raspass [Wed, 15 Jul 2015 22:46:20 +0000 (23:46 +0100)]
Speed up compilation of a smidge.

Measured with the following crude perl script calling perf. Perl
is in there to get a rough baseline cost of starting perl:

 print 'PERL', (`perf stat -r100 perl -e 1             2>&1`)[10];
 print 'OLD ', (`perf stat -r100 perl lib/  2>&1`)[10];
 print 'NEW ', (`perf stat -r100 perl lib/ 2>&1`)[10];

Produced the following results on my machine:

 PERL  5,800,051 instructions # 1.05 insns per cycle ( +- 0.06% )
 OLD  14,818,995 instructions # 1.16 insns per cycle ( +- 0.03% )
 NEW  14,696,974 instructions # 1.16 insns per cycle ( +- 0.03% )

While the numbers did fluctuate between runs, the new code was
consistently faster.

6 years agoCwd.xs: avoid blib better while building
David Mitchell [Tue, 27 Sep 2016 15:43:30 +0000 (16:43 +0100)]
Cwd.xs: avoid blib better while building

RT # 125603

There's an old line in Cwd's Makefile.PL:

    BEGIN { @INC = grep {!/blib/} @INC }

This was added 12 years ago to solve a problem with a static perl and
building a newer Cwd (but no-one's quite sure what *exactly* the issue was
any more).

However, this breaks building perl under a directory that has 'blib'
in the pathname. This commit estricts the grep  to just exclusing exactly
blib/lib and blib/arch.

This should hopefully still workaround the static build issue, while no
longer breaking perl builds.

6 years agoPorting/ explain what PUT means
David Mitchell [Tue, 27 Sep 2016 14:13:56 +0000 (15:13 +0100)]
Porting/ explain what PUT means

'PUT' is used in code comments, a function name, an error message, and
verbose output; without ever saying what it stands for. Rectify this.

6 years agoEliminate xpad_cop_seq from _xnvu union
David Mitchell [Tue, 27 Sep 2016 13:50:25 +0000 (14:50 +0100)]
Eliminate xpad_cop_seq from _xnvu union

PVNV's used to be used to hold pad names (like '$lex'), but aren't used
for this purpose any more. So eliminate the xpad_cop_seq part of the

Since S_scan_subst() was using xnv_u.xpad_cop_seq.xlow to store a
temporary line count, add a new union member for that.

The main usage of this field on CPAN is to define
COP_SEQ_RANGE_LOW()-style macros, so if the module is still using
xpad_cop_seq for that purpose, it's already broken.

6 years agoUpdate podlators to CPAN version 4.08
Chris 'BinGOs' Williams [Tue, 27 Sep 2016 12:43:59 +0000 (13:43 +0100)]
Update podlators to CPAN version 4.08


podlators 4.08 (2016-09-24)

    [Pod::Man] Partially revert change in 4.00 to require the name option
    (--name to pod2man) when generating man pages from standard input.
    Historically, pod2man silently tolerated this, and there turned out to
    be a lot of software that depended on this, making the change too
    disruptive.  Instead, silently set the man page title to STDIN in this
    case, but warn about it in the documentation.  (#117990)

    [Pod::Man] Fix rendering bug for "TRUE (1)", which was recognized as
    needing small caps and then erroneously as a man page reference,
    resulting in escaped nroff.  (Found by Dan Jacobson with the
    XML::LibXML::Element man page.)  (Debian Bug#836831)

    [Pod::Man] Fix rendering bug causing "\s0(1)" to be mistakenly marked
    as a man page reference, later confusing backslash escaping.

    [Pod::Man] Add new lquote and rquote options (and corresponding
    --lquote and --rquote flags to pod2man) to set the left and right
    quotes for C<> text independently.  (#103298)

    Remove test for nested L<> markup, since an upcoming version of
    Pod::Simple will drop support for this.  (#114075)

6 years agoUpdate HTTP-Tiny to CPAN version 0.068
Chris 'BinGOs' Williams [Tue, 27 Sep 2016 12:38:24 +0000 (13:38 +0100)]
Update HTTP-Tiny to CPAN version 0.068


0.068     2016-09-23 16:10:03-04:00 America/New_York

    - No changes from 0.067-TRIAL.

0.067     2016-09-14 11:43:14-04:00 America/New_York (TRIAL RELEASE)


    - Includes redirect history when issuing a 599 internal error.

0.065     2016-09-09 22:42:43-04:00 America/New_York (TRIAL RELEASE)


    - Try harder to clean up environment in t/140_proxy.t (needed for VMS)

6 years agoUpdate Time-HiRes version in
Chris 'BinGOs' Williams [Tue, 27 Sep 2016 12:35:32 +0000 (13:35 +0100)]
Update Time-HiRes version in

6 years agoS_sv_2iuv_common(): optimise single digit strings
David Mitchell [Tue, 27 Sep 2016 11:59:01 +0000 (12:59 +0100)]
S_sv_2iuv_common(): optimise single digit strings

When converting a POK SV to an IOK SV, short-cut the relatively
common case of a string that is only one char long and consists of a
single digit, e.g. "0". Thus skipping all the floating-point, infinity,
whitespace etc complexity.

6 years agopp_leaveloop(): rename local vars
David Mitchell [Tue, 27 Sep 2016 11:11:50 +0000 (12:11 +0100)]
pp_leaveloop(): rename local vars

For internal consistency and for consistency with other pp_leave()
functions, rename oldsp to base and mark/MARK to oldsp.

Should be no functional difference.

6 years agopadrange, aelemfast: use label for private bits
David Mitchell [Tue, 27 Sep 2016 10:52:07 +0000 (11:52 +0100)]
padrange, aelemfast: use label for private bits

Change the output of Concise etc:

    $ perl -MO=Concise -e'my (@a,$b,$c); $a[5];'


    3  <0> padrange[@a:1,2; $b:1,2; $c:1,2] vM/LVINTRO,3
    5  <0> aelemfast_lex[@a:1,2] sR/5


    3  <0> padrange[@a:1,2; $b:1,2; $c:1,2] vM/LVINTRO,range=3
    5  <0> aelemfast_lex[@a:1,2] sR/key=5


6 years agoOP_AVHVSWITCH: make op_private bits 0..1 symbolic
David Mitchell [Tue, 27 Sep 2016 10:44:42 +0000 (11:44 +0100)]
OP_AVHVSWITCH: make op_private bits 0..1 symbolic

Add OPpAVHVSWITCH_MASK and make Concise etc display the offset as
/offset=2 rather than /2.

6 years agofixup some AV API pod descriptions.
David Mitchell [Tue, 27 Sep 2016 08:51:45 +0000 (09:51 +0100)]
fixup some AV API pod descriptions.

In particular:

* improve  some of the "perl equivalent" entries; for example
  av_store() is *not* like $myarray[$key] = $val, since it replaces the
  stored SV with a different SV, rather than just updating the current
  SV's value.

* Also change the "perl equivalent" variable names to match the function
  parameter names, e.g. $key rather than $idx.

* Don't use 'delete' as a perl equivalent, since delete is discouraged on

* You don't *have* to use av_store() to change undef values inserted by
  av_unshift; e.g. you could do av_fetch() then modify the returned
  undef SV; so just delete that sentence

6 years agoperldelta for PADOFFSET changes
David Mitchell [Tue, 27 Sep 2016 08:27:30 +0000 (09:27 +0100)]
perldelta for PADOFFSET changes

6 years agomake PL_ pad vars be of type PADOFFSET
David Mitchell [Mon, 26 Sep 2016 14:56:08 +0000 (15:56 +0100)]
make PL_ pad vars be of type PADOFFSET

Now that that PADOFFSET is signed, make


be of type PADOFFSET rather than I32, to match the rest of the pad

At the same time, change various I32 local vars in pad.c functions to be

6 years agomake PADOFFSET be SSizet_t
David Mitchell [Mon, 26 Sep 2016 14:22:25 +0000 (15:22 +0100)]
make PADOFFSET be SSizet_t

Currently it's defined as U32 or U64 depending on whether pointers are
32 bit or 64-bit, which is just a long-winded way of doing

    typedef Size_t PADOFFSET

Change it to

    typedef SSize_t PADOFFSET

Making it signed makes it easier to handle comparisons against PADOFFSET
values that can be -1, such as PL_comppad_name_floor (which will be fixed
in the next commit).

6 years agoremove a bunch of XXX's from pad.c
David Mitchell [Mon, 26 Sep 2016 14:04:21 +0000 (15:04 +0100)]
remove a bunch of XXX's from pad.c

When in 2002 I moved a bunch of code from op.c etc into a new file,
pad.c, I left this comment at the top:

    /* XXX DAPM
     * As of Sept 2002, this file is new and may be in a state of flux for
     * a while. I've marked things I intent to come back and look at further
     * with an 'XXX DAPM' comment.

Well, 12 years have passed since then, and if I was going to do any of
this stuff I would probably have done it by now, or someone else would.

So this commit removes the XXX's.

6 years agopad.c comments: clarify PERL_PADSEQ_INTRO
David Mitchell [Mon, 26 Sep 2016 13:59:26 +0000 (14:59 +0100)]
pad.c comments: clarify PERL_PADSEQ_INTRO

6 years agoadd a test for gv_try_downgrade()
David Mitchell [Wed, 21 Sep 2016 08:22:13 +0000 (09:22 +0100)]
add a test for gv_try_downgrade()

Previously, making gv_try_downgrade() just immediately return didn't cause
any tests to fail.

6 years agofix builds under USE_PAD_RESET
David Mitchell [Tue, 20 Sep 2016 08:45:07 +0000 (09:45 +0100)]
fix builds under USE_PAD_RESET

It had suffered some bitrot.

6 years agoCentralize definitions of MIN, MAX
Karl Williamson [Wed, 21 Sep 2016 22:15:08 +0000 (16:15 -0600)]
Centralize definitions of MIN, MAX

Instead of having each file have them, keep them in handy.h, but only
for core compilations.

6 years agoAdd is_utf8_fixed_width_buf_flags() and use it
Karl Williamson [Mon, 26 Sep 2016 04:04:08 +0000 (22:04 -0600)]
Add is_utf8_fixed_width_buf_flags() and use it

This encodes a simple pattern that may not be immediately obvious to
someone needing it.  If you have a fixed-size buffer that is full of
purportedly UTF-8 bytes, is it valid or not?  It's easy to do, as shown
in this commit.  The file test operators -T and -B can be simpified by
using this function.

6 years agoAdd API Unicode handling functions
Karl Williamson [Mon, 19 Sep 2016 15:59:32 +0000 (09:59 -0600)]
Add API Unicode handling functions

These functions are all extensions of the is_utf8_string_foo()
functions, that restrict the UTF-8 recognized as valid in various ways.
There are named ones for the two definitions that Unicode makes, and
foo_flags ones for more custom restrictions.

The named ones are implemented as tries, while the flags ones provide
complete generality

6 years agoAPItest/t/utf8.t: Rename variable
Karl Williamson [Sun, 25 Sep 2016 16:14:50 +0000 (10:14 -0600)]
APItest/t/utf8.t: Rename variable

The new name is clearer, which will matter more in the next commit

6 years agoXS-APItest/t/utf8.t: Add some tests
Karl Williamson [Tue, 20 Sep 2016 16:12:45 +0000 (10:12 -0600)]
XS-APItest/t/utf8.t: Add some tests

These will help in testing the string functions coming in the next
commit.  These add problematic code points to the first testing loop.
As a result some of the tests in the final loop may be redundant, but
since this .t is quick to run, I chose not to investigate and remove any

6 years agoMove #define to different header
Karl Williamson [Thu, 15 Sep 2016 01:57:46 +0000 (19:57 -0600)]
Move #define to different header

Instead of having a comment in one header pointing to the #define in the
other, remove the indirection and just have the #define itself where it
is needed.

6 years agoperlapi: Clarifications, nits in Unicode support docs
Karl Williamson [Mon, 19 Sep 2016 15:52:57 +0000 (09:52 -0600)]
perlapi: Clarifications, nits in Unicode support docs

This also does a white space change to inline.h

6 years agoperlapi: Minor clarifications to sv_utf8_decode
Karl Williamson [Thu, 15 Sep 2016 15:06:39 +0000 (09:06 -0600)]
perlapi: Minor clarifications to sv_utf8_decode

6 years agoTime-HiRes: bring up-to-date with CPAN.
James E Keenan [Sun, 25 Sep 2016 23:48:52 +0000 (19:48 -0400)]
Time-HiRes: bring up-to-date with CPAN.

The ext3/ext2 filesystems do not have subsecond resolution, therefore skip the
t/utime.t test. [ #116127]

6 years agopodcheck.t: perlepigraphs: don't note too long verbatims
Karl Williamson [Wed, 21 Sep 2016 22:12:50 +0000 (16:12 -0600)]
podcheck.t: perlepigraphs: don't note too long verbatims

These epigraphs may not be foldable properly.  Instead of warning when
new ones are added, ignore this category entirely for this pod.

6 years agomacos Sierra (10.12) hints comment updates.
Jarkko Hietaniemi [Sun, 25 Sep 2016 00:23:36 +0000 (20:23 -0400)]
macos Sierra (10.12) hints comment updates.

6 years agoUpdate for the Module-CoreList that is on teh CPAN
Chris 'BinGOs' Williams [Sat, 24 Sep 2016 22:56:18 +0000 (23:56 +0100)]
Update for the Module-CoreList that is on teh CPAN

6 years agoBump Module-CoreList version for bc46539a
Chris 'BinGOs' Williams [Sat, 24 Sep 2016 22:55:25 +0000 (23:55 +0100)]
Bump Module-CoreList version for bc46539a

6 years agoupdate Module::CoreList
Stevan Little [Sat, 24 Sep 2016 20:22:01 +0000 (22:22 +0200)]
update Module::CoreList

6 years agoupdating opcodes (version number mostly)
Stevan Little [Sat, 24 Sep 2016 19:59:52 +0000 (21:59 +0200)]
updating opcodes (version number mostly)

6 years agobumping the version number
Stevan Little [Sat, 24 Sep 2016 19:57:41 +0000 (21:57 +0200)]
bumping the version number

6 years agoutf8.c: #define MIN if not already defined
Karl Williamson [Wed, 21 Sep 2016 15:46:46 +0000 (09:46 -0600)]
utf8.c: #define MIN if not already defined

This is only used on EBCDIC.

6 years agoChange sv_setpvn(…, "…", …) to sv_setpvs(…, "…")
Dagfinn Ilmari Mannsåker [Wed, 21 Sep 2016 14:38:42 +0000 (15:38 +0100)]
Change sv_setpvn(…, "…", …) to sv_setpvs(…, "…")

The dual-life dists affected use Devel::PPPort, so can safely use
sv_setpvs() even though it wasn't added until Perl v5.10.0.

6 years agoFix typo in perlrun.pod
Steven Humphrey [Tue, 20 Sep 2016 11:42:39 +0000 (12:42 +0100)]
Fix typo in perlrun.pod

perl -c documentation has a typo when talking about BEGIN blocks.

Steven Humphrey is now a Perl author.

For: RT #129313

6 years agonew perldelta
Stevan Little [Tue, 20 Sep 2016 20:25:11 +0000 (22:25 +0200)]
new perldelta

6 years agoknown pod issues
Stevan Little [Tue, 20 Sep 2016 20:24:16 +0000 (22:24 +0200)]
known pod issues

6 years agoticking the release
Stevan Little [Tue, 20 Sep 2016 20:05:42 +0000 (22:05 +0200)]
ticking the release

6 years agoupdate epigraphs.pod
Stevan Little [Tue, 20 Sep 2016 19:59:20 +0000 (21:59 +0200)]
update epigraphs.pod

6 years agotypo
Sawyer X [Tue, 20 Sep 2016 20:28:42 +0000 (22:28 +0200)]

6 years agoadd new release to perlhist v5.25.5
Stevan Little [Tue, 20 Sep 2016 12:59:00 +0000 (14:59 +0200)]
add new release to perlhist

6 years agofinalize the perldelta
Stevan Little [Tue, 20 Sep 2016 12:54:37 +0000 (14:54 +0200)]
finalize the perldelta

6 years agoUpdate Module::CoreList for 5.25.5
Stevan Little [Tue, 20 Sep 2016 12:34:02 +0000 (14:34 +0200)]
Update Module::CoreList for 5.25.5