11 months agofix export error smoke-me/yves_perturb_keys
Yves Orton [Mon, 6 May 2013 19:45:38 +0000]
fix export error

11 months agoMake it possible to disable and control hash key traversal randomization
Yves Orton [Sun, 5 May 2013 14:33:43 +0000]
Make it possible to disable and control hash key traversal randomization

Adds support for PERL_PERTURB_KEYS environment variable, which in turn allows one to control
the level of randomization applied to keys() and friends.

When PERL_PERTURB_KEYS is 0 we will not randomize key order at all. The
chance that keys() changes due to an insert will be the same as in
previous perls, basically only when the bucket size is changed.

When PERL_PERTURB_KEYS is 1 we will randomize keys in a non repeatedable
way. The chance that keys() changes due to an insert will be very high.
This is the most secure and default mode.

When PERL_PERTURB_KEYS is 2 we will randomize keys in a repeatedable way.
Repititive runs of the same program should produce the same output every
time. The chance that keys changes due to an insert will be very high.

This patch also makes PERL_HASH_SEED imply a non-default
PERL_PERTURB_KEYS setting. Setting PERL_HASH_SEED=0 (exactly one 0) implies
PERL_PERTURB_KEYS=0 (hash key randomization disabled), settng PERL_HASH_SEED
to any other value, implies PERL_PERTURB_KEYS=2 (deterministic/repeatable
hash key randomization). Specifying PERL_PERTURB_KEYS explicitly to a
different level overrides this behavior.

Includes changes to allow one to compile out various aspects of the
patch. One can compile such that PERL_PERTURB_KEYS is not respected, or
can compile without hash key traversal randomization at all. Note that
support for these modes is incomplete, and currently a few tests will
fail.

Also includes a new subroutine in Hash::Util::hash_traversal_mask()
which can be used to ensure a given hash produces a predictable key
order (assuming the same hash seed is in effect). This sub acts as a
getter and a setter.

NOTE - this patch lacks tests, but I lack tuits to get them done quickly,
so I am pushing this with the hope that others can add them afterwards.

11 months agoRevert "Update docs to concur with $`,$&,$' changes"
David Mitchell [Mon, 6 May 2013 11:34:59 +0000]
Revert "Update docs to concur with $`,$&,$' changes"

This reverts commit d78f32f607952d58a998c5b7554572320dc57b2a.

Since COW has now not been enabled by default for 5.18, revert the
documentation changes which say that that $' etc no longer have a
performance penalty, etc.

11 months agomake /(?p:...)/ keep RXf_PMf_KEEPCOPY flag
David Mitchell [Mon, 6 May 2013 11:14:26 +0000]
make /(?p:...)/ keep RXf_PMf_KEEPCOPY flag

RT #117135

The /p flag, when used internally within a pattern, isn't like the
other internal patterns, e.g. (?i:...), in that once seen, the
pattern should have the RXf_PMf_KEEPCOPY flag globally set and not
just enabled within the scope of the (?p:...).

11 months agoUse PTR2IV() instead of casting a pointer to IV, to avoid warnings.
Robin Barker [Wed, 1 May 2013 17:39:26 +0000]
Use PTR2IV() instead of casting a pointer to IV, to avoid warnings.

The cast to IV was added to avoid problems on platforms where pointers are
larger than longs. However, the change instead generates warnings on
platforms where IVs are larger than pointers. Instead, use the PTR2IV()
macro provided by perl.h to make everyone happy.

Also change the type of the variable on that line, because it is cast to
STRLEN the first time it is used, and then passed to a macro that assigns it
to an int regardless.

11 months agoImprove the logic in regen_perly.pl for manually generating token macros.
Nicholas Clark [Thu, 2 May 2013 11:34:13 +0000]
Improve the logic in regen_perly.pl for manually generating token macros.

Without this fixup the build breaks on Win32. Previously it was enabled using
a second regular expression to parse the bison version string. This
effectively duplicates the first regular expression that parses the bison
version string to determine if the version of bison found can be used.

The second regular expression could get missed when changing the first, as
happened with commit f5cf236ddbe8e24e. So refactor the code to extract the
bison version once, and then use this later as a simple numeric comparison.

With this change, we can actually use bison 2.7 to regenerate perly.*

11 months agoFix non-blocking sockets on VMS.
Craig A. Berry [Sun, 5 May 2013 19:50:54 +0000]
Fix non-blocking sockets on VMS.

It turns out sockets on VMS (just like Windows) are blocking by
default, but the same code already in IO::Socket::blocking for
Windows that uses ioctl to set non-blocking works just fine on VMS.

