This is a live mirror of the Perl 5 development currently hosted at
6 years agostop T_IN/OUT/INOUT/STDIO typemaps leaking
David Mitchell [Fri, 12 Dec 2014 19:52:22 +0000 (19:52 +0000)]
stop T_IN/OUT/INOUT/STDIO typemaps leaking

These typemaps (which are ancient; mostly going back to 1994 or so)
each leaked a GV and an RV.

6 years agoSys/Hostname.xs: add prototyping behaviour
David Mitchell [Fri, 12 Dec 2014 18:24:03 +0000 (18:24 +0000)]
Sys/Hostname.xs: add prototyping behaviour

Shut up the

    Please specify prototyping behavior for Hostname.xs (see perlxs manual)

warning by specifying the default prototyping behaviour. It defaults
to ENABLE, but I've changed it to be explicitly disabled - but it only
contains 1 function which is only used internally, and has no args, so it
doesn't really matter.

6 years agoDeparse: Introduce subs after they are defined
Father Chrysostomos [Fri, 12 Dec 2014 14:32:45 +0000 (06:32 -0800)]
Deparse: Introduce subs after they are defined

This is wrong:

$ perl -MO=Deparse -e 'foo(); sub foo { foo() } foo()'
sub foo {
    foo ;
foo ;
-e syntax OK

You need foo() inside sub foo{}.  The parentheses are not optional.
The sub was being introduced (Deparse was recording is as declared)
just before the definition was emitted.

6 years agoUpdate HTTP-Tiny to CPAN version 0.053
Chris 'BinGOs' Williams [Fri, 12 Dec 2014 12:22:58 +0000 (12:22 +0000)]
Update HTTP-Tiny to CPAN version 0.053


0.053     2014-12-11 23:42:17-05:00 America/New_York


    - Defended tests against HTTP_PROXY set in the environment

6 years agoB::PADNAMELIST::REFCNT can be an ALIAS
Father Chrysostomos [Fri, 12 Dec 2014 06:07:23 +0000 (22:07 -0800)]

6 years agoSquash some B::PADNAME methods together
Father Chrysostomos [Fri, 12 Dec 2014 06:05:43 +0000 (22:05 -0800)]
Squash some B::PADNAME methods together

COP_SEQ_RANGE_LOW and PARENT_PAD_INDEX are identical.  So are
four separate CVs, just two.

6 years agoSort perldiag
Father Chrysostomos [Fri, 12 Dec 2014 05:59:20 +0000 (21:59 -0800)]
Sort perldiag

I put an entry in the wrong place in 2a9203e94.

6 years agodiag.t: Ignore trailing whitespace
Father Chrysostomos [Fri, 12 Dec 2014 05:58:38 +0000 (21:58 -0800)]
diag.t: Ignore trailing whitespace

If we don’t ignore trailing whitespace after ); then we end up search-
ing for the next ); in the file and skip the next message if the );
belongs to it.

