This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
regcomp.c: Reimplement add_range_to_invlist()
authorKarl Williamson <khw@cpan.org>
Mon, 27 Jun 2016 23:11:35 +0000 (17:11 -0600)
committerKarl Williamson <khw@cpan.org>
Sat, 16 Jul 2016 23:42:39 +0000 (17:42 -0600)
commitd1e2fe7b8496f259e898cf2bbdcd94103adf12c7
treefeca9396270a1cb26d312b8156efd2ed2d8f4057
parenta7560fcde85b95349d490d9974746f6006f9f11c
regcomp.c: Reimplement add_range_to_invlist()

Previously, this function was essentially implemented by turning the new
range into an inversion list and then unioning that with the existing
inversion list.  This was easy to write, but expensive in terms of
operations, with memory allocations and copies, etc.

After discussing this with Tony Cook, I have reimplemented this.  Only
in one uncommonly encountered case does it resort to using the union,
because that case is somewhat tricky, and there is no need to have to
know that trickiness in yet another place given its rarity.

Otherwise, the function manipulates the inversion list.  Some cases are
no-ops, some just change a single array element, some move things within
the array, extending or splicing it.  But these are cheaper than the
previous implementation.
embed.fnc
proto.h
regcomp.c