This is part of [perl #116433] as the deficieny was exposed by
tests in IO::Socket::IP.

11 months agoMerge perldelta for 5.18, work from past weeks
Ricardo Signes [Sun, 5 May 2013 20:05:53 +0000]
Merge perldelta for 5.18, work from past weeks

11 months agoperldelta: split change is incompatible
Ricardo Signes [Sun, 21 Apr 2013 23:56:00 +0000]
perldelta: split change is incompatible

11 months agoperldelta: "corrupts"
Smylers [Thu, 4 Apr 2013 13:14:30 +0000]
perldelta: "corrupts"

11 months agoperldelta: singular agreement
Smylers [Thu, 4 Apr 2013 13:10:32 +0000]
perldelta: singular agreement

11 months agoperldelta: "no" missing
Smylers [Thu, 4 Apr 2013 12:55:04 +0000]
perldelta: "no" missing

11 months agoperldelta: unwanted comma removed
Smylers [Thu, 4 Apr 2013 12:07:14 +0000]
perldelta: unwanted comma removed

The sense is "matching no longer excludes", which can't take a comma (even
though the qualifiers on "matching" are quite long)>

11 months agoperldelta: mark $_ as code in header
Ricardo Signes [Fri, 5 Apr 2013 23:53:26 +0000]
perldelta: mark $_ as code in header

11 months agoperldelta: "continuation of"
Smylers [Thu, 4 Apr 2013 11:58:06 +0000]
perldelta: "continuation of"

Not "for".

11 months agoperldelta: fatal error is an error, not a warning
Smylers [Thu, 4 Apr 2013 11:46:50 +0000]
perldelta: fatal error is an error, not a warning

"(F)" removed, since everything in the 'New Errors' section is obviously
an error, and none of the other errors in there are marked as such.

11 months agoperldelta: semicolon there isn't code
Smylers [Thu, 4 Apr 2013 10:47:58 +0000]
perldelta: semicolon there isn't code

11 months agoperldelta: extraneous word removed
Smylers [Thu, 4 Apr 2013 10:43:57 +0000]
perldelta: extraneous word removed

11 months agoperldelta: join sentence fragment
Smylers [Thu, 4 Apr 2013 10:41:00 +0000]
perldelta: join sentence fragment

11 months agoperldelta: avoid comma splice
Smylers [Thu, 4 Apr 2013 10:34:21 +0000]
perldelta: avoid comma splice

11 months agoperldelta: short-circuit cross-reference chain
Smylers [Thu, 4 Apr 2013 09:26:23 +0000]
perldelta: short-circuit cross-reference chain

perlre/(?[ ]) just says to see perlrecharclass/Extended Bracketed
Character Classes, so may as well point people there in the first place.

11 months agoperldelta: DTrace probes as bullet list
Smylers [Thu, 4 Apr 2013 09:20:11 +0000]
perldelta: DTrace probes as bullet list

It was a definition list, but with only terms (no definitions), and hence
no indentation.

11 months agoperldelta: spelling fix
Smylers [Thu, 4 Apr 2013 09:17:05 +0000]
perldelta: spelling fix

11 months agoperldelta: an env var doesn't do anything itself
Smylers [Thu, 4 Apr 2013 09:12:54 +0000]
perldelta: an env var doesn't do anything itself

11 months agoperldelta: missing parenthetical comma
Smylers [Thu, 4 Apr 2013 09:07:50 +0000]
perldelta: missing parenthetical comma

"in hex" is parenthetical

11 months agoperldelta: "order" is intended word
Smylers [Thu, 4 Apr 2013 09:04:48 +0000]
perldelta: "order" is intended word

11 months agowarn of more things to be removed
Ricardo Signes [Thu, 4 Apr 2013 13:58:42 +0000]
warn of more things to be removed

11 months agocarry forward future deprecations from 5.16 delta
Ricardo Signes [Thu, 4 Apr 2013 02:11:47 +0000]
carry forward future deprecations from 5.16 delta

11 months agoperldelta: mention the removal of BeOS
Ricardo Signes [Thu, 4 Apr 2013 02:11:21 +0000]
perldelta: mention the removal of BeOS

11 months agoperldelta: the selected bugs
Ricardo Signes [Wed, 3 Apr 2013 02:13:28 +0000]
perldelta: the selected bugs

11 months agoperldelta: miscellaneous editing in the middle parts
Ricardo Signes [Wed, 3 Apr 2013 01:48:41 +0000]
perldelta: miscellaneous editing in the middle parts

11 months agoperldelta: deprecations section
Ricardo Signes [Wed, 3 Apr 2013 01:27:32 +0000]
perldelta: deprecations section

