6 months agosmoke smoke-me/khw-optimizer
Karl Williamson [Mon, 30 Sep 2013 04:56:08 +0000]

6 months agoRevert "regcomp.c: Remove unnecessary flag settings"
Karl Williamson [Mon, 30 Sep 2013 04:10:44 +0000]
Revert "regcomp.c: Remove unnecessary flag settings"

This reverts commit 43a64b8b430604bd4d76fd256a5babdccaf0ab2b.

6 months agotesting
Karl Williamson [Mon, 30 Sep 2013 04:10:39 +0000]

6 months agoUpdate Perl-OSType to CPAN version 1.006
Chris 'BinGOs' Williams [Sun, 29 Sep 2013 09:35:13 +0000]
Update Perl-OSType to CPAN version 1.006


1.006     2013-09-25 13:57:38 America/New_York


    - Compile test could hang on Windows


    - Dropped configure_requires for ExtUtils::MakeMaker to 6.17

6 months agoUpdate File-Temp to CPAN version 0.2302
Chris 'BinGOs' Williams [Sun, 29 Sep 2013 09:32:41 +0000]
Update File-Temp to CPAN version 0.2302


0.2302    2013-09-26 09:45:35 America/New_York

        * Drop minimum Perl version back to 5.6 (erroneously bumped by dzil)
        * Do not inherit from Exporter (requires Exporter 5.57) (thanks to
          Olivier Mengué)
        * 'use base ...' => 'use parent ...' as parent is lighter (thanks to
          Olivier Mengué)

6 months agoUpdate HTTP-Tiny to CPAN version 0.036
Chris 'BinGOs' Williams [Sun, 29 Sep 2013 09:25:33 +0000]
Update HTTP-Tiny to CPAN version 0.036


0.036     2013-09-25 12:10:06 America/New_York


    - Compile test could hang on Windows


    - Dropped configure_requires for ExtUtils::MakeMaker to 6.17


    - Updated support files

6 months agoUpdate File-Fetch to CPAN version 0.44
Chris 'BinGOs' Williams [Sun, 29 Sep 2013 09:23:43 +0000]
Update File-Fetch to CPAN version 0.44

6 months agoIncrement version number for threads.
James E Keenan [Fri, 27 Sep 2013 23:53:07 +0000]
Increment version number for threads.

For: RT #120033

6 months agoUpgrade to threads 1.88
Jerry D. Hedden [Fri, 27 Sep 2013 18:36:15 +0000]
Upgrade to threads 1.88

6 months agobetter pod for threads::_handle
Daniel Dragan [Thu, 26 Sep 2013 08:39:55 +0000]
better pod for threads::_handle

First time I tried to get the OS handle I wrote

unpack('P[Q || L /*PICK ONE*/]', $thread->_handle())

