2 weeks agoreturn a generic true/false for ~~ overloads tonyc/smartmatch
Tony Cook [Thu, 17 Sep 2015 05:52:24 +0000]
return a generic true/false for ~~ overloads

rather than the return value of the overload method

2 weeks agomake ~~ return a generic true/false with a subref on the right
Tony Cook [Thu, 17 Sep 2015 04:56:59 +0000]
make ~~ return a generic true/false with a subref on the right

Previously it would return the value returned by the sub

2 weeks agomake when(/foo/) act like when(qr/foo/)
Tony Cook [Thu, 10 Sep 2015 03:56:20 +0000]
make when(/foo/) act like when(qr/foo/)

2 weeks agoadd postfix when BLOCK
Tony Cook [Mon, 13 Jul 2015 07:07:53 +0000]
add postfix when BLOCK

2 weeks agothe behaviour of objects in overloading has changed
Tony Cook [Mon, 13 Jul 2015 06:20:30 +0000]
the behaviour of objects in overloading has changed

re-worked separately because we might re-instate the older behaviour

2 weeks agorip out most of the smartmatch documentation, it's much simpler now
Tony Cook [Mon, 13 Jul 2015 06:07:24 +0000]
rip out most of the smartmatch documentation, it's much simpler now

2 weeks agoWarn at compile time where possible.
Tony Cook [Tue, 7 Jul 2015 04:13:51 +0000]
Warn at compile time where possible.

This commit probably needs work, and the very idea needs discussion.

2 weeks agoreintroduce conversion of $foo ~~ /bar/ to $foo ~~ qr/bar/
Tony Cook [Thu, 2 Jul 2015 06:22:15 +0000]
reintroduce conversion of $foo ~~ /bar/ to $foo ~~ qr/bar/

This does not convert an implicit /bar/ as in when (/bar/)

2 weeks agore-enable overload ~~ any
Tony Cook [Thu, 2 Jul 2015 04:14:54 +0000]
re-enable overload ~~ any

2 weeks agoupdate non-autodie tests to work under the new smartmatch limits
Tony Cook [Thu, 2 Jul 2015 00:32:16 +0000]
update non-autodie tests to work under the new smartmatch limits

2 weeks agodisallow smartmatches not explicitly permitted (runtime)
Tony Cook [Mon, 22 Jun 2015 04:06:29 +0000]
disallow smartmatches not explicitly permitted (runtime)

2 weeks agoNew whirled order for givwhen/last/next
Father Chrysostomos [Thu, 13 Sep 2012 07:18:28 +0000]
New whirled order for givwhen/last/next

given now responds to last and next.

break only breaks out of given, and does not complain about an
inner foreach.

when and default do an implicit regular next, not a ‘special’ next
that only breaks out of foreach() and given.

2 weeks agotoke.c: use goto to reduce repetitition
Father Chrysostomos [Wed, 12 Sep 2012 23:33:49 +0000]
toke.c: use goto to reduce repetitition

I couldn’t think of a name for the label that didn’t just repeat what
the code was doing (increment_lex_allbrackets_and_set_PL_expect), so I
gave it an arbitrary short name.

2 weeks agoswitch to done_testing()
Tony Cook [Tue, 23 Jun 2015 05:15:18 +0000]
switch to done_testing()

2 weeks agoSmart Match 3™
Father Chrysostomos [Wed, 12 Sep 2012 07:21:12 +0000]
Smart Match 3™

I was persuaded by Smylers’ argument concerning string equivalence:

But it is not too late for me to be overruled since this is not in
blead yet.

The list is:

      RHS type
   1. undef
   2. ~~ overloading
   3. reftype eq CODE
   4. reftype eq REGEXP
   5. fall back to eq

One question still remains:  Should undef ~~ "string" give a warning?
Currently it doesn’t, but neither does it call eq overloading on the
RHS if we actually have undef ~~ $overloaded_object_without_smartmatch.

This cannot be merged until we solve the fact that smart match
is used in:


This does not deal with loop controls yet, just smartmatch and the
smartmatch aspects of of givwhen.

2 weeks agoRemove legacy/dead code from B
Nicolas R [Fri, 11 Sep 2015 14:23:39 +0000]
Remove legacy/dead code from B

B was still using some PERL_VERSION checks
in multiple places whereas it's part of core.
This commit removes this dead code and bump B::VERSION.

For archeology we can still use git if we want to know
what it looks like in an older version.

2 weeks agoregexec.c: Use Perl_croak_nocontext()
Karl Williamson [Wed, 16 Sep 2015 21:58:27 +0000]
regexec.c: Use Perl_croak_nocontext()

Instead of doing a dTHX introduced in
22b433eff9a1ffa2454e18405a56650f07b385b5.  I should have pointed out in
that commit message, that instead of doing a full-fledged UTF-8
well-formedness check, it does a quick sanity check sufficient to
prevent looping

Spotted by Vincent Pitt

2 weeks agoRevert "amigaos4: flock unimplemented"
Jarkko Hietaniemi [Wed, 16 Sep 2015 21:05:19 +0000]
Revert "amigaos4: flock unimplemented"

This reverts commit 24631c4f6929bc824e657b74b2edfada4c8d05b0.

The new flock emulation for amigaos now tested with parallel builds
and found to fare well.

