This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
locale.c: Remove many #if conditionals
authorKarl Williamson <khw@cpan.org>
Tue, 25 Jul 2017 20:23:33 +0000 (14:23 -0600)
committerKarl Williamson <khw@cpan.org>
Thu, 9 Nov 2017 22:14:45 +0000 (15:14 -0700)
commite5f10d4955ff54b3fe492cd78c412eb54b0ae45a
tree36176342ea710d276ceb2d0583dc8b86a09af3bc
parent4d99b64b8fbece54c130062573eba61aa451890a
locale.c: Remove many #if conditionals

locale.c is full of compiler conditionals because platforms vary widely
(or have in the past) in what categories they use.  Prior to this
commit, there were many sections of code which had copies of the same
constructs which were #ifdef'd so they'd run only on the categories that
are to be used in this build.

This duplication creates the opportunity for changes to get applied to
only some of the places that they should, and also makes it hard to
read.

This commit adds two parallel arrays that can map a category to/from its
name, and are defined with each element conditionally compiled in based
on the needs of the build.  Doing the conditionals during array
construction means that most of the other conditionals can be replaced
by looping through the arrays.  Thus the duplicated code is eliminated,
as well as almost 200 lines in this file.

Most of these loops get executed only at process initialization, so the
slight performance hit is inconsequential.
locale.c