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.
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"';
    }
}
foo();
bar();

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"';
    }
}
foo();
bar();

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
‘globular’:

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

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.
Unify format and named-sub pad weakref code
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.
Update DB_File to CPAN version 1.832

  [DELTA]

1.832 8 Dec 2014

   * Silence compiler warnings

   * C++ change from blead
Update Compress-Raw-Bzip2 to CPAN version 2.067

  [DELTA]

  2.067 8 Dec 2014

      * Silence compiler warnings
Update Compress-Raw-Zlib to CPAN version 2.067

  [DELTA]

  2.067 8 Dec 2014

      * Silence Compiler Warnings
Update IO-Compress to CPAN version 2.067

  [DELTA]

  2.067 8 Dec 2014

      * RT #100257: IO::Compress::RawDeflate unnecessarily loads IO::Seekable
-Dp does work on EBCDIC.
toke.c: Generalize trace for non-ASCII platform

This was very ASCII-specific.  The newer is clearer and saves a test.
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.
DB_File.xs: Fix strict C89 compilation failure

I still need to post this upstream....
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.
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.
Update DB_File to CPAN version 1.833

  [DELTA]

1.833 9 Dec 2014

   * More Silence compiler warnings

   * 1.832 breaks bleadperl C89 build
     RT #100812
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.
[perl #123245] tests for format crashes
[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.
perldelta for fcaef4dc8ca9, fb9282c3ccd3
If no strtoul, the args are unused.

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