Steve Hay [Mon, 14 Apr 2014 20:00:48 +0000 (21:00 +0100)]
Fix DllMain definition to fix building with gcc-4.8.1 from mingw.org
This partly fixes perl #121643.
Steve Hay [Mon, 14 Apr 2014 19:59:44 +0000 (20:59 +0100)]
Set Off_t et al correctly for USE_LARGE_FILES builds on Windows
The canned config files used to build miniperl.exe (with some updates
applied by Makefile / makefile.mk) have the non-USE_LARGE_FILES settings
for Off_t, LSEEKSIZE and Off_t_size, resulting in an uninitialized memory
read in win32_fseek() in miniperl.exe, which recently started causing
exetype.pl to write a 4GB wperl.exe during the build of a 64-bit perl.
Change Makefile / makefile.mk to use the correct settings for the build of
miniperl.exe. This fixes perl #121471.
Chris 'BinGOs' Williams [Mon, 14 Apr 2014 21:53:13 +0000 (22:53 +0100)]
Bump ExtUtils::Install version to 1.65
Matthew Horsfall (alh) [Mon, 14 Apr 2014 17:22:04 +0000 (13:22 -0400)]
Update perldelta for #121512 (
9fdd5a7ac7)
David Mitchell [Mon, 14 Apr 2014 15:03:14 +0000 (16:03 +0100)]
perldelta: add entry for //m fix
David Mitchell [Mon, 14 Apr 2014 14:31:06 +0000 (15:31 +0100)]
run/locale.t: reindent block
Re-indent a block of code after the previous commit added an extra scope.
Whitespace-only change
David Mitchell [Mon, 14 Apr 2014 14:26:18 +0000 (15:26 +0100)]
run/locale.t: silence shell warnings
A couple of tests do
local $ENV{LC_ALL} = "invalid";
fresh_perl_is(...);
this causes a shell to be invoked with an invalid locale. Some shells
such as bash, become very noisy in this case:
$ LC_ALL=invalid /bin/sh -c 'echo yes'
/bin/sh: warning: setlocale: LC_ALL: cannot change locale (invalid): No such file or directory
yes
$
Silence these warnings by temporarily closing STDERR. Since the
fresh_perl_is() scripts themselves are run with STDERR set to /dev/null
anyway, this isn't a hardship.
Steve Hay [Mon, 14 Apr 2014 13:08:30 +0000 (14:08 +0100)]
perldelta updates
David Mitchell [Sun, 6 Apr 2014 12:11:36 +0000 (13:11 +0100)]
ExtUtils::Install handle symbolic and hard links
[perl #72028]
When upgrading an already-installed file, ExtUtils::Install could mess up
the permissions of files if the old versions of files were hard or
symbolic links. For example, if the Foo module had been installed as
lib/Foo.pm and for some reason (perhaps due to OS packaging) that file was
hard-linked to other/Foo.pm or replaced with a symbolic link to
other/Foo.pm, then when trying to install a newer release of Foo, the
permissions of the other/Foo.pm file could end up messed up.
This was due to ExtUtils::Install changing the permissions of the old file
before unlinking it; if the file was a link, then the linked file would
get the chmod instead. Since on POSIXy platforms it is the directory
permissions, not the file permissions, that affect whether a file can be
unlinked, the chmod was redundant anyway. So on these platforms, skip the
chmod.
I've also added tests for symlinked and hard-linked files.
Tony Cook [Tue, 8 Apr 2014 01:12:38 +0000 (11:12 +1000)]
[perl #120998] avoid caller() crashing on eval '' stack frames
Starting from v5.17.3-150-g19bcb54e caller() on an eval frame would
end up calling Perl_sv_grow() with newlen = 0xFFFFFFFF on 32-bit
systems.
This eventually started segfaulting with v5.19.0-442-gcbcb2a1 which
added code to round up allocations to the nearest 0x100, setting
newlen to 0, faulting when sv_setpvn() attempted to copy its source
string into the zero space provided.
Karl Williamson [Thu, 3 Apr 2014 02:45:03 +0000 (20:45 -0600)]
PerlIO.pm: Make pod :utf8 caution more prominent
The :utf8 layer continues to have security issues. This moves the
warning about that to earlier where it's more likely to be seen, and
makes it stand out more.
Karl Williamson [Wed, 2 Apr 2014 17:22:02 +0000 (11:22 -0600)]
POSIX.pod: Nits
Most of the changes are to add C<> around code snippets, like function
macro and constant names.
There are a couple of grammar changes.
The only sort-of substantive change is that strtod() does respect
setlocale. Previously it said it *should* respect setlocale.
Karl Williamson [Sat, 22 Mar 2014 18:34:16 +0000 (12:34 -0600)]
PATCH: [perl #90646] perlop.pod: Clarify & | and ^ binary operations
David Mitchell [Fri, 11 Apr 2014 20:45:02 +0000 (21:45 +0100)]
initialise PL_watch_pvx
This global var is only used in debugging builds, but with
PERL_GLOBAL_STRUCT_PRIVATE builds, it gives valgrind errors. Just
initialise it to NULL.
I was originally trying to replicate smoke failures of
dist/Thread-Queue/t/07_lock.t under PERL_GLOBAL_STRUCT_PRIVATE, and
valgrind complained.
Craig A. Berry [Sat, 29 Mar 2014 21:05:28 +0000 (16:05 -0500)]
Attempt to satisfy CRLF expectations in perlbug on Windows.
Craig A. Berry [Sat, 29 Mar 2014 20:44:03 +0000 (15:44 -0500)]
Make perlbug encoding-agnostic in handling prepared reports.
Guessing the encoding of a report file prepared ahead of time is
really, well, too much guesswork, plus there are at least a couple
of mistakes in the implementation. And we weren't even trying to
guess for reports created on-the-fly in an editor, which is a bit
inconsistent.
So handle prepared reports the same way as on-the-fly reports and
attachments, which means all I/O is done using the :raw layer.
This is only "Unicode-aware" in the sense that we're aware there
are a lot of encodings out there and we're trying not to mangle
them in transit by accidental conversion. We're not doing any
explicit character set conversions and we shouldn't assert in the
MIME headers that we know what character set we're sending because
we don't.
Steve Hay [Thu, 10 Apr 2014 13:53:00 +0000 (14:53 +0100)]
Upgrade CPAN from 2.04-TRIAL to 2.05-TRIAL
H.Merijn Brand [Wed, 9 Apr 2014 10:31:23 +0000 (12:31 +0200)]
-fwrapv is broken prior to gcc-4.3 (googled and patched by Zefram)
H.Merijn Brand [Wed, 9 Apr 2014 09:16:55 +0000 (11:16 +0200)]
gcc 4.9 by default does some optimizations that break perl (#121505)
Patch by Tony Cook
David Mitchell [Tue, 8 Apr 2014 22:22:23 +0000 (23:22 +0100)]
PERL_GLOBAL_STRUCT threads issue
A test in op/threads.t roughly equivalent to this:
use threads;
sub f {};
async \&f;
was randomly failing smokes under the combination of PERL_GLOBAL_STRUCT and
ASan.
This is due to the fact that, under PERL_GLOBAL_STRUCT, "global" vars
are actually allocated, and are freed as the very last thing before
exiting (later than perl_destruct()). In the code above, the created
thread is still exeecuting at this point, and so may access those "global"
vars. ASan can detect that such a var is being accessed after being
freed; in this case due to PL_ppaddr being indexed in call_sv().
This is easily fixed using the PL_veto_cleanup mechanism; don't do those
final frees if there are still threads running.
Steve Hay [Wed, 9 Apr 2014 08:00:54 +0000 (09:00 +0100)]
perldelta updates
Steve Hay [Wed, 9 Apr 2014 07:26:10 +0000 (08:26 +0100)]
perldiag - Restore nitpick corrections
These were corrected in
4a70680af1 but then undone (presumably by
accident) in
727b63796f.
Tony Cook [Wed, 9 Apr 2014 05:14:24 +0000 (15:14 +1000)]
[perl #21442] on Win32, skip tests that won't work on FAT when on FAT
FAT doesn't support link() and its access time resolution is only to
the day.
Tony Cook [Thu, 3 Apr 2014 23:06:51 +0000 (10:06 +1100)]
[perl #21442] skip link() tests where the filesystem doesn't support them
Tony Cook [Thu, 3 Apr 2014 03:11:36 +0000 (14:11 +1100)]
[perl #21442] only check link() error codes where link() works
Skip the tests on non-NTFS.
bulk88 [Wed, 5 Mar 2014 12:42:21 +0000 (07:42 -0500)]
[perl #21442] fix fs.t failures on Win32 FAT drive
See ticket for details. This commit does not fix all issues in #21442.
Karl Williamson [Wed, 9 Apr 2014 01:20:52 +0000 (19:20 -0600)]
perldiag: Correct misstatement
It's not non-alphabetic characters that are discouraged; its the
characters X where \cX doesn't map to a control that are discouraged
Zefram [Tue, 8 Apr 2014 18:03:59 +0000 (19:03 +0100)]
tighten Storable's recognition of tied SVs
Since commit
ff44333e5a9d9dca5272bb166df463607ebd3020, being RMAGICAL
and having tie magic is not sufficient to recognise an SV as tied.
When magic is turned off for mg_set(), the RMAGICAL flag is now left on,
so that vstrings will be recognised as such. So Storable needs to check
whether the tie magic it sees is actually in effect, by also looking at
the GMAGICAL and SMAGICAL flags.
Daniel Dragan [Sat, 1 Mar 2014 11:20:16 +0000 (06:20 -0500)]
speed up miniperl require on Win32
These 3 optimizations reduce the number of, usually failing, I/O calls
for each "require" for miniperl only. None are appropriate except for
Win32. See #121119 for details.
SHIRAKATA Kentaro [Mon, 7 Apr 2014 17:53:46 +0000 (02:53 +0900)]
nitpicks
Matthew Horsfall [Wed, 2 Apr 2014 16:02:53 +0000 (12:02 -0400)]
Missed perldelta for 437e3a7 (for v5.19.8)
Matthew Horsfall (alh) [Mon, 31 Mar 2014 12:25:33 +0000 (08:25 -0400)]
RT-121512 - Allow -I/dir/ with trailing slash to find .pmc files.
6b0bdd7f2041803dc3ec72b53d28052705861967 updated -I to not add a
trailing '/' if one was already present, but failed to update the
length of the resulting SV to account for the lack of another character.
This caused later checks based off of that length to fail (in this case,
seeing if the last 3 characters of the string are .pm).
Ricardo Signes [Mon, 7 Apr 2014 14:49:53 +0000 (10:49 -0400)]
bump version on debugger
Ricardo Signes [Mon, 7 Apr 2014 14:35:06 +0000 (10:35 -0400)]
add Hiroo Hayashi to AUTHORS
Hiroo Hayashi [Mon, 7 Apr 2014 14:33:17 +0000 (10:33 -0400)]
properly reset ReadLine's knowledge of handles after pager
[perl #121456]
Chris 'BinGOs' Williams [Mon, 7 Apr 2014 11:13:20 +0000 (12:13 +0100)]
Synchronise Carp with CPAN version 1.3301
Steve Hay [Sun, 6 Apr 2014 20:49:23 +0000 (21:49 +0100)]
Porting/acknowledgements.pl - Use correct quotes in perl command-line
David Mitchell [Sun, 6 Apr 2014 19:07:05 +0000 (20:07 +0100)]
File-Glob/t/basic.t: avoid race condition
Test 2 does a glob('*') in the t/ directory, and compares that with the
results of readdir('.'). If we're doing parallel testing, temporary files
and stuff may get created in t/, resulting in a race condition and
occasional random failures.
Fix this by chdir()ing to t/base/ first. The timestamp on this directory
on my system seems to indicate that nothing currently creates tmp files in
that dir, and given that these are basic tests, that's relatively unlikely
to change.
Steve Hay [Sat, 5 Apr 2014 17:18:43 +0000 (18:18 +0100)]
Correct typo in commit
b38d7779bd
David Golden [Fri, 4 Apr 2014 16:00:52 +0000 (12:00 -0400)]
fix documentation of HeUTF8 return value
Smylers [Wed, 2 Apr 2014 16:06:09 +0000 (17:06 +0100)]
perl5182delta typo fixes
Escaping fix.
Missing full stop added.
Steve Hay [Fri, 4 Apr 2014 07:41:11 +0000 (08:41 +0100)]
RMG - Update note about adding new perldelta in BLEAD-FINAL/MAINT releases
Steve Hay [Fri, 4 Apr 2014 07:39:15 +0000 (08:39 +0100)]
Add pod/perl5182delta.pod
Ævar Arnfjörð Bjarmason [Wed, 2 Apr 2014 15:53:18 +0000 (15:53 +0000)]
utf8: add tests for behavior change in v5.15.6-407-gc710240, and more
In v5.15.6-407-gc710240 Father Chrysostomos patched utf8::decode() so it
would call SvPV_force_nolen() on its argument. This meant that calling
utf8::decode() with a non-blessed non-overloaded reference would now
coerce the reference scalar to a string, i.e. before we'd do:
$ ./perl -Ilib -MDevel::Peek -wle 'use strict; print $]; my $s = shift; my $s_ref = \$s; utf8::decode($s_ref); Dump $s_ref; print $$s_ref' ævar
5.019011
SV = IV(0x2579fd8) at 0x2579fe8
REFCNT = 1
FLAGS = (PADMY,ROK)
RV = 0x25c33d8
SV = PV(0x257ab08) at 0x25c33d8
REFCNT = 2
FLAGS = (PADMY,POK,pPOK)
PV = 0x25a1338 "\303\246var"\0
CUR = 5
LEN = 16
ævar
But after calling SvPV_force_nolen(sv) we'd instead do:
$ ./perl -Ilib -MDevel::Peek -wle 'use strict; print $]; my $s = shift; my $s_ref = \$s; utf8::decode($s_ref); Dump $s_ref; print $$s_ref' ævar
5.019011
SV = PVIV(0x140e4b8) at 0x13e7fe8
REFCNT = 1
FLAGS = (PADMY,POK,pPOK)
IV = 0
PV = 0x140c578 "SCALAR(0x14313d8)"\0
CUR = 17
LEN = 24
Can't use string ("SCALAR(0x14313d8)") as a SCALAR ref while "strict refs" in use at -e line 1.
I think this is arguably the right thing to do, we wouln't actually utf8
decode the containing scalar so this reveals bugs in code that passed
references to utf8::decode(), what you want is to do this instead:
$ ./perl -CO -Ilib -MDevel::Peek -wle 'use strict; print $]; my $s = shift; my $s_ref = \$s; utf8::decode($$s_ref); Dump $s_ref; print $$s_ref' ævar
5.019011
SV = IV(0x1aa8fd8) at 0x1aa8fe8
REFCNT = 1
FLAGS = (PADMY,ROK)
RV = 0x1af23d8
SV = PV(0x1aa9b08) at 0x1af23d8
REFCNT = 2
FLAGS = (PADMY,POK,pPOK,UTF8)
PV = 0x1ad0338 "\303\246var"\0 [UTF8 "\x{e6}var"]
CUR = 5
LEN = 16
ævar
However I think we should be more consistent here, e.g. we'll die when
utf8::upgrade() gets passed a reference, but utf8::downgrade() just
passes it through. I'll file a bug for that separately.
Karl Williamson [Tue, 1 Apr 2014 23:21:48 +0000 (17:21 -0600)]
Fix comments and pod that mention 5.20 erroneously
In certain places in the documentation, "5.20" is no longer applicable.
Also, a message referred to in perldiag got reworded, but our checks did
not catch that perldiag should have been updated.
Thomas Sibley (via RT) [Tue, 1 Apr 2014 21:01:02 +0000 (14:01 -0700)]
Adjust conflicting documentation about \s vis-à-vis \cK
# New Ticket Created by Thomas Sibley
# Please include the string: [perl #121558]
# in the subject line of all future correspondence about this issue.
# <URL: https://rt.perl.org/Ticket/Display.html?id=121558 >
See attached patch against blead.
>From
84a704858995060ef78a39372ca7e2572c6141a3 Mon Sep 17 00:00:00 2001
From: Thomas Sibley <tsibley@cpan.org>
Date: Tue, 1 Apr 2014 13:49:26 -0700
Subject: [PATCH] =?UTF-8?q?Adjust=20conflicting=20documentation=20about=20?=
=?UTF-8?q?\s=20vis-=C3=A0-vis=20\cK?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
It makes little sense to say that \s matches \cK unconditionally in the
same sentence as saying it matches \cK conditionally (>= Perl 5.18).
I suppose the intention could have been to specify the full char class
in the documentation from 5.18 onwards while still noting when that
change happened (the introducing commit, d28d802, was only on 5.17+),
but the sentence structure and convention in the rest of the document
suggests otherwise.
Karl Williamson [Mon, 31 Mar 2014 21:43:51 +0000 (15:43 -0600)]
PATCH: [perl #119499] "$!" with UTF-8 flag
This disables the code that sets the UTF-8 flag when "$!" is UTF-8.
This is being done to get v5.20 out the door, with changes to follow in
v5.21. See towards the end of the discussion of this ticket.
Unfortunately this change will cause #112208 to no longer be fixed.
Karl Williamson [Mon, 31 Mar 2014 17:07:53 +0000 (11:07 -0600)]
PATCH: [perl 121317] Gconvert() obeys LC_NUMERIC without "use locale"
This reverts part of
bc8ec7cc020d0562094a551b280fd3f32bf5eb04.
leaving LC_NUMERIC set to the C locale at start-up. This allows the
tests for quite a few XS modules to pass, as they (and likely the
modules themselves) are expecting a dot as the decimal point character.
However,such modules remain vulnerable to explicit calls to setlocale()
by the Perl code or other modules,
See the ticket's discussion for ideas on how to fix this better in 5.21
going forward.
I did not add tests because this fix only affects XS code that is not in
the Perl API, and we don't have any infrastructure for testing that.
Building such infrastructure seems to me to be too much for the code
freeze situation we are in, and all this is planned to change very early
in v5.21 anyway.
Karl Williamson [Mon, 31 Mar 2014 21:33:01 +0000 (15:33 -0600)]
perllocale: Nits
The hyperlink text looks wrong in html
Karl Williamson [Mon, 31 Mar 2014 20:14:21 +0000 (14:14 -0600)]
perllocale: Note that $^E acts the same as $!
Karl Williamson [Mon, 31 Mar 2014 16:09:22 +0000 (10:09 -0600)]
mg.c: Fix comment typo
David Mitchell [Tue, 1 Apr 2014 14:36:56 +0000 (15:36 +0100)]
missing word in perl5200delta.pod
I missed out "will" in
1ffb44d62eaa2f08535ed009ec13d81bfb7ad840
Steve Hay [Tue, 1 Apr 2014 12:31:10 +0000 (13:31 +0100)]
Reword Windows makefile comments to explain the "help" logic about USE_MULTI
There is logic to auto-enable USE_MULTI if either USE_ITHREADS or USE_IMP_SYS
(which both require USE_MULTI) are enabled, but this is not mentioned in
the comments. Explain it so that users don't get confused when trying to
disable USE_MULTI.
Reported in [perl #121494].
Steve Hay [Sun, 30 Mar 2014 19:59:02 +0000 (20:59 +0100)]
Start updating perldelta for 5.19.11
Steve Hay [Sun, 30 Mar 2014 19:27:30 +0000 (20:27 +0100)]
Commit
b776cec188 missed these RMG steps when preparing Module::CoreList for 5.19.11
David Mitchell [Sat, 29 Mar 2014 19:35:37 +0000 (19:35 +0000)]
perldelta: /\C/ will be an error in 5.24
Update the recently added perldelta entry to say that /\C/ will become an
error rather than becoming equal to /./.
Steve Hay [Fri, 28 Mar 2014 22:05:29 +0000 (22:05 +0000)]
RMG - refer to BLEAD-POINT/BLEAD-FINAL releases for consistency and clarity
Steve Hay [Fri, 28 Mar 2014 21:53:10 +0000 (21:53 +0000)]
RMG - note that CPAN module upgrades are subject to code freeze restrictions
(As confirmed on p5p by RJBS on 24 March 2014.)
Steve Hay [Fri, 28 Mar 2014 21:40:49 +0000 (21:40 +0000)]
RMG - we no longer have UPSTREAM => 'undef' in Porting/Maintainers.pl
Chris 'BinGOs' Williams [Fri, 28 Mar 2014 14:02:51 +0000 (14:02 +0000)]
Maintainers.pl synchronised for CPAN release of ExtUtils-Install
Daniel Dragan [Thu, 27 Mar 2014 07:37:03 +0000 (03:37 -0400)]
fix killpg on Win32, to meet posix expectations for killpg
On Win32 Perls built without PERL_IMPLICIT_SYS, killpg from win32.c was
directly called by Perl_apply, yet killpg's return value had Win32
behavior, not POSIX behavior. Modify killpg token to have same meaning as
PerlProcKillpg/PerlProc_killpg has on PERL_IMPLICIT_SYS builds. Use a
macro rather than create a win32_killpg C function since win32_killpg would
be nothing but a call to win32_kill anyways. win32_kill contains the Win32
to POSIX semantics conversion code. Rename old killpg to my_killpg since
it has no use outside of win32.c. The psuedo-PID code in win32_kill also
played a factor in not writing a separate win32_killpg that calls
my_killpg. This fix is tested by kill0.t passing on
no-PERL_IMPLICIT_SYS builds.
[perl #121230]
Karl Williamson [Wed, 26 Mar 2014 18:36:54 +0000 (12:36 -0600)]
perlrebackslash, perlreref.pod: White space only
Fit verbatim lines into 79 columns
Karl Williamson [Wed, 26 Mar 2014 18:23:33 +0000 (12:23 -0600)]
Revert "Add support for test.valgrind parallel testing"
This reverts commit
f0aff2daa44923f600f6e1f2429a2add2214a9d5
"Add support for test.valgrind parallel testing"
This patch was accidentally pushed (by me); it breaks some things. We
will wait to add this support until after 5.20
David Mitchell [Wed, 26 Mar 2014 12:07:39 +0000 (12:07 +0000)]
Deprecate /\C/
For 5.20, just say its deprecated. We'll add a warning in 5.22
and change its behaviour in 5.24.
Tony Cook [Wed, 26 Mar 2014 03:31:57 +0000 (14:31 +1100)]
[perl #121366] avoid using an invalid SvPVX() in Perl_sv_pvn_force_flags
This would cause valgrind to complain about:
vec($Foo, 0, 1) = 1; # for example
when $Foo was undef, since SvPVX()[1] isn't initialized until the SV is
at least a SVt_PV.
[1] well, sv_u.svu_rv, but sv_u is a union, so the same memory is
initialized. This isn't technically legal from a C point of view,
but pointer types are compatible enough with each other for it to not
be an issue.
Chris 'BinGOs' Williams [Tue, 25 Mar 2014 20:48:56 +0000 (20:48 +0000)]
Update ExtUtils-MakeMaker to CPAN version 6.94
[DELTA]
6.94 Tue Mar 25 19:26:31 GMT 2014
No changes from 6.93_01
6.93_01 Mon Mar 24 16:53:31 GMT 2014
Bug fixes:
* Resolved a regression in MM_Unix.pm
(https://github.com/Perl-Toolchain-Gang/ExtUtils-MakeMaker/issues/96)
Chris 'BinGOs' Williams [Mon, 24 Mar 2014 20:07:54 +0000 (20:07 +0000)]
Synchronise versions in Maintainers.pl
David Mitchell [Mon, 24 Mar 2014 15:36:32 +0000 (15:36 +0000)]
[perl #121484] /m causing false negative
My recent commit
d0d4464849e2b30aee8 in re_intuit_start() reduced the
scope of a 'skip if multiline' check, so that certain optimisations
weren't being unnecessarily skipped. Unfortunately it didn't reduce the
scope enough, so a vital slen-- was being skipped in the
SvTAIL-but-don't-fail case.
This commit just moves the !multiline test further down, and updates the
commentary and condition formatting a bit.
bulk88 [Mon, 24 Mar 2014 01:01:15 +0000 (21:01 -0400)]
#121395 fix, on Win32 test.pl watchdog always blocks for entire timeout
See Perl RT #121395 for details.
Craig A. Berry [Sun, 23 Mar 2014 18:33:49 +0000 (13:33 -0500)]
Remove MM_TEST_ROOT feature from ExtUtils::Install tests.
This feature depended on test directories created on the fly being
in a predictable location, but as of
80af860fb39a3c6 they no longer
are. VMS systems released in the last 15 years or so don't even
need the feature, so the best path forward is to get rid of it.
A corresponding change was made in ExtUtils::MakeMaker 6.79_01 but
ExtUtils::Install maintains its own fork of the same test libraries.
Craig A. Berry [Sat, 22 Mar 2014 00:29:38 +0000 (19:29 -0500)]
Reduce excessive stat calls in glob on VMS.
When PERL_EXTERNAL_GLOB is defined (currently only on VMS, or on other
platforms when running miniperl), each item returned from the glob
operation is checked against a set of glob metacharacters, and then, if
it matches any of these characters, it's checked with lstat() to see if
it actually exists. Then it's passed through if it exists but skipped
otherwise. Presumably this is because returning the pattern unchanged
is how a shell glob indicates "no match."
It appears that the lstat() is necessary because glob metacharacters
are almost always valid filename characters on Unix, so it's the
only way to distinguish a funny-looking but real filename from the no
match case (oops -- indeterminate grammar). Since these filenames are
rare on Unix, lstat() is seldom called.
Enter VMS, where "external glob" is neither external, nor is it actually
a glob. It is a native wildcard-matching search built into Perl with
vms/vms.c's Perl_vms_start_glob(), which does return the original
pattern when there is no match, but that pattern will only contain
native wildcard characters, so the check for glob metacharacters is
really not the right thing to be doing. Moreover, glob metacharacters
such as dollar signs, brackets, and semicolons are extremely common in
native VMS paths, so in many common scenarios, the lstat() to see if the
file really exists gets triggered for every single file, which is
expensive.
This commit replaces, on VMS only, the check for glob metacharacters
with a check for VMS wildcard characters. A simple glob of a Perl
source tree becomes 60% faster on the first iteration and 80% faster on
subsequent iterations.
Thanks to Hein van den Heuvel, who reported the problem and explained
that a search operation should only be looking at directory files,
whereas a stat does I/O to the individual file header, resulting in a
massive increase in unnecessary I/O.
This closes [perl #121440].
Aaron Crane [Fri, 21 Mar 2014 10:29:59 +0000 (10:29 +0000)]
Add 5.19.10 announcement URL to list of epigraphs
And fix the error in the author's name; it's John Chadwick and Michael
Ventris, not the other way round.
Aaron Crane [Thu, 20 Mar 2014 22:57:16 +0000 (22:57 +0000)]
Prepare Module::CoreList for next release
Aaron Crane [Thu, 20 Mar 2014 22:46:48 +0000 (22:46 +0000)]
Bump to Perl version 5.19.11
Aaron Crane [Thu, 20 Mar 2014 22:37:34 +0000 (22:37 +0000)]
New perldelta for 5.19.11
Aaron Crane [Thu, 20 Mar 2014 22:39:25 +0000 (22:39 +0000)]
Record the 5.19.10 epigraph
The announcement URL is not yet available, but will be filled in soon.
Aaron Crane [Thu, 20 Mar 2014 19:38:03 +0000 (19:38 +0000)]
Merge release branch for Perl 5.19.10
Aaron Crane [Thu, 20 Mar 2014 18:07:06 +0000 (18:07 +0000)]
Update perlhist for 5.19.10
Aaron Crane [Thu, 20 Mar 2014 18:01:33 +0000 (18:01 +0000)]
Finalise perldelta for 5.19.10
Aaron Crane [Thu, 20 Mar 2014 16:36:48 +0000 (16:36 +0000)]
Update Module::CoreList for 5.19.10
Aaron Crane [Thu, 20 Mar 2014 17:13:56 +0000 (17:13 +0000)]
Porting/corelist-perldelta.pl: fix bug with 5.*.10 releases
The two aliases of the new Perl version (in this case, "5.01901" and
"5.019010") were being selected as the two versions to compare.
Unsurprisingly, those two versions have the same modules, so the
generated summary of changes was empty.
Aaron Crane [Thu, 20 Mar 2014 17:13:39 +0000 (17:13 +0000)]
Porting/corelist-perldelta.pl: fix minor POD error
Aaron Crane [Thu, 20 Mar 2014 17:12:57 +0000 (17:12 +0000)]
Porting/corelist-perldelta.pl: fix typo in error message
Aaron Crane [Thu, 20 Mar 2014 15:54:11 +0000 (15:54 +0000)]
Upgrade Devel::PPPort from 3.21 to 3.22
[DELTA]
* Add support for the following API
SvREFCNT_dec_NN
mg_findext
sv_unmagicext
* Update META
Move bug tracker to github
Provide link to repository
Aaron Crane [Thu, 20 Mar 2014 13:32:16 +0000 (13:32 +0000)]
Update perldelta for recent core changes
Aaron Crane [Thu, 20 Mar 2014 15:31:34 +0000 (15:31 +0000)]
ExtUtils-Install-1.63 has been released to CPAN
Nicholas Clark [Wed, 19 Mar 2014 10:30:07 +0000 (11:30 +0100)]
The linux hints file should only look for -lgdbm_compat if -lgdbm is wanted.
Previously they would unconditionally add gdbm_compat to the list of wanted
libraries. This is unhelpful if the user has passed Configure arguments to
constrain the library search to avoid libgdbm.so, because Configure would
still end up finding libgdbm_compat.so, which at best is not useful without
libgdbm.so, and at worse could have the same problems that caused the
user to avoid libgdbm.so (eg not compatible with the current compiler flags)
Ricardo Signes [Thu, 20 Mar 2014 14:00:56 +0000 (10:00 -0400)]
sync-with-cpan: allow digits after -TRIAL
Aaron Crane [Thu, 20 Mar 2014 12:39:20 +0000 (12:39 +0000)]
hv.h: tweak comment about HvAUX preallocation for large hashes
Aaron Crane [Wed, 19 Mar 2014 16:15:21 +0000 (16:15 +0000)]
Upgrade CPAN from 2.03-TRIAL to 2.04-TRIAL
[DELTA]
2014-03-18 Andreas Koenig <k@UX31A>
* release 2.04-TRIAL
* history of master branch was rewritten after Tour de France bughunting
(Lyon #QA2014); apologies to all repository followers: the real history,
as it actually went, is not worth being recorded in the master branch.
* address #91706 and #86915: the 'force install' bug and the endless
loop bugs reported in the two tickets are fixed (joined forces)
* new configure option 'use_prompt_default' (David Golden)
* add new dummy distros OptionalPrereq and CircularPrereq for testing
recommends/suggests support
* experimental recommends/suggests support (David Golden, Andreas Koenig)
* enable hiding of directories in the distroprefs tree (suggested by
Slaven Rezić)
David Mitchell [Wed, 19 Mar 2014 19:28:47 +0000 (19:28 +0000)]
[MERGE] audit anchoring in re_intuit_start()
This series of commits audits all the code in re_intuit_start()
that handles anchoring, e.g. /^.../, /^.../m, /\G.../.
It fixes a couple of potential performance issues, and makes the code a
lot safer with with \G. (Until recently, intuit was skipped altogether
under \G, so its \G handling isn't well developed and tested.)
David Mitchell [Wed, 19 Mar 2014 18:05:24 +0000 (18:05 +0000)]
re_intuit_start(): move comments abut IMPLICIT
After the previous reworking of the PREGf_IMPLICIT tests, move commentary
about PREGf_IMPLICIT closer to where its now relevant.
David Mitchell [Wed, 19 Mar 2014 17:37:20 +0000 (17:37 +0000)]
re_intuit_start(): don't unset MBOL on uselessness
When BmUSEFUL() for a pattern goes negative, we unset ~RXf_USE_INTUIT.
A bug fix in 2010 (
c941595168) made this part of the code also remove
the RXf_ANCH_MBOL at the same time, if PREGf_IMPLICIT was set.
However, this was really just working round a bug in regexec_flags().
Once intuit was disabled, regexec_flags() would then start taking the
buggy code path.
This buggy code path was separately fixed in 2012 by
21eede782, so there's
no longer any need to remove this flag. So don't.
David Mitchell [Wed, 19 Mar 2014 16:44:25 +0000 (16:44 +0000)]
re_intuit_start(): change definition of ml_anch
The ml_anch variable is supposed to indicate that a multi-line match is
possible, i.e. that the regex is anchored to a \n.
Currently we just do
ml_anch = (prog->intflags & PREGf_ANCH_MBOL);
However, MBOL is also set on /.*..../; the two cases are distinguished by
adding the PREGf_IMPLICIT flag too.
So at the moment we have lots of tests along the lines of
if (ml_anch && !(prog->intflags & PREGf_IMPLICIT))
Simplify this by adding the IMPLICIT condition when initially calculating
ml_anch, so there's no need to keep testing for it later. This also means
that ml_anch actually means what it says now.
David Mitchell [Wed, 19 Mar 2014 16:34:28 +0000 (16:34 +0000)]
re_intuit_start(): check for IMPLICIT in abs anch
The block of code that deals with absolute anchors looks like:
if (...) {
if (.... && !PREGf_IMPLICIT) ...;
if (FOO) {
assert(!PREGf_IMPLICIT);
....
}
}
where the constraints of FOO imply PREGf_IMPLICIT, as shown by the
assertion. Simplify this to:
if (... && !PREGf_IMPLICIT) {
if (....) ...;
if (FOO) {
....
}
}
David Mitchell [Wed, 19 Mar 2014 14:58:19 +0000 (14:58 +0000)]
re_intuit_start(): check for IMPLICIT in stclass
In the stclass block of code, there are various checks for anchored-ness.
Add !(prog->intflags & PREGf_IMPLICIT) to these conditions, since
from the perspective of these tests, we can only quit early etc if these
are real rather than fake anchors.
As it happens, this currently makes no logical difference, since an
PREGf_IMPLICIT pattern starts with .*, and so more or less by definition
can't have an stclass.
So this commit is really only for logical completeness, and to allow us to
change the definition of ml_anch shortly.
David Mitchell [Tue, 18 Mar 2014 23:36:20 +0000 (23:36 +0000)]
re_intuit_start(): use better limit on anch float
The 'check' block of code has special handling for if the pattern is
anchored; in this case, it allows us to set an upper bound on where a
floating substring might match; e.g. in
/^..\d?abc/
the floating string can't be more than 3 chars from the absolute beginning
of the string. Similarly with /..\G\d?abc/, it can't be more than 3 chars
from the start position (assuming that position been calculated correctly
by the caller).
However, the current code used rx_origin as the base for the offset
calculation, rather than strbeg/strpos as appropriate. This meant that
a) the first time round the loop, if strpos > strbeg, then the upper bound
would be set higher than needed;
b) if we ever go back to restart: with an incremented rx_origin, then the
upper limit is recalculated with more wasted slack at the latter end.
This commit changes the limit calculation, which reduces the following
from second to milliseconds:
$s = "abcdefg" x 1_000_000;
$s =~ /^XX\d{1,10}cde/ for 1..100;
It also adds a quick test to skip hopping when the result is likely to
leave end_point unchanged, and adds an explicit test for !PREGf_IMPLICIT.
This latter test isn't strictly necessary, as if PREGf_IMPLICIT were set,
it implies that the pattern starts with '.*', which implies that
prog->check_offset_max == SSize_t_MAX, which is already tested for.
However, it makes the overall condition more comprehensible, and makes it
more robust in the face of future changes.
David Mitchell [Tue, 18 Mar 2014 21:32:39 +0000 (21:32 +0000)]
re_intuit_start(): do 'not at start' check on BOL
The quick reject test that says "if a pattern has an absolute anchor,
then immediately reject if strpos != strbeg", currently skips that test
if PREGf_ANCH_GPOS is present. Instead, skip unless BOL or SBOL is present.
This means that something like /^abc\G/ will still do the quick reject
test.
I can't think of any example that will actually give a measurable
performance boost, and this is a fairly unlikely scenario, but the code is
more logical this way, and makes it more robust against future changes
(it's less likely to suddenly skip the quick test where it used to do it).
I've also updated the commentary on why we don't do a quick /\G/ test
akin to the /^/ test, and added some more info about why we test for the
PREGf_IMPLICIT flag.
And I've added an assert about PREGf_IMPLICIT too.
David Mitchell [Tue, 18 Mar 2014 20:15:27 +0000 (20:15 +0000)]
re_intuit_start(): reduce scope of /^...$/m test
Intuit has a quick reject test for a fixed pattern that is anchored at
both ends. For example, with the pattern /^abcd$/, only the exact strings
"abcd" or "abcd\n" will match; anything else, and the match immediately
fails.
A fix for [perl #115242] correctly made intuit skip the test in the
presence of //m, since in this case the $ doesn't necessarily correspond
to the end of the string.
However, the fix was too wide in scope; it caused //m patterns to skip
searching for a known string anchored just at the start, as well as one
anchored at both ends.
With this commit, the following code now runs in a few milliseconds rather
than a few seconds on my machine:
$s = "abcdefg" x 1_000_000;
$s =~ /(?-m:^)abcX?fg/m for 1..100;
David Mitchell [Tue, 18 Mar 2014 16:10:59 +0000 (16:10 +0000)]
re_intuit_start(): change !ml_anch debugging msg
When MBOL (/^.../m) matching is skipped, the debugging output looks like:
Starting position does not contradict /^/m...
which sounds a bit like the \n test *was* done and passed, rather than
the test being skipped. Change the message to:
(multiline anchor test skipped)