pad.h: Rename PadnameSTATE; make it a proper boolean

I used PadnameIs* for OUR, because I was copying
PAD_COMPNAME_FLAGS_isOUR.  STATE should be consistent with it.  And it
was missing the double bang, making the docs wrong.
parser.t: Move a test above ‘Add new tests here’
[perl #114572] perl.c: fix locality/rmv redundant nulls in call_sv/eval_sv

Small tweaks to improve locality/more opportunity for C compiler to
optimize. Also remove redunant nulls, since the OP structs are
null filled a line or 2 before.
pp.c: pp_boolkeys does not need to pop

If it’s going to consume and return exactly one item, it doesn’t need
to decrement and increment the stack pointer.
[perl #114576] Optimise if(%hash) in non-void context

The boolkeys optimisation (867fa1e2da1) was only applying to an and
(or if) in void context.  If an if occurs as the last thing in a sub-
routine, the void context is not know at compile time so the optimisa-
tion does not apply.

In the case of || (to which the boolkeys optimisation also applies),
we can’t optimise it in non-void context, because someone might be
writing $bucket_info = %hash || '0/0';

In the case of &&, we can optimise it, even in non-void context,
because a true value will always be discarded in %hash && foo.
The false value it returns for an empty hash is always the int-
eger 0.  That would change if we simply applied boolkeys to
my $ret = %hash && foo; because boolkeys return &PL_sv_no (the dualvar
you get from !1).  But since boolkeys’ return value is never directly
visible to perl code, we can safely change that.
Apply boolkeys optimisation to scalar(%hash)
Apply boolkeys optimisation to %hash?:

and consequently if(%hash) followed by else.
minor doc patches to api stuff
improve and fix the documentation of the PERL_HASH function
Optimise %hash in sub { %hash || ... }

In %hash || $foo, the %hash is in scalar context, so it has to iterate
through the buckets to produce statistics on bucket usage.

If the || is in void context, the value returned by hash is only ever
used as a boolean (as || doesn’t have to return it).  We already opti-
mise it by adding a boolkeys op when it is known at compile time that
|| will be in void context.

In sub { %hash || $foo } it is not known at compile time that it will
be in void context, so it wasn’t optimised.

This commit optimises it by flagging the %hash at compile time as
being possibly in ‘true boolean’ context.  When that flag is set,
the rv2hv and padhv ops call block_gimme() to see whether || is in
void context.

This speeds things up signficantly.  Here is what I got after optimis-
ing rv2hv but before doing padhv:

$ time ./miniperl -e '%hash = 1..10000; sub { %hash || 1 }->() for 1..100000'

real	0m0.179s
user	0m0.101s
sys	0m0.005s
$ time ./miniperl -e 'my %hash = 1..10000; sub { %hash || 1 }->() for 1..100000'

real	0m5.446s
user	0m2.419s
sys	0m0.015s

(That example is slightly misleading because of the closure, but the
closure version takes 1 sec. when optimised.)
Increase $B::Concise::VERSION to 0.93
mktables: Fix bug when deleting final range

When a Range_List is emptied, there is a bug which causes a runtime
error when trying to refer to a non-existent element.  This avoids that.
A future commit would have run afoul of this bug.
regcomp.c: Special case /[UV_MAX]/

The highest code point representable on the machine has to be special
cased.  Earlier commits for 5.14 did this for ranges ending in this code
point, but it turns out there needs to be a special-special case when
the range contains just it.
regcomp.c: Allow search to work on empty inversion lists

You cannot retrieve the array of an empty inversion list, so the code
has to be reordered to do that after the list is known to be non-empty.
I haven't been able to find a case where this currently fails, but
future commits open up the possibility.
regcomp.c: Add assertion, comments
Add empty inline_invlist.c

This will be used for things need to handle inversion lists in the three
files that currently use them.  I'm putting this in a separate hdr,
because inversion lists are very internal-only, so should not be grouped
in with things that there is an external API for.  It is a dot-c file so
that the functions can continue to be declared with embed.fnc, and
porting/args_assert.t will continue to work, as it looks only in .c
files.
regcomp.c: Silence compiler warning.

The warning that this variable can be used uninitialized is spurious,
but silence it nonetheless.
regcomp.c: Rename 2 functions to indicate private nature

These two functions will be moved into a header in a future commit,
where they will be accessible outside regcomp.c  Prefix their names with
an underscore to emphasize that they are private
regcomp.c: Move functions to inline_invlist.c

This populates inline_invlist.c with some static inline functions and
macro defines.  These are the ones that are anticipated to be needed in
the near term outside regcomp.c
utf8.c: Speed up \X processing of Korean

\X matches according to a complicated pattern that is hard-coded in
regexec.c.  Part of that pattern involves checking if a code point is a
component of a Hangul Syllable or not.  For Korean code points, this
involves checking against multiple tables.  It turns out that two of
those tables are arranged so that the checks for them can be done via an
arithmetic expression; Unicode publishes algorithms for determining
various characteristics based on their very structured ordering.

This patch converts the routines that check these two tables to instead
use the arithmetic expression.