11 months agoperldelta: the incompatible changes section
Ricardo Signes [Wed, 3 Apr 2013 01:14:43 +0000]
perldelta: the incompatible changes section

11 months agoperldelta: finish reordering and first pass through Core Enh.
Ricardo Signes [Wed, 3 Apr 2013 01:03:28 +0000]
perldelta: finish reordering and first pass through Core Enh.

11 months agoexperimental feature warning categories have ::
Ricardo Signes [Wed, 3 Apr 2013 00:58:10 +0000]
experimental feature warning categories have ::

11 months agoperldelta: collect hash changes
Ricardo Signes [Tue, 2 Apr 2013 14:05:52 +0000]
perldelta: collect hash changes

11 months agoperldelta: tweak/fix "earlier changes" section
Ricardo Signes [Tue, 2 Apr 2013 14:03:47 +0000]
perldelta: tweak/fix "earlier changes" section

11 months agoimport perl51710delta content to perl5180delta
Ricardo Signes [Mon, 1 Apr 2013 21:53:27 +0000]
import perl51710delta content to perl5180delta

11 months agoimport perl5179delta content to perl5180delta
Ricardo Signes [Mon, 1 Apr 2013 21:49:52 +0000]
import perl5179delta content to perl5180delta

11 months agoimport perl5178delta content to perl5180delta
Ricardo Signes [Mon, 1 Apr 2013 21:42:53 +0000]
import perl5178delta content to perl5180delta

11 months agoimport perl5177delta content to perl5180delta
Ricardo Signes [Mon, 1 Apr 2013 21:14:03 +0000]
import perl5177delta content to perl5180delta

11 months agoimport perl5176delta content to perl5180delta
Ricardo Signes [Mon, 1 Apr 2013 21:05:48 +0000]
import perl5176delta content to perl5180delta

11 months agoimport perl5175delta content to perl5180delta
Ricardo Signes [Mon, 1 Apr 2013 20:56:06 +0000]
import perl5175delta content to perl5180delta

11 months agoimport perl5174delta content to perl5180delta
Ricardo Signes [Mon, 1 Apr 2013 20:49:25 +0000]
import perl5174delta content to perl5180delta

11 months agoimport perl5173delta content to perl5180delta
Ricardo Signes [Mon, 1 Apr 2013 20:32:56 +0000]
import perl5173delta content to perl5180delta

11 months agoimport perl5172delta content to perl5180delta
Ricardo Signes [Wed, 13 Mar 2013 02:52:38 +0000]
import perl5172delta content to perl5180delta

11 months agoimport perl5171delta content to perl5180delta
Ricardo Signes [Wed, 13 Mar 2013 02:39:37 +0000]
import perl5171delta content to perl5180delta

11 months agoimport perl5170delta content to perl5180delta
Ricardo Signes [Wed, 13 Mar 2013 02:33:52 +0000]
import perl5170delta content to perl5180delta

11 months agoFix typo in Module::CoreList POD
Chris 'BinGOs' Williams [Sat, 4 May 2013 21:19:06 +0000]
Fix typo in Module::CoreList POD

11 months agoupdate AUTHORS
David Mitchell [Fri, 3 May 2013 14:07:46 +0000]
update AUTHORS

11 months agofix two my_setenv/my_clearenv bugs
Markus Jansen [Fri, 3 May 2013 14:02:30 +0000]
fix two my_setenv/my_clearenv bugs

RT #117121. This commit fixes two bugs. First, some old glibc's can crash
if unsetenv() is called with a null environ.

Secondly, the code in Perl_my_clearenv(), when freeing env vars with a
name longer than 80 chars, reallocs a tmp buffer, but didn't
update the buf lencausing this to fail under valgrind:

    $ENV{"a"x 90}=1; local %ENV;

11 months agoMerge in -DPERL_NO_INLINE_FUNCTIONS and t/porting/extrefs.t which tests it.
Nicholas Clark [Fri, 3 May 2013 12:13:08 +0000]
Merge in -DPERL_NO_INLINE_FUNCTIONS and t/porting/extrefs.t which tests it.

11 months agoAdd a space after -o to keep Darwin's g++ happy, in t/porting/extrefs.t
Nicholas Clark [Tue, 30 Apr 2013 14:19:15 +0000]
Add a space after -o to keep Darwin's g++ happy, in t/porting/extrefs.t

Darwin's g++ 4.2.1 is fussy. FreeBSD's g++ 4.2.1 is not. Hateful software.

11 months agoAdd a "verbose" option to t/porting/extrefs.t for debugging.
Nicholas Clark [Tue, 30 Apr 2013 13:56:53 +0000]
Add a "verbose" option to t/porting/extrefs.t for debugging.

