add xor, grep, flip, flop to boolean cxt detection
authorDavid Mitchell <davem@iabyn.com>
Wed, 4 Jan 2017 23:50:14 +0000 (23:50 +0000)
committerDavid Mitchell <davem@iabyn.com>
Fri, 6 Jan 2017 16:28:27 +0000 (16:28 +0000)
commit9d692a7f83cf8fe36c59aaa07bca533887350e9b
treeb1aef56bc9c2aaa3447cafca50bf5cae4f7bee3e
parent2ee1faad3521a3f4af605ff9c9242b912259f946
add xor, grep, flip, flop to boolean cxt detection

The code that detects whether certain ops (currently just PADHV and RV2HV)
are called in boolean context only recognises a few ops as providing
boolean context: NOT, OR, DOR, AND, COND_EXPR.

This commit expands this by adding GREPWHILE, FLIP, FLOP, XOR too (in the
case of XOR it only applies to the RHS arg - the LHS is not simple to
detect).

This means that in something like

    @AofH_nonempty = grep %$_, @AofH

the test for each hash being non-empty will now be done in boolean rather
than full scalar context, so may be faster.

Similarly (although less excitingly) these hash key counts are also
boolean now:

    %hash .. $other;
    $other .. %hash;
    $other xor %hash;

(I basically did a grep for 'SvTRUE' in pp*.c to see what other ops might
be imposing boolean context.)

Since this has been added to the general boolean context detection
mechanism, it will also apply for any future ops with are 'booleanised'.
op.c
t/perf/optree.t