| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
RT #124109.
2c1f00b9036 localised PL_curpm to NULL when calling swash init code
(i.e. perl-level code that is loaded and executed when something
like "lc $large_codepoint" is executed).
b4fa55d3f1 followed this up by gutting Perl_save_re_context(), since
that function did, basically,
if (PL_curpm) {
for (i = 1; i <= RX_NPARENS(PM_GETRE(PL_curpm))) {
do the C equivalent of the perl code "local ${i}";
}
}
and now that PL_curpm was null, the code wasn't called any more. However,
it turns out that the localisation *was* still needed, it's just that
nothing in the test suite actually tested for it.
In something like the following:
$x = "\x{41c}";
$x =~ /(.*)/;
$s = lc $1;
pp_lc() calls get magic on $1, which sets $1's PV value to a copy of the
substring captured by the current pattern match.
Then pp_lc() calls a function to convert the string to upper case, which
triggers a swash load, which calls perl code that does a pattern match
and, most importantly, uses the value of $1. This triggers get magic on
$1, which overwrites $1's PV value with a new value. When control returns
to pp_lc(), $1 now holds the wrong string value.
Hence $1, $2 etc need localising as well as PL_curpm.
The old way that Perl_save_re_context() used to work (localising
$1..${RX_NPARENS}) won't work directly when PL_curpm is NULL (as in the
swash case), since we don't know how many vars to localise.
In this case, hard-code it as localising $1,$2,$3 and add a porting
test file that checks that the utf8.pm code and dependences don't
use anything outside those 3 vars.
|
|
|
|
|
|
| |
With 2eaf799e sub declarations can store sub references directly in
the stash, but gv_const_sv(), which might be passed an entry from
the stash didn't handle that case.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
An empty cpan/.dir-locals.el stops Emacs using the core defaults for
code imported from CPAN.
Committer's work:
To keep t/porting/cmp_version.t and t/porting/utils.t happy, $VERSION needed
to be incremented in many files, including throughout dist/PathTools.
perldelta entry for module updates.
Add two Emacs control files to MANIFEST; re-sort MANIFEST.
For: RT #124119.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Several /lib .pm's have the same code which is complicated enough to
warrant being placed in a shared function. This commit creates a .pm
to be used by these .pm's.
This implements the perhaps archaic 'Meta' notation wherein characters
above 0x7f are displayed as M- plus the ASCII-range character derived by
looking at only the lower 7 bits of the upper range one. There are
problems with this, in that a literal control character can be in the
string, whereas it is trying to get rid of control characters. But I
left it to work as-is, just centralizing the code.
On EBCDIC platforms this notation makes no sense because the bit
patterns are all mixed up about having the upper bit set. So this
commit fixes things on these platforms, so these are changed to
\x{...}. No literal control characters are emitted.
Another potential problem is that characters above 0xFF are passed
through, unchanged. But again, I let the existing behavior stand.
|
|
|
|
|
|
|
|
|
| |
This is to prevent a conflict showing up on z/OS (os390) because this
file's name is the same as one in /ext, and there are functions
cross-referenced between them, and the loader on that platform
can't deal with this.
See http://nntp.perl.org/group/perl.perl5.porters/226612
|
| |
|
|
|
|
| |
Also remove a stray file that was in core when it was listed as EXCLUDED.
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
[DELTA]
$Revision: 2.70 $ $Date: 2015/02/05 10:53:00 $
! Makefile.PL
add bin/encguess to EXE_FILES
2.69 2015/02/05 10:35:11
! bin/encguess
Refactored so that
* does not depend on non-core module (File::Slurp in particular)
* PODified document
* -s "encA encB" to -s encA,encB which is more shell-friendly
* and more
! MANIFEST
+ bin/encguess
Pulled: Added CLI wrapper for Encode::Guess
https://github.com/dankogai/p5-encode/pull/32
! Unicode/Unicode.pm
Pulled: Bump $VERSION in module changed since Encode-2.60
https://github.com/dankogai/p5-encode/pull/31
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
[DELTA]
2015-01-13 David E. Wheeler <david@justatheory.org>
* Release 3.29
NOTE: This will be the last release of Pod::Simple to support versions
of Perl earlier than 5.6.
Fixed test failure for unsupported encoding on Perl 5.6.
Removed unnecessary dependency on constant. Reported by Petr Pisar
(RT #85578).
Many documentation and comment typos fixed by David Steinbrunner.
Fixed issue when an encoding is declared via an '=encoding' directive
*after* Pod::Simple has already detected an encoding. Thanks to
Graham Knop for the patch and Patrice Dumas for the tests.
Added '>&STDERR' as an output to better emulate
Pod::Parser::parse_from_file(). Florent Angly.
Tidied the description of the different Pod::Simple interfaces,
with greater emphasis on the four different steps to subclassing.
Florent Angly.
Added the 'top_anchor' attribue to Pod::Simple::HTML, to allow
specification of a custom top anchor format. Gabor Szabo.
Fixed the text formatter to properly set the Text::Wrap overflow policy.
Thanks to Nigel Metheringham for the fix!
Fixed mis-matched quotation marks when adding JavaScript elements
to the XHTML output. Patch from jonathancast.
Fixed issues on EBCDIC. Patch from Karl Williamson (GitHub Pull
Request #58).
Fixed bug where the value passed to Pod::Simple::XHTML's
html_css() method would be output twice. Thanks to Andrew Johnson
for the report (RT #99303).
Documented the 'recurse' attribute of Pod::Simple::Search.
Thanks to Jim Keenan for the report (RT #91886).
An error is no longer thrown when '=encoding' directives are found
on subsequent lines. Instead, we now log a an error message,
"Cannot have multiple =encoding directives" (RT #91757).
The HTML and XHTML formatters now do a better job of preserving
lines in 'begin html' blocks. Fixes a bug that dates from 2002
(Perl RT#9385, CPAN RT #91851).
Collateral damage to 3 tests under ext/Pod-Html/.
|
|
|
|
|
|
|
|
| |
[DELTA]
3.28 - 2015-01-16
* Update MANIFEST for regened base/todo files
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This subpragma is to allow p5p to add warnings/errors for regex patterns
without having to worry about backwards compatibility. And it allows
users who want to have the latest checks on their code to do so. An
experimental warning is raised by default when it is used, not because
the subpragma might go away, but because what it catches is subject to
change from release-to-release, and so the user is acknowledging that
they waive the right to backwards compatibility. I will be working in
the near term to make some changes to what is detected by this.
Note that there is no indication in the pattern stringification that it
was compiled under this. This means I didn't have to figure out how to
stringify it. It is fine because using this doesn't affect what the
pattern gets compiled into, if successful. And interpolating the
stringified pattern under either strict or non-strict should both just
work.
|
|
|
|
| |
Tony: fix MANIFEST
|
|
|
|
|
|
|
|
| |
[DELTA]
5.95 Sat Jan 10 12:15:36 MST 2015
- modified the bit-ordering test (ref. t/bitorder.t)
-- supplied directory-change preamble for CORE builds
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
[DELTA]
5.94 Sat Jan 10 00:45:28 MST 2015
- added support for threaded builds
-- PERL_GET_NO_CONTEXT, pTHX_, aTHX_, etc.
-- employed 'const' storage class where possible
-- ref. rt.cpan.org #101260
- simplified shabits() routine (bitwise input buffering)
-- slightly less efficient but easier to understand
-- ref. rt.cpan.org #101344
- minor documentation tweaks and additions
|
|
|
|
|
|
|
|
|
|
|
|
| |
There were 3 ideas for a patch: mine, Slaven's, and Father
Chrysostomos'. I tried out all 3, and all three appear to work, without
breaking #123171. But I chose FC's as I think it is the best.
I had to create a new .t because it turns out that the test didn't fail
when placed in the obvious test file, wrappers.t. It appears that the
'use File::Temp' in that file perturbs things to not fail later on.
This is scary, so I created a minimal file. I thought about using
fresh_perl, but wrappers.t needs functions from Test::More.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This flag will prevent () from capturing and filling in $1, $2, etc...
Named captures will still work though, and if used will cause $1, $2, etc...
to be filled in *only* within named groups.
The motivation behind this is to allow the common construct of:
/(?:b|c)a(?:t|n)/
To be rewritten more cleanly as:
/(b|c)a(t|n)/n
When you want grouping but no memory penalty on captures.
You can also use ?n inside of a () directly to avoid capturing, and
?-n inside of a () to negate its effects if you want to capture.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
[DELTA]
2.26 2014-12-26 16:27:23+00:00 UTC
* BUGFIX / INCOMPAT: Remove "fileno" and "umask" from the list of
CORE subs protected by autodie and Fatal.
When they return undef, it is not a failure.
* BUGFIX: Fixed an error that could occur during global destruction of
the form "(in cleanup) Can't use an undefined value as an ARRAY
reference at .../autodie/Scope/GuardStack.pm line 48 during global
destruction" (Thanks to Dave Rolsky).
* BUGFIX: The open-pragma is now properly ignored when open is
given an explicit layer. This brings autodie protected
open in sync with open. Thanks to Gregory Oschwald and
Graham Knop for the report + test case and the patch.
(GH#52 + GH#53)
* BUGFIX: Hide the "SCALAR" (buffer) argument in the string
representation of autodie::exception for the read,
sysread and syswrite CORE subs. This is to avoid
a dump of binary data to the screen/log when a
(sys)read or syswrite fails.
* FEATURE: Let autodie::exception work in equality tests and
string comparison via "overload fallback".
(Thanks to Michael G. Schwern)
* DOC: Mention that "kill" is in the ":ipc" category. It has
been there since autodie v2.14.
(Thanks to Felipe Gasper for reporting it, RT#97320).
* INTERNAL: Use "parent" instead of "base" for inheritance. Also
avoid some @ISA relationships that were redundant.
Either truly redundant ones or by importing "import"
from Exporter v5.57.
- This change implies that perl 5.8 users must now
also fetch "parent" from cpan.
(Thanks to Olivier Mengué, GH#59)
* DEVEL / TEST: The autodie module now accepts an undefined Fatal
version, assuming it to be development version.
Test cases that require versions are now either
skipped or considered "release" test.
* TEST / INTERNAL: Enabled travis-ci for Perl 5.20
* TEST: Close temp file before re-opening in t/truncate.t.
(Thanks to Craig A. Berry, RT#96609)
* TEST: Pass O_TRUNC with O_CREAT to sysopen in t/utf8_open.t.
(Thanks to Craig A. Berry, RT#87237)
* TEST: Clean up temp file in t/truncate.t.
(Thanks to Dave Mitchell, RT#100688)
|
|
|
|
|
|
|
| |
Why do we test for something that can be trivially accomplished by a
make manisort?
This is just makework with no value.
|
|
|
|
|
|
|
|
|
|
|
| |
This encapsulates the logic to extract the backrefs from a weak-referent.
Since sv_get_backrefs() can be used for a similar purposes as hv_backreferences_p()
we no longer need to export the later, and therefore this patch also reverts
ad2f46a793b4ade67d45ac0086ae62f6756c2752.
See perl #123473 for related discussion, and https://github.com/Sereal/Sereal/issues/73
for a practical example of why this API is required.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
[DELTA]
2.131 2014-12-23 15:04:19-05:00 America/New_York
[ENHANCEMENTS]
- Merging Module => 0 into requirements is now optimized
[PREREQS]
- Scalar::Utils removed as a prerequisite
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is also the subject of perl #123071.
The iteration count was stored in an I32 and was overflowing. If the
maximum number of iterations possible overflowed, then it would become
negative, and the substitution would fail immediately with ‘Substitu-
tion loop’.
I tried fixing this without increasing the size of the context
stack entries on 64-bit builds (by skipping the loop check for long
strings), but was unable to, because we have to return the number of
iterations, which was also stored as I32. If we change just that one
to SSize_t, we get an I32-sized alignment hole, so we might as well
make maxiters a SSize_t as well, fixing the bug that way (the more
straightforward way).
|
|
|
|
| |
Add alternate email address for Chad Granum to Porting/checkAUTHORS.pl.
|
| |
|
| |
|
|
|
|
|
|
|
|
| |
"clang -fsanitize=undefined" produces lots of false positives.
This file allows certain functions to be excluded from checking.
Use it as:
clang -fsanitize=undefined -fsanitize-blacklist=`pwd`/asan_ignore
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
[DELTA]
1.50 2014-06-04 rurban
----
* Do not re-bless already blessed filter_add arguments into the callers package.
Fixes RT #54452
* t/z_pod-coverage.t: omit empty Filter::decrypt (also fixes RT #84405)
* Fix Perl Compiler detection in Filter::decrypt
1.51 2014-12-09 rurban
----
* Minor -Wall -Wextra cleanups by jhi and me. Fixes RT #100742
* Updated Copyright years
* Document and warn about its limitations
|
| |
|
| |
|
| |
|
|
|
|
|
|
| |
For non-ASCII systems, there are character set translation tables. This
makes sure the two accessible ones are inverses of each other. If not,
nothing can be expected to work right.
|
|
|
|
|
| |
These are obsolete that no longer do anything useful. See
http://nntp.perl.org/group/perl.perl5.porters/222709
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This op is an optimisation for any series of one or more array or hash
lookups and dereferences, where the key/index is a simple constant or
package/lexical variable. If the first-level lookup is of a simple
array/hash variable or scalar ref, then that is included in the op too.
So all of the following are replaced with a single op:
$h{foo}
$a[$i]
$a[5][$k][$i]
$r->{$k}
local $a[0][$i]
exists $a[$i]{$k}
delete $h{foo}
while these aren't:
$a[0] already handled by OP_AELEMFAST
$a[$x+1] not a simple index
and these are partially replaced:
(expr)->[0]{$k} the bit following (expr) is replaced
$h{foo}[$x+1][0] the first and third lookups are each done with
a multideref op, while the $x+1 expression and
middle lookup are done by existing add, aelem etc
ops.
Up until now, aggregate dereferencing has been very heavyweight in ops; for
example, $r->[0]{$x} is compiled as:
gv[*r] s
rv2sv sKM/DREFAV,1
rv2av[t2] sKR/1
const[IV 0] s
aelem sKM/DREFHV,2
rv2hv sKR/1
gvsv[*x] s
helem vK/2
When executing this, in addition to the actual calls to av_fetch() and
hv_fetch(), there is a lot of overhead of pushing SVs on and off the
stack, and calling lots of little pp() functions from the runops loop
(each with its potential indirect branch miss).
The multideref op avoids that by running all the code in a loop in a
switch statement. It makes use of the new UNOP_AUX type to hold an array
of
typedef union {
PADOFFSET pad_offset;
SV *sv;
IV iv;
UV uv;
} UNOP_AUX_item;
In something like $a[7][$i]{foo}, the GVs or pad offsets for @a and $i are
stored as items in the array, along with a pointer to a const SV holding
'foo', and the UV 7 is stored directly. Along with this, some UVs are used
to store a sequence of actions (several actions are squeezed into a single
UV).
Then the main body of pp_multideref is a big while loop round a switch,
which reads actions and values from the AUX array. The two big branches in
the switch are ones that are affectively unrolled (/DREFAV, rv2av, aelem)
and (/DREFHV, rv2hv, helem) triplets. The other branches are various entry
points that handle retrieving the different types of initial value; for
example 'my %h; $h{foo}' needs to get %h from the pad, while '(expr)->{foo}'
needs to pop expr off the stack.
Note that there is a slight complication with /DEREF; in the example above
of $r->[0]{$x}, the aelem op is actually
aelem sKM/DREFHV,2
which means that the aelem, after having retrieved a (possibly undef)
value from the array, is responsible for autovivifying it into a hash,
ready for the next op. Similarly, the rv2sv that retrieves $r from the
typeglob is responsible for autovivifying it into an AV. This action
of doing the next op's work for it complicates matters somewhat. Within
pp_multideref, the autovivification action is instead included as the
first step of the current action.
In terms of benchmarking with Porting/bench.pl, a simple lexical
$a[$i][$j] shows a reduction of approx 40% in numbers of instructions
executed, while $r->[0][0][0] uses 54% fewer. The speed-up for hash
accesses is relatively more modest, since the actual hash lookup (i.e.
hv_fetch()) is more expensive than an array lookup. A lexical $h{foo}
uses 10% fewer, while $r->{foo}{bar}{baz} uses 34% fewer instructions.
Overall,
bench.pl --tests='/expr::(array|hash)/' ...
gives:
PRE POST
------ ------
Ir 100.00 145.00
Dr 100.00 165.30
Dw 100.00 175.74
COND 100.00 132.02
IND 100.00 171.11
COND_m 100.00 127.65
IND_m 100.00 203.90
with cache misses unchanged at 100%.
In general, the more lookups done, the bigger the proportionate saving.
|
|
|
|
|
|
|
|
|
|
|
|
| |
This was removed a year ago, but it causes problems with
ABSTACT and ABSTACT_FROM; since there isn't an IO/Compress.pm
file. make_ext.pl special-cases Makefile.PL to get the abstract
from IO/Compress/Base.pm; but MakeMaker looks for, and fails to
find, 'IO::Compress - ...' in the pod for that file,and prints an error.
Rather than more special-casing, it's easier to just restore the
distribution's Makefile.PL, which already contains the correct
'ABSTRACT => ...' entry.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This tool runs code snippets found in t/perf/benchmarks (or similar) under
cachegrind, in order to calculate how many instruction reads, data writes,
branches, cache misses, etc. that one execution of the snippet uses. It
will run them against two or more perl executables and show how much each
test has gotten better or worse.
It is modelled on the perlbench tool, but since it measures instruction
reads etc., rather than timings, it is much more precise and reproducible.
It is also considerably faster, and is capable or running tests in
parallel. Rather than displaying a single relative percentage per
test/perl combination, it displays values for 13 different measurements,
such as instruction reads, conditional branch misses etc.
This commit also changes the format of t/perf/benchmarks slightly; it
becomes an AoH rather than a HoH (to allow checking for duplicate keys),
and the test names themselves become a :: hierarchy.
|
| |
|