2 weeks agoPATCH [perl #123562] Regexp-matching "hangs"
Karl Williamson [Wed, 16 Sep 2015 20:34:31 +0000]
PATCH [perl #123562] Regexp-matching "hangs"

The regex engine got into an infinite loop because of the malformation.
It is trying to back-up over a sequence of UTF-8 continuation bytes.
But the character just before the sequence should be a start byte.  If
not, there is a malformation.  I added a test to croak if that isn't the
case so that it doesn't just infinitely loop.  I did this also in the
similar areas of regexec.c.

Comments long ago added to the code suggested that we check for
malformations in the vicinity of the new tests.  But that was never
done.  These new tests should be good enough to prevent looping, anyway.

2 weeks agoregcomp.c: Safer handling of malformed UTF-8
Karl Williamson [Wed, 16 Sep 2015 14:48:29 +0000]
regcomp.c: Safer handling of malformed UTF-8

This commit just changes a test to look for UTF-8 invariants instead of
legal UTF-8 start characters.  The effective difference is that now all
non-invariants go to the general utf8 handling function, which is
equipped to find malformed UTF-8.  Previously, this code would
improperly accept malformations that were illegal start characters or
continuation characters.

2 weeks agoAdd 2 books to perlbook
Zachary Storer [Wed, 16 Sep 2015 18:02:11 +0000]
Add 2 books to perlbook

2 weeks agoAdd Zachary Storer to AUTHORS
Karl Williamson [Wed, 16 Sep 2015 18:00:52 +0000]
Add Zachary Storer to AUTHORS

2 weeks agoperlbook: Decrease indent of verbatim lines
Karl Williamson [Wed, 16 Sep 2015 17:56:44 +0000]
perlbook: Decrease indent of verbatim lines

so that fewer are likely to exceed 79 columns

2 weeks agoperlbook: Add some L<> links
Karl Williamson [Wed, 16 Sep 2015 17:45:42 +0000]
perlbook: Add some L<> links

2 weeks agoamigaos4: whitespace only, in amigaos4/
Jarkko Hietaniemi [Tue, 15 Sep 2015 13:05:11 +0000]
amigaos4: whitespace only, in amigaos4/

Consistent formatting (and using "Andy Broad" style) for the amigaos4 code:

astyle --style=bsd --indent=tab=4 amigaos4/*.[hc]

(amigaos patch preparation script automates this)

2 weeks agoamigaos4: whitespace only
Andy Broad [Sun, 13 Sep 2015 21:40:23 +0000]
amigaos4: whitespace only

For preprocessor code use 2-indent instead of 4-indent.

2 weeks agoamigaos4: use #ifdef/ifndef __amigaos4__ when feasible
Andy Broad [Sun, 13 Sep 2015 18:53:59 +0000]
amigaos4: use #ifdef/ifndef __amigaos4__ when feasible

2 weeks agoamigaos4: declare the amigaos protos in amigaos.h
Andy Broad [Mon, 14 Sep 2015 14:28:14 +0000]
amigaos4: declare the amigaos protos in amigaos.h

2 weeks agoamigaos4: better kill() implementation
Andy Broad [Tue, 15 Sep 2015 13:01:12 +0000]
amigaos4: better kill() implementation

(the underlying UNIX emulation has changed)

2 weeks agoamigaos4: implement flock() emulation
Andy Broad [Sun, 13 Sep 2015 23:55:41 +0000]
amigaos4: implement flock() emulation

Beware: not an exact implementation, the locks follow the OS level
filehandle not the process.

2 weeks agoamigaos4: move the amigaos exec code under amigaos4
Andy Broad [Sun, 13 Sep 2015 18:37:43 +0000]
amigaos4: move the amigaos exec code under amigaos4

Largely reimplements 839a9f0254fa14d7e8432c6340262ff4.

The upside is that now doio.c and pp_sys.c have much less AmigaOS
specific ifdefs. As a downside, the exec code is now forked (pun
only partially accidental.)

The earlier story regarding fork+exec, that the AmigaOS creating
thread doesn't terminate but instead continues running is both true
and false.  The more detailed story is that the user-observable
behaviour is as with POSIX/UNIX.  The thread that created the new
"task" (to use the AmigaOS terms) does hang around -- but all it
does is to wait for the new task to terminate, and more importantly,
it holds on to the resources like filehandles.  If the task were to
immediately terminate, the resources would be reclaimed by the kernel.

2 weeks agoamigaos4: AmigaOS extensions need no ppport.h since in ext/
Andy Broad [Sun, 13 Sep 2015 23:49:34 +0000]
amigaos4: AmigaOS extensions need no ppport.h since in ext/

2 weeks agoamigaos4: minimized config.sh
Andy Broad [Sun, 13 Sep 2015 23:47:35 +0000]
amigaos4: minimized config.sh

2 weeks agoamigaos4: Configure: syslog extension not feasible
Andy Broad [Mon, 14 Sep 2015 14:37:45 +0000]
amigaos4: Configure: syslog extension not feasible

2 weeks agoFix too-long verbatim lines in perlfunc
Karl Williamson [Wed, 16 Sep 2015 02:06:39 +0000]
Fix too-long verbatim lines in perlfunc

These were added by 29b04a70d1bf9a10be65363f3f8d6dae44cfa6fc

2 weeks agoif.pm: Better failure message for 'no if'
Karl Williamson [Fri, 27 Mar 2015 03:46:19 +0000]
if.pm: Better failure message for 'no if'

It previously always said 'use if', even if 'no if' was what was

3 weeks agoPATCH [perl #120790] Unicode::UCD failure to warn on bad input
Karl Williamson [Mon, 9 Mar 2015 18:37:24 +0000]
PATCH [perl #120790] Unicode::UCD failure to warn on bad input

This ticket was originally because the requester did not realize the
function Unicode::UCD::charscript took a code point argument instead of
a chr one.  It was rejected on that basis.  But discussion here
suggested it would be better to warn on bad input instead of just
returning <undef>.  It turns out that all other routines in Unicode::UCD
but charscript and charblock already do warn.  This commit extends that
to the two outlier returns.

3 weeks agoprevent op/time.t failures on NetBSD 5.1
Tony Cook [Tue, 15 Sep 2015 00:12:04 +0000]
prevent op/time.t failures on NetBSD 5.1

- make the watchdog time exceed the maximum time for the "very basic times
  test".  This doesn't prevent the test from failing, but prevents the
  entire test script from being killed by the watchdog if the times()
  test does fail

- do more work inside the loop, with the previous "burn cycles" loop
  system time was increasing but user time stayed at its starting value.

3 weeks agoAdd test for sprintf ordering by both explicit index and not.
James E Keenan [Tue, 8 Sep 2015 12:59:49 +0000]
Add test for sprintf ordering by both explicit index and not.

Commit 638ca15 earlier in the 5.23 development cycle corrected a
long-standing bug in sprintf.  Not surprisingly, code outside the
core built on this bug will now exhibit a different behavior.
CPAN library Text-sprintfn is one such case.  One test in its
test suite began to fail; see

This commit adds the test which failed in Text-sprintfn's t/01-basic.t to our
t/op/sprintf.t with the corrected test result.  It also adds a 'printf'
version of that corrected expectation to pod/perlfunc.pod.

For: RT #125956

3 weeks agorelease managers for September and December 2015
Ricardo Signes [Mon, 14 Sep 2015 15:50:23 +0000]
release managers for September and December 2015

3 weeks agoUpdate ExtUtils-MakeMaker to CPAN version 7.10
Chris 'BinGOs' Williams [Mon, 14 Sep 2015 12:19:49 +0000]
Update ExtUtils-MakeMaker to CPAN version 7.10


7.10 Thu Sep 10 19:38:55 BST 2015

    Bug fixes:
    - Fix an issue with quoting of dist_ci target on Win32

7.08 Tue Sep  8 20:24:15 BST 2015

    This release reverts all the changes since v7.04 until such time
    as the regressions we have found in the "wild" of CPAN can be

    ExtUtils::Command has been included in this release as it was
    reincorporated in v7.06

    The following bug fixes have also been included:
    - RT#100268 fix wrong variable being used
    - Check exit status for commands in "make ci" target
    - Fix distsignature dependencies for parallel make
    - The bundled Encode::Locale has been updated to 1.04

3 weeks agoRemove ExtUtils-Command, it is merged in EUMM now
Chris 'BinGOs' Williams [Mon, 14 Sep 2015 12:18:22 +0000]
Remove ExtUtils-Command, it is merged in EUMM now

3 weeks agoModule-CoreList-5.20150912 is on the CPAN
Chris 'BinGOs' Williams [Mon, 14 Sep 2015 12:15:17 +0000]
Module-CoreList-5.20150912 is on the CPAN

3 weeks agoUpdate experimental to CPAN version 0.014
Chris 'BinGOs' Williams [Mon, 14 Sep 2015 12:13:37 +0000]
Update experimental to CPAN version 0.014


0.014     2015-09-12 00:29:37+02:00 Europe/Amsterdam
          Add bitwise to list of known features

3 weeks agoRevert "#126039 regexec.c: Fix compiler warning"
David Mitchell [Mon, 14 Sep 2015 13:13:27 +0000]
Revert "#126039 regexec.c: Fix compiler warning"

This reverts commit 801fcc250783bc56ec8033a5940b3257bcd9a7db.

This commit fixed some compiler warnings in S_regmatch() by adding
a new function-scoped var. I have a better fix - to be applied shortly -
that instead uses tmp boolean vars declared in a small scope as and where

3 weeks agoPATCH [perl #126039] regexec.c: Fix compiler warning
Dan Collins [Sun, 13 Sep 2015 15:24:14 +0000]
PATCH [perl #126039] regexec.c: Fix compiler warning

3 weeks agoAdd Dan Collins to AUTHORS
Karl Williamson [Sun, 13 Sep 2015 15:30:38 +0000]
Add Dan Collins to AUTHORS

3 weeks agoPATCH [perl #126036] toke.c: Silence some compiler warnings
Karl Williamson [Sun, 13 Sep 2015 03:02:24 +0000]
PATCH [perl #126036] toke.c: Silence some compiler warnings

The ticket proposes a new format to output IV's as hex using capital
letters for the digits A-F.  However, this isn't necessary in this case,
as even though these are IV's, they can never be negative, and we have
an existing format that prints these fine.

More work needs to be done to fix the problem if something larger than
an IV is used (currently it loops).

3 weeks agoregcomp.c: Simplify some code
Karl Williamson [Sat, 12 Sep 2015 17:39:37 +0000]
regcomp.c: Simplify some code

Commit 2d3d6e6e7c2d50b1cc47032cf089151823fb20a6 introduced the
'optimizable' variable which if FALSE prevents the [...] node from being
optimized, if otherwise possible, into something simpler.  It turns out
that several of the conditions which prevent such optimization can just
clear this flag when they are found, rather than having to test for the
conditions again later when the optimization is actually done.

3 weeks agoregcomp.c: Comment changes only
Karl Williamson [Sat, 12 Sep 2015 17:34:57 +0000]
regcomp.c: Comment changes only

3 weeks agoPATCH: [perl #125892] qr/(?[ ]) regression with '!'
Karl Williamson [Tue, 25 Aug 2015 03:09:02 +0000]
PATCH: [perl #125892] qr/(?[ ]) regression with '!'

This regression was introduced in 5.22.  It stems from a logic error I
made in a complicated 'if' statement.

3 weeks agoregcomp.c: Add synonym for macro complement
Karl Williamson [Sat, 12 Sep 2015 16:10:59 +0000]
regcomp.c: Add synonym for macro complement

OPERAND and OPERATOR are here complements of each other.
It's better to refer to the thing you are manipulating instead of
{! the thing you aren't}.

3 weeks agoUpdate release schedule
Steve Hay [Sat, 12 Sep 2015 20:10:55 +0000]
Update release schedule

5.20.3 is now done, slightly later than was planned
5.22.1 is coming next, but will probably be October now

3 weeks agoCopy perl5203delta into blead
Steve Hay [Sat, 12 Sep 2015 19:42:00 +0000]
Copy perl5203delta into blead

3 weeks agoAdd epigraph for 5.20.3
Steve Hay [Sat, 12 Sep 2015 19:21:58 +0000]
Add epigraph for 5.20.3

3 weeks ago5.20.3 today
Steve Hay [Sat, 12 Sep 2015 17:40:54 +0000]
5.20.3 today

3 weeks agoModule::CoreList: Fill in date for 5.20.3 release
Steve Hay [Sat, 12 Sep 2015 17:39:49 +0000]
Module::CoreList: Fill in date for 5.20.3 release

3 weeks agotoke.c: Silence some compiler warnings
Karl Williamson [Sat, 12 Sep 2015 13:19:03 +0000]
toke.c: Silence some compiler warnings

These were spotted by Daniel Dragan on Win32.

3 weeks agoreplace references to "-w" by strict/warnings
Lukas Mai [Fri, 11 Sep 2015 19:40:21 +0000]
replace references to "-w" by strict/warnings

3 weeks agoEnglish.pm: Only alias $- to $FORMAT_LINES_LEFT
Thomas Sibley [Thu, 10 Sep 2015 05:51:06 +0000]
English.pm: Only alias $- to $FORMAT_LINES_LEFT

Avoids aliasing %- and @- as %FORMAT_LINES_LEFT and @FORMAT_LINES_LEFT.

I audited the rest of perlvar and English.pm for over-eager aliasing of
unrelated variables but found no other cases.

3 weeks agoperlvar: %LAST_MATCH_START is not %-
Thomas Sibley [Thu, 10 Sep 2015 04:35:09 +0000]
perlvar: %LAST_MATCH_START is not %-

%- has no English alias.  %FORMAT_LINES_LEFT works in practice thanks to
indiscriminate typeglob aliasing, but that really doesn't count!

%LAST_PAREN_MATCHES or %LAST_PAREN_ALL_MATCH might be a reasonable
addition for %-, to parallel %+ and %LAST_PAREN_MATCH.

3 weeks agoPATCH: [perl #125990] panic: reg_node overrun
Karl Williamson [Fri, 11 Sep 2015 16:08:50 +0000]
PATCH: [perl #125990] panic: reg_node overrun

This is a result of a design flaw that I introduced in earlier releases
when attempting to fix earlier design flaws in dealing with the outlier
character ß, LATIN SMALL LETTER SHARP S.  The uppercase of this letter
is SS, so that when comparing case-insensitively, it should match 'ss',
and hence, in Unicode terminology, it folds to 'ss'.  This character is
the only one representable without using UTF-8 whose fold is longer than
1 byte, and so has to have special treatment.  Similarly, the sequence
'ss' can match caselessly the single byte ß, and this is the only such
sequence that can match something shorter than it, unless UTF-8 is
involved.  The matter is complicated by the fact that under /di rules,
the ß and 'ss' don't match each other, unless the target string is in
UTF-8.  The solution I used earlier (and continue to use) was to create
a special regnode EXACTFU_SS under /ui rules, in which any ß is folded
to 'ss'.  But under /di rules, a regular EXACTF regnode is used, and any
ß is retained as-is.

The problem reported here arises when something during the sizing pass
tells perl to use /ui rules rather than the /di rules that were in
effect at the beginning.  Recall that perl uses /d rules, for backward
compatibility, unless something overrides them.  This can be a 'use'
declaration, an explicit character set pattern modifier, or something in
the pattern.  This bug happens only with the final case.  There are
several Unicode-defined constructs that can occur in patterns; if one is
found, the perl interpreter infers that Unicode is desired, and switches
from /d to /u for the whole pattern.  Two such constructs are a Unicode
property, \p{}, and a Unicode named character, \N{}.  The
problem-reproducing code for this ticket uses the latter.

The problem was that the switch from /di to /ui was deferred until AFTER
the sizing pass.  (A flag was set when one of these constructs was
encountered to tell the parser to later do the switch.)

During the second pass, the code realizes it is under /ui, so creates an
EXACTFU_SS node and folds the ß into 'ss'.  But the first pass thought
it was under /di, so it sized for just the ß, i.e., for 1 byte, so we
exceed the allocated space and do a wild write.  This may not cause a
problem if the malloc'd space had rounded-up and there were only a few
of these ß characters.

One solution I considered was just keeping a global count of the ß
characters in EXACTF nodes.  One could just add these to the space
reserved if /ui rules ended up being used.  The problem with this is that
nodes that are near their maximum size without the extra space could
exceed it with, and thus have to be split into 2 nodes, and the extra
node would have an unplanned-for header, taking up more unaccounted-for
space.  So that doesn't work.  One could also just reserve two bytes for
every ß in an EXACTF node, thus wasting space unless /ui ends up being
used.  But the bigger problem is that the code that splits nodes would
have to be made more complicated.  It has to find a suitable splitting
spot, by searching through the text of the node, and now it would have
to deal with some of that space not being set.

Instead, I opted to change the code so that when it finds one of these
Unicode-defined constructs, it switches to /u immediately during the
sizing pass.  That means that the parse afterwards knows that it is /u
and allocates the correct space.  (We now have to remain in /u for the
remainder of the pass, so some code had to change that reverted this.)
This fixes the test case in the ticket.  But there remains a problem if
the sizing has happened earlier in the parse before the construct that
changes from /d to /u is encountered.  Like:


The incorrect sizing has already happened by the time the \N{} is
encountered.  One could solve this by restarting the parse whenever the
/d goes to /u (under /i, as this issue isn't a problem except when
folding ß).  That slows things down.  Instead, I opted to set a global
flag whenever a ß is found in an EXACTF node.  If that flag isn't set at
the time of the /d to /u switch, there's no need to restart the parse.

A 'use utf8' or 'use 5.012' or higher selects /u over /d, so the problem
did not happen with them, nor if the pattern has to be converted to
UTF-8, which restarts the sizing pass, and it only happens with the
sharp s character.  And probably unless there a several ß characters,
the rounding-up of malloc space, would cause this to not be an issue.
These explain why this hasn't been reported from the field.

3 weeks agoregcomp.c: Split an internal flag into 2
Karl Williamson [Thu, 10 Sep 2015 01:40:09 +0000]
regcomp.c: Split an internal flag into 2

This splits the flag used to communicate between parsing layers that the
sizing pass needs to be restarted and the pattern upgraded to UTF-8.  It
is split into a bit meaning to restart pass1 and a bit to do the
upgrade.  This is in preparation for the next commit which will have a
2nd reason to restart pass1.

3 weeks agoregcomp.c: Reorder a test
Karl Williamson [Fri, 11 Sep 2015 16:09:06 +0000]
regcomp.c: Reorder a test

Prior to this commit, the code tested for some side effects before
testing if the called function even succeeded.  This hasn't been a
problem before, because the called function didn't fail when called
from this context.  But a future commit will change that.

3 weeks agoregcomp.c: Add assertion and parameter to macro
Karl Williamson [Thu, 10 Sep 2015 01:37:02 +0000]
regcomp.c: Add assertion and parameter to macro

It's clearer and safer to pass the name of a local variable to a macro,
rather than assuming the macro knows the correct name.

3 weeks agoregcomp.c: Fix, clarify comments
Karl Williamson [Wed, 9 Sep 2015 18:43:15 +0000]
regcomp.c: Fix, clarify comments

3 weeks agopods: Discourage use of 'In' prefix for Unicode Block property
Karl Williamson [Fri, 11 Sep 2015 04:31:39 +0000]
pods: Discourage use of 'In' prefix for Unicode Block property

This changes perluniprops to not list the equivalent 'In' single form
method of specifying the Block property, and to discourage its use.  The
reason is that this is a Perl extension, the use of which is unstable.
A future Unicode release could take over the 'In...' name for a new
purpose, and perl would follow along, breaking the code that assumed the
former meaning.  Unicode does not know about this Perl extension, and
they wouldn't care if they did know.

The reason I'm doing this now is that the latest Unicode version
introduced some properties whose names begin with 'In', though no
conflicts arose.  But it is clear that such conflicts could arise in the
future.  So the documentation only is changed to warn people of this

perlunicode is update accordingly.

3 weeks agorefine the skip test for the 32-bit x86 ABI brokeness
Tony Cook [Wed, 9 Sep 2015 23:51:43 +0000]
refine the skip test for the 32-bit x86 ABI brokeness

- the previous test checked ivsize, but that will be 8 for -Duse64bitint

- similarly, byteorder is sized to an iv, so loosen that check to just
  make sure it's little-endian

- check we have something like an Intel FPU, this particular check would
  give a false negative on MSVC, but these tests are skipped on Win32

3 weeks agofix list rendering in perlhack
Karen Etheridge [Wed, 9 Sep 2015 00:28:34 +0000]
fix list rendering in perlhack

At http://perldoc.perl.org/perlhack.html#TESTING, this was rendering as:


    These select Unicode rules....

    If you use the form...

For: RT #126021

3 weeks agolocale.c: Silence porting messages
Karl Williamson [Wed, 9 Sep 2015 17:52:34 +0000]
locale.c: Silence porting messages

This changes from using the standard C, generally unsafe, library
functions to using Perl safer alternatives.  This code, only used in
debugging, really doesn't need that safety, but I had forgotten that
Perl makes it easy to add it, and it silences the warnings about using
the C functions from t/porting/libperl.t.  Why this warning didn't
happen in smoking, I don't know.

Spotted by Dave Mitchell.

3 weeks agoMake behavior of $Carp::MaxArgNums match docs
darksuji [Wed, 8 Apr 2015 01:44:48 +0000]
Make behavior of $Carp::MaxArgNums match docs

$Carp::MaxArgNums is supposed to be the number of arguments to display.
For a long time, Carp has instead shown $Carp::MaxArgNums + 1 arguments.
Correct the behavior by making it match the documentation.  Also update
tests to make what's being tested more obvious.

3 weeks agomktables: Fix --annotate option output
Karl Williamson [Tue, 8 Sep 2015 19:18:58 +0000]
mktables: Fix --annotate option output

 Special code suppressed the expanded output of some ranges, where it
 would be clear from the range itself what was meant.  However, for many
 output tables, that range output was changed, so the desired
 information is missing.  For these tables, don't suppress the expanded

3 weeks agoIncrement $VERSION in lib/locale.pm.
James E Keenan [Tue, 8 Sep 2015 20:29:38 +0000]
Increment $VERSION in lib/locale.pm.

3 weeks agoRefactor tr/// parsing to work on EBCDIC, fix other bug
Karl Williamson [Fri, 4 Sep 2015 17:32:26 +0000]
Refactor tr/// parsing to work on EBCDIC, fix other bug

This expands the concept introduced for regular expressions in v5.22 of
a portable range, to the transliteration operators.  A portable range
has at least one endpoint expressed as \N{} that indicates that the
Unicode definition is desired, or has the endpoints expressed as both
uppercase ASCII alphabetic letters or both lowercase ASCII alphabetics.

The refactor fixes several EBCDIC problems, and it fixes the problem in
all platforms wherein the first endpoint of a range was not checked to
be <= the final endpoint in UTF-8 strings.

There remains a bug in which if any transliterated code point is larger
than IV_MAX, perl loops.

4 weeks agoSlightly shorten most regex patterns
Karl Williamson [Tue, 8 Sep 2015 04:18:55 +0000]
Slightly shorten most regex patterns

A compiled pattern requires a byte for each non-default modifier, like
/i.  Previously, the worst case was presumed in allocating the space
(every modifier being non-default).  Now, only the actual needed space
is reserved.

4 weeks agot/loc_tools.pl: Fix some bugs in locales_enabled()
Karl Williamson [Mon, 7 Sep 2015 16:03:27 +0000]
t/loc_tools.pl: Fix some bugs in locales_enabled()

This code assumed that all locale categories were represented by
non-negative whole numbers.  However, it turns out that this assumption
is wrong, as on AIX, LC_ALL is -1.  This commit changes our assumption to
take into account that reality; it now assumes that all categories are
larger than a much more negative number, and now the new assumption is
tested for, and if wrong, the code dies instead of silently doing the
wrong thing.

There was also a bug where if a locale category wasn't defined on the
machine, but the corresponding #ifdef for using that category was still
set, the category was improperly assumed to exist

4 weeks agolib/locale.t: Use 'chomp' not 'chop'
Karl Williamson [Tue, 8 Sep 2015 15:39:18 +0000]
lib/locale.t: Use 'chomp' not 'chop'

4 weeks agolib/locale.t: sub ok() returns pass/fail
Karl Williamson [Tue, 8 Sep 2015 15:45:46 +0000]
lib/locale.t: sub ok() returns pass/fail

This file rolls its own TAP, and it did not have its ok() return

4 weeks agolib/locale.pm: Add an assertion
Karl Williamson [Sun, 6 Sep 2015 16:24:45 +0000]
lib/locale.pm: Add an assertion

It turns out that the code assumes that the values for LC_CTYPE,
LC_MESSAGES, ...  are small non-negative numbers, as a bit position is
reserved for each of these.  It's better to make this assumption
explicit rather than getting hard-to-find failures.

(LC_ALL doesn't have to be of this form, and is in fact -1 on AIX)

4 weeks agoAdd more -DL debugging info
Karl Williamson [Fri, 8 May 2015 21:19:56 +0000]
Add more -DL debugging info

This adds more stuff that gets dumped when debugging locale handling.
And it adds even more when the v modifier appears.

4 weeks agoAdd code for debugging locale initialization
Karl Williamson [Tue, 8 Sep 2015 15:53:48 +0000]
Add code for debugging locale initialization

This initialization is done before the processing of command line
arguments, so that it has to be handled specially.  This commit changes
the initialization code to output debugging information if the
environment variable PERL_DEBUG_LOCALE_INIT is set.

I don't see the need to document this outside the source, as anyone who
is using it would be reading the source anyway; it's of highly
specialized use.

4 weeks agolocale.c: Add clarifying comments
Karl Williamson [Tue, 8 Sep 2015 15:52:57 +0000]
locale.c: Add clarifying comments

4 weeks agoreport missing authors to stderr
Tony Cook [Tue, 8 Sep 2015 01:03:16 +0000]
report missing authors to stderr

So if authors.t fails the cause is obvious from the test output
*without* having to perform a verbose run.

4 weeks agoembed.fnc: Add comment
Karl Williamson [Sun, 6 Sep 2015 17:06:32 +0000]
embed.fnc: Add comment

4 weeks agoTest-Test.pm: Pedantic pod fixes
Karl Williamson [Mon, 7 Sep 2015 03:44:54 +0000]
Test-Test.pm: Pedantic pod fixes

4 weeks agoTest::Test.pm: EBCDIC fixes
Karl Williamson [Thu, 4 Apr 2013 01:06:52 +0000]
Test::Test.pm: EBCDIC fixes

We are getting Perl working again for EBCDIC in v5.22.  The changes here
are necessary to work for these platforms.  For modern Perls, there is
one code path for both ASCII and EBCDIC platforms; this wasn't possible
to do for earlier versions.

One perhaps not obvious change is that [^:ascii:] doesn't include \177
which the earlier version does.  However \177 was changed in the
substitute in the line above, so this change has no practical effect.

4 weeks agoRmv trailing ';' on #endif
Karl Williamson [Tue, 8 Sep 2015 02:06:40 +0000]
Rmv trailing ';' on #endif

This creates a compiler warning on AIX

4 weeks agoSkip aassign.t test under -DDEBUGGING on VMS.
Craig A. Berry [Mon, 7 Sep 2015 18:49:14 +0000]
Skip aassign.t test under -DDEBUGGING on VMS.

-DDEBUGGING has never gone in $Config{ccflags} on VMS, so the
existing skip check failed to skip.  There is, however, the
VMS-only $Config{usedebugging_perl} that is set to Y when DEBUGGING
is enabled.  As likely as not, writing this variable to config.sh
was an ancient accident, and it's not mentioned in Porting/Glossary.
However, it's there and seems to be a reliable indicator of what
we've got, so in the absence of anything else reliable, use it.

4 weeks agoSkip Amiga extensions on VMS.
Craig A. Berry [Mon, 7 Sep 2015 17:16:12 +0000]
Skip Amiga extensions on VMS.

We can't build them so don't try.

4 weeks agoDon't add -shared when the compiler is clang++
Chris 'BinGOs' Williams [Thu, 27 Aug 2015 14:30:10 +0000]
Don't add -shared when the compiler is clang++

4 weeks agoSupport parallel builds on Win32 with dmake
Tony Cook [Mon, 7 Sep 2015 04:14:00 +0000]
Support parallel builds on Win32 with dmake

4 weeks agoadd parallel support 4 Win32 dmake-uudmap+no 2nd run of config_h.PL part 3
Daniel Dragan [Sat, 15 Aug 2015 09:39:55 +0000]
add parallel support 4 Win32 dmake-uudmap+no 2nd run of config_h.PL part 3

-in $(CONFIGPM) target, remove config_h.PL running dmake again to rebuild
 $(CONFIGPM) target, configpm the script does not use config.h as input.
 The $(CONFIGPM) target is a choke/serialization point for parallel
 building, so it is high value to make it as fast as possible.
 Maybe a long time ago, configpm read config.h but it doesn't anymore.
 Nearly all the dynamic config vars are determined in config_sh.PL script
 and ..\config.sh target. config_h.PL contains very little logic, and this
 logic is only for config.h, and only when you want a var to be different
 in config.h than it is in Config.pm/Config_heavy.pl. Putting a breakpoint
 ("system 'pause';") in config_h.PL, copying Config.pm/Config_heavy.pl to
 ".old" versions, continuing execution in config_h.PL, then diffing the
 2 new Configs with the old 2 Configs before pre-config_h.PL and
 "$(PLMAKE) $(MAKEMACROS) $(CONFIGPM) $(MAKEFILE)" shows no differece.
 When dmake runs needlessly a 2nd time it emits a warning that nothing
 changed. This is intentional, since configpm doesn't update the timestamps
 /update the files if the Config files are identical to the old ones to
 prevent mass clean+rebuild of all modules when nothing global changed.

dmake:  Warning: -- Target [..\lib\Config.pm] was made but the time stamp
has not been updated.

-reduce number of steps to build generate_uudmap.exe.
 Compiling (140 ms on GCC 4.8.3) and linking (561 ms) is heavy weight
 compared to running generate_uudmap.exe (31 ms) and compiling globals.c
 (483 ms). dmake's algo for doing parallel is poor. On the main parallel
 pass with all the mini core .c files compiling ("MINI_OBJ"),
 only generate_uudmap.o will be generated as part of the chain of deps
 hanging off globals.o, after the 1st tier of MINI_OBJ has compiled in
 parallel, dmake will do another sweep of MINI_OBJ, this time it will find
 generate_uudmap.exe node and run linking, at this 2nd tier nothing ran
 except linking generate_uudmap. No parallel anything. This is a
 chokepoint. Then dmake does a 3rd sweep and runs the 3rd tier, which is
 run generate_uudmap.exe, again nothing parallel happens here. By
 combining compiling and linking in 1 target, the time spent serially
 linking generate_uudmap.exe, is moved into parallel time when the rest of
 MINI_OBJ compiles. Also a little bit of CPU and IO is saved by launching
 less processes (less cmd.exe shells, gcc/g++ process ran only once
 (gcc/g++ still run many standalone procs internally but now only 1 gcc
 was started not 2)).

-suppress warnings from dmake with .UPDATEALL, the 3 generated headers
 are made at the same time in real life, in the makefile it was written
 as if they weren't
dmake: Warning:--Found file corresponding to virtual target [..\uudmap.h].
dmake: Warning:--Found file corresponding to virtual target [..\mg_data.h].

-move generating the headers to the target that generates
 generate_uudmap.exe, this moves some serialization time, albeit small
 (30 ms) from right before miniperl link, to parallel time during 1st
 pass of MINI_OBJ

-collapse 3 shell runs of xcopy into 1 run of shell

"timeit cmd /c "cmd /c xcopy /f /r /i /d /y ..\perl.exe ..\t\ && cmd /c
xcopy /f /r /i /d /y ..\perl523.dll ..\t\
&& cmd /c xcopy /f /r /i /d /y ..\perlglob.exe ..\t\"" takes 140 ms

"timeit cmd /c "xcopy /f /r /i /d /y ..\perl.exe ..\t\
&& xcopy /f /r /i /d /y ..\perl523.dll ..\t\
&& xcopy /f /r /i /d /y ..\perlglob.exe ..\t\"" takes 78 ms on my machine

4 weeks agoadd parallel support 4 Win32 dmake-COREDIR parallelism part 2
Daniel Dragan [Sat, 15 Aug 2015 09:24:06 +0000]
add parallel support 4 Win32 dmake-COREDIR parallelism part 2

-defer the mass copy of headers to COREDIR until XS build time
 and dont use COREDIR for building miniperl interp or perl interp, more
 thing to do in parallel this way and 1 less path to search by the CC
-config_h.PL requires config.h to be in COREDIR, this XCOPY in CONFIGPM
 targ is where COREDIR is created if it doesnt exist already
-remove a bunch of XCOPY'es, copy the headers in 1 place only, and dont
 copy them unless they change based on timestamps
-the DYNALOADER dep already contains
 "..\make_ext.pl ..\lib\buildcustomize.pl $(CONFIGPM) $(HAVE_COREDIR)" dont
 specify them again in Extensions and Extensions_reonly, this probably
 reduces the size of dep graph in dmake, since dmake explodes the graph and
 checks the outline of the graph/tree very inefficiently in parallel mode
 (architectural problem with dmake)
-delete pdb files in root, otherwise switching VC version will make the
 next cl.exe error out that it can't write to the pdb file due to version
 numbers in the pdb file
-reorder core .c files in a blend of VC and GCC time order, this reduces
 a 1:08 mins time to do "dmake -P9 ../perl522.dll" to 0:54 mins on 8 core
 with GCC, see details in #123867

4 weeks agoadd parallel support 4 Win32 dmake building part 1
Daniel Dragan [Sat, 15 Aug 2015 20:03:49 +0000]
add parallel support 4 Win32 dmake building part 1

-if building a 32 bit Perl, with a 64bit dmake, force
 PROCESSOR_ARCHITECTURE to x86, otherwise the next couple macros will
 try to build a 64 bit perl with 32 bit CCs
-PDBOUT is required to run multiple VC cl.exe processes, otherwise all
 VC cl.exe processes will error out trying to lock and write to a
 file called "vc*0.pdb", PDBOUT is empty for GCC builds since they dont
 have PDB files
-to reduce excess IO calls checking for miniperl.exe plus remove a
 "Found file corresponding to virtual target" warning that dmake emits,
 make this makefile unaware that miniperl.exe exists. dmake has a very bad
 exponential number of IO/stat() calls for every target that is yet
 unbuilt, see procmon logs in [perl #123854], so instead of a stat on
 ../miniperl.exe, then ../lib/buildcustomize.pl, it will be just a stat on
-remove makefile awareness of ..\lib\Config_heavy.pl,
 if ..\lib\Config_heavy.pl is ever updated, so is ..\lib\Config.pm
 less IO calls for dmake, see also commit 962e59f394
-to break up the sequential nature of this makefile, allow (XS) Extensions
 to build, before (AKA parallel with) perl5**.dll and perl.exe are built.
 This is achieved by running makedef.pl very early, and generating
 perl5**.lib/libperl5**.a from the def file, and NOT generating
 perl5**.lib/libperl5**.a from perl5**.dll at link time of perl5**.dll.
 The conquence of this is, declspec(dllexport) is now unusable, but exports
 should be centrally managed anyways (embed.fnc/etc) so this isn't a big
-EUMM makefiles shouldn't be subject to parallelism, untested and disable
 for now, plus creating PLMAKE allows "dmake -n" to work for diagnosing
 this makefile
-slim down all target. Extensions* and UNIDATAFILES now know how to build
 themselves, the parallel nature says you can't rely on left to right
 execution of deps in a parent node to make a child (dep) node build
-miniperl.exe used to be unbuildable from a clean tree except from all
 target, since miniperl.exe didn't depend on mini config.h. Also mini dir
 can't be a target, since each .obj built will dirty the mini dir's time
 stamp and infinite loop happens, instead use a .exists file
-dmake rescans for all outstanding targets, at each recipe line to run,
 this early in the build process, there are an enormous amount of files to
 test for, so the echos are very slow, 350ms each, so combine as many of
 the lines of mini/.exists AKA mini config.h together as possible.  ".IF"
 can't be put inside "one line", so not all lines were merged. Shell "if"
 could be used to further group the echos but this enough to make the pause
 /cpu spining not really noticable. USE_CPLUSPLUS contains an unrolled line
 (the #endif) on both sides. See also procmon logs in [perl #123854]
-perllib.obj/.o needs perllibst.h which is built by miniperl+a script,
 perllibst.h target doesn't need any Extensions*, so perllib.obj is still
 quick to build
-perldll.def doesn't need perllibst.h since makedef.pl uses
 $Config{static_ext} to find boot xsubs to export, makedef.pl does not
 read perllibst.h, remove perllibst.h for more parallelism/less things to
 build before perldll.def runs, and therefore Extensions (XS) starts to
 run quicker, and Extensions (XS) is the longest target to build
-perlmain and perlmainst .obj/.o needs full perl headers to compile, they
 aren't like generate_uudmap.exe and perlglob.exe which are perlapi unaware
-perl.exe doesn't need perl5**.dll to build, just the imp lib to
 perl5**.dll, perl.exe is in the same category as XS modules, more
-ppport.h isn't needed in blead perl, since blead is the newest perl in the
 world, this allows Extensions (XS) to run sooner, ppport.h is replaced by
 a dummy empty file, delete ppport.h from final installed CORE dir during
 installation so the dummy ppport.h doesn't wind up in installed perl and isnt
 seen by CPAN XS modules during their building by the perl user after perl
 was build and installed, note mkppport script and mkppport.lst are unused
 in makefile.mk now
-break up the dependencies of all the Extensions* targets, static
 (just Win32CORE normally), dynamic XS and non-XS, these 3 run in parallel
 now, non-XS doesn't need perl5**.lib/.a or any C headers, just PP
-DLL XS requires PP DynaLoader.pm for dl_findfile() otherwise
 Mkbootstrap.pm fatally errors, Mkbootstrap.pm could be revised to not load
 DynaLoader on Win32, since "    if ($Config{'dlsrc'} =~ /^dl_dld/){" is
 false, but this is the easier path right now
-DynaLoader requires module lib to build itself, but Extensions_nonxs
 happens to not need mod lib, so move where mod lib is built
-in utils target, change it so it can run with miniperl, more parallelism,
 pl2bat doesn't require full perl, the full perl stuff is from
 commit 3fe9a6f19e from 5.003 and no ML archive is available to explain why
 full perl was used instead of mini perl

-add 4 modules to buildcustomize so nonxs and xs build simultaneously

-remove ancient cruft from commit 26618a56da from 1997 from README.w32
 dmake is automatically set inside CFG_VARS today. OSRELEASE is irrelavent
 today, Perl doesn't use any of the defaults (like name of CC) from the

-Reduce 21 calls of "cmd.exe /x/d/c cd" by miniperl to just 1 by saving and
 reusing cwd. This reduced the amount of time to run
 "..\miniperl.exe -I..\lib -f ..\write_buildcustomize.pl .." from 312 ms
 to 62 ms elapsed time using timeit.exe for me.

4 weeks agomove Test dist from ./cpan to ./dist
Ricardo Signes [Sun, 6 Sep 2015 19:45:12 +0000]
move Test dist from ./cpan to ./dist

4 weeks agoMETA.* regen for moved Math-* dists
Ricardo Signes [Sun, 6 Sep 2015 19:41:46 +0000]
META.* regen for moved Math-* dists

4 weeks agomove Math-Big* from ./dist to ./cpan
Ricardo Signes [Sat, 5 Sep 2015 14:20:42 +0000]
move Math-Big* from ./dist to ./cpan

4 weeks agobump versions of perl modules updated in AmigaOS branch
Ricardo Signes [Sun, 6 Sep 2015 16:48:14 +0000]
bump versions of perl modules updated in AmigaOS branch

4 weeks agore/speed.t: increase watchdog timeout
David Mitchell [Sun, 6 Sep 2015 09:43:18 +0000]
re/speed.t: increase watchdog timeout

49bc8c204e5 added more tests to this file, increasing its execution time
threefold under ASAN. Increase the watchdog timeout proportionally,
to stop occasional smoke failures.

4 weeks agoRegenerated podcheck db: AmigaOS pedantic failures
Karl Williamson [Sat, 5 Sep 2015 17:24:20 +0000]
Regenerated podcheck db: AmigaOS pedantic failures