Initialize ab_op_info before use.

Balancing act between gcc/clang versions: some versions would
be happy with = { 0 }, some versions complain that with = { 0 }
some fields might be uninitialized.  (The latter might be known
stupidness with some gcc versions.)  But all versions I tested
seem to agree that Zero() (memset in disguise) will initialize.
Deparse.pm:pp_entersub: Refactor repetition away

I’m about to modify this code, and having two copies of the join(...)
is not so helpful.
Deparse & calls with scalar() where necessary

This is wrong:

$ ./perl -Ilib -mO=Deparse,-P -e 'sub foo($$){}; foo(bar(), baz())'
sub foo ($$) {

}
&foo(bar(), baz());
-e syntax OK

The resulting code calls bar and baz in list context.
deparse-skips.txt: comp/proto.t now passes
deparse-skips.txt: Note why comp/parser.t fails
Win32 Intel C is always C99 now
form_scope.t: Diagnostics for test 13
Revert ‘Used pad name lists for pad ids’

This reverts commit 8771da69db30134352181c38401c7e50753a7ee8.

Pad lists need to carry IDs around with them, so that when something
tries to close over a pad, it is possible to confirm that the right
pad is being closed over (either the original outer pad, or a clone of
it).  (See the commit message of db4cf31d1, in which commit I added an
ID to the padlist struct.)

In 8771da69 I found that I could use the memory address of the pad’s
name list (name lists are shared) and avoid the extra field.

Some time after 8771da69 I realised that a pad list could be freed,
and the same address reused for another pad list, so using a memory
address may not be so wise.  I thought it highly unlikely, though, and
put it on the back burner.

I have just run into that.  t/comp/form_scope.t is now failing
for me with test 13, added by db4cf31d1.  It bisects to 3d6de2cd1
(PERL_PADNAME_MINIMAL), but that’s a red herring.  Trivial changes
to the script make the problem go away.  And it only happens on non-
debugging builds, and only on my machine.  Stepping through with gdb
shows that the format-cloning is following the format prototype’s out-
side pointer and confirming that it is has the correct pad (yes, the
memory addresses are the same), which I know it doesn’t, because I can
see what the test is doing.

While generation numbers can still fall afoul of the same problem, it
is much less likely.

Anyway, the worst thing about 8771da69 is the typo in the first word
of the commit message.
Tweak sv_pos_b2u_flags check in pp_index

There's no need to run sv_pos_b2u_flags if the retval is one as
one byte can only be one character, therefore change the test to
"> 1". This makes index on unicode strings that match at 1 slightly
faster.
gv_fetchmeth_sv now supports SV shared hashes

gv_fetchmeth_internal added, which receives method name
both as SV and const char. Now it calls hv_common instead
of hv_fetch.

gv_fetchmeth_pvn and gv_fetchmeth_sv are now just wrappers
for gv_fetchmeth_internal

Result: x2 speedup for gv_fetchmeth_sv new SV is a shared hash

BEFORE
PVN - 28.5 Mcalls/s
SV SHARED HASH - 26 Mcalls/s

AFTER
PVN - 29.4 Mcalls/s
SV SHARED HASH - 51 Mcalls/s
Increase $arybase::VERSION to 0.09
create S_check_hash_fields() function

factor out the code in S_finalize_op() that performs checks on hash keys
into a separate function, since we'll shortly need to call this code from
more than one place.
add S_op_clear_gv() to op.c

Abstract out the code that clear an GV attached to an op,
since we will shortly need to do this in more than one place
add S_deb_padvar() to dump.c

factor out the code that prints a pad var name in -Dt output
Perl_op_sibling_splice(): update OPf_KIDS

Previously this function didn't update OPf_KIDS when altering the
children. This was only safe as long as the count of kids didn't transition
between 0 and !0.
ext/B/Makefile.PL: spot hex defines

The regex in ext/B/Makefile.PL was failing to find C constants of the
form

    #define FOO 0xNNN

where NNN contained one or more [a-fA-F] chars

With this change it imports a few more constants:

    CXTYPEMASK
    GVf_IMPORTED
    RV2CVOPCV_FLAG_MASK
    OPpARG4_MASK
    OPpPADRANGE_COUNTMASK
add UNOP_AUX OP class

This is the same as a UNOP, but with the addition of an op_aux field,
which points to an array of UNOP_AUX_item unions.

It is intended as a general escape mechanism for adding per-op-type extra
fields (or arrays of items) to UNOPs.

Its class character (for regen/opcodes etc) is '+'.

Currently there are no ops of this type; but shortly, OP_MULTIDEREF will
be added, which is the original motivation for this new op type.
Add OP_MULTIDEREF

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.
Make fileno() builtin work on directory handles

This requires OS support in the form of either the dirfd() function, or a
dd_fd member in the DIR struct. POSIX.1-2008 specifies the former. If
neither is available, fileno() on a directory handle will return undef and
set errno.
Deparse.pm:pp_entereval: Redundant func call

unop calls $self->keyword, so we don’t need to.