Another perldelta to-do

I’m sure Dave Mitchell can explain this better than I.
perldelta for 4571f4a728 and, of course, bc81b34d0e

4571f4a728 alone made things worse, causing a double free. :-)
perldelta for 7004ee4937 and a618185710
Revamp fields documentation

• Actually give an example of a typed lexical.
• Also show the syntax parenthetically in the pod, since the phrase
 ‘typed lexical’ is not exactly well known.
• Don’t use dev version numbers.
• Don’t talk about pseudo-hashes so pervasively, as the fact that they
  are used is more an implementation detail now than a feature (except
  for phash).
• If we talk about restricted hashes, we should link to Hash::Util.
• -w is not the only way to turn warnings on.

Also mention in perlfunc that ‘my __PACKAGE__’ and ‘my CONSTANT’ work,
so that the only mentions are not in perl561delta and Lexical::Types.
Increase $fields::VERSION to 2.17
perldelta for c5f75dbad5e3
perldelta for e68dd03a55
[perl #120544] fix "goto" around var init error in av_extend_guts

This fixes a Win32 Visual C 6 in C++ mode syntax error. See #120544 for
the details.
Update IPC-Cmd to CPAN version 0.88

  [DELTA]

  0.88 Fri Nov 15 14:44:03 GMT 2013

    Misc:
    * skip some problematic tests on Cygwin
Update DB_File to CPAN version 1.831

  [DELTA]

1.831 15 November 2013

   * C99 comment is a nogo
     RT #90383
Revert "make perl core quiet under -Wfloat-equal"

A suggested way of avoiding the the warning on nv1 != nv2
by replacing it with (nv1 < nv2 || nv1 > nv2), has too many issues
with NaN.  [perl #120538].

I haven't found any other way of selectively disabling the warning,
so for now I'm just reverting the whole commit.

This reverts commit c279c4550ce59702722d0921739b1a1b92701b0d.
perldiag: remove space from otherwise blank line

This enables splain to find the following entry.
Alphabetise perldiag
perldiag: ‘my sub’ is no longer ‘reserved’ syntax
Unwrap a perldiag entry for better splain output

Before:

$ ./perl -Ilib -Mdiagnostics -e 'warn "Missing '\'']'\'' in prototype for %s : %s"'
Missing ']' in prototype for %s : %s at -e line 1 (#1)
    (W illegalproto) A grouping was started with [ but never closed with
    ].

After:

$ ./perl -Ilib -Mdiagnostics -e 'warn "Missing '\'']'\'' in prototype for %s : %s"'
Missing ']' in prototype for %s : %s at -e line 1 (#1)
    (W illegalproto) A grouping was started with [ but never closed with ].
gv.c: Remove redundant mro_method_changed_in()

Core subs are already accounted for by method lookup, so vivifying
them does not change what gets inherited.  Hence, there is no need
to flush caches here.
Fix memory leak with recursive sub redefinition

See the thread starting at
<20131115042923.7514.qmail@lists-nntp.develooper.com>.

Commits 7004ee4937 and a61818571 changed subroutine redefinition to
null the GvCV slot before freeing the CV, so that destructors won’t
see GvCV without a reference count.  That turns a double free into a
memory leak.

Kent Fredric explains it nice and clearly:

> sub foo{}   # A
> bless \&foo;
> DESTROY { *foo = sub {}  # C }
> eval "sub foo{} "; # B
>
> Previous behaviour was:
>
> B replaces A, triggers DESTROY, which triggers C replacing A, and this
> invoked a double free, because C , triggering the removal of A,
> happened while A still existed ( ?? )
>
> So the change fixes this, so that A is removed from the symbol table
> before DESTROY triggers , so that C is creating a "new" symbol,
> effectively, and the problem is that C is then clobbered by the B
> replacing the slot, after the DESTROY.

So C leaks.

This commit fixes it by changing the SvREFCNT_dec into SAVEFREESV,
essentially delaying the DESTROY until after the subroutine redefini-
tion is complete.

This does mean that C is what ends up in the glob afterwards; but as
long as perl’s own bookkeeping is thrown off, we can leave it to the
user (the Perl programmer) to handle the consequences of naughty
destructors.
perldelta for the previous commit
Convert to using Test::More. Provide each test with a description.

For: RT #120503.  This entailed:

Replacing each instance of Check() and CheckDie() with appropriate
Test::More functions.

Replacing MkDir() and touch() with mkdir_ok() and create_file_ok() to
create a more Test::More-ish interface; create symlink_ok() to handle
similar circumstances.

Providing those three wrapper subroutines with default descriptions,
but allowing a custom description to be passed as an argument.

Highlighting more important unit tests found at the end of subsections
and blocks by prepending 'COMPLETE:' to their descriptions.

More inline comments to guide future maintainers.

Some repositioning of code in order to narrow the scope of variables.
Replacement of hard tabs with spaces; some regularization of indents
and other code tidying.

No tests were added or removed, so the planned number of tests on a
given platform will be unchanged.

TODO:

Some descriptions still need improvement.

There are quite a few File-Find features mentioned in the POD which
are not referenced at all in this test file.  They need to have new
tests written for them.

Coverage analysis.
perldelta addition for the previous commit.