6 years ago[perl #123410] sort CORE::fake bizarre behaviour
Father Chrysostomos [Fri, 12 Dec 2014 02:01:56 +0000 (18:01 -0800)]
[perl #123410] sort CORE::fake bizarre behaviour

This commit:

commit 01b5ef509f2ebf466fd7de2c1e7406717bb14332
Author: Father Chrysostomos <>
Date:   Fri Jun 7 20:16:23 2013 -0700

    [perl #24482] Fix sort and require to treat CORE:: as keyword

caused sort CORE::lc "FOO" to be equivalent to sort +CORE::lc "FOO",
the way it does if a keyword is not preceded by CORE::.  But it made
the mistake of chopping off the last six characters if it is not a
keyword after CORE::.


    sort CORE::f @_

became equivalent to

    sort C @_


This commit just reverts to the previous behaviour in such cases.

6 years agodeparse-skips.t: Note reason for re/pat.t
Father Chrysostomos [Fri, 12 Dec 2014 05:39:58 +0000 (21:39 -0800)]
deparse-skips.t: Note reason for re/pat.t

6 years agoIgnore proxies in HTTP::Tiny tests
Father Chrysostomos [Fri, 12 Dec 2014 04:38:11 +0000 (20:38 -0800)]
Ignore proxies in HTTP::Tiny tests

I have HTTP_PROXY and http_proxy set.  HTTP::Tiny just gained
HTTP_PROXY capabilities, and all the tests fail, because they were
only masking http_proxy, not HTTP_PROXY.

Reported at

6 years agoSvREFCNT_dec_NN in SDBM
Daniel Dragan [Fri, 12 Dec 2014 03:29:31 +0000 (22:29 -0500)]

VC 2003 optimizer didn't catch it because SvREFCNT_dec is rarely inlined
on -O1

6 years agoPerl_croak->Perl_croak_nocontext in core typemap + win32 static gitignore
Daniel Dragan [Fri, 12 Dec 2014 00:31:00 +0000 (19:31 -0500)]
Perl_croak->Perl_croak_nocontext in core typemap + win32 static gitignore

-1 less asm op for every very rarely executed branch on threaded perl
-add a build product to ignore on the rarely tested Win32 static perl build

6 years agoDeparse: Emit package before use
Father Chrysostomos [Fri, 12 Dec 2014 00:21:27 +0000 (16:21 -0800)]
Deparse: Emit package before use

Prior to commit c310a5abf, ‘use’ statements in packages other than
main were emitted as BEGIN blocks, because the code that decides
whether BEGIN is actually ‘use’ was looking for "BEGIN", not

$ perl -MO=Deparse -e 'package foo; use overload'
package foo;
sub BEGIN {
    require overload;
    do {
-e syntax OK

That changed inadvertently in v5.21.6-397-gc310a5a (Don’t deparse
BEGIN blocks as __ANON__), because B::Deparse now remembers the name
"BEGIN" for all BEGIN blocks, regardless of package.

That caused an existing bug to occur more often:

$ perl5.20.1 -MO=Deparse -e 'package foo; die; package main; use overload qr=>sub{die}'
package foo;
use overload ('qr', sub {
-e syntax OK

Notice that there is no ‘package main’ anywhere.  (Just before c310a5a
the ‘package main’ would have appeared inside the anonymous sub.)

In c310a5a this started applying to packages other than main, with a
‘use’ statement just after the package declaration.

This commit fixes that by returning the ‘use’ statement only *after*
doing the check to see whether there was a package declaration, and by
including the package declaration in what is returned.

6 years agoTest-Simple Version Bump, 1.301001_084 (RC4)
Chad Granum [Thu, 11 Dec 2014 16:03:57 +0000 (08:03 -0800)]
Test-Simple Version Bump, 1.301001_084 (RC4)

6 years agoUpdate Pod-Escapes to CPAN version 1.07
Chris 'BinGOs' Williams [Thu, 11 Dec 2014 21:29:22 +0000 (21:29 +0000)]
Update Pod-Escapes to CPAN version 1.07


1.07 2014-12-09 NEILB

    - All changes from Ken Williamson as part of EBCDIC work for 5.22
    - Fix typo in comment
    - Reorder structure definitions
    - Fill %Name2character better for EBCDIC
    - Generalize for EBCDIC
    - doc clarification

6 years agoUpdate HTTP-Tiny to CPAN version 0.052
Chris 'BinGOs' Williams [Thu, 11 Dec 2014 20:37:17 +0000 (20:37 +0000)]
Update HTTP-Tiny to CPAN version 0.052


0.052     2014-12-11 15:23:54-05:00 America/New_York


    - Proxy allowed from environment variable HTTP_PROXY (uppercase) unless
      REQUEST_METHOD is also set.

6 years agoAdd test that to/from native character set works
Karl Williamson [Thu, 28 Mar 2013 00:17:28 +0000 (18:17 -0600)]
Add test that to/from native character set works

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.

6 years agot/run/locale.t: Don't operate on iffy locales
Karl Williamson [Fri, 21 Nov 2014 20:55:13 +0000 (13:55 -0700)]
t/run/locale.t: Don't operate on iffy locales

This takes advantage of the previous commit to exclude locales that we
can determine don't work fully with Perl.

6 years agot/ Add optional parameter to find_locales()
Karl Williamson [Fri, 21 Nov 2014 20:43:23 +0000 (13:43 -0700)]
t/ Add optional parameter to find_locales()

This allows the caller to specify that they do not want to get back any
locales that aren't fully compatible with Perl.

6 years agoPerlIO::encoding:fallback.t: properly skip tests
Karl Williamson [Wed, 26 Nov 2014 18:41:18 +0000 (11:41 -0700)]
PerlIO::encoding:fallback.t: properly skip tests

My moving the 'use Test::More' outside of the BEGIN block, I don't get
the 'duplicate leader seen' error.

6 years agoperluniintro: Vertically stack ternarys
Karl Williamson [Thu, 27 Nov 2014 02:54:22 +0000 (19:54 -0700)]
perluniintro: Vertically stack ternarys

It's clearer and sets a better example for the reader

6 years agot/op/utfhash.t: Clarify comment
Karl Williamson [Thu, 27 Nov 2014 02:56:25 +0000 (19:56 -0700)]
t/op/utfhash.t: Clarify comment

6 years agoperldiag: Add missing entry
Karl Williamson [Fri, 28 Nov 2014 05:29:36 +0000 (22:29 -0700)]
perldiag: Add missing entry

6 years agot/run/locale.t: Nit in comment
Karl Williamson [Mon, 1 Dec 2014 04:31:49 +0000 (21:31 -0700)]
t/run/locale.t: Nit in comment

6 years agot/re/reg_eval_scope.t: Don't stress memory limit
Karl Williamson [Fri, 5 Dec 2014 05:00:43 +0000 (22:00 -0700)]
t/re/reg_eval_scope.t: Don't stress memory limit

The test here used a lot of memory, causing problems on an os390 smoker.
The warning used is immaterial, so change to use a different warning,
one that doesn't use up memory.

6 years agot/re/pat_rt_report.t: Skip a test on os390
Karl Williamson [Fri, 5 Dec 2014 05:08:45 +0000 (22:08 -0700)]
t/re/pat_rt_report.t: Skip a test on os390

We run out of memory there for this test

6 years agoDelete: t/lib/1_compile.t, t/lib/
Karl Williamson [Sun, 7 Dec 2014 05:49:16 +0000 (22:49 -0700)]
Delete: t/lib/1_compile.t, t/lib/

These are obsolete that no longer do anything useful.  See

6 years agotoke.c: Use mnemonic rather than numeric
Karl Williamson [Mon, 8 Dec 2014 16:04:37 +0000 (09:04 -0700)]
toke.c: Use mnemonic rather than numeric

This was clear because the comment gave what the number meant, but if
the value ever changed, this would break.

6 years agotoke.c: \v is a legal C89 mnemonic.
Karl Williamson [Mon, 8 Dec 2014 16:03:18 +0000 (09:03 -0700)]
toke.c: \v is a legal C89 mnemonic.

Use this in preference to an octal number.

6 years agogenerate_uudmap.c: Clarify comment
Karl Williamson [Wed, 10 Dec 2014 03:51:34 +0000 (20:51 -0700)]
generate_uudmap.c: Clarify comment

6 years agoStop errorneous warnings for C locale
Karl Williamson [Wed, 10 Dec 2014 20:08:41 +0000 (13:08 -0700)]
Stop errorneous warnings for C locale

HP-UX - B.11.00/64 has a problem with the C locale that's only
noticeable from newly added warnings flooding the logs.  This adds a
test to suppress them.

6 years agot/run/locale.t: Rmv duplicate closing of STDERR
Karl Williamson [Wed, 10 Dec 2014 20:08:10 +0000 (13:08 -0700)]
t/run/locale.t: Rmv duplicate closing of STDERR

STDERR is now closed during these tests, so no need to do it again.  And
if you wanted to see STDERR for some reason, you had to remember to fix
things in two places.  This also sets PERL_BADLANG to suppress some of
the things that we were closing STDERR to avoid printing.

6 years agoAdd pthread to libswanted
H.Merijn Brand [Thu, 11 Dec 2014 17:25:24 +0000 (18:25 +0100)]
Add pthread to libswanted

that comment is from another backport

6 years agomake the EXACTF_invlist only when SCF_DO_STCLASS
Hugo van der Sanden [Thu, 11 Dec 2014 15:27:07 +0000 (15:27 +0000)]
make the EXACTF_invlist only when SCF_DO_STCLASS

The data is used only for STCLASS, and it's somewhat expensive to create.

6 years agoDon’t do string overloading for numeric pack fmts
Father Chrysostomos [Thu, 11 Dec 2014 02:20:19 +0000 (18:20 -0800)]
Don’t do string overloading for numeric pack fmts

See <>.  Commit 354b74ae6f broke this.

6 years agoDon’t do string overloading for printf int formats
Father Chrysostomos [Thu, 11 Dec 2014 02:15:37 +0000 (18:15 -0800)]
Don’t do string overloading for printf int formats

See <>.  Commit 354b74ae6f broke this.

6 years agoDon’t call string overloading in chr
Father Chrysostomos [Thu, 11 Dec 2014 02:07:34 +0000 (18:07 -0800)]
Don’t call string overloading in chr

See <>.  Commit 354b74ae6f broke this.

6 years agosv.c: Note that sv_2num does not do get-magic
Father Chrysostomos [Thu, 11 Dec 2014 02:06:20 +0000 (18:06 -0800)]
sv.c: Note that sv_2num does not do get-magic

6 years agosv.c: Remove reference to bogus SvNUM macro
Father Chrysostomos [Thu, 11 Dec 2014 02:04:01 +0000 (18:04 -0800)]
sv.c: Remove reference to bogus SvNUM macro

There has never been such a macro.

6 years agoUpdate DB_File to CPAN version 1.834
Chris 'BinGOs' Williams [Wed, 10 Dec 2014 23:09:29 +0000 (23:09 +0000)]
Update DB_File to CPAN version 1.834


1.834 11 Dec 2014

   * Makefile.PL: version check is missing a zero
     RT #100844

6 years agoEscape Latin-1 chars in deparsed strings
Father Chrysostomos [Wed, 10 Dec 2014 12:51:24 +0000 (04:51 -0800)]
Escape Latin-1 chars in deparsed strings

Otherwise code like this:

        use utf8;
        my $e = qr"BöckĀ";

deparses in Latin-1 and running the output results in malforma-
tion errors.

6 years agofix spurious 'Use of reference' warning
David Mitchell [Wed, 10 Dec 2014 13:20:38 +0000 (13:20 +0000)]
fix spurious 'Use of reference' warning

My recent OP_MULTIDEREF addition introduced a bug where, when
converting a constant array index into a UV, it checked for a ref
and issued a "Use of reference "HASH(0x7fd190915ba8)" as array index"
warning *before* it had confirmed that the OP_CONST was the only op in
the index expression. So things like

    use constant HASHREF => { a => 1 };
    () = $_[HASHREF->{a} ];

would generate two spurious warnings.

The fix is easy. Only test for the warning on the second pass;
we'll already have abandoned the optimisation attempt on the first pass
if the index expression isn't a simple constant.

6 years agoConsistent spaces after docs in perlfunc.pod
Father Chrysostomos [Wed, 10 Dec 2014 12:36:56 +0000 (04:36 -0800)]
Consistent spaces after docs in perlfunc.pod

6 years agoporting/utils.t: explain what caused failures
David Mitchell [Wed, 10 Dec 2014 11:58:26 +0000 (11:58 +0000)]
porting/utils.t: explain what caused failures

On an error, include in the diagnostic output what perl command we were
running that triggered the failure.

6 years agounop_aux_stringify(): remove redundant assignment
David Mitchell [Wed, 10 Dec 2014 10:41:33 +0000 (10:41 +0000)]
unop_aux_stringify(): remove redundant assignment

my recent OP_MULTIDEREF patch included this bizarre thinko:

    PAD *comppad = comppad = ....;

Spotted by Jarkko.

6 years agoAllow multideref with ($a[0])->[0]
Father Chrysostomos [Wed, 10 Dec 2014 06:34:25 +0000 (22:34 -0800)]
Allow multideref with ($a[0])->[0]

6 years agoFix assertion failure with our @a->{0}
Father Chrysostomos [Wed, 10 Dec 2014 06:19:51 +0000 (22:19 -0800)]
Fix assertion failure with our @a->{0}

This is nonsensical (including the wording of the error message), but
it shouldn’t fail an assertion.

6 years agoFix up OUTSIDE pointers for saved BEGIN blocks
Father Chrysostomos [Wed, 10 Dec 2014 05:46:03 +0000 (21:46 -0800)]
Fix up OUTSIDE pointers for saved BEGIN blocks

B::Deparse depends on this to get the BEGIN blocks in the right place
if they occur inside predeclared subs.

6 years agoEviscerate concise-xs.t
Father Chrysostomos [Wed, 10 Dec 2014 04:36:21 +0000 (20:36 -0800)]
Eviscerate concise-xs.t

This test script constantly fails due to unrelated changes elsewhere,
and it takes a long time to run.  If we are just testing B::Concise’s
ability to distinguish types of subs, we don’t need to test so many.

For the sake of sanity, this commit rewrites the test to use eight
known subs of various persuasions.

6 years agoLabel conditionally unused.
Jarkko Hietaniemi [Wed, 10 Dec 2014 01:45:46 +0000 (20:45 -0500)]
Label conditionally unused.

6 years agostdize_locale not used in POSIX.
Jarkko Hietaniemi [Wed, 10 Dec 2014 01:48:32 +0000 (20:48 -0500)]
stdize_locale not used in POSIX.

6 years agoPossibly uninitialized.
Jarkko Hietaniemi [Wed, 10 Dec 2014 02:36:46 +0000 (21:36 -0500)]
Possibly uninitialized.

op.c:8346:21: warning: 'start' may be used uninitialized in this function [-Wmaybe-uninitialized]
op.c:8811:21: warning: 'start' may be used uninitialized in this function [-Wmaybe-uninitialized]

6 years agoThe format is not a literal but well defined.
Jarkko Hietaniemi [Wed, 10 Dec 2014 03:15:56 +0000 (22:15 -0500)]
The format is not a literal but well defined.

6 years agoIf no strtoul, the args are unused.
Jarkko Hietaniemi [Wed, 10 Dec 2014 03:46:24 +0000 (22:46 -0500)]
If no strtoul, the args are unused.

(strtoul is defined as not_here() if not found.)

6 years agoperldelta for fcaef4dc8ca9, fb9282c3ccd3
Tony Cook [Wed, 10 Dec 2014 02:12:59 +0000 (13:12 +1100)]
perldelta for fcaef4dc8ca9fb9282c3ccd3

6 years ago[perl #123245] avoid a panic in sv_chop() in formats
Tony Cook [Wed, 10 Dec 2014 00:54:49 +0000 (11:54 +1100)]
[perl #123245] avoid a panic in sv_chop() in formats

This fixes two issues:

1) if you don't supply enough arguments to the format, pp_formline()
  uses &PL_sv_no as the sv, since we've already warned about the
  missing format argument, we don't need to produce a read only error
  for an SV the caller didn't supply

2) when the supplied string is empty for FF_LINESNGL and FF_LINEGLOB
  the case would skip most of its processing, including setting
  chophere, this meant that when the following FF_CHOP operator was
  processed it would pass a pointer into a different string, producing
  a panic.

6 years ago[perl #123245] tests for format crashes
Tony Cook [Wed, 10 Dec 2014 00:51:39 +0000 (11:51 +1100)]
[perl #123245] tests for format crashes

6 years agoperlpolicy: Be explicit wrt crashing bug policy
Father Chrysostomos [Tue, 9 Dec 2014 20:33:37 +0000 (12:33 -0800)]
perlpolicy: Be explicit wrt crashing bug policy

This new wording states explicitly what has been the de facto under-
standing of this policy of late.

6 years agoUpdate DB_File to CPAN version 1.833
Chris 'BinGOs' Williams [Tue, 9 Dec 2014 23:27:38 +0000 (23:27 +0000)]
Update DB_File to CPAN version 1.833


1.833 9 Dec 2014

   * More Silence compiler warnings

   * 1.832 breaks bleadperl C89 build
     RT #100812

6 years agoExtend read-only ops to most special blocks
Father Chrysostomos [Tue, 9 Dec 2014 16:55:42 +0000 (08:55 -0800)]
Extend read-only ops to most special blocks

We can’t do BEGIN blocks easily because they are freed by the time
we make the ops read-only, but there is no reason to skip other spec-
ial blocks.

6 years agoDon’t deparse BEGIN blocks as __ANON__
Father Chrysostomos [Tue, 9 Dec 2014 16:46:20 +0000 (08:46 -0800)]
Don’t deparse BEGIN blocks as __ANON__

There are various ways in which the *BEGIN glob could be freed, caus-
ing the BEGIN block to become anonymised.  E.g., it can happen if a
*BEGIN rv2gv op is created and freed at compile time.  (This commit
deletes it more explicitly in Deparse.t, to make the test robust.)
And the BEGIN block’s relationship to the typeglob it started out in
is only incidental once it has been detached.  So for special blocks
we should be deciding the name based on which array (beginav, etc.) we
got it from, and not using the name of the glob the sub points to.

6 years agoDB_File.xs: Fix strict C89 compilation failure
Father Chrysostomos [Tue, 9 Dec 2014 20:33:07 +0000 (12:33 -0800)]
DB_File.xs: Fix strict C89 compilation failure

I still need to post this upstream....

6 years agoperly.c: Fix EBCDIC bug
Karl Williamson [Mon, 8 Dec 2014 04:53:37 +0000 (21:53 -0700)]
perly.c: Fix EBCDIC bug

The code was changing the value in a structure on EBCDIC platforms.  It
turns out that that structure element is used later under quite limited
circumstances.  The changed value is actually only needed during an
array look-up, so we no longer store the change.

6 years agotoke.c: Generalize trace for non-ASCII platform
Karl Williamson [Sat, 6 Dec 2014 23:06:49 +0000 (16:06 -0700)]
toke.c: Generalize trace for non-ASCII platform

This was very ASCII-specific.  The newer is clearer and saves a test.

6 years ago-Dp does work on EBCDIC.
Karl Williamson [Thu, 27 Nov 2014 02:51:23 +0000 (19:51 -0700)]
-Dp does work on EBCDIC.

6 years agoUpdate IO-Compress to CPAN version 2.067
Chris 'BinGOs' Williams [Tue, 9 Dec 2014 15:26:53 +0000 (15:26 +0000)]
Update IO-Compress to CPAN version 2.067


  2.067 8 Dec 2014

      * RT #100257: IO::Compress::RawDeflate unnecessarily loads IO::Seekable

6 years agoUpdate Compress-Raw-Zlib to CPAN version 2.067
Chris 'BinGOs' Williams [Tue, 9 Dec 2014 15:25:46 +0000 (15:25 +0000)]
Update Compress-Raw-Zlib to CPAN version 2.067


  2.067 8 Dec 2014

      * Silence Compiler Warnings

6 years agoUpdate Compress-Raw-Bzip2 to CPAN version 2.067
Chris 'BinGOs' Williams [Tue, 9 Dec 2014 15:24:29 +0000 (15:24 +0000)]
Update Compress-Raw-Bzip2 to CPAN version 2.067


  2.067 8 Dec 2014

      * Silence compiler warnings

6 years agoUpdate DB_File to CPAN version 1.832
Chris 'BinGOs' Williams [Tue, 9 Dec 2014 14:50:17 +0000 (14:50 +0000)]
Update DB_File to CPAN version 1.832


1.832 8 Dec 2014

   * Silence compiler warnings

   * C++ change from blead

6 years agoop.c: Temporary fix for bad read
Father Chrysostomos [Tue, 9 Dec 2014 14:24:21 +0000 (06:24 -0800)]
op.c: Temporary fix for bad read

We can’t read *name at this point, because the
SAVEFREEOP(o)/LEAVE_SCOPE above will have freed the SV owning the
string buffer.

We can’t do pad_add_weakref before LEAVE_SCOPE, because it will add
the entry to the wrong pad.

This fix is only temporary, because one more behaviour change (ena-
bling read-only ops for special blocks other than BEGIN) will allow be
to simplify it.

6 years agoUnify format and named-sub pad weakref code
Father Chrysostomos [Tue, 9 Dec 2014 06:16:05 +0000 (22:16 -0800)]
Unify format and named-sub pad weakref code

6 years agoFix OUTSIDE for named subs inside predeclared subs
Father Chrysostomos [Tue, 9 Dec 2014 05:59:22 +0000 (21:59 -0800)]
Fix OUTSIDE for named subs inside predeclared subs

This prints 42 as expected (foo initialises $x and bar reads it
via eval):

use 5.01;
sub foo {
    state $x = 42;
    sub bar {
        eval 'print $x // "u", "\n"';

If you predeclare foo and vivify its glob,

use 5.01;
*foo; # vivifies the glob at compile time
sub foo;
sub foo {
    state $x = 42;
    sub bar {
        eval 'print $x // "u", "\n"';

then the output is ‘u’, because $x is now undefined.

What’s happening is that ‘eval’ follows CvOUTSIDE pointers (each sub
points to its outer sub), searching each pad to find a lexical $x.  In
the former case it succeeds.  In the latter, bar’s CvOUTSIDE pointer
is pointing to the wrong thing, so the search fails and $x is treated
as global.  You can see it’s global with this example, which prints

use 5.01;
*foo; # vivifies the glob at compile time
sub foo;
sub foo {
    state $x = 42;
    sub bar {
        eval 'print $x // "u", "\n"';
$main::x = "globular";

When a sub is compiled, a new CV is created at the outset and put in
PL_compcv.  When the sub finishes compiling, the CV in PL_compcv is
installed in the sub’s typeglob (or as a subref in the stash if pos-
sible).  If there is already a stub in a typeglob, since that stub
could be referenced elsewhere, we have to reuse that stub and transfer
the contents of PL_compcv to that stub.

If we have any subs inside it, those will now have CvOUTSIDE point-
ers pointing to the old PL_compcv that has been eviscerated.  So
we go through the pad and fix up the outside pointers for any subs
found there.

Named subs don’t get stored in the pad like that, so the CvOUTSIDE
fix-up never happens.  Hence the bug above.

The bug does not occur if the glob is not vivified before the sub def-
inition, because a stub declaration will skip creating a real CV if it
can.  It can’t if there is a typeglob.

The solution, of course, is to store named subs in the outer sub’s
pad.  We can skip this if the outer ‘sub’ is an eval or the main pro-
gram.  These two types of CVs obviously don’t reuse existing stubs,
since they never get installed in the symbol table.  Since named subs
have strong outside pointers, we have to store weak refs in the pad,
just as we do for formats.

6 years agomake xs_version_bootcheck() appear only in util.c
David Mitchell [Tue, 9 Dec 2014 10:19:53 +0000 (10:19 +0000)]
make xs_version_bootcheck() appear only in util.c

672cbd159cb9 converted xs_version_bootcheck() into a static function,
but forgot to wrap the embed.fnc entry with "#if defined(PERL_IN_UTIL_C)",
so it was generating a compiler warning in every file that proto.h was
included in.

6 years agoFix assertion failure with ($_[0])->{$_}
Father Chrysostomos [Tue, 9 Dec 2014 00:32:34 +0000 (16:32 -0800)]
Fix assertion failure with ($_[0])->{$_}

Type::Tiny was triggering this.  The Type::Tiny failure was mention in
ticket #123213.

6 years agoFix gv_fetchmeth_sv: it might stringify SV more than once.
syber [Mon, 8 Dec 2014 22:36:23 +0000 (01:36 +0300)]
Fix gv_fetchmeth_sv: it might stringify SV more than once.

6 years agoz/OS has nan() in math lib but seemingly broken.
Jarkko Hietaniemi [Fri, 5 Dec 2014 12:08:14 +0000 (07:08 -0500)]
z/OS has nan() in math lib but seemingly broken.

6 years agoTurn 9**9**9 skips into todos, and add os390 (z/OS).
Jarkko Hietaniemi [Sun, 26 Oct 2014 13:32:42 +0000 (09:32 -0400)]
Turn 9**9**9 skips into todos, and add os390 (z/OS).

Not that OS/libmath fixes are likely, but one can always hope.

6 years agomake xs_version_bootcheck a static func since not used as export anymore
Daniel Dragan [Mon, 8 Dec 2014 06:55:47 +0000 (01:55 -0500)]
make xs_version_bootcheck a static func since not used as export anymore

Since commit db6e00bd00 the function has not been used by XS modules. Now
remove it from export table since it has never been public API (the macro
is), and it saves its symbol name string name, symbol table pointer,
and allows for inlining and/or random calling convention optimization
by the CC.

6 years agoadd const to every table in win32/fcrypt.c
Daniel Dragan [Mon, 8 Dec 2014 05:58:24 +0000 (00:58 -0500)]
add const to every table in win32/fcrypt.c

See [perl #123386] for details.

6 years agoavoid 'jobserver unavailable:' warnings
David Mitchell [Mon, 8 Dec 2014 20:26:04 +0000 (20:26 +0000)]
avoid 'jobserver unavailable:' warnings

Under GNU make, an interaction between the top-level 'make -j N harness'
and a make invoked by cpan/ExtUtils-Constant/t/Constant.t
causes warnings like:
    warning: jobserver unavailable: using -j1.  Add `+' to parent make rule.

Fix this by stopping MAKEFLAGS being inherited by the children.
The other option, of prefixing all the '$(RUN_TESTS) choose' lines
in Makefile.SH with '+' is, I suspect, not portable.

6 years agoUpdate Unicode-Collate to CPAN version 1.08
Chris 'BinGOs' Williams [Mon, 8 Dec 2014 11:56:21 +0000 (11:56 +0000)]
Update Unicode-Collate to CPAN version 1.08


1.08  Sat Dec  6 20:12:55 2014
    - DUCET is updated (for Unicode 7.0.0) as Collate/allkeys.txt.
    ! Please notice that allkeys.txt will be overwritten if you have had
      other allkeys.txt already.
    - The default UCA_Version is 30.
    - *.pl and *.pm are updated so that they have same the version number.

6 years agodeparse-skips.txt: Note bug number for re/overload.t
Father Chrysostomos [Mon, 8 Dec 2014 04:19:01 +0000 (20:19 -0800)]
deparse-skips.txt: Note bug number for re/overload.t

6 years agodeparse-skips.txt: More passing tests
Father Chrysostomos [Mon, 8 Dec 2014 02:20:24 +0000 (18:20 -0800)]
deparse-skips.txt: More passing tests

6 years agoMissing semicolon in e6dae479.
Jarkko Hietaniemi [Mon, 8 Dec 2014 02:04:53 +0000 (21:04 -0500)]
Missing semicolon in e6dae479.

6 years agoIncrease $Devel::Peek::VERSION to 1.20
Father Chrysostomos [Mon, 8 Dec 2014 01:32:20 +0000 (17:32 -0800)]
Increase $Devel::Peek::VERSION to 1.20

6 years agoIncrease $IO::VERSION to 1.35
Father Chrysostomos [Mon, 8 Dec 2014 01:31:55 +0000 (17:31 -0800)]
Increase $IO::VERSION to 1.35

6 years agoChange OP_SIBLING to OpSIBLING
Father Chrysostomos [Mon, 8 Dec 2014 01:11:21 +0000 (17:11 -0800)]

to match the existing convention (OpREFCNT, OpSLAB).

Dave Mitchell asked me to wait until after his multideref work
was merged.

Unfortunately, there are now CPAN modules using OP_SIBLING.

6 years ago[perl #94484] Custom ops trip assertions in new*OP
Father Chrysostomos [Mon, 8 Dec 2014 00:27:23 +0000 (16:27 -0800)]
[perl #94484] Custom ops trip assertions in new*OP

Without allowing OP_CUSTOM in these functions, there is no way to cre-
ate a custom op while sticking to the API.

6 years agoApply scalar context to state var init
Father Chrysostomos [Sun, 7 Dec 2014 22:22:01 +0000 (14:22 -0800)]
Apply scalar context to state var init

6bd9b5cf6 did apply srefgen optimisations to \($a//=3), but not to
\(state $x = 3), despite what the commit message says, because the
‘once’ op does not go through S_new_logop with OP_ONCE as the type.
So this commit applies the scalar context afterwards, allowing
\(state $x = 3) to get a srefgen op, not a refgen.

(The OP_ONCE op is created via newCONDOP, which creates an
OP_COND_EXPR, which is then converted to an OP_ONCE.  I don’t under-
stand why it needs to be so complicated.  Maybe this could be

6 years agoFix deparsing of (1,2,3) in void context
Father Chrysostomos [Mon, 8 Dec 2014 01:24:50 +0000 (17:24 -0800)]
Fix deparsing of (1,2,3) in void context

This was broken in v5.21.5-289-g12cea2f.  We were trying to check the
kid op of an ex-const, but an ex-const has no children.

6 years agodeparse-skips.txt: run/switches.t passes
Father Chrysostomos [Mon, 8 Dec 2014 00:38:42 +0000 (16:38 -0800)]
deparse-skips.txt: run/switches.t passes

6 years agodeparse-skips.txt: Note skip reason for switchd-78586.t
Father Chrysostomos [Mon, 8 Dec 2014 00:37:30 +0000 (16:37 -0800)]
deparse-skips.txt: Note skip reason for switchd-78586.t

6 years agoFix deparsing of newline and tab with (?x)
Father Chrysostomos [Mon, 8 Dec 2014 00:33:49 +0000 (16:33 -0800)]
Fix deparsing of newline and tab with (?x)

B::Deparse was taking special care to preserve whitespace for /x pat-
terns, and avoid changing newlines to \n, etc.  But it was not tak-
ing (?x) into account.  Parsing regular expressions to apply the
right escapes to different parts of the regexp is too compli-
cated, so this commit changes it to treat all regular expres-
sions the way it was treating /x expressions.  This causes
‘cd t; ./perl TEST -deparse run/switchM.t’ to pass.

6 years agoDetypo.
Jarkko Hietaniemi [Mon, 8 Dec 2014 01:10:09 +0000 (20:10 -0500)]

6 years agoUse cBOOL.
Jarkko Hietaniemi [Sun, 7 Dec 2014 18:13:20 +0000 (13:13 -0500)]
Use cBOOL.

6 years agoMake it explicit that truncation is fine.
Jarkko Hietaniemi [Sun, 7 Dec 2014 18:11:56 +0000 (13:11 -0500)]
Make it explicit that truncation is fine.

6 years agoDon’t deparse for(foo()) as for(local(foo()))
Father Chrysostomos [Sun, 7 Dec 2014 21:56:15 +0000 (13:56 -0800)]
Don’t deparse for(foo()) as for(local(foo()))

Entersub gets the LVINTRO flag, but it does *not* represent local().
It’s an exception to the general rule.

This was probably broken in 12cea2fa65.

6 years agodeparse-skips.txt: Note why switchI.t is skipped
Father Chrysostomos [Sun, 7 Dec 2014 21:46:17 +0000 (13:46 -0800)]
deparse-skips.txt: Note why switchI.t is skipped

6 years agoApply scalar cx to logops if OA_RETSCALAR
Father Chrysostomos [Sun, 7 Dec 2014 21:34:30 +0000 (13:34 -0800)]
Apply scalar cx to logops if OA_RETSCALAR

Logops always have a null-op parent, and that is what callers of
S_new_logop see.  If we flag it with scalar context when the logop
type has the OA_RETSCALAR flag (which means we know it will return
exactly one item), then \(state $x = 3) and \($x //= 4) will be opti-
mised to srefgen, instead of refgen.  (srefgen is a faster version of
refgen; it only handles one item.)