it crashed because _handle returns a number, not a packed string. unpack
wants a packed string. Mention the pointer is numeric and not to ever pass
the retval to unpack('P[.

6 months agoFile::Glob::VERSION++
Brian Fraser [Fri, 27 Sep 2013 17:30:32 +0000]

6 months agoFile::Glob: Dup glob state in CLONE()
Brian Fraser [Sat, 21 Sep 2013 06:19:52 +0000]
File::Glob: Dup glob state in CLONE()

This solves [perl #119897] and [perl #117823], and restores the
behavior of glob() in conjunction with threads of 5.14 and older.

Since 5.16, code that used glob() inside a thread had been
unintentionally sharing state between threads, which lead to things
like this crashing and failing assertions:

./perl -Ilib -Mthreads -e 'scalar glob("*"); threads->create(sub { glob("*") })->join();'

6 months agoUse a more reliable check for BSDish systems.
Andy Dougherty [Wed, 25 Sep 2013 12:35:58 +0000]
Use a more reliable check for BSDish systems.

Look for BSD defined in <sys/param.h>, rather than keeping a manual list
of BSD derivatives.

6 months agoregcomp.c: Improve -Dr output
Karl Williamson [Tue, 24 Sep 2013 18:49:56 +0000]
regcomp.c: Improve -Dr output

Sometimes sequences like [\w\s] were output as separate classes
[\w][\s].  And sometimes, an empty [] was output.  This fixes those and
eliminates all but one call to a macro, which is hence now just in-lined.

6 months agoregcomp.c: Don't exceed array bounds
Karl Williamson [Tue, 24 Sep 2013 18:27:22 +0000]
regcomp.c: Don't exceed array bounds

The upper limit of this loop was wrong.  It should be the number of
Posix classes that have space stored for them.  This caused a valgrind
error, but it's only when outputting a regular expression under, for
example,  -Dr

6 months agoperldelta for regex optimizer handling above-Latin1
Karl Williamson [Tue, 24 Sep 2013 18:11:36 +0000]
perldelta for regex optimizer handling above-Latin1


6 months agoregcomp.c: Move bit to different data structure
Karl Williamson [Tue, 24 Sep 2013 16:32:37 +0000]
regcomp.c: Move bit to different data structure

Commit 899d20b99829f8ecdc14e1351b533bc62a354dea was used to free up a
bit in a flags field that had run out of bits at the time.  Further work
has made that unnecessary, and this commit moves it back to the flags
field, which even after this commit has a spare bit (which is intended
to be used in a future commit).

Doing so makes this bit "just one of the guys", so can be operated on
en-masse with the others.  This allows a little code to be removed, and
the knowledge of this flag mostly confined to lower level subroutines.

6 months agoregcomp.c: Remove unnecessary flag settings
Karl Williamson [Tue, 24 Sep 2013 16:25:45 +0000]
regcomp.c: Remove unnecessary flag settings

I've looked at the code around each of these flag sets, and the flag
should already be set when these are called, so they are redundant.

6 months agoMake 'OR's logically 'or'
Karl Williamson [Tue, 24 Sep 2013 03:40:05 +0000]
Make 'OR's logically 'or'

The regex optimizer in several OR operations cleared the synthetic start
class (SSC) node from matching an empty string.  This doesn't seem
right.  The end result of an OR should be the same size or larger than
either of its inputs.  I talked it over with Yves Orton, and we decided
that even though we don't have test cases that demonstrate problems with
the current behavior, we should do the logical thing.  This change
should not cause code failures, as it only increases the things that the
SSC can match, perhaps these are false positives.

6 months agoregcomp.c: White-space, comments only
Karl Williamson [Mon, 23 Sep 2013 05:12:20 +0000]
regcomp.c: White-space, comments only

This moves the static functions introduced a few commits ago to more
logical places in the file, and wraps some long lines to 79 columns, and
a few nits in comments

6 months agoregcomp.c: Remove unused parameter in static function
Karl Williamson [Mon, 23 Sep 2013 04:56:20 +0000]
regcomp.c: Remove unused parameter in static function

This parameter is no longer used, since a few commits ago in this

6 months agoAdd some tests for the regex optimizer
Karl Williamson [Mon, 23 Sep 2013 04:46:10 +0000]
Add some tests for the regex optimizer

We don't have the infrastructure to test the regex optimizer, and I'm
not sure how to do it properly, without tying the tests to particular
optimizations.  What I did, however, was to go through the recently
changed optimizer code and write tests to exercise every branch, as far
as I could tell.

6 months agoregcomp.c: Tighten optimizer for /li matches
Karl Williamson [Mon, 23 Sep 2013 04:36:57 +0000]
regcomp.c: Tighten optimizer for /li matches

The synthetic start class (ssc) generated by the regex optimizer
frequently has case-sensitive matching enabled, even if nowhere in the
pattern is there a /i.  This commit causes any pattern that doesn't have
/i to not have its ssc contain a /i.

6 months agoTeach regex optimizer to handle above-Latin1
Karl Williamson [Mon, 23 Sep 2013 03:36:29 +0000]
Teach regex optimizer to handle above-Latin1

Until this commit, the regular expression optimizer has essentially
punted on above-Latin1 code points.  Under some circumstances, they
would be taken into account, more or less, but often, the generated
synthetic start class would end up matching all above-Latin1 code
points.  With the advent of inversion lists, it becomes feasible to
actually fully handle such code points, as inversion lists are a
convenient way to express arbitrary lists of code points and take their
union, intersection, etc.  This commit changes the optimizer to use
inversion lists for operating on the code points the synthetic start
class can match.

I don't much understand the overall operation of the optimizer.  I'm
told that previous porters found that perturbing it caused unexpected
behaviors.  I had promised to get this change in 5.18, but didn't.  I'm
trying to get it in early enough into the 5.20 preliminary series that
any problems will surface before 5.20 ships.

This commit doesn't change the macro level logic, but does significantly
change various micro level things.  Thus the 'and' and 'or' subroutines
have been rewritten to use inversion lists.  I'm pretty confident that
they do what their names suggest.  I re-derived the equations for what
these operations should do, getting the same results in some cases, but
extending others where the previous code mostly punted.  The derivations
are given in comments in the respective routines.

Some of the code is greatly simplified, as it no longer has to treat
above-Latin1 specially.

It is now feasible for /i matching of above-Latin1 code points to know
explicitly the folds that should be in the synthetic start class.  But
more prepatory work needs to be done before putting that into place.

6 months agoregcomp.c: Add some static functions
Karl Williamson [Mon, 23 Sep 2013 02:43:02 +0000]
regcomp.c: Add some static functions

This commit adds some functions that are currently unused, but will be
used in a future commit.  This commit is essentially to make the
differences smaller in that commit, as 'diff' is getting confused and
not outputting the logical differences.  The functions are added in a
block at the beginning of the file to avoid the 'diff' issues.  A later
white-space only commit will move them to more appropriate positions.

6 months agoregcomp.c: Use macro accessor uniformly
Karl Williamson [Tue, 10 Sep 2013 02:33:48 +0000]
regcomp.c: Use macro accessor uniformly

These instances were using the structure field directly; everywhere else
uses a macro that hides the field's location in the structure.  This
converts to use the macro everywhere.

6 months agoregcomp.c: Optimize e.g. /[\w\W]/l into dot
Karl Williamson [Sun, 15 Sep 2013 01:03:39 +0000]
regcomp.c: Optimize e.g. /[\w\W]/l into dot

This is an unlikely scenario for someone to include a Posix class and
its complement in the same bracketed character class, but looking for
this and optimizing it away helps the algorithm coming in a future
commit to look at the synthetic start class.

This commit only does this for /l matching.  For all other matching, if
we know at compile time what the posix classes match, this optimization
is already done.

6 months agoEnlarge dummy regex pass1 compilation node
Karl Williamson [Fri, 6 Sep 2013 04:40:54 +0000]
Enlarge dummy regex pass1 compilation node

In pass 1 of compiling regular expressions, the needed size is
calculated.  There is space allocated for a scratch node that can be
used for the things that the real one will hold in pass 2.  It is valid
only while working on the current node, and gets overwritten in the next

Until this commit, this scratch space was sized only for the smallest
node type, meaning that larger types could not use it for scratch.  Now
it is sized to be the largest non EXACTish node.

We could make it an array of 256 + overhead bytes instead to be able to
hold the EXACTish nodes, but I don't see a need for that now.

6 months agoregcomp.c: Use STR_WITH_LEN to avoid bookkeeping
Karl Williamson [Thu, 15 Aug 2013 21:27:08 +0000]
regcomp.c: Use STR_WITH_LEN to avoid bookkeeping

By changing the order of the parameters to the static function
S_add_data, we can call it with STR_WITH_LEN and avoid a human having to
count characters.

6 months agoRename regex flag bit for clarity
Karl Williamson [Thu, 15 Aug 2013 21:07:44 +0000]
Rename regex flag bit for clarity

ANYOF_UNICODE_ALL doesn't mean every Unicode code point.  It means those
above the Latin1 range.  Rename it, while retaining the old one for back

6 months agoregcomp.c: Better DEBUGGING builds error detection
Karl Williamson [Thu, 15 Aug 2013 20:55:16 +0000]
regcomp.c: Better DEBUGGING builds error detection

The code had a default: catch-all in the switch statement, but the
comments indicated that it was uncertain what all was being caught.
This changes this to panic only in DEBUGGING builds so that we can find
out if there are indeed other possibilities that we haven't handled, and
which could use better handling than the default, match everything.
The two known possibilities are given separate case: statements in
preparation for handling them differently.

6 months agoregcomp.c: Change some static parameters to const
Karl Williamson [Thu, 15 Aug 2013 20:49:37 +0000]
regcomp.c: Change some static parameters to const

I found I needed const in a future commit.

6 months agoRetain an inversion list's mortality in its replacement
Karl Williamson [Thu, 15 Aug 2013 20:27:53 +0000]
Retain an inversion list's mortality in its replacement

A couple of inversion list handling functions end up sometimes creating
a new inversion list, replacing the old one instead of modifying it.
This commit causes the replacement list to have the same mortality of
the old one.  That is, mortality is now preserved across these

6 months agoperl.c: Clean up some SV*s at termination
Karl Williamson [Thu, 15 Aug 2013 20:04:43 +0000]
perl.c: Clean up some SV*s at termination

These were omitted from cleaning up when PERL_DESTRUCT_LEVEL is non-zero

6 months agoregcomp.c: Add parameter to static function
Karl Williamson [Thu, 15 Aug 2013 17:19:02 +0000]
regcomp.c: Add parameter to static function

This parameter will be used in future commits.  This commit is really
only to make the difference listing smaller in those, by committing
separately just the book-keeping parts.  This parameter requires also
passing the aTHX_ thread parameter

6 months agoRemove PL_ASCII; use existing array slots for it
Karl Williamson [Thu, 15 Aug 2013 16:59:01 +0000]
Remove PL_ASCII; use existing array slots for it

PL_ASCII contains an inversion list to match the ASCII-range code
points.  It is unusable outside the core regular expression code because
all the functions that manipulate inversion lists are defined only
within a few core files.  Therefore no outside code should be depending
on it.

It turns out that there are arrays of similar inversion lists, and these
all have slots which should have this inversion list in them.  This
commit fills them, instead of using PL_ASCII.

6 months agoregcomp.c: Typos in comments; Fix another comment
Karl Williamson [Thu, 15 Aug 2013 16:51:24 +0000]
regcomp.c: Typos in comments; Fix another comment

The non-typo fix is the result of allowing a parameter to the function
be NULL, and not updating the comments to reflect that.

6 months agoregcomp.c: Fix syntax error in #ifdef'd out code
Karl Williamson [Thu, 15 Aug 2013 16:39:14 +0000]
regcomp.c: Fix syntax error in #ifdef'd out code

This line is currently not compiled, but would fail if the #ifdef is

6 months agoperl.h: Don't pollute global namespace
Karl Williamson [Thu, 15 Aug 2013 16:36:29 +0000]
perl.h: Don't pollute global namespace

These structures are used internally in the regular expression files,
and are declared here only because of #include ordering issues.  Wrap
them in an #ifdef so only visible to the correct files.

6 months agoMake typedef fully typedef
Karl Williamson [Thu, 15 Aug 2013 03:13:52 +0000]
Make typedef fully typedef

The regcomp.c struct RExC_state_t has not been usable fully as a
typedef, requiring the 'struct' at times.  This has caused me, and I
presume others, wasted time when we forget to use it under those
circumstances when it should be used, but it's never been a big enough
issue to cause me to spend tuits on it.  But, working on something else,
I finally came to the realization of what the problem is.  It is because
proto.h is #included before regcomp.h is, and so functions that are
declared in proto.h that have something that is a RExC_state_t as a
parameter don't know that it is a typedef because that is defined in
regcomp.h.  A way around this is already used for other similar
structures, and that is to declare them in perl.h which is always read
in before proto.h, leaving the definitions to regcomp.h.  Thus proto.h
knows enough to compile.

The structure was already declared in perl.h; just not typedef'd.
Otherwise proto.h would not know about it at all.  This patch moves two
regcomp.c related declarations in perl.h to the same section as the
others, and changes the one for RExC_state_t to be a typedef.  All the
'struct' uses are removed.

6 months agoregcomp.h: Create new typedef synonym for clarity
Karl Williamson [Wed, 14 Aug 2013 17:39:38 +0000]
regcomp.h: Create new typedef synonym for clarity

This commit finishes (at least for now) removing some of the overloading
of the term class.  A 'regnode_charclass_class' node contains space for
storing the posix classes it matches that are never defined until the
moment of matching because they are subject to the current run-time
locale.  This commit creates a typedef 'regnode_charclass_posixl'
synonym that doesn't re-use the term 'class' for two different purposes.

6 months agoregcomp.h: Parenthesize macro formal parameter
Karl Williamson [Fri, 9 Aug 2013 18:21:53 +0000]
regcomp.h: Parenthesize macro formal parameter

Not doing so can cause problems, so it is standard procedure to
parenthesize all parameters within a macro definition.

6 months agoregcomp.h: Add better named synonyms
Karl Williamson [Fri, 9 Aug 2013 17:51:09 +0000]
regcomp.h: Add better named synonyms

This continues the process started two commits ago of removing some of
the overloading of the term 'class'.

In this case, this commit adds some #defines referring to the portions
of the regnode associated with bracketed character classes, the ANYOF
node.  Specifically those portions that deal with the Posix character
classes, like \w and [:punct:] under /l (locale) matching are renamed
substituting POSIXL for CLASS.  POSIXL is already used for POSIX-related
things under /l.  I remember being terribly confused when I started
reading this code about this.  One had a class within a class.  This
should clarify things somewhat.

The old names are retained in case files outside the core #include and
use it (there are a few such in cpan).

6 months agoregcomp.c: Clarify comment
Karl Williamson [Sun, 15 Sep 2013 00:57:26 +0000]
regcomp.c: Clarify comment

This continues the process of removing some overloading of the word
'class', by changing this comment to use 'bracketed class', and

6 months agoregcomp.h: Move #define
Karl Williamson [Wed, 7 Aug 2013 03:41:53 +0000]
regcomp.h: Move #define

This moves it to be adjacent to similar #defines

6 months agoregcomp.c: Change names of some static functions
Karl Williamson [Wed, 14 Aug 2013 17:19:18 +0000]
regcomp.c: Change names of some static functions

The term 'class' is very overloaded in regex code and documentation.
perlrecharclass.pod calls the dot (matching any char) a class, and
calls the [] form "bracketed character classes".  There are other
meanings as well.  This is the first commit in a short series that
removes some of those overloadings.

One instance of class is the "synthetic start class", generated by the
regex optimizer to be a list of all the code points a sucessful match
could possibly start with.  This is useful in more quickly finding where
to start looking in matching against a target string.  Prior to this
commit, the routines that referred to this began with 'cl_', and the
formal parameters were 'cl', which could mean any class.  This commit
changes those instances of 'cl' to 'ssc' to indicate this is the only
type of class that is being handled.

6 months agoregcomp.c: Rework static function call; comments
Karl Williamson [Wed, 14 Aug 2013 16:01:53 +0000]
regcomp.c: Rework static function call; comments

The previous commit just extracted out code into a function.  This
commit renames a parameter for clarity, combines two parameters to make
the interface cleaner, and adds and moves comments around.

6 months agoregcomp.c: Extract code into separate function
Karl Williamson [Wed, 14 Aug 2013 17:09:58 +0000]
regcomp.c: Extract code into separate function

A future commit will use this functionality from a second place.  For
now, just cut and paste, and do the minimal ancillary work to get it to
compile and pass.

6 months agoregcomp.c: Use PL_sv_undef instead of NULL in an AV
Karl Williamson [Fri, 2 Aug 2013 18:33:07 +0000]
regcomp.c: Use PL_sv_undef instead of NULL in an AV

The NULL gets turned into an SVt_NULL anyway.  This array is read only
by S_core_regclass_swash() in regexec.c.  That uses an SvROK, so it
doesn't have to change.

This commit also beefs up the comments around this operation

6 months agoAdd regnode struct for synthetic start class
Karl Williamson [Thu, 1 Aug 2013 20:49:29 +0000]
Add regnode struct for synthetic start class

As part of extending the regular expression optimizer to properly handle
above Latin1 code points, I need an inversion list to contain which code
points the synthetic start class (ssc) matches.

The ssc currently is the same as a locale-aware ANYOF node, which uses
the struct of a regular ANYOF node, plus some extra fields at the end.

This commit creates a new typedef for ssc use, which is the locale-aware
ANYOF node, plus an extra SV* at the end to hold the inversion list.

6 months agoregcomp.c: Move a #define, add a similar one
Karl Williamson [Thu, 25 Jul 2013 01:56:24 +0000]
regcomp.c: Move a #define, add a similar one

Future commits will use this #define (and the new one) earlier in the
file than currently defined.

6 months agoAdd inversion list for U+80 - U+FF
Karl Williamson [Tue, 23 Jul 2013 16:01:29 +0000]
Add inversion list for U+80 - U+FF

This is the upper half of the Latin1 range.  This simplifies some code
very slightly, but will be of use in future commits.

6 months agoregcomp.c: Extract code into separate function
Karl Williamson [Mon, 22 Jul 2013 03:13:38 +0000]
regcomp.c: Extract code into separate function

This is in preparation for it to be called from more than one place, in
a future commit.

6 months agoregcomp.c: Remove redundant matching possibilities
Karl Williamson [Sun, 21 Jul 2013 16:10:56 +0000]
regcomp.c: Remove redundant matching possibilities

The flag ANYOF_UNICODE_ALL is for performance.  It is set when the
inversion list for the ANYOF node includes every code point above
Latin1, and avoids runtime searching through the list.  We don't need
both, as the flag being set short-circuits even looking at the other
list.  By removing the code points from the list, we perhaps will get
rid of the list entirely, thus saving some operations, or will shorten
it so that later binary searches run faster.

6 months agoregcomp.c: Centralize assignment
Karl Williamson [Sun, 21 Jul 2013 14:21:34 +0000]
regcomp.c: Centralize assignment

It's better to do something in one common place than two.  This properly
initializes the regex opcode for the synthetic start class when it is
created, rather than at the end where the code has to be repeated to get
all instances.

6 months agoperlreguts: Bring up-to-date
Karl Williamson [Fri, 13 Sep 2013 01:42:51 +0000]
perlreguts: Bring up-to-date

Various changes have been made to regcomp.c that didn't make it into
perlreguts until now.

6 months agoperlreguts.pod: Nits
Karl Williamson [Fri, 13 Sep 2013 00:03:19 +0000]
perlreguts.pod: Nits

6 months agoregcomp.c: Convert another I32 to SSize_t
Karl Williamson [Sat, 14 Sep 2013 19:17:21 +0000]
regcomp.c: Convert another I32 to SSize_t

This code is normally #ifdef'd out, and so was missed in the earlier
conversions, commit ed56dbcb51c55e631d5f4931f88efe008e5349c4.

6 months agoConsistently use __sun to identify SunOS
Brian Fraser [Wed, 11 Sep 2013 19:57:57 +0000]
Consistently use __sun to identify SunOS

The core mostly used __sun already, but '__sun__' and 'sun' were
also present.

6 months agoperl.h: Comment was mistakenly passed to the preprocessor
Brian Fraser [Wed, 11 Sep 2013 19:51:01 +0000]
perl.h: Comment was mistakenly passed to the preprocessor

This was a typo introduced in 27da23d5

6 months agoperl.h: STMT_START/END don't need a special case for suncc anymore
Brian Fraser [Wed, 11 Sep 2013 19:49:37 +0000]
perl.h: STMT_START/END don't need a special case for suncc anymore

6 months agoRemoved the define for FCALL
Brian Fraser [Mon, 9 Sep 2013 23:37:24 +0000]
Removed the define for FCALL

This is a leftover from the PERL_OBJECT days; These days it was only
used on one spot and did nothing useful.

6 months ago[PATCH] Fixed bug where is_core assumed linear release sequence
Neil Bowers [Mon, 23 Sep 2013 22:35:18 +0000]
[PATCH] Fixed bug where is_core assumed linear release sequence

If you specified a version of the module, is_core has to track through
releases, as the %delta data structure only records where a module
version number changes in core, not every module version number in every release.
I was naively trawling the releases in numerical order, but %delta includes
information that let's you construct the release tree.

This fix only traverses the branch of the overall release tree that leads
to the specified Perl release. Further explanation and example in blog post:


Signed-off-by: Chris 'BinGOs' Williams <chris@bingosnet.co.uk>

6 months agoUpdate ExtUtils-MakeMaker to CPAN version 6.78
Chris 'BinGOs' Williams [Mon, 23 Sep 2013 17:27:33 +0000]
Update ExtUtils-MakeMaker to CPAN version 6.78


6.78 Mon Sep 23 13:44:39 BST 2013

    No changes from 6.77_08

6.77_08 Sun Sep 22 18:43:23 BST 2013
    New feature:
    * Made UNINST an attribute, so removing shadowed modules
      can be set 'perl Makefile.PL UNINST=1'

6.77_07 Sat Sep 21 09:44:19 BST 2013
    Bug fixes:
    * do not set default switches in Test::Harness; not even -w

6.77_06 Thu Sep 19 15:36:59 BST 2013
    Dist fixes:
    * Previous tarball was corrupted

6.77_05 Thu Sep 19 14:09:00 BST 2013
    Bug fixes:
    * Fix 3 more tests to work in parallel. Now works with HARNESS_OPTIONS=j64

6.77_04 Wed Sep 18 19:23:38 BST 2013
    Bug fixes:
    * Fixed PERL_SRC for core tests after parallelisation
      enhancements were made in 6.77_01

6.77_03 Mon Sep 16 12:20:25 BST 2013
    VMS fixes:
    * CCFLAGS may have appendages not from PERL_MM_OPT

6.77_02 Thu Sep 12 21:21:12 BST 2013
    Bug fixes:
    * Support 'perl' as a PREREQ_PM target
    * RT#77029 Support linefeeds in abstract parsing
    * Skip some tests when cross-compiling core

6.77_01 Tue Sep 10 15:20:42 BST 2013
    Bug fixes:
    * RT#7248 warn if NAME is not valid package name
    * Perl#36539 reverse search order for finding perl
    * parse_version() should work with taint mode now
    * RT#69590 enable tests to be run in parallel

6 months agodocument fixing of #119927 (localizing $\) in 5.18.0
Ricardo Signes [Mon, 23 Sep 2013 15:52:47 +0000]
document fixing of #119927 (localizing $\) in 5.18.0

6 months agoUpgrade podlators from 2.5.1 to 2.5.2
Steve Hay [Mon, 23 Sep 2013 08:10:11 +0000]
Upgrade podlators from 2.5.1 to 2.5.2

This incorporates CPAN RT #87440.

6 months agoAnother faulty padrange assumption
Father Chrysostomos [Sat, 21 Sep 2013 21:03:38 +0000]
Another faulty padrange assumption

Commit 7601007 was not sufficient.  There are two places where the
padrange optimisation tries to combine multiple padranges.

When a padrange op is created in rpeep, the code first checks whether
the previous op is already a padrange, so the two can be combined, as
in this case:

    my ($a,$b,$c);
    my ($d,$e,$f);

Then the code checks whether it can swallow up any singletons follow-
ing it, optimising cases like this:

    my ($v,$w,$x);
    my $y;

Commit 7601007 fixed the latter, which was assuming that $x and $y
would have contiguous pad offsets.

This commit fixes the former code, which assumed $c and $d would have
contiguous offsets.

This was causing assertion failures or crashes for Devel::CallParser
0.001 (0.002 works around it), because Devel::CallParser creates new
pad entries when the second ‘my’ keyword is encountered, causing the
pad offsets not to be contiguous.

6 months agoperl5200delta: Remove Data::Alias from Known Problems
Father Chrysostomos [Sat, 21 Sep 2013 15:46:09 +0000]
perl5200delta: Remove Data::Alias from Known Problems

1.18 has just been released and works with bleadperl.

6 months agoRemove bad assertion in gv.c:newGP
Father Chrysostomos [Sat, 21 Sep 2013 14:43:12 +0000]
Remove bad assertion in gv.c:newGP

See the thread starting at

Under the assumption that PL_curcop could never be null in newGP (even
when set to null by S_cop_free in op.c), I added an assertion to
newGP, which still leaving the null checks in place.  The idea was
that, if PL_curcop is ever null there, we want to know about it, since
it is probably a bug.

It turns out this code (reduced from DBIx::Class’s test suite), can
fail that assertion:

  bless {} and exit;

exit() calls leave_scope, which frees the INIT block.  Since PL_curcop
(the statement inside INIT) would end up pointing to free memory, it
is set to null.  When it exits, call_sv does FREETMPS:

case 2:
    /* my_exit() was called */
    assert(0); /* NOTREACHED */

FREETMPS ends up freeing the object (bless {}), which results
in a DESTROY method lookup.  For the sake of caching methods,
*main::DESTROY is autovivified.  GV creation trips on the assertion in
newGP that makes sure PL_curcop is null.

So this proves that we really do need to check for a null
PL_curcop in newGP.

While we could avoid having DESTROY lookup vivify *main::DESTROY
(since the cache there would only be used for explicit ->DESTROY
calls, the usual DESTROY cache being stuffed into SvSTASH(stash)),
that would complicate things for no gain.

6 months agoperl5194delta: Link to % slice docs in perldata
Father Chrysostomos [Sat, 21 Sep 2013 14:12:10 +0000]
perl5194delta: Link to % slice docs in perldata

6 months agoTest that ${foo{bar}} and ${\nfoo{bar}} mean the same thing.
Brian Fraser [Sat, 21 Sep 2013 13:30:48 +0000]
Test that ${foo{bar}} and ${\nfoo{bar}} mean the same thing.

This was changed to consistently parse as $foo{bar} in a49b10d0a8.
Previously, it would parse to either that or ${(foo {bar})},
depending on the presence of newlines, and the existence of a
sub foo with prototype (&).

6 months agoUp the version of File::Spec from 3.44 to 3.45
Brian Fraser [Sat, 21 Sep 2013 12:24:20 +0000]
Up the version of File::Spec from 3.44 to 3.45

Commit adf4621acac did this for Cwd.pm. but not for File::Spec and
family, which belong to the same distribution.

6 months agoUpgrade autodie from version 2.21 to 2.22
Steve Hay [Sat, 21 Sep 2013 12:09:54 +0000]
Upgrade autodie from version 2.21 to 2.22

This has no installed code changes, but incorporates CPAN RT#88444 (but not
yet CPAN RT #87237).

6 months agoRemoved the ifdefs for INCOMPLETE_TAINTS
Brian Fraser [Fri, 6 Sep 2013 01:05:38 +0000]
Removed the ifdefs for INCOMPLETE_TAINTS

This was added in 5.5/5.6 as a backwards-compatibility measure
when taint was extended to happen in more places.

6 months agoRemoved the define for ISHISH
Brian Fraser [Sat, 21 Sep 2013 08:06:59 +0000]
Removed the define for ISHISH

Each platform defined their own name in ISHISH. However, nothing
used it, and the list of platforms was severely lacking.

6 months agoRemoved an ifdef for IS_UTF8_CHAR in utf8.c
Brian Fraser [Sat, 7 Sep 2013 03:31:36 +0000]
Removed an ifdef for IS_UTF8_CHAR in utf8.c

IS_UTF8_CHAR is defined by utf8.h, so this is always defined.
In fact, later in utf8.c we use it again, this time without the

6 months agoRemoved HAS_SOCKET__bad_code_maybe
Brian Fraser [Fri, 6 Sep 2013 17:34:56 +0000]
Removed HAS_SOCKET__bad_code_maybe

6 months agoRemoved the use of SPARC64_GCC_WORKAROUND
Brian Fraser [Fri, 6 Sep 2013 13:50:25 +0000]
Removed the use of SPARC64_GCC_WORKAROUND

As the name implies, this worked around a bug in gcc, particularly,
gcc 2.x, in SPARC64.  No longer relevant.

6 months agoReplaced the last use of HAS_GNULIBC with __GLIBC__
Brian Fraser [Fri, 6 Sep 2013 13:38:08 +0000]
Replaced the last use of HAS_GNULIBC with __GLIBC__

6 months agoRemoved DUMP_FDS and dump_fds()
Brian Fraser [Fri, 6 Sep 2013 01:32:05 +0000]
Removed DUMP_FDS and dump_fds()

If perl was compiled with -DDUMP_FDS, it would define dump_fds
and add it to the API, although even then nothing used it.
dump_fds() itself was buggy, only checking for fds 0 through 32.

6 months agoRemoved the ifdefs for BUGGY_MSC and BUGGY_MSC6
Brian Fraser [Fri, 6 Sep 2013 01:29:02 +0000]
Removed the ifdefs for BUGGY_MSC and BUGGY_MSC6

These are leftovers from the perl 4 era config.h.

6 months agoReplaced an ifdef for sv_dup with USE_ITHREADS
Brian Fraser [Fri, 6 Sep 2013 01:25:25 +0000]
Replaced an ifdef for sv_dup with USE_ITHREADS

6 months agoperl.h: Always unconditionally include sys/types.h
Brian Fraser [Fri, 6 Sep 2013 01:24:46 +0000]
perl.h: Always unconditionally include sys/types.h

6 months agoRemoved OP_IN_REGISTER and related defines.
Brian Fraser [Fri, 6 Sep 2013 01:16:50 +0000]
Removed OP_IN_REGISTER and related defines.

Added as an experiment in 462e5cf6, it never quite worked, and
recently wasn't even using registers.

6 months agoRemoved the ifdefs for __SC__ in toke.c
Brian Fraser [Fri, 6 Sep 2013 00:59:19 +0000]
Removed the ifdefs for __SC__ in toke.c

6 months agoRemoved the ifdef & define for VDf
Brian Fraser [Fri, 6 Sep 2013 00:58:06 +0000]
Removed the ifdef & define for VDf

This remained only for compatibility with CPAN, but nothing there
uses it.

6 months agoRemoved the ifdef for FPUTS_BOTCH
Brian Fraser [Sat, 31 Aug 2013 01:47:31 +0000]
Removed the ifdef for FPUTS_BOTCH

This enabled a workaround for fputs on SunOS 4.0.1 and 4.0.2,
SunOS 4.1.x and later do not have the problem.

6 months agoRemove the ifdefs for ULTRIX_STDIO_BOTCH
Brian Fraser [Sat, 31 Aug 2013 01:40:46 +0000]
Remove the ifdefs for ULTRIX_STDIO_BOTCH

Not only has Ultrix been long out of support, this ifdef was
working around a bug particular to Ultrix 1.2.

6 months agoRemove an ifdef for the Harris HCX-9 froms sv.c
Brian Fraser [Fri, 30 Aug 2013 23:52:21 +0000]
Remove an ifdef for the Harris HCX-9 froms sv.c

Historical cruft.

6 months agoRemove HAS_64K_LIMIT
Brian Fraser [Fri, 30 Aug 2013 23:25:12 +0000]
Remove HAS_64K_LIMIT

This was only defined for MSDOS if not using DJGPP.  We've long
since dropped support for that, so this define and related code
can go.

6 months agoRemoved an '#ifdef COMMENTARY' in toke.c
Brian Fraser [Sat, 7 Sep 2013 03:37:19 +0000]
Removed an '#ifdef COMMENTARY' in toke.c

This was added as a micro-optimiaztion twenty years ago.

6 months agotoke.c: Remove a cargo-culted #undef CLINE
Brian Fraser [Fri, 30 Aug 2013 21:38:05 +0000]
toke.c: Remove a cargo-culted #undef CLINE

6 months agoRemove a '#undef ff_next' remnant from ages past.
Brian Fraser [Fri, 30 Aug 2013 21:02:45 +0000]
Remove a '#undef ff_next' remnant from ages past.

This was discussed long ago on the list but never actually removed:

6 months agoregcomp.c: Remove the last usage of NO_UNARY_PLUS
Brian Fraser [Fri, 30 Aug 2013 20:37:27 +0000]
regcomp.c: Remove the last usage of NO_UNARY_PLUS

This was set for some VMS variants in 5.005, but has since been
excised from vmsish.h.  The ifdef in regcomp was a leftover.

6 months agoregcomp.c: Remove a cargo-culted #undef SPSTART
Brian Fraser [Fri, 30 Aug 2013 20:36:46 +0000]
regcomp.c: Remove a cargo-culted #undef SPSTART

6 months agoregcomp.c: Remove a #undef op
Brian Fraser [Fri, 30 Aug 2013 20:25:10 +0000]
regcomp.c: Remove a #undef op

6 months agoregcomp.c: Remove a useless use of I_STDARG
Brian Fraser [Fri, 30 Aug 2013 17:42:40 +0000]
regcomp.c: Remove a useless use of I_STDARG

6 months agoModule::CoreList export %delta and document it
Chris 'BinGOs' Williams [Sat, 21 Sep 2013 10:35:07 +0000]
Module::CoreList export %delta and document it

6 months agotest that $\ is localized and restored even if it was undef
Ricardo Signes [Sat, 21 Sep 2013 05:51:36 +0000]
test that $\ is localized and restored even if it was undef

This was broken before 4bac9ae47b5ad7845a24e26b0e95609805de688a
but there is no test, and it is not clear that we knew about
the bug or the fix.

6 months agoRMG - Add a note about merging the release branch back into blead
Steve Hay [Sat, 21 Sep 2013 00:05:11 +0000]
RMG - Add a note about merging the release branch back into blead

I was momentarily confused and almost did the wrong thing when I saw that
"git merge release-5.19.4" had produced a merge commit (71d5a36340),
whereas the merge of 5.19.3 a month ago did not (see f865d60069).

The cause was simply that a change (ac239e1c3e) had been pushed to blead
since I'd created the release branch, which had not happened when merging
the 5.19.3 release branch last month.