diff options
author | Karl Williamson <public@khwilliamson.com> | 2012-02-04 11:42:58 -0700 |
---|---|---|
committer | Karl Williamson <public@khwilliamson.com> | 2012-02-09 10:13:57 -0700 |
commit | 3f427fd9b3d9172856d6247beacfaedb3a38b17d (patch) | |
tree | e5a0b56d8adcac229f0b24c9de5c77ba82322fa7 /sv.c | |
parent | a3e1f3a6180fe54649735a678cb15de8aaacf5e9 (diff) | |
download | perl-3f427fd9b3d9172856d6247beacfaedb3a38b17d.tar.gz |
Add compile-time inversion lists for POSIX classes
These will be used in regcomp.c to replace the existing bit-wise
handling of these, enabling subsequent optimizations.
These are compiled-in, and hence affect the memory footprint of every
program, including those that don't use Unicode. The lists that aren't
tiny are therefore currently restricted to only the Latin1 range;
anything needed beyond that will have to be read in at execution time,
just as before.
The design allows for easy conversion from Latin1 to use the full
Unicode range, should it be deemed desirable for some or all of these.
Diffstat (limited to 'sv.c')
-rw-r--r-- | sv.c | 51 |
1 files changed, 50 insertions, 1 deletions
@@ -13382,7 +13382,56 @@ perl_clone_using(PerlInterpreter *proto_perl, UV flags, PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param); #endif /* !USE_LOCALE_NUMERIC */ - /* utf8 character classes */ + /* Unicode inversion lists */ + PL_ASCII = sv_dup_inc(proto_perl->IASCII, param); + PL_Latin1 = sv_dup_inc(proto_perl->ILatin1, param); + + PL_PerlSpace = sv_dup_inc(proto_perl->IPerlSpace, param); + PL_XPerlSpace = sv_dup_inc(proto_perl->IXPerlSpace, param); + + PL_L1PosixAlnum = sv_dup_inc(proto_perl->IL1PosixAlnum, param); + PL_PosixAlnum = sv_dup_inc(proto_perl->IPosixAlnum, param); + + PL_L1PosixAlpha = sv_dup_inc(proto_perl->IL1PosixAlpha, param); + PL_PosixAlpha = sv_dup_inc(proto_perl->IPosixAlpha, param); + + PL_PosixBlank = sv_dup_inc(proto_perl->IPosixBlank, param); + PL_XPosixBlank = sv_dup_inc(proto_perl->IXPosixBlank, param); + + PL_PosixCntrl = sv_dup_inc(proto_perl->IPosixCntrl, param); + PL_XPosixCntrl = sv_dup_inc(proto_perl->IXPosixCntrl, param); + + PL_PosixDigit = sv_dup_inc(proto_perl->IPosixDigit, param); + + PL_L1PosixGraph = sv_dup_inc(proto_perl->IL1PosixGraph, param); + PL_PosixGraph = sv_dup_inc(proto_perl->IPosixGraph, param); + + PL_HorizSpace = sv_dup_inc(proto_perl->IHorizSpace, param); + + PL_L1PosixLower = sv_dup_inc(proto_perl->IL1PosixLower, param); + PL_PosixLower = sv_dup_inc(proto_perl->IPosixLower, param); + + PL_L1PosixPrint = sv_dup_inc(proto_perl->IL1PosixPrint, param); + PL_PosixPrint = sv_dup_inc(proto_perl->IPosixPrint, param); + + PL_L1PosixPunct = sv_dup_inc(proto_perl->IL1PosixPunct, param); + PL_PosixPunct = sv_dup_inc(proto_perl->IPosixPunct, param); + + PL_PosixSpace = sv_dup_inc(proto_perl->IPosixSpace, param); + PL_XPosixSpace = sv_dup_inc(proto_perl->IXPosixSpace, param); + + PL_L1PosixUpper = sv_dup_inc(proto_perl->IL1PosixUpper, param); + PL_PosixUpper = sv_dup_inc(proto_perl->IPosixUpper, param); + + PL_L1PosixWord = sv_dup_inc(proto_perl->IL1PosixWord, param); + PL_PosixWord = sv_dup_inc(proto_perl->IPosixWord, param); + + PL_PosixXDigit = sv_dup_inc(proto_perl->IPosixXDigit, param); + PL_XPosixXDigit = sv_dup_inc(proto_perl->IXPosixXDigit, param); + + PL_VertSpace = sv_dup_inc(proto_perl->IVertSpace, param); + + /* utf8 character class swashes */ PL_utf8_alnum = sv_dup_inc(proto_perl->Iutf8_alnum, param); PL_utf8_alpha = sv_dup_inc(proto_perl->Iutf8_alpha, param); PL_utf8_space = sv_dup_inc(proto_perl->Iutf8_space, param); |