11 months agosupport MSWin32 too
Tony Cook [Sun, 14 Apr 2013 06:10:04 +0000]
support MSWin32 too

11 months agoremove code for non-core builds and "modernize"
Tony Cook [Sat, 13 Apr 2013 05:05:33 +0000]
remove code for non-core builds and "modernize"

11 months agotest that perl headers don't introduce external references
Tony Cook [Sat, 13 Apr 2013 04:49:26 +0000]
test that perl headers don't introduce external references

This is as close as possible to the original Time::HiRes probe code,
further commits will clean that up.

[perl #116989]

[Amended from Tony's original to add -DPERL_NO_INLINE_FUNCTIONS]

11 months agoIf PERL_NO_INLINE_FUNCTIONS is defined, don't include "inline.h"
Nicholas Clark [Fri, 26 Apr 2013 10:18:41 +0000]
If PERL_NO_INLINE_FUNCTIONS is defined, don't include "inline.h"

This permits test code to include the perl headers for definitions without
creating a link dependency on the perl library (which may not exist yet).

Some of the static inline functions in inline.h reference functions in the
perl object files, and some compilers aren't smart enough to eliminate
unused static inline functions, hence including the inline.h in probe code
can cause link errors even though the probe code uses none of the functions
it declares. When probing, a failed link is taken as meaning that the
probed-for function is not present, as the assumption is that the link fails
because of it. Hence other causes of link failures cause the probing code to
generate incorrect results, and action (and bugs) at a distance.

11 months agoRevert "Change the warning for $* to add ", and will become a syntax error"."
Nicholas Clark [Mon, 8 Apr 2013 15:05:11 +0000]
Revert "Change the warning for $* to add ", and will become a syntax error"."

This reverts commit 53213d38f22e9356f489162e494d2ffa46ec2ca2.

Conflicts:

pod/perldelta.pod

11 months agoRevert "Add a deprecation warning for all uses of @*, %*, &* and **."
Nicholas Clark [Mon, 8 Apr 2013 14:53:47 +0000]
Revert "Add a deprecation warning for all uses of @*, %*, &* and **."

This reverts commit 982110e06e40aad7a538cb788327cca8aaabce22.

Conflicts:

pod/perldelta.pod

11 months agoDeprecate spaces/comments in some regex tokens
Karl Williamson [Tue, 23 Apr 2013 19:39:35 +0000]
Deprecate spaces/comments in some regex tokens

This commit deprecates having space/comments between the first two
characters of regular expression forms '(*VERB:ARG)' and '(?...)'.
That is, the '(' should be immediately be followed by the '*' or '?'.
Previously, things like:

   qr/((?# This is a comment in the middle of a token)?:foo)/

were silently accepted.

The problem is that during regex parsing, the '(' is seen, and the input
pointer advanced, skipping comments and, under /x, white space, without
regard to whether the left parenthesis is part of a bigger token or not.
S_reg() handles the parsing of what comes next in the input, and it
just assumes that the first character it sees is the one that
immediately followed the input parenthesis.

Since the parenthesis may or may not be a part of a bigger token, and
the current structure of handling things, I don't see an elegant way to
fix this.  What I did is flag the single call to S_reg() where this
could be an issue, and have S_reg check for for adjacency if the
parenthesis is part of a bigger token, and if so, warn if not-adjacent.

11 months agolib/utf8_heavy.pl: Fix separated '(?' token
Karl Williamson [Tue, 23 Apr 2013 21:06:57 +0000]
lib/utf8_heavy.pl: Fix separated '(?' token

The next commit will warn when these aren't adjacent

11 months agoPATCH: [perl #117327]: Sequence (?#...) not recognized in regex
Karl Williamson [Thu, 2 May 2013 01:01:29 +0000]
PATCH: [perl #117327]: Sequence (?#...) not recognized in regex

This reverts commit 504858073fe16afb61d66a8b6748851780e51432, which
was made under the erroneous belief that certain code was unreachable.
This code appears to be reachable, however, only if the input has
a 2-character lexical token split by space or a comment.  The token
should be indivisible, and was accepted only through an accident of
implementation.  A later commit will deprecate splitting it, with the
view of eventually making splitting it a fatal error.  In the meantime,
though, this reverts to the original behavior, and adds a (temporary)
test to verify that.

11 months agoreg_mesg.t: Turn off regexp warns along with deprecated
Karl Williamson [Thu, 2 May 2013 00:31:34 +0000]
reg_mesg.t: Turn off regexp warns along with deprecated

Some warnings are both regexp and deprecated.  To test that they are
under control of 'deprecated', it is necessary to turn off both
categories.  We currently don't test that they are also under 'regexp'
control

11 months agoCarp: add a test for top-of-stack longmess
Ricardo Signes [Wed, 1 May 2013 16:54:10 +0000]
Carp: add a test for top-of-stack longmess

11 months agoCarp: distinguish deleted stash from top of stack
Ricardo Signes [Wed, 1 May 2013 15:41:50 +0000]
Carp: distinguish deleted stash from top of stack

The change to work with deleted stashes broke the behavior of Carp
at the top of the stack.

This change distinguishes between the two cases: at the top of the
stack, caller(1) returns ().  If the stash has been deleted, it
returns a populated list with an undefined package name.  The test
used here is to check for a defined line number, which should be
sufficient.

11 months agoI cannot find shorter URL's
H.Merijn Brand [Wed, 1 May 2013 10:17:20 +0000]
I cannot find shorter URL's

11 months agoUpdate HP-UX readme
H.Merijn Brand [Wed, 1 May 2013 09:08:37 +0000]
Update HP-UX readme

The porting center cannot be said to ship recent perl when 5.18.0 is about
to be released and they just have 5.10.1 available. Trying "very hard" now
sounds like a huge overstatement. Sadly.

Telling what modules were included in the first public perl port from HP is
like digging up corpses.

HP-UX 11.31 has now EOL set to 2022. I've updated all other EOL info too.

11 months agoRemove a comment made obsolete by commit 213f370f28504f3a.
Nicholas Clark [Mon, 29 Apr 2013 14:03:23 +0000]
Remove a comment made obsolete by commit 213f370f28504f3a.

Commit 213f370f28504f3a enabled running tests in t/op/*.t in parallel. It
should also have removed the comment saying that this would be nice to have.

11 months agoupdate known_pod_issues.dat to account for the README.macosx change
Tony Cook [Mon, 29 Apr 2013 07:50:15 +0000]
update known_pod_issues.dat to account for the README.macosx change

The insanely long directory name gave us an extra verbatim line over
79 characters.

11 months agoupdating README.macosx to reflect current systems.
Breno G. de Oliveira [Mon, 29 Apr 2013 05:05:17 +0000]
updating README.macosx to reflect current systems.

11 months ago[perl #117743] don't warn on $@ = undef; die;
Tony Cook [Thu, 25 Apr 2013 23:56:58 +0000]
[perl #117743] don't warn on $@ = undef; die;

and fix the test that's meant to detect this bug.

11 months ago[perl #117607] don't crash on: use strict; $foo; &CORE::lc
Tony Cook [Fri, 26 Apr 2013 01:57:36 +0000]
[perl #117607] don't crash on: use strict; $foo; &CORE::lc

11 months ago[perl #117607] don't use a CV after it's been freed
Tony Cook [Thu, 25 Apr 2013 08:27:09 +0000]
[perl #117607] don't use a CV after it's been freed

11 months ago[perl #117607] TODO test for \&CORE::lc in error context
Tony Cook [Thu, 25 Apr 2013 08:10:10 +0000]
[perl #117607] TODO test for \&CORE::lc in error context

The original sample was:

BEGIN {
$^H |= 0x00000400; # strict vars
}
# Undeclared variable here
sub foo { return $anyvar; }
# Any CORE:: here
sub bar { \&CORE::lc }

simplified to:

BEGIN {
$^H |= 0x00000400; # strict vars
}
$anyvar;
&CORE::lc;

but it occurs for any compile-time error that doesn't abort compilation,
such as:

$foo/; \&CORE::lc

11 months agot/op/smartkve.t: single-quote some eval stuff
David Mitchell [Wed, 24 Apr 2013 16:57:04 +0000]
t/op/smartkve.t: single-quote some eval stuff

Three tests were wrong because they incorrectly double- rather than
single-quoted an eval string like

    eval "keys $hash ...."

Since the tests were supposed to generate syntax errors anyway it didn't
show up. However, the $hash ref was being expanded to HASH(0x......)
and on some platform / compiler permutations it would generate some
mysterious

    Hexadecimal number > 0xffffffff non-portable

warnings.

11 months agomake qr/(?{ __SUB__ })/ safe
David Mitchell [Wed, 24 Apr 2013 15:29:42 +0000]
make qr/(?{ __SUB__ })/ safe

(See RT #113928)

Formerly, __SUB__ within a code block within a qr// returned
a pointer to the "hidden" anon CV that implements the qr// closure. Since
this was never designed to be called directly, it would SEGV if you tried.

The easiest way to make this safe is to skip any CXt_SUB frames that
are marked as CXp_SUB_RE: i.e. skip any subs that are there just to
execute code blocks. For a qr//, this means that we return the sub which
the pattern match is embedded in.

Also, document the behaviour of __SUB__ within code blocks as being
subject to change. It could be argued for example that in these cases it
should return undef. But with the 5.18.0 release a month or two away, just
make it safe for now, and revisit the semantics later if necessary.

11 months agofix caller with re_evals.
David Mitchell [Wed, 24 Apr 2013 13:41:33 +0000]
fix caller with re_evals.

(See RT #113928)

In code like

    sub foo {  /A(?{ bar; caller(); }B/; }

the regex /A(?{B})C/ is, from a scope point of view, supposed to
be compiled and executed as:

    /A/ && do { B } && /C/;

i.e. the code block in B is part of the same sub as the code surrounding
the regex. Thus the result of caller() above should see the caller as
whoever called foo.

Due to an implementation detail, we actually push a hidden extra
sub CX before calling the pattern. This detail was leaking when caller()
was used. Fux it so that it ignores this extra context frame.

Conversely, for a qr//, that *is* supposed to be seen as an extra level
of anonymous sub, so add tests to ensure that is so.
i.e.

    $r = qr/...(?{code}).../
    /...$r.../

is supposed to behave like

    $r = sub { code };
    $r->();

11 months agoPUSH_MULTICALL_WITHDEPTH becomes ..._FLAGS
David Mitchell [Wed, 24 Apr 2013 10:14:39 +0000]
PUSH_MULTICALL_WITHDEPTH becomes ..._FLAGS

Two non-API macros were added with 5.17.1 to support the more
complex calling conventions required by /({})/ code blocks:

    PUSH_MULTICALL_WITHDEPTH(the_cv, depth)
    CHANGE_MULTICALL_WITHDEPTH(the_cv, depth)

which allowed us to do the same as the API versions, but to optionally
not increment the caller depth, and to change the current CV.

Replace these with two new macros:

    PUSH_MULTICALL_FLAGS(the_cv, flags)
    CHANGE_MULTICALL_FLAGS(the_cv, flags)

which instead allow us to set extra flags in cx->cx_type.
The depth increment skip is handled by the new CXp_SUB_RE_FAKE flag,
and all (?{}) calls set the new CXp_SUB_RE flag.

These two new flags will shortly allow us to change how caller() and
__SUB__ handle code blocks.

11 months agomove Perl_ck_warner() before unwind [perl #113794]
Zefram [Tue, 23 Apr 2013 14:30:46 +0000]
move Perl_ck_warner() before unwind [perl #113794]

Indeed. The Perl_ck_warner() call in die_unwind() used to happen
before unwinding, so would be affected by the lexical warning state
at the die() site. Now it happens after unwinding, so takes the
lexical warning state at the catching site. I don't have a clear
idea of which behaviour is more correct. t/op/die_keeperr.t, which
was introduced as part of my exception handling changes, is actually
testing for the catching-site criterion, but that's not asserting
that the criterion should be that.  The documentation speaks of "no
warnings 'misc'", but doesn't say which lexical scope matters.

Assuming we want to revert this change, the easy fix is to move the
conditional Perl_ck_warner() back to before unwinding. A more
difficult way would be to determine the disposition of the warning
before unwinding and then warn in the required manner after
unwinding.  I see no compelling reason to warn after unwinding
rather than before, so just moving the warning code should be fine.

Note from the committer: This patch was supplied by Zefram in
https://rt.perl.org/rt3/Ticket/Display.html?id=113794#txn-1204749
with a note that some extra work was required for
ext/XS-APItest/t/call.t before the job was done.  Ricardo Signes
applied this patch and followed Zefram's lead in patching
ext/XS-APItest/t/call.t without being 100% certain that this was
what was meant.  This commit was then submitted for review.

11 months agoPOD nitpicks.
SHIRAKATA Kentaro [Tue, 23 Apr 2013 08:34:07 +0000]
POD nitpicks.

Also, rebreak some verbatim lines to avoid porting error.
Update known_pod_issues.dat.

11 months agoAdd the deprecation data to Maintainers.pl
Chris 'BinGOs' Williams [Tue, 23 Apr 2013 15:20:52 +0000]
Add the deprecation data to Maintainers.pl

11 months agoAvoid use of $(...) as backticks in SH code
Eric Brine [Fri, 19 Apr 2013 03:57:54 +0000]
Avoid use of $(...) as backticks in SH code

Avoid use of $(...) as backticks in SH code as it is not supported
by all /bin/sh. RT#115708.

11 months agoInclude deprecations for v5.17.10 and v5.17.11 in Module::CoreList
Chris 'BinGOs' Williams [Tue, 23 Apr 2013 10:48:35 +0000]
Include deprecations for v5.17.10 and v5.17.11 in Module::CoreList

This will probably resolve [perl #117711]

11 months agoSpelling typo in perllocale
Rafael Garcia-Suarez [Tue, 23 Apr 2013 11:08:43 +0000]
Spelling typo in perllocale

11 months agoperl-5.17.11 fails to build with x64 mingw64 (gcc-4.7.0)
Sisyphus [Sun, 21 Apr 2013 10:41:23 +0000]
perl-5.17.11 fails to build with x64 mingw64 (gcc-4.7.0)

# New Ticket Created by  "Sisyphus"
# Please include the string:  [perl #117687]
# in the subject line of all future correspondence about this issue.
# <URL: https://rt.perl.org:443/rt3/Ticket/Display.html?id=117687 >

This is a bug report for perl from sisyphus@OWNER-PC311012,
generated with the help of perlbug 1.39 running under perl 5.17.11.

-----------------------------------------------------------------
[Please describe your issue here]

This is essentially a repeat of a post sent to p5p on March 24 2013
titled "[Win32] perl-5.17.10 fails to build with x64 mingw64 (gcc-4.7.0)"

The issue still exists for 5.17.11 (for me).

The error I get is:

In file included from ../hv.h:570:0,
                 from ../perl.h:3480,
                 from perllib.c:10:
../hv_func.h: In function 'U32 S_perl_hash_murmur3(const unsigned char*,
const u
nsigned char*, STRLEN)':
../hv_func.h:395:20: error: cast from 'const unsigned char*' to 'long int'
loses
precision [-fpermissive]

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

12 months agoBump the perl version in various places for 5.17.12
Ricardo Signes [Sun, 21 Apr 2013 01:08:14 +0000]
Bump the perl version in various places for 5.17.12

...even though it should not get released

12 months agoMerge branch 'release-5.17.11' into blead
Ricardo Signes [Sun, 21 Apr 2013 00:57:26 +0000]
Merge branch 'release-5.17.11' into blead

12 months agoperlapi.pod: Clarify character classification macros
Karl Williamson [Sat, 20 Apr 2013 17:39:28 +0000]
perlapi.pod: Clarify character classification macros

The language was confusing, and this also fixes a typo.

12 months ago[MERGE] Handle /@a/ array expansion within regex engine
David Mitchell [Sat, 20 Apr 2013 16:31:19 +0000]
[MERGE] Handle /@a/ array expansion within regex engine

This series of commits reorganises the code that concatenates and processes
the list of args in a run-time regular expression (fixing some bugs along
the way); then, most significantly, defers flattening and concatting an
array in /...@a.../ until the regex engine: so the engine gets to process
the individual elements of @a rather than being presented with a just a
final concatenated string. This allows us to improve the handling of code
blocks and overloading of the individual array elements.

Fixes RT #115004.

12 months agoHandle /@a/ array expansion within regex engine
David Mitchell [Wed, 17 Apr 2013 16:51:16 +0000]
Handle /@a/ array expansion within regex engine

Previously /a@{b}c/ would be parsed as

    regcomp('a', join($", @b), 'c')

This means that the array was flattened and its contents stringified before
hitting the regex engine.

Change it so that it is parsed as

    regcomp('a', @b, 'c')

(but where the array isn't flattened, but rather just the AV itself is
pushed onto the stack, c.f. push @b, ....).

This means that the regex engine itself can process any qr// objects
within the array, and correctly extract out any previously-compiled
code blocks (thus preserving the correct closure behaviour). This is
an improvement on 5.16.x behaviour, and brings it into line with the
newish 5.17.x behaviour for *scalar* vars where they happen to hold
regex objects.

It also fixes a regression from 5.16.x, which meant that you suddenly
needed a 'use re eval' in scope if any of the elements of the array were
a qr// object with code blocks (RT #115004).

It also means that 'qr' overloading is now handled within interpolated
arrays as well as scalars:

    use overload 'qr' => sub { return  qr/a/ };
    my $o = bless [];
    my @a = ($o);
    "a" =~ /^$o$/; # always worked
    "a" =~ /^@a$/; # now works too

12 months agoS_pat_upgrade_to_utf8(): add num_code_blocks arg
David Mitchell [Thu, 18 Apr 2013 14:42:35 +0000]
S_pat_upgrade_to_utf8(): add num_code_blocks arg

This function was added a few commits ago in this branch. It's intended
to upgrade a pattern string to utf8, while simultaneously adjusting the
start/end byte indices of any code blocks. In two of the three places
it is called from, all code blocks will already have been processed,
so the number of code blocks equals pRExC_state->num_code_blocks.
In the third place however (S_concat_pat), not all code blocks have yet
been processed, so using num_code_blocks causes us to fall off the end of
the index array.

Add an extra arg to S_pat_upgrade_to_utf8() to tell it how many code
blocks exist so far.

12 months agoPerl_re_op_compile() re-indent code
David Mitchell [Tue, 16 Apr 2013 11:36:04 +0000]
Perl_re_op_compile() re-indent code

Re-indent code after the previous commit removed a block scope.
Only whitespace changes.

12 months agore_op_compile: eliminate a local var and scope
David Mitchell [Tue, 16 Apr 2013 11:12:21 +0000]
re_op_compile: eliminate a local var and scope

Eliminate a local var and the block scope it is declared in
(There should be no functional changes).

Re-indenting will be in the next commit.

12 months agocombine regex concat overload loops
David Mitchell [Tue, 16 Apr 2013 10:34:54 +0000]
combine regex concat overload loops

Currently when the components of a runtime regex (e.g. the "a", $x, "-"
in /a$x-/) are concatenated into a single pattern string, the handling of
magic and various types of overloading is done within two separate loops:
(in perlish pseudocode):

    foreach (@arg) {
        SvGETMAGIC($_);
        apply 'qr' overloading to $_;
    }
    foreach (@arg) {
        $pat .= $_, allowing for '.' and '""' overloading;
    }

This commit changes it to:

    foreach (@arg) {
        SvGETMAGIC($_);
        apply 'qr' overloading to $_;
        $pat .= $_, allowing for '.' and '""' overloading;
    }

Note that this is in theory a user-visible change in behaviour, since
the order in which various perl-level tie and overload functions get
called may change. But that was just a quirk of the current
implementation, rather than a documented feature.

12 months agoPerl_re_op_compile(): extract conatting code
David Mitchell [Tue, 16 Apr 2013 09:57:10 +0000]
Perl_re_op_compile(): extract conatting code

Extract out the big chunk of code that concatenates the components
of a pattern string, into the new static function S_concat_pat().

As well as being tidier, it will shortly allow us to recursively
concatenate, and allow us to directly interpolate arrays such as
/@foo/, rather than relying on pp_join to do it for us.

12 months agoPerl_re_op_compile(): handle utf8 concating better
David Mitchell [Mon, 15 Apr 2013 16:18:30 +0000]
Perl_re_op_compile(): handle utf8 concating better

When concatting the list of arguments together to form a final pattern
string, the code formerly did a quick scan of all the args first, and
if any of them were SvUTF8, it set the (empty) destination string to UTF8
before concatting all the individual args. This avoided the pattern
getting upgraded to utf8 halfway through, and thus the indices for code
blocks becoming invalid.

However this was not 100% reliable because, as an "XXX" code comment of
mine pointed out, when overloading is involved it is possible for an arg
to appear initially not to be utf8, but to be utf8 when its value is
finally accessed. This results an obscure bug (as shown in the test added
for this commit), where literal /(?{code})/ still required 'use re
"eval"'.

The fix for this is to instead adjust the code block indices on the fly
if the pattern string happens to get upgraded to utf8. This is easy(er)
now that we have the new S_pat_upgrade_to_utf8() function.

As well as fixing the bug, this also simplifies the main concat loop in
the code, which will make it easier to handle interpolating arrays (e.g.
/@foo/) when we move the interpolation from the join op into the regex
engine itself shortly.

12 months agoPerl_re_op_compile: eliminate clunky if (0) {}
David Mitchell [Mon, 15 Apr 2013 13:41:10 +0000]
Perl_re_op_compile: eliminate clunky if (0) {}

There was a bit of code that did

    if (0) {
      redo_first_pass:
        ...foo...;
    }

to allow us to jump back and repeat the first pass, doing some extra stuff
the second time round. Since foo has now been abstracted into a separate
function, we can instead call it each time directly before jumping,
allowing us to remove the ugly if (0).

12 months agoPerl_re_op_compile(): eliminate xend var
David Mitchell [Mon, 15 Apr 2013 13:35:23 +0000]
Perl_re_op_compile(): eliminate xend var

it's value is easily (re)calculated, and we no longer have to worry
about making sure we update it everywhere.

12 months agoPerl_re_op_compile(): add S_pat_upgrade_to_utf8()
David Mitchell [Mon, 15 Apr 2013 13:20:40 +0000]
Perl_re_op_compile(): add S_pat_upgrade_to_utf8()

Extract out the code that upgrades the pattern string to utf8 (and adjusts
any code-block indices) into a separate function, S_pat_upgrade_to_utf8().

As well as being tidier, we'll be calling the code from other